mirror of https://github.com/webpack/webpack.git
refactor(types): more
This commit is contained in:
parent
e226101c55
commit
d9d64b5198
|
@ -21,8 +21,12 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
|
|||
/** @typedef {import("estree").Identifier} Identifier */
|
||||
/** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
|
||||
/** @typedef {import("estree").ImportExpression} ImportExpression */
|
||||
/** @typedef {import("estree").MemberExpression} MemberExpression */
|
||||
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
||||
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
||||
/** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
|
||||
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
||||
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
||||
/** @typedef {import("../optimize/InnerGraph").InnerGraph} InnerGraph */
|
||||
/** @typedef {import("../optimize/InnerGraph").TopLevelSymbol} TopLevelSymbol */
|
||||
/** @typedef {import("./HarmonyImportDependency")} HarmonyImportDependency */
|
||||
|
@ -113,19 +117,21 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|||
parser.state.lastHarmonyImportOrder =
|
||||
(parser.state.lastHarmonyImportOrder || 0) + 1;
|
||||
const clearDep = new ConstDependency(
|
||||
parser.isAsiPosition(statement.range[0]) ? ";" : "",
|
||||
statement.range
|
||||
parser.isAsiPosition(/** @type {Range} */ (statement.range)[0])
|
||||
? ";"
|
||||
: "",
|
||||
/** @type {Range} */ (statement.range)
|
||||
);
|
||||
clearDep.loc = statement.loc;
|
||||
clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
|
||||
parser.state.module.addPresentationalDependency(clearDep);
|
||||
parser.unsetAsiPosition(statement.range[1]);
|
||||
parser.unsetAsiPosition(/** @type {Range} */ (statement.range)[1]);
|
||||
const assertions = getAssertions(statement);
|
||||
const sideEffectDep = new HarmonyImportSideEffectDependency(
|
||||
source,
|
||||
parser.state.lastHarmonyImportOrder,
|
||||
assertions
|
||||
);
|
||||
sideEffectDep.loc = statement.loc;
|
||||
sideEffectDep.loc = /** @type {DependencyLocation} */ (statement.loc);
|
||||
parser.state.module.addDependency(sideEffectDep);
|
||||
return true;
|
||||
}
|
||||
|
@ -172,13 +178,15 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|||
settings.sourceOrder,
|
||||
settings.ids.concat(members).concat([leftPart]),
|
||||
settings.name,
|
||||
expression.range,
|
||||
/** @type {Range} */ (expression.range),
|
||||
settings.assertions,
|
||||
"in"
|
||||
);
|
||||
dep.directImport = members.length === 0;
|
||||
dep.asiSafe = !parser.isAsiPosition(expression.range[0]);
|
||||
dep.loc = expression.loc;
|
||||
dep.asiSafe = !parser.isAsiPosition(
|
||||
/** @type {Range} */ (expression.range)[0]
|
||||
);
|
||||
dep.loc = /** @type {DependencyLocation} */ (expression.loc);
|
||||
parser.state.module.addDependency(dep);
|
||||
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
||||
return true;
|
||||
|
@ -193,7 +201,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|||
settings.sourceOrder,
|
||||
settings.ids,
|
||||
settings.name,
|
||||
expr.range,
|
||||
/** @type {Range} */ (expr.range),
|
||||
exportPresenceMode,
|
||||
settings.assertions,
|
||||
[]
|
||||
|
@ -202,8 +210,10 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|||
parser.destructuringAssignmentPropertiesFor(expr);
|
||||
dep.shorthand = parser.scope.inShorthand;
|
||||
dep.directImport = true;
|
||||
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
|
||||
dep.loc = expr.loc;
|
||||
dep.asiSafe = !parser.isAsiPosition(
|
||||
/** @type {Range} */ (expr.range)[0]
|
||||
);
|
||||
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
||||
dep.call = parser.scope.inTaggedTemplateTag;
|
||||
parser.state.module.addDependency(dep);
|
||||
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
||||
|
@ -238,15 +248,17 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|||
settings.sourceOrder,
|
||||
ids,
|
||||
settings.name,
|
||||
expr.range,
|
||||
/** @type {Range} */ (expr.range),
|
||||
exportPresenceMode,
|
||||
settings.assertions,
|
||||
ranges
|
||||
);
|
||||
dep.referencedPropertiesInDestructuring =
|
||||
parser.destructuringAssignmentPropertiesFor(expr);
|
||||
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
|
||||
dep.loc = expr.loc;
|
||||
dep.asiSafe = !parser.isAsiPosition(
|
||||
/** @type {Range} */ (expr.range)[0]
|
||||
);
|
||||
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
||||
parser.state.module.addDependency(dep);
|
||||
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
||||
return true;
|
||||
|
@ -282,18 +294,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
|
|||
settings.sourceOrder,
|
||||
ids,
|
||||
settings.name,
|
||||
expr.range,
|
||||
/** @type {Range} */ (expr.range),
|
||||
exportPresenceMode,
|
||||
settings.assertions,
|
||||
ranges
|
||||
);
|
||||
dep.directImport = members.length === 0;
|
||||
dep.call = true;
|
||||
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
|
||||
dep.asiSafe = !parser.isAsiPosition(
|
||||
/** @type {Range} */ (expr.range)[0]
|
||||
);
|
||||
// only in case when we strictly follow the spec we need a special case here
|
||||
dep.namespaceObjectAsContext =
|
||||
members.length > 0 && this.strictThisContextOnImports;
|
||||
dep.loc = expr.loc;
|
||||
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
||||
parser.state.module.addDependency(dep);
|
||||
if (args) parser.walkExpressions(args);
|
||||
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
||||
|
|
|
@ -63,6 +63,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
|
|||
this.range = range;
|
||||
this.idRanges = idRanges;
|
||||
this.exportPresenceMode = exportPresenceMode;
|
||||
/** @type {boolean | undefined} */
|
||||
this.namespaceObjectAsContext = false;
|
||||
this.call = undefined;
|
||||
this.directImport = undefined;
|
||||
|
|
|
@ -26,8 +26,10 @@ const ConstDependency = require("./ConstDependency");
|
|||
/** @typedef {import("estree").MemberExpression} MemberExpression */
|
||||
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
||||
/** @typedef {import("../Compiler")} Compiler */
|
||||
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
||||
/** @typedef {import("../NormalModule")} NormalModule */
|
||||
/** @typedef {import("../javascript/JavascriptParser")} Parser */
|
||||
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
||||
|
||||
const getCriticalDependencyWarning = memoize(() =>
|
||||
require("./CriticalDependencyWarning")
|
||||
|
@ -64,10 +66,10 @@ class ImportMetaPlugin {
|
|||
.for("import.meta")
|
||||
.tap(PLUGIN_NAME, metaProperty => {
|
||||
const dep = new ConstDependency(
|
||||
importMetaName,
|
||||
metaProperty.range
|
||||
/** @type {string} */ (importMetaName),
|
||||
/** @type {Range} */ (metaProperty.range)
|
||||
);
|
||||
dep.loc = metaProperty.loc;
|
||||
dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
|
||||
parser.state.module.addPresentationalDependency(dep);
|
||||
return true;
|
||||
});
|
||||
|
@ -82,6 +84,10 @@ class ImportMetaPlugin {
|
|||
const importMetaUrl = () =>
|
||||
JSON.stringify(getUrl(parser.state.module));
|
||||
const importMetaWebpackVersion = () => JSON.stringify(webpackVersion);
|
||||
/**
|
||||
* @param {string[]} members members
|
||||
* @returns {string} error message
|
||||
*/
|
||||
const importMetaUnknownProperty = members =>
|
||||
`${Template.toNormalComment(
|
||||
"unsupported import.meta." + members.join(".")
|
||||
|
@ -106,16 +112,20 @@ class ImportMetaPlugin {
|
|||
new CriticalDependencyWarning(
|
||||
"Accessing import.meta directly is unsupported (only property access or destructuring is supported)"
|
||||
),
|
||||
metaProperty.loc
|
||||
/** @type {DependencyLocation} */ (metaProperty.loc)
|
||||
)
|
||||
);
|
||||
const dep = new ConstDependency(
|
||||
`${
|
||||
parser.isAsiPosition(metaProperty.range[0]) ? ";" : ""
|
||||
parser.isAsiPosition(
|
||||
/** @type {Range} */ (metaProperty.range)[0]
|
||||
)
|
||||
? ";"
|
||||
: ""
|
||||
}({})`,
|
||||
metaProperty.range
|
||||
/** @type {Range} */ (metaProperty.range)
|
||||
);
|
||||
dep.loc = metaProperty.loc;
|
||||
dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
|
||||
parser.state.module.addPresentationalDependency(dep);
|
||||
return true;
|
||||
}
|
||||
|
@ -136,8 +146,11 @@ class ImportMetaPlugin {
|
|||
break;
|
||||
}
|
||||
}
|
||||
const dep = new ConstDependency(`({${str}})`, metaProperty.range);
|
||||
dep.loc = metaProperty.loc;
|
||||
const dep = new ConstDependency(
|
||||
`({${str}})`,
|
||||
/** @type {Range} */ (metaProperty.range)
|
||||
);
|
||||
dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
|
||||
parser.state.module.addPresentationalDependency(dep);
|
||||
return true;
|
||||
});
|
||||
|
@ -159,8 +172,11 @@ class ImportMetaPlugin {
|
|||
parser.hooks.expression
|
||||
.for("import.meta.url")
|
||||
.tap(PLUGIN_NAME, expr => {
|
||||
const dep = new ConstDependency(importMetaUrl(), expr.range);
|
||||
dep.loc = expr.loc;
|
||||
const dep = new ConstDependency(
|
||||
importMetaUrl(),
|
||||
/** @type {Range} */ (expr.range)
|
||||
);
|
||||
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
||||
parser.state.module.addPresentationalDependency(dep);
|
||||
return true;
|
||||
});
|
||||
|
@ -172,7 +188,7 @@ class ImportMetaPlugin {
|
|||
.tap(PLUGIN_NAME, expr => {
|
||||
return new BasicEvaluatedExpression()
|
||||
.setString(getUrl(parser.state.module))
|
||||
.setRange(expr.range);
|
||||
.setRange(/** @type {Range} */ (expr.range));
|
||||
});
|
||||
|
||||
/// import.meta.webpack ///
|
||||
|
@ -201,9 +217,9 @@ class ImportMetaPlugin {
|
|||
.tap(PLUGIN_NAME, (expr, members) => {
|
||||
const dep = new ConstDependency(
|
||||
importMetaUnknownProperty(members),
|
||||
expr.range
|
||||
/** @type {Range} */ (expr.range)
|
||||
);
|
||||
dep.loc = expr.loc;
|
||||
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
||||
parser.state.module.addPresentationalDependency(dep);
|
||||
return true;
|
||||
});
|
||||
|
@ -220,7 +236,7 @@ class ImportMetaPlugin {
|
|||
) {
|
||||
return new BasicEvaluatedExpression()
|
||||
.setUndefined()
|
||||
.setRange(expr.range);
|
||||
.setRange(/** @type {Range} */ (expr.range));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -392,7 +392,7 @@ class JavascriptParser extends Parser {
|
|||
binaryExpression: new SyncBailHook(["binaryExpression"]),
|
||||
/** @type {HookMap<SyncBailHook<[Expression], boolean | void>>} */
|
||||
expression: new HookMap(() => new SyncBailHook(["expression"])),
|
||||
/** @type {HookMap<SyncBailHook<[Expression, string[], boolean[], Range[]], boolean | void>>} */
|
||||
/** @type {HookMap<SyncBailHook<[MemberExpression, string[], boolean[], Range[]], boolean | void>>} */
|
||||
expressionMemberChain: new HookMap(
|
||||
() =>
|
||||
new SyncBailHook([
|
||||
|
@ -402,7 +402,7 @@ class JavascriptParser extends Parser {
|
|||
"memberRanges"
|
||||
])
|
||||
),
|
||||
/** @type {HookMap<SyncBailHook<[Expression, string[]], boolean | void>>} */
|
||||
/** @type {HookMap<SyncBailHook<[MemberExpression, string[]], boolean | void>>} */
|
||||
unhandledExpressionMemberChain: new HookMap(
|
||||
() => new SyncBailHook(["expression", "members"])
|
||||
),
|
||||
|
|
|
@ -5533,12 +5533,12 @@ declare class JavascriptParser extends Parser {
|
|||
expression: HookMap<SyncBailHook<[Expression], boolean | void>>;
|
||||
expressionMemberChain: HookMap<
|
||||
SyncBailHook<
|
||||
[Expression, string[], boolean[], [number, number][]],
|
||||
[MemberExpression, string[], boolean[], [number, number][]],
|
||||
boolean | void
|
||||
>
|
||||
>;
|
||||
unhandledExpressionMemberChain: HookMap<
|
||||
SyncBailHook<[Expression, string[]], boolean | void>
|
||||
SyncBailHook<[MemberExpression, string[]], boolean | void>
|
||||
>;
|
||||
expressionConditionalOperator: SyncBailHook<
|
||||
[ConditionalExpression],
|
||||
|
|
Loading…
Reference in New Issue