refactor(types): more

This commit is contained in:
alexander.akait 2023-06-16 21:24:34 +03:00
parent 4809421990
commit e381884115
32 changed files with 197 additions and 74 deletions

View File

@ -89,9 +89,9 @@ const getIgnoredModule = memoize(() => {
class Dependency {
constructor() {
/** @type {Module} */
/** @type {Module | undefined} */
this._parentModule = undefined;
/** @type {DependenciesBlock} */
/** @type {DependenciesBlock | undefined} */
this._parentDependenciesBlock = undefined;
/** @type {number} */
this._parentDependenciesBlockIndex = -1;
@ -174,6 +174,12 @@ class Dependency {
this._loc = loc;
}
/**
* @param {number} startLine start line
* @param {number} startColumn start column
* @param {number} endLine end line
* @param {number} endColumn end column
*/
setLoc(startLine, startColumn, endLine, endColumn) {
this._locSL = startLine;
this._locSC = startColumn;
@ -247,7 +253,7 @@ class Dependency {
/**
* Returns warnings
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} warnings
* @returns {WebpackError[] | null | undefined} warnings
*/
getWarnings(moduleGraph) {
return null;
@ -256,7 +262,7 @@ class Dependency {
/**
* Returns errors
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} errors
* @returns {WebpackError[] | null | undefined} errors
*/
getErrors(moduleGraph) {
return null;
@ -288,7 +294,7 @@ class Dependency {
/**
* @param {string} context context directory
* @returns {Module} a module
* @returns {Module | null} a module
*/
createIgnoredModule(context) {
return getIgnoredModule();

View File

@ -9,6 +9,8 @@ const DllModuleFactory = require("./DllModuleFactory");
const DllEntryDependency = require("./dependencies/DllEntryDependency");
const EntryDependency = require("./dependencies/EntryDependency");
/** @typedef {import("./Compiler")} Compiler */
class DllEntryPlugin {
/**
* @param {string} context context
@ -21,6 +23,11 @@ class DllEntryPlugin {
this.options = options;
}
/**
* Apply the plugin
* @param {Compiler} compiler the compiler instance
* @returns {void}
*/
apply(compiler) {
compiler.hooks.compilation.tap(
"DllEntryPlugin",

View File

@ -45,6 +45,7 @@ const cutOffMultilineMessage = (stack, message) => {
const stackSplitByLines = stack.split("\n");
const messageSplitByLines = message.split("\n");
/** @type {string[]} */
const result = [];
stackSplitByLines.forEach((line, idx) => {

View File

@ -444,7 +444,7 @@ class Module extends DependenciesBlock {
/**
* @param {ModuleGraph} moduleGraph the module graph
* @param {boolean} strict the importing module is strict
* @param {boolean | undefined} strict the importing module is strict
* @returns {"namespace" | "default-only" | "default-with-named" | "dynamic"} export type
* "namespace": Exports is already a namespace object. namespace = exports.
* "dynamic": Check at runtime if __esModule is set. When set: namespace = { ...exports, default: exports }. When not set: namespace = { default: exports }.

View File

@ -396,7 +396,7 @@ class RuntimeTemplate {
/**
* @param {Object} options options object
* @param {Module} options.module the module
* @param {Module | null} options.module the module
* @param {ChunkGraph} options.chunkGraph the chunk graph
* @param {string} options.request the request that should be printed as comment
* @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
@ -439,7 +439,7 @@ class RuntimeTemplate {
/**
* @param {Object} options options object
* @param {Module} options.module the module
* @param {Module | null} options.module the module
* @param {ChunkGraph} options.chunkGraph the chunk graph
* @param {string} options.request the request that should be printed as comment
* @param {boolean=} options.weak if the dependency is weak (will create a nice error message)

View File

@ -23,6 +23,10 @@ const getCriticalDependencyWarning = memoize(() =>
/** @typedef {ContextOptions & { request: string }} ContextDependencyOptions */
/**
* @param {RegExp | null | undefined} r regexp
* @returns {string} stringified regexp
*/
const regExpToString = r => (r ? r + "" : "");
class ContextDependency extends Dependency {
@ -93,7 +97,7 @@ class ContextDependency extends Dependency {
/**
* Returns warnings
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} warnings
* @returns {WebpackError[] | null | undefined} warnings
*/
getWarnings(moduleGraph) {
let warnings = super.getWarnings(moduleGraph);

View File

@ -74,7 +74,7 @@ class CssImportDependency extends ModuleDependency {
/**
* @param {string} context context directory
* @returns {Module} a module
* @returns {Module | null} a module
*/
createIgnoredModule(context) {
return null;

View File

@ -75,6 +75,11 @@ class CssLocalIdentifierDependency extends NullDependency {
}
}
/**
* @param {string} str string
* @param {string | boolean} omitUnderscore true if you need to omit underscore
* @returns {string} escaped css identifier
*/
const escapeCssIdentifier = (str, omitUnderscore) => {
const escaped = `${str}`.replace(
// cspell:word uffff

View File

@ -48,7 +48,7 @@ class CssUrlDependency extends ModuleDependency {
/**
* @param {string} context context directory
* @returns {Module} a module
* @returns {Module | null} a module
*/
createIgnoredModule(context) {
const RawDataUrlModule = getRawDataUrlModule();
@ -133,7 +133,7 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
newValue = cssEscapeString(
runtimeTemplate.assetUrl({
publicPath: "",
module: moduleGraph.getModule(dep),
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
codeGenerationResults
})
);
@ -142,7 +142,7 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
newValue = `url(${cssEscapeString(
runtimeTemplate.assetUrl({
publicPath: "",
module: moduleGraph.getModule(dep),
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
codeGenerationResults
})
)})`;

View File

@ -10,8 +10,13 @@ const makeSerializable = require("../util/makeSerializable");
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
/** @typedef {import("./EntryDependency")} EntryDependency */
class DllEntryDependency extends Dependency {
/**
* @param {EntryDependency[]} dependencies dependencies
* @param {string} name name
*/
constructor(dependencies, name) {
super();

View File

@ -5,6 +5,7 @@
"use strict";
/** @typedef {import("../Module").BuildMeta} BuildMeta */
/** @typedef {import("../Parser").ParserState} ParserState */
/** @type {WeakMap<ParserState, boolean>} */
@ -18,8 +19,9 @@ exports.bailout = parserState => {
const value = parserStateExportsState.get(parserState);
parserStateExportsState.set(parserState, false);
if (value === true) {
parserState.module.buildMeta.exportsType = undefined;
parserState.module.buildMeta.defaultObject = false;
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
buildMeta.exportsType = undefined;
buildMeta.defaultObject = false;
}
};
@ -32,8 +34,9 @@ exports.enable = parserState => {
if (value === false) return;
parserStateExportsState.set(parserState, true);
if (value !== true) {
parserState.module.buildMeta.exportsType = "default";
parserState.module.buildMeta.defaultObject = "redirect";
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
buildMeta.exportsType = "default";
buildMeta.defaultObject = "redirect";
}
};
@ -44,7 +47,7 @@ exports.enable = parserState => {
exports.setFlagged = parserState => {
const value = parserStateExportsState.get(parserState);
if (value !== true) return;
const buildMeta = parserState.module.buildMeta;
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
if (buildMeta.exportsType === "dynamic") return;
buildMeta.exportsType = "flagged";
};
@ -56,7 +59,8 @@ exports.setFlagged = parserState => {
exports.setDynamic = parserState => {
const value = parserStateExportsState.get(parserState);
if (value !== true) return;
parserState.module.buildMeta.exportsType = "dynamic";
/** @type {BuildMeta} */
(parserState.module.buildMeta).exportsType = "dynamic";
};
/**

View File

@ -51,19 +51,23 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
switch (property) {
case "canMangle": {
const exportsInfo = moduleGraph.getExportsInfo(module);
const exportInfo = exportsInfo.getExportInfo(exportName);
const exportInfo = exportsInfo.getExportInfo(
/** @type {string} */ (exportName)
);
if (exportInfo) return exportInfo.canMangle;
return exportsInfo.otherExportsInfo.canMangle;
}
case "used":
return (
moduleGraph.getExportsInfo(module).getUsed(exportName, runtime) !==
moduleGraph
.getExportsInfo(module)
.getUsed(/** @type {string} */ (exportName), runtime) !==
UsageState.Unused
);
case "useInfo": {
const state = moduleGraph
.getExportsInfo(module)
.getUsed(exportName, runtime);
.getUsed(/** @type {string} */ (exportName), runtime);
switch (state) {
case UsageState.Used:
case UsageState.OnlyPropertiesUsed:
@ -79,7 +83,9 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
}
}
case "provideInfo":
return moduleGraph.getExportsInfo(module).isExportProvided(exportName);
return moduleGraph
.getExportsInfo(module)
.isExportProvided(/** @type {string} */ (exportName));
}
return undefined;
};
@ -108,6 +114,10 @@ class ExportsInfoDependency extends NullDependency {
super.serialize(context);
}
/**
* @param {ObjectDeserializerContext} context context
* @returns {ExportsInfoDependency} ExportsInfoDependency
*/
static deserialize(context) {
const obj = new ExportsInfoDependency(
context.read(),

View File

@ -15,6 +15,7 @@ const NullDependency = require("./NullDependency");
/** @typedef {import("../Dependency")} Dependency */
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
/** @typedef {import("../Module")} Module */
/** @typedef {import("../Module").BuildMeta} BuildMeta */
class HarmonyCompatibilityDependency extends NullDependency {
get type() {
@ -80,7 +81,7 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate
0,
undefined,
`\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } }${
module.buildMeta.async ? ", 1" : ""
/** @type {BuildMeta} */ (module.buildMeta).async ? ", 1" : ""
});`
)
);

View File

@ -10,6 +10,7 @@ const DynamicExports = require("./DynamicExports");
const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
const HarmonyExports = require("./HarmonyExports");
/** @typedef {import("../Module").BuildMeta} BuildMeta */
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
/** @typedef {import("./HarmonyModulesPlugin").HarmonyModulesPluginOptions} HarmonyModulesPluginOptions */
@ -72,7 +73,8 @@ module.exports = class HarmonyDetectionParserPlugin {
"Top-level-await is only supported in EcmaScript Modules"
);
}
module.buildMeta.async = true;
/** @type {BuildMeta} */
(module.buildMeta).async = true;
});
/**

View File

@ -12,6 +12,8 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
/** @typedef {import("../ChunkGraph")} ChunkGraph */
/** @typedef {import("../Dependency")} Dependency */
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
/** @typedef {import("../Module").BuildMeta} BuildMeta */
/** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
/** @typedef {import("../javascript/JavascriptParser").Assertions} Assertions */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
@ -85,14 +87,19 @@ HarmonyEvaluatedImportSpecifierDependency.Template = class HarmonyEvaluatedImpor
// Skip rendering depending when dependency is conditional
if (connection && !connection.isTargetActive(runtime)) return;
const exportsInfo = moduleGraph.getExportsInfo(connection.module);
const exportsInfo = moduleGraph.getExportsInfo(
/** @type {ModuleGraphConnection} */ (connection).module
);
const ids = dep.getIds(moduleGraph);
let value;
const exportsType = connection.module.getExportsType(
const exportsType =
/** @type {ModuleGraphConnection} */
(connection).module.getExportsType(
moduleGraph,
module.buildMeta.strictHarmonyModule
/** @type {BuildMeta} */
(module.buildMeta).strictHarmonyModule
);
switch (exportsType) {
case "default-with-named": {

View File

@ -756,7 +756,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
/**
* Returns warnings
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} warnings
* @returns {WebpackError[] | null | undefined} warnings
*/
getWarnings(moduleGraph) {
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
@ -769,7 +769,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
/**
* Returns errors
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} errors
* @returns {WebpackError[] | null | undefined} errors
*/
getErrors(moduleGraph) {
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);

View File

@ -7,6 +7,8 @@
const RuntimeGlobals = require("../RuntimeGlobals");
/** @typedef {import("../Module").BuildInfo} BuildInfo */
/** @typedef {import("../Module").BuildMeta} BuildMeta */
/** @typedef {import("../Parser").ParserState} ParserState */
/** @type {WeakMap<ParserState, boolean>} */
@ -22,12 +24,14 @@ exports.enable = (parserState, isStrictHarmony) => {
if (value === false) return;
parserStateExportsState.set(parserState, true);
if (value !== true) {
parserState.module.buildMeta.exportsType = "namespace";
parserState.module.buildInfo.strict = true;
parserState.module.buildInfo.exportsArgument = RuntimeGlobals.exports;
const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
buildMeta.exportsType = "namespace";
const buildInfo = /** @type {BuildInfo} */ (parserState.module.buildInfo);
buildInfo.strict = true;
buildInfo.exportsArgument = RuntimeGlobals.exports;
if (isStrictHarmony) {
parserState.module.buildMeta.strictHarmonyModule = true;
parserState.module.buildInfo.moduleArgument = "__webpack_module__";
buildMeta.strictHarmonyModule = true;
buildInfo.moduleArgument = "__webpack_module__";
}
}
};

View File

@ -209,7 +209,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
/**
* Returns warnings
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} warnings
* @returns {WebpackError[] | null | undefined} warnings
*/
getWarnings(moduleGraph) {
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
@ -222,7 +222,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
/**
* Returns errors
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} errors
* @returns {WebpackError[] | null | undefined} errors
*/
getErrors(moduleGraph) {
const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);

View File

@ -8,15 +8,27 @@
const ConstDependency = require("./ConstDependency");
const HarmonyExports = require("./HarmonyExports");
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
class HarmonyTopLevelThisParserPlugin {
/**
* @param {JavascriptParser} parser the parser
* @returns {void}
*/
apply(parser) {
parser.hooks.expression
.for("this")
.tap("HarmonyTopLevelThisParserPlugin", node => {
if (!parser.scope.topLevelScope) return;
if (HarmonyExports.isEnabled(parser.state)) {
const dep = new ConstDependency("undefined", node.range, null);
dep.loc = node.loc;
const dep = new ConstDependency(
"undefined",
/** @type {Range} */ (node.range),
null
);
dep.loc = /** @type {DependencyLocation} */ (node.loc);
parser.state.module.addPresentationalDependency(dep);
return this;
}

View File

@ -12,6 +12,8 @@ const ImportDependency = require("./ImportDependency");
/** @typedef {import("../Dependency")} Dependency */
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
/** @typedef {import("../Module")} Module */
/** @typedef {import("../Module").BuildMeta} BuildMeta */
/** @typedef {import("../ModuleGraph")} ModuleGraph */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
@ -56,9 +58,9 @@ ImportEagerDependency.Template = class ImportEagerDependencyTemplate extends (
const dep = /** @type {ImportEagerDependency} */ (dependency);
const content = runtimeTemplate.moduleNamespacePromise({
chunkGraph,
module: moduleGraph.getModule(dep),
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
request: dep.request,
strict: module.buildMeta.strictHarmonyModule,
strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
message: "import() eager",
runtimeRequirements
});

View File

@ -12,6 +12,8 @@ const ImportDependency = require("./ImportDependency");
/** @typedef {import("../Dependency")} Dependency */
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
/** @typedef {import("../Module")} Module */
/** @typedef {import("../Module").BuildMeta} BuildMeta */
/** @typedef {import("../ModuleGraph")} ModuleGraph */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
@ -53,9 +55,9 @@ ImportWeakDependency.Template = class ImportDependencyTemplate extends (
const dep = /** @type {ImportWeakDependency} */ (dependency);
const content = runtimeTemplate.moduleNamespacePromise({
chunkGraph,
module: moduleGraph.getModule(dep),
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
request: dep.request,
strict: module.buildMeta.strictHarmonyModule,
strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
message: "import() weak",
weak: true,
runtimeRequirements

View File

@ -58,7 +58,7 @@ class ModuleDependency extends Dependency {
/**
* @param {string} context context directory
* @returns {Module} a module
* @returns {Module | null} a module
*/
createIgnoredModule(context) {
const RawModule = getRawModule();

View File

@ -10,6 +10,7 @@ const ModuleDependency = require("./ModuleDependency");
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
/** @typedef {import("../Dependency")} Dependency */
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
/** @typedef {import("../Module")} Module */
class ModuleDependencyTemplateAsId extends ModuleDependency.Template {
/**
@ -22,7 +23,7 @@ class ModuleDependencyTemplateAsId extends ModuleDependency.Template {
const dep = /** @type {ModuleDependency} */ (dependency);
if (!dep.range) return;
const content = runtimeTemplate.moduleId({
module: moduleGraph.getModule(dep),
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
chunkGraph,
request: dep.request,
weak: dep.weak

View File

@ -13,6 +13,10 @@ const {
const makeSerializable = require("../util/makeSerializable");
const RequireIncludeDependency = require("./RequireIncludeDependency");
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
module.exports = class RequireIncludeDependencyParserPlugin {
/**
* @param {boolean} warn true: warn about deprecation, false: don't warn
@ -20,6 +24,11 @@ module.exports = class RequireIncludeDependencyParserPlugin {
constructor(warn) {
this.warn = warn;
}
/**
* @param {JavascriptParser} parser the parser
* @returns {void}
*/
apply(parser) {
const { warn } = this;
parser.hooks.call
@ -31,12 +40,17 @@ module.exports = class RequireIncludeDependencyParserPlugin {
if (warn) {
parser.state.module.addWarning(
new RequireIncludeDeprecationWarning(expr.loc)
new RequireIncludeDeprecationWarning(
/** @type {DependencyLocation} */ (expr.loc)
)
);
}
const dep = new RequireIncludeDependency(param.string, expr.range);
dep.loc = expr.loc;
const dep = new RequireIncludeDependency(
/** @type {string} */ (param.string),
/** @type {Range} */ (expr.range)
);
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.current.addDependency(dep);
return true;
});
@ -45,7 +59,9 @@ module.exports = class RequireIncludeDependencyParserPlugin {
.tap("RequireIncludePlugin", expr => {
if (warn) {
parser.state.module.addWarning(
new RequireIncludeDeprecationWarning(expr.loc)
new RequireIncludeDeprecationWarning(
/** @type {DependencyLocation} */ (expr.loc)
)
);
}
return evaluateToString("function")(expr);
@ -55,7 +71,9 @@ module.exports = class RequireIncludeDependencyParserPlugin {
.tap("RequireIncludePlugin", expr => {
if (warn) {
parser.state.module.addWarning(
new RequireIncludeDeprecationWarning(expr.loc)
new RequireIncludeDeprecationWarning(
/** @type {DependencyLocation} */ (expr.loc)
)
);
}
return toConstantDependency(parser, JSON.stringify("function"))(expr);
@ -64,6 +82,9 @@ module.exports = class RequireIncludeDependencyParserPlugin {
};
class RequireIncludeDeprecationWarning extends WebpackError {
/**
* @param {DependencyLocation} loc location
*/
constructor(loc) {
super("require.include() is deprecated and will be removed soon.");

View File

@ -38,6 +38,10 @@ class RequireResolveHeaderDependency extends NullDependency {
super.serialize(context);
}
/**
* @param {ObjectDeserializerContext} context context
* @returns {RequireResolveHeaderDependency} RequireResolveHeaderDependency
*/
static deserialize(context) {
const obj = new RequireResolveHeaderDependency(context.read());
obj.deserialize(context);
@ -64,6 +68,11 @@ RequireResolveHeaderDependency.Template = class RequireResolveHeaderDependencyTe
source.replace(dep.range[0], dep.range[1] - 1, "/*require.resolve*/");
}
/**
* @param {string} name name
* @param {RequireResolveHeaderDependency} dep dependency
* @param {ReplaceSource} source source
*/
applyAsTemplateArgument(name, dep, source) {
source.replace(dep.range[0], dep.range[1] - 1, "/*require.resolve*/");
}

View File

@ -22,7 +22,9 @@ const SystemRuntimeModule = require("./SystemRuntimeModule");
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
/** @typedef {import("../Compiler")} Compiler */
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
/** @typedef {import("../javascript/JavascriptParser")} Parser */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
const PLUGIN_NAME = "SystemPlugin";
@ -58,6 +60,9 @@ class SystemPlugin {
return;
}
/**
* @param {string} name name
*/
const setNotSupported = name => {
parser.hooks.evaluateTypeof
.for(name)
@ -97,17 +102,21 @@ class SystemPlugin {
setNotSupported("System.register");
parser.hooks.expression.for("System").tap(PLUGIN_NAME, expr => {
const dep = new ConstDependency(RuntimeGlobals.system, expr.range, [
RuntimeGlobals.system
]);
dep.loc = expr.loc;
const dep = new ConstDependency(
RuntimeGlobals.system,
/** @type {Range} */ (expr.range),
[RuntimeGlobals.system]
);
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.module.addPresentationalDependency(dep);
return true;
});
parser.hooks.call.for("System.import").tap(PLUGIN_NAME, expr => {
parser.state.module.addWarning(
new SystemImportDeprecationWarning(expr.loc)
new SystemImportDeprecationWarning(
/** @type {DependencyLocation} */ (expr.loc)
)
);
return parser.hooks.importCall.call({
@ -133,6 +142,9 @@ class SystemPlugin {
}
class SystemImportDeprecationWarning extends WebpackError {
/**
* @param {DependencyLocation} loc location
*/
constructor(loc) {
super(
"System.import() is deprecated and will be removed soon. Use import() instead.\n" +

View File

@ -42,7 +42,7 @@ class URLDependency extends ModuleDependency {
this.range = range;
this.outerRange = outerRange;
this.relative = relative || false;
/** @type {Set<string> | boolean} */
/** @type {Set<string> | boolean | undefined} */
this.usedByExports = undefined;
}
@ -68,7 +68,7 @@ class URLDependency extends ModuleDependency {
/**
* @param {string} context context directory
* @returns {Module} a module
* @returns {Module | null} a module
*/
createIgnoredModule(context) {
const RawDataUrlModule = getRawDataUrlModule();

View File

@ -55,7 +55,7 @@ class WebAssemblyImportDependency extends ModuleDependency {
/**
* Returns errors
* @param {ModuleGraph} moduleGraph module graph
* @returns {WebpackError[]} errors
* @returns {WebpackError[] | null | undefined} errors
*/
getErrors(moduleGraph) {
const module = moduleGraph.getModule(this);

View File

@ -33,12 +33,17 @@ const WorkerDependency = require("./WorkerDependency");
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
/** @typedef {import("../Compiler")} Compiler */
/** @typedef {import("../Entrypoint").EntryOptions} EntryOptions */
/** @typedef {import("../NormalModule")} NormalModule */
/** @typedef {import("../Parser").ParserState} ParserState */
/** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
/** @typedef {import("../javascript/JavascriptParser")} Parser */
/** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
/**
* @param {NormalModule} module module
* @returns {string} url
*/
const getUrl = module => {
return pathToFileURL(module.resource).toString();
};
@ -99,7 +104,7 @@ class WorkerPlugin {
/**
* @param {JavascriptParser} parser the parser
* @param {Expression} expr expression
* @returns {[BasicEvaluatedExpression, [number, number]]} parsed
* @returns {[BasicEvaluatedExpression, [number, number]] | void} parsed
*/
const parseModuleUrl = (parser, expr) => {
if (
@ -382,6 +387,9 @@ class WorkerPlugin {
return true;
};
/**
* @param {string} item item
*/
const processItem = item => {
if (
item.startsWith("*") &&

View File

@ -309,7 +309,7 @@ exports.isDependencyUsedByExports = (
/**
* @param {Dependency} dependency the dependency
* @param {Set<string> | boolean} usedByExports usedByExports info
* @param {Set<string> | boolean | undefined} usedByExports usedByExports info
* @param {ModuleGraph} moduleGraph moduleGraph
* @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active
*/

View File

@ -6,7 +6,7 @@
"allowJs": true,
"checkJs": true,
"noEmit": true,
"strict": false,
"strict": true,
"noImplicitThis": true,
"alwaysStrict": true,
"types": ["node"],

22
types.d.ts vendored
View File

@ -2948,10 +2948,10 @@ declare class Dependency {
get category(): string;
loc: DependencyLocation;
setLoc(
startLine?: any,
startColumn?: any,
endLine?: any,
endColumn?: any
startLine: number,
startColumn: number,
endLine: number,
endColumn: number
): void;
getContext(): undefined | string;
getResourceIdentifier(): null | string;
@ -2984,12 +2984,12 @@ declare class Dependency {
/**
* Returns warnings
*/
getWarnings(moduleGraph: ModuleGraph): WebpackError[];
getWarnings(moduleGraph: ModuleGraph): undefined | null | WebpackError[];
/**
* Returns errors
*/
getErrors(moduleGraph: ModuleGraph): WebpackError[];
getErrors(moduleGraph: ModuleGraph): undefined | null | WebpackError[];
/**
* Update the hash
@ -3003,7 +3003,7 @@ declare class Dependency {
getModuleEvaluationSideEffectsState(
moduleGraph: ModuleGraph
): ConnectionState;
createIgnoredModule(context: string): Module;
createIgnoredModule(context: string): null | Module;
serialize(__0: ObjectSerializerContext): void;
deserialize(__0: ObjectDeserializerContext): void;
module: any;
@ -7540,7 +7540,7 @@ declare class Module extends DependenciesBlock {
get moduleArgument(): string;
getExportsType(
moduleGraph: ModuleGraph,
strict: boolean
strict?: boolean
): "namespace" | "default-only" | "default-with-named" | "dynamic";
addPresentationalDependency(presentationalDependency: Dependency): void;
addCodeGenerationDependency(codeGenerationDependency: Dependency): void;
@ -11369,7 +11369,7 @@ declare abstract class RuntimeTemplate {
/**
* the module
*/
module: Module;
module: null | Module;
/**
* the chunk graph
*/
@ -11391,7 +11391,7 @@ declare abstract class RuntimeTemplate {
/**
* the module
*/
module: Module;
module: null | Module;
/**
* the chunk graph
*/
@ -13781,7 +13781,7 @@ declare namespace exports {
) => boolean;
export let getDependencyUsedByExportsCondition: (
dependency: Dependency,
usedByExports: boolean | Set<string>,
usedByExports: undefined | boolean | Set<string>,
moduleGraph: ModuleGraph
) =>
| null