121 lines
4.5 KiB
JavaScript
121 lines
4.5 KiB
JavaScript
"use strict";
|
|
// Copyright 2024 Google LLC. Use of this source code is governed by an
|
|
// MIT-style license that can be found in the LICENSE file or at
|
|
// https://opensource.org/licenses/MIT.
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.activeDeprecationOptions = exports.deprecations = void 0;
|
|
exports.getDeprecationIds = getDeprecationIds;
|
|
exports.warnForHostSideDeprecation = warnForHostSideDeprecation;
|
|
const version_1 = require("./version");
|
|
var deprecations_1 = require("./vendor/deprecations");
|
|
Object.defineProperty(exports, "deprecations", { enumerable: true, get: function () { return deprecations_1.deprecations; } });
|
|
/**
|
|
* Converts a mixed array of deprecations, IDs, and versions to an array of IDs
|
|
* that's ready to include in a CompileRequest.
|
|
*/
|
|
function getDeprecationIds(arr) {
|
|
return arr.map(item => {
|
|
if (item instanceof version_1.Version) {
|
|
return item.toString();
|
|
}
|
|
else if (typeof item === 'string') {
|
|
return item;
|
|
}
|
|
return item.id;
|
|
});
|
|
}
|
|
/**
|
|
* Map between active compilations and the deprecation options they use.
|
|
*
|
|
* This is used to determine which options to use when handling host-side
|
|
* deprecation warnings that aren't explicitly tied to a particular compilation.
|
|
*/
|
|
exports.activeDeprecationOptions = new Map();
|
|
/**
|
|
* Handles a host-side deprecation warning, either emitting a warning, throwing
|
|
* an error, or doing nothing depending on the deprecation options used.
|
|
*
|
|
* If no specific deprecation options are passed here, then options will be
|
|
* determined based on the options of the active compilations.
|
|
*/
|
|
function warnForHostSideDeprecation(message, deprecation, options) {
|
|
if (deprecation.status === 'future' &&
|
|
!isEnabledFuture(deprecation, options)) {
|
|
return;
|
|
}
|
|
const fullMessage = `Deprecation [${deprecation.id}]: ${message}`;
|
|
if (isFatal(deprecation, options)) {
|
|
throw Error(fullMessage);
|
|
}
|
|
if (!isSilent(deprecation, options)) {
|
|
console.warn(fullMessage);
|
|
}
|
|
}
|
|
/**
|
|
* Checks whether the given deprecation is included in the given list of silent
|
|
* deprecations or is silenced by at least one active compilation.
|
|
*/
|
|
function isSilent(deprecation, options) {
|
|
if (!options) {
|
|
for (const potentialOptions of exports.activeDeprecationOptions.values()) {
|
|
if (isSilent(deprecation, potentialOptions))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
return getDeprecationIds(options.silenceDeprecations ?? []).includes(deprecation.id);
|
|
}
|
|
/**
|
|
* Checks whether the given deprecation is included in the given list of future
|
|
* deprecations that should be enabled or is enabled in all active compilations.
|
|
*/
|
|
function isEnabledFuture(deprecation, options) {
|
|
if (!options) {
|
|
for (const potentialOptions of exports.activeDeprecationOptions.values()) {
|
|
if (!isEnabledFuture(deprecation, potentialOptions))
|
|
return false;
|
|
}
|
|
return exports.activeDeprecationOptions.size > 0;
|
|
}
|
|
return getDeprecationIds(options.futureDeprecations ?? []).includes(deprecation.id);
|
|
}
|
|
/**
|
|
* Checks whether the given deprecation is included in the given list of
|
|
* fatal deprecations or is marked as fatal in all active compilations.
|
|
*/
|
|
function isFatal(deprecation, options) {
|
|
if (!options) {
|
|
for (const potentialOptions of exports.activeDeprecationOptions.values()) {
|
|
if (!isFatal(deprecation, potentialOptions))
|
|
return false;
|
|
}
|
|
return exports.activeDeprecationOptions.size > 0;
|
|
}
|
|
const versionNumber = deprecation.deprecatedIn === null
|
|
? null
|
|
: deprecation.deprecatedIn.major * 1000000 +
|
|
deprecation.deprecatedIn.minor * 1000 +
|
|
deprecation.deprecatedIn.patch;
|
|
for (const fatal of options.fatalDeprecations ?? []) {
|
|
if (fatal instanceof version_1.Version) {
|
|
if (versionNumber === null)
|
|
continue;
|
|
if (deprecation.obsoleteIn !== null)
|
|
continue;
|
|
if (versionNumber <=
|
|
fatal.major * 1000000 + fatal.minor * 1000 + fatal.patch) {
|
|
return true;
|
|
}
|
|
}
|
|
else if (typeof fatal === 'string') {
|
|
if (fatal === deprecation.id)
|
|
return true;
|
|
}
|
|
else {
|
|
if (fatal.id === deprecation.id)
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
//# sourceMappingURL=deprecations.js.map
|