Skip to content

Commit

Permalink
refactor(types): more
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Jun 21, 2023
1 parent 3f71468 commit cff406c
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 25 deletions.
13 changes: 9 additions & 4 deletions lib/dependencies/URLPlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@ const URLDependency = require("./URLDependency");
/** @typedef {import("estree").NewExpression} NewExpressionNode */
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
/** @typedef {import("../Compiler")} Compiler */
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
/** @typedef {import("../NormalModule")} NormalModule */
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
/** @typedef {import("../javascript/JavascriptParser")} Parser */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */

const PLUGIN_NAME = "URLPlugin";

Expand Down Expand Up @@ -94,7 +96,7 @@ class URLPlugin {

return new BasicEvaluatedExpression()
.setString(url.toString())
.setRange(expr.range);
.setRange(/** @type {Range} */ (expr.range));
});
parser.hooks.new.for("URL").tap(PLUGIN_NAME, _expr => {
const expr = /** @type {NewExpressionNode} */ (_expr);
Expand All @@ -106,11 +108,14 @@ class URLPlugin {
const [arg1, arg2] = expr.arguments;
const dep = new URLDependency(
request,
[arg1.range[0], arg2.range[1]],
expr.range,
[
/** @type {Range} */ (arg1.range)[0],
/** @type {Range} */ (arg2.range)[1]
],
/** @type {Range} */ (expr.range),
relative
);
dep.loc = expr.loc;
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.current.addDependency(dep);
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
return true;
Expand Down
71 changes: 50 additions & 21 deletions lib/dependencies/WorkerPlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,26 @@ const {
} = require("./HarmonyImportDependencyParserPlugin");
const WorkerDependency = require("./WorkerDependency");

/** @typedef {import("estree").CallExpression} CallExpression */
/** @typedef {import("estree").Expression} Expression */
/** @typedef {import("estree").ObjectExpression} ObjectExpression */
/** @typedef {import("estree").Pattern} Pattern */
/** @typedef {import("estree").Property} Property */
/** @typedef {import("estree").SpreadElement} SpreadElement */
/** @typedef {import("../../declarations/WebpackOptions").ChunkLoading} ChunkLoading */
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
/** @typedef {import("../../declarations/WebpackOptions").OutputModule} OutputModule */
/** @typedef {import("../../declarations/WebpackOptions").WasmLoading} WasmLoading */
/** @typedef {import("../../declarations/WebpackOptions").WorkerPublicPath} WorkerPublicPath */
/** @typedef {import("../Compiler")} Compiler */
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
/** @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("../javascript/JavascriptParser").Range} Range */
/** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */

/**
Expand All @@ -63,6 +70,12 @@ const workerIndexMap = new WeakMap();
const PLUGIN_NAME = "WorkerPlugin";

class WorkerPlugin {
/**
* @param {ChunkLoading} chunkLoading chunk loading
* @param {WasmLoading} wasmLoading wasm loading
* @param {OutputModule} module output module
* @param {WorkerPublicPath} workerPublicPath worker public path
*/
constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
this._chunkLoading = chunkLoading;
this._wasmLoading = wasmLoading;
Expand Down Expand Up @@ -121,13 +134,19 @@ class WorkerPlugin {
const arg2Value = parser.evaluateExpression(arg2);
if (
!arg2Value.isString() ||
!arg2Value.string.startsWith("file://") ||
!(/** @type {string} */ (arg2Value.string).startsWith("file://")) ||
arg2Value.string !== getUrl(parser.state.module)
) {
return;
}
const arg1Value = parser.evaluateExpression(arg1);
return [arg1Value, [arg1.range[0], arg2.range[1]]];
return [
arg1Value,
[
/** @type {Range} */ (arg1.range)[0],
/** @type {Range} */ (arg2.range)[1]
]
];
};

/**
Expand Down Expand Up @@ -187,6 +206,10 @@ class WorkerPlugin {
const options = !Array.isArray(parserOptions.worker)
? ["..."]
: parserOptions.worker;
/**
* @param {CallExpression} expr expression
* @returns {boolean | void} true when handled
*/
const handleNewWorker = expr => {
if (expr.arguments.length === 0 || expr.arguments.length > 2)
return;
Expand Down Expand Up @@ -214,10 +237,12 @@ class WorkerPlugin {
values: {},
spread: false,
insertType: arg2 ? "spread" : "argument",
insertLocation: arg2 ? arg2.range : arg1.range[1]
insertLocation: arg2
? /** @type {Range} */ (arg2.range)
: /** @type {Range} */ (arg1.range)[1]
};
const { options: importOptions, errors: commentErrors } =
parser.parseCommentOptions(expr.range);
parser.parseCommentOptions(/** @type {Range} */ (expr.range));

if (commentErrors) {
for (const e of commentErrors) {
Expand All @@ -240,7 +265,7 @@ class WorkerPlugin {
parser.state.module.addWarning(
new UnsupportedFeatureWarning(
`\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
expr.loc
/** @type {DependencyLocation} */ (expr.loc)
)
);
} else {
Expand All @@ -257,7 +282,7 @@ class WorkerPlugin {
parser.state.module.addWarning(
new UnsupportedFeatureWarning(
`\`webpackEntryOptions\` expected a object, but received: ${importOptions.webpackEntryOptions}.`,
expr.loc
/** @type {DependencyLocation} */ (expr.loc)
)
);
} else {
Expand All @@ -272,7 +297,7 @@ class WorkerPlugin {
parser.state.module.addWarning(
new UnsupportedFeatureWarning(
`\`webpackChunkName\` expected a string, but received: ${importOptions.webpackChunkName}.`,
expr.loc
/** @type {DependencyLocation} */ (expr.loc)
)
);
} else {
Expand Down Expand Up @@ -315,18 +340,22 @@ class WorkerPlugin {
}
});
block.loc = expr.loc;
const dep = new WorkerDependency(url.string, range, {
publicPath: this._workerPublicPath
});
dep.loc = expr.loc;
const dep = new WorkerDependency(
/** @type {string} */ (url.string),
range,
{
publicPath: this._workerPublicPath
}
);
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
block.addDependency(dep);
parser.state.module.addBlock(block);

if (compilation.outputOptions.trustedTypes) {
const dep = new CreateScriptUrlDependency(
expr.arguments[0].range
/** @type {Range} */ (expr.arguments[0].range)
);
dep.loc = expr.loc;
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.module.addDependency(dep);
}

Expand All @@ -335,9 +364,9 @@ class WorkerPlugin {
if (options.type !== false) {
const dep = new ConstDependency(
this._module ? '"module"' : "undefined",
expr.range
/** @type {Range} */ (expr.range)
);
dep.loc = expr.loc;
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.module.addPresentationalDependency(dep);
expressions.type = undefined;
}
Expand All @@ -347,20 +376,20 @@ class WorkerPlugin {
`, type: ${this._module ? '"module"' : "undefined"}`,
insertLocation
);
dep.loc = expr.loc;
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.module.addPresentationalDependency(dep);
}
} else if (insertType === "spread") {
const dep1 = new ConstDependency(
"Object.assign({}, ",
insertLocation[0]
/** @type {Range} */ (insertLocation)[0]
);
const dep2 = new ConstDependency(
`, { type: ${this._module ? '"module"' : "undefined"} })`,
insertLocation[1]
/** @type {Range} */ (insertLocation)[1]
);
dep1.loc = expr.loc;
dep2.loc = expr.loc;
dep1.loc = /** @type {DependencyLocation} */ (expr.loc);
dep2.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.module.addPresentationalDependency(dep1);
parser.state.module.addPresentationalDependency(dep2);
} else if (insertType === "argument") {
Expand All @@ -369,7 +398,7 @@ class WorkerPlugin {
', { type: "module" }',
insertLocation
);
dep.loc = expr.loc;
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
parser.state.module.addPresentationalDependency(dep);
}
}
Expand Down

0 comments on commit cff406c

Please sign in to comment.