Skip to content

Commit d9d64b5

Browse files
refactor(types): more
1 parent e226101 commit d9d64b5

5 files changed

Lines changed: 67 additions & 36 deletions

File tree

lib/dependencies/HarmonyImportDependencyParserPlugin.js

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
2121
/** @typedef {import("estree").Identifier} Identifier */
2222
/** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
2323
/** @typedef {import("estree").ImportExpression} ImportExpression */
24+
/** @typedef {import("estree").MemberExpression} MemberExpression */
2425
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
26+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
27+
/** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
2528
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
29+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
2630
/** @typedef {import("../optimize/InnerGraph").InnerGraph} InnerGraph */
2731
/** @typedef {import("../optimize/InnerGraph").TopLevelSymbol} TopLevelSymbol */
2832
/** @typedef {import("./HarmonyImportDependency")} HarmonyImportDependency */
@@ -113,19 +117,21 @@ module.exports = class HarmonyImportDependencyParserPlugin {
113117
parser.state.lastHarmonyImportOrder =
114118
(parser.state.lastHarmonyImportOrder || 0) + 1;
115119
const clearDep = new ConstDependency(
116-
parser.isAsiPosition(statement.range[0]) ? ";" : "",
117-
statement.range
120+
parser.isAsiPosition(/** @type {Range} */ (statement.range)[0])
121+
? ";"
122+
: "",
123+
/** @type {Range} */ (statement.range)
118124
);
119-
clearDep.loc = statement.loc;
125+
clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
120126
parser.state.module.addPresentationalDependency(clearDep);
121-
parser.unsetAsiPosition(statement.range[1]);
127+
parser.unsetAsiPosition(/** @type {Range} */ (statement.range)[1]);
122128
const assertions = getAssertions(statement);
123129
const sideEffectDep = new HarmonyImportSideEffectDependency(
124130
source,
125131
parser.state.lastHarmonyImportOrder,
126132
assertions
127133
);
128-
sideEffectDep.loc = statement.loc;
134+
sideEffectDep.loc = /** @type {DependencyLocation} */ (statement.loc);
129135
parser.state.module.addDependency(sideEffectDep);
130136
return true;
131137
}
@@ -172,13 +178,15 @@ module.exports = class HarmonyImportDependencyParserPlugin {
172178
settings.sourceOrder,
173179
settings.ids.concat(members).concat([leftPart]),
174180
settings.name,
175-
expression.range,
181+
/** @type {Range} */ (expression.range),
176182
settings.assertions,
177183
"in"
178184
);
179185
dep.directImport = members.length === 0;
180-
dep.asiSafe = !parser.isAsiPosition(expression.range[0]);
181-
dep.loc = expression.loc;
186+
dep.asiSafe = !parser.isAsiPosition(
187+
/** @type {Range} */ (expression.range)[0]
188+
);
189+
dep.loc = /** @type {DependencyLocation} */ (expression.loc);
182190
parser.state.module.addDependency(dep);
183191
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
184192
return true;
@@ -193,7 +201,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
193201
settings.sourceOrder,
194202
settings.ids,
195203
settings.name,
196-
expr.range,
204+
/** @type {Range} */ (expr.range),
197205
exportPresenceMode,
198206
settings.assertions,
199207
[]
@@ -202,8 +210,10 @@ module.exports = class HarmonyImportDependencyParserPlugin {
202210
parser.destructuringAssignmentPropertiesFor(expr);
203211
dep.shorthand = parser.scope.inShorthand;
204212
dep.directImport = true;
205-
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
206-
dep.loc = expr.loc;
213+
dep.asiSafe = !parser.isAsiPosition(
214+
/** @type {Range} */ (expr.range)[0]
215+
);
216+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
207217
dep.call = parser.scope.inTaggedTemplateTag;
208218
parser.state.module.addDependency(dep);
209219
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
@@ -238,15 +248,17 @@ module.exports = class HarmonyImportDependencyParserPlugin {
238248
settings.sourceOrder,
239249
ids,
240250
settings.name,
241-
expr.range,
251+
/** @type {Range} */ (expr.range),
242252
exportPresenceMode,
243253
settings.assertions,
244254
ranges
245255
);
246256
dep.referencedPropertiesInDestructuring =
247257
parser.destructuringAssignmentPropertiesFor(expr);
248-
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
249-
dep.loc = expr.loc;
258+
dep.asiSafe = !parser.isAsiPosition(
259+
/** @type {Range} */ (expr.range)[0]
260+
);
261+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
250262
parser.state.module.addDependency(dep);
251263
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
252264
return true;
@@ -282,18 +294,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
282294
settings.sourceOrder,
283295
ids,
284296
settings.name,
285-
expr.range,
297+
/** @type {Range} */ (expr.range),
286298
exportPresenceMode,
287299
settings.assertions,
288300
ranges
289301
);
290302
dep.directImport = members.length === 0;
291303
dep.call = true;
292-
dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
304+
dep.asiSafe = !parser.isAsiPosition(
305+
/** @type {Range} */ (expr.range)[0]
306+
);
293307
// only in case when we strictly follow the spec we need a special case here
294308
dep.namespaceObjectAsContext =
295309
members.length > 0 && this.strictThisContextOnImports;
296-
dep.loc = expr.loc;
310+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
297311
parser.state.module.addDependency(dep);
298312
if (args) parser.walkExpressions(args);
299313
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));

lib/dependencies/HarmonyImportSpecifierDependency.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
6363
this.range = range;
6464
this.idRanges = idRanges;
6565
this.exportPresenceMode = exportPresenceMode;
66+
/** @type {boolean | undefined} */
6667
this.namespaceObjectAsContext = false;
6768
this.call = undefined;
6869
this.directImport = undefined;

lib/dependencies/ImportMetaPlugin.js

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ const ConstDependency = require("./ConstDependency");
2626
/** @typedef {import("estree").MemberExpression} MemberExpression */
2727
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
2828
/** @typedef {import("../Compiler")} Compiler */
29+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
2930
/** @typedef {import("../NormalModule")} NormalModule */
3031
/** @typedef {import("../javascript/JavascriptParser")} Parser */
32+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
3133

3234
const getCriticalDependencyWarning = memoize(() =>
3335
require("./CriticalDependencyWarning")
@@ -64,10 +66,10 @@ class ImportMetaPlugin {
6466
.for("import.meta")
6567
.tap(PLUGIN_NAME, metaProperty => {
6668
const dep = new ConstDependency(
67-
importMetaName,
68-
metaProperty.range
69+
/** @type {string} */ (importMetaName),
70+
/** @type {Range} */ (metaProperty.range)
6971
);
70-
dep.loc = metaProperty.loc;
72+
dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
7173
parser.state.module.addPresentationalDependency(dep);
7274
return true;
7375
});
@@ -82,6 +84,10 @@ class ImportMetaPlugin {
8284
const importMetaUrl = () =>
8385
JSON.stringify(getUrl(parser.state.module));
8486
const importMetaWebpackVersion = () => JSON.stringify(webpackVersion);
87+
/**
88+
* @param {string[]} members members
89+
* @returns {string} error message
90+
*/
8591
const importMetaUnknownProperty = members =>
8692
`${Template.toNormalComment(
8793
"unsupported import.meta." + members.join(".")
@@ -106,16 +112,20 @@ class ImportMetaPlugin {
106112
new CriticalDependencyWarning(
107113
"Accessing import.meta directly is unsupported (only property access or destructuring is supported)"
108114
),
109-
metaProperty.loc
115+
/** @type {DependencyLocation} */ (metaProperty.loc)
110116
)
111117
);
112118
const dep = new ConstDependency(
113119
`${
114-
parser.isAsiPosition(metaProperty.range[0]) ? ";" : ""
120+
parser.isAsiPosition(
121+
/** @type {Range} */ (metaProperty.range)[0]
122+
)
123+
? ";"
124+
: ""
115125
}({})`,
116-
metaProperty.range
126+
/** @type {Range} */ (metaProperty.range)
117127
);
118-
dep.loc = metaProperty.loc;
128+
dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
119129
parser.state.module.addPresentationalDependency(dep);
120130
return true;
121131
}
@@ -136,8 +146,11 @@ class ImportMetaPlugin {
136146
break;
137147
}
138148
}
139-
const dep = new ConstDependency(`({${str}})`, metaProperty.range);
140-
dep.loc = metaProperty.loc;
149+
const dep = new ConstDependency(
150+
`({${str}})`,
151+
/** @type {Range} */ (metaProperty.range)
152+
);
153+
dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
141154
parser.state.module.addPresentationalDependency(dep);
142155
return true;
143156
});
@@ -159,8 +172,11 @@ class ImportMetaPlugin {
159172
parser.hooks.expression
160173
.for("import.meta.url")
161174
.tap(PLUGIN_NAME, expr => {
162-
const dep = new ConstDependency(importMetaUrl(), expr.range);
163-
dep.loc = expr.loc;
175+
const dep = new ConstDependency(
176+
importMetaUrl(),
177+
/** @type {Range} */ (expr.range)
178+
);
179+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
164180
parser.state.module.addPresentationalDependency(dep);
165181
return true;
166182
});
@@ -172,7 +188,7 @@ class ImportMetaPlugin {
172188
.tap(PLUGIN_NAME, expr => {
173189
return new BasicEvaluatedExpression()
174190
.setString(getUrl(parser.state.module))
175-
.setRange(expr.range);
191+
.setRange(/** @type {Range} */ (expr.range));
176192
});
177193

178194
/// import.meta.webpack ///
@@ -201,9 +217,9 @@ class ImportMetaPlugin {
201217
.tap(PLUGIN_NAME, (expr, members) => {
202218
const dep = new ConstDependency(
203219
importMetaUnknownProperty(members),
204-
expr.range
220+
/** @type {Range} */ (expr.range)
205221
);
206-
dep.loc = expr.loc;
222+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
207223
parser.state.module.addPresentationalDependency(dep);
208224
return true;
209225
});
@@ -220,7 +236,7 @@ class ImportMetaPlugin {
220236
) {
221237
return new BasicEvaluatedExpression()
222238
.setUndefined()
223-
.setRange(expr.range);
239+
.setRange(/** @type {Range} */ (expr.range));
224240
}
225241
});
226242
};

lib/javascript/JavascriptParser.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ class JavascriptParser extends Parser {
392392
binaryExpression: new SyncBailHook(["binaryExpression"]),
393393
/** @type {HookMap<SyncBailHook<[Expression], boolean | void>>} */
394394
expression: new HookMap(() => new SyncBailHook(["expression"])),
395-
/** @type {HookMap<SyncBailHook<[Expression, string[], boolean[], Range[]], boolean | void>>} */
395+
/** @type {HookMap<SyncBailHook<[MemberExpression, string[], boolean[], Range[]], boolean | void>>} */
396396
expressionMemberChain: new HookMap(
397397
() =>
398398
new SyncBailHook([
@@ -402,7 +402,7 @@ class JavascriptParser extends Parser {
402402
"memberRanges"
403403
])
404404
),
405-
/** @type {HookMap<SyncBailHook<[Expression, string[]], boolean | void>>} */
405+
/** @type {HookMap<SyncBailHook<[MemberExpression, string[]], boolean | void>>} */
406406
unhandledExpressionMemberChain: new HookMap(
407407
() => new SyncBailHook(["expression", "members"])
408408
),

types.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5533,12 +5533,12 @@ declare class JavascriptParser extends Parser {
55335533
expression: HookMap<SyncBailHook<[Expression], boolean | void>>;
55345534
expressionMemberChain: HookMap<
55355535
SyncBailHook<
5536-
[Expression, string[], boolean[], [number, number][]],
5536+
[MemberExpression, string[], boolean[], [number, number][]],
55375537
boolean | void
55385538
>
55395539
>;
55405540
unhandledExpressionMemberChain: HookMap<
5541-
SyncBailHook<[Expression, string[]], boolean | void>
5541+
SyncBailHook<[MemberExpression, string[]], boolean | void>
55425542
>;
55435543
expressionConditionalOperator: SyncBailHook<
55445544
[ConditionalExpression],

0 commit comments

Comments
 (0)