Skip to content

Commit 9669c9e

Browse files
committed
Use Parser#hooks instead of Tapable#plugin
1 parent 84a3b2c commit 9669c9e

27 files changed

+131
-131
lines changed

lib/APIPlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class APIPlugin {
4141

4242
const handler = parser => {
4343
Object.keys(REPLACEMENTS).forEach(key => {
44-
parser.plugin(`expression ${key}`, NO_WEBPACK_REQUIRE[key] ? ParserHelpers.toConstantDependency(parser, REPLACEMENTS[key]) : ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key]));
45-
parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key]));
44+
parser.hooks.expression.for(key).tap("APIPlugin", NO_WEBPACK_REQUIRE[key] ? ParserHelpers.toConstantDependency(parser, REPLACEMENTS[key]) : ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key]));
45+
parser.hooks.evaluateTypeof.for(key).tap("APIPlugin", ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key]));
4646
});
4747
};
4848

lib/CompatibilityPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class CompatibilityPlugin {
2222
if(typeof parserOptions.browserify !== "undefined" && !parserOptions.browserify)
2323
return;
2424

25-
parser.plugin("call require", (expr) => {
25+
parser.hooks.call.for("require").tap("CompatibilityPlugin", (expr) => {
2626
// support for browserify style require delegator: "require(o, !0)"
2727
if(expr.arguments.length !== 2) return;
2828
const second = parser.evaluateExpression(expr.arguments[1]);

lib/ConstPlugin.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ConstPlugin {
2121
compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
2222

2323
const handler = parser => {
24-
parser.plugin("statement if", statement => {
24+
parser.hooks.statementIf.tap("ConstPlugin", statement => {
2525
const param = parser.evaluateExpression(statement.test);
2626
const bool = param.asBool();
2727
if(typeof bool === "boolean") {
@@ -33,7 +33,7 @@ class ConstPlugin {
3333
return bool;
3434
}
3535
});
36-
parser.plugin("expression ?:", expression => {
36+
parser.hooks.expressionConditionalOperator.tap("ConstPlugin", expression => {
3737
const param = parser.evaluateExpression(expression.test);
3838
const bool = param.asBool();
3939
if(typeof bool === "boolean") {
@@ -45,11 +45,11 @@ class ConstPlugin {
4545
return bool;
4646
}
4747
});
48-
parser.plugin("evaluate Identifier __resourceQuery", expr => {
48+
parser.hooks.evaluateIdentifier.for("__resourceQuery").tap("ConstPlugin", expr => {
4949
if(!parser.state.module) return;
5050
return ParserHelpers.evaluateToString(getQuery(parser.state.module.resource))(expr);
5151
});
52-
parser.plugin("expression __resourceQuery", () => {
52+
parser.hooks.expression.for("__resourceQuery").tap("ConstPlugin", () => {
5353
if(!parser.state.module) return;
5454
parser.state.current.addVariable("__resourceQuery", JSON.stringify(getQuery(parser.state.module.resource)));
5555
return true;

lib/DefinePlugin.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class DefinePlugin {
5656
const splittedKey = key.split(".");
5757
splittedKey.slice(1).forEach((_, i) => {
5858
const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
59-
parser.plugin("can-rename " + fullKey, ParserHelpers.approve);
59+
parser.hooks.canRename.for(fullKey).tap("DefinePlugin", ParserHelpers.approve);
6060
});
6161
};
6262

@@ -67,8 +67,8 @@ class DefinePlugin {
6767
let recurseTypeof = false;
6868
code = toCode(code);
6969
if(!isTypeof) {
70-
parser.plugin("can-rename " + key, ParserHelpers.approve);
71-
parser.plugin("evaluate Identifier " + key, (expr) => {
70+
parser.hooks.canRename.for(key).tap("DefinePlugin", ParserHelpers.approve);
71+
parser.hooks.evaluateIdentifier.for(key).tap("DefinePlugin", (expr) => {
7272
/**
7373
* this is needed in case there is a recursion in the DefinePlugin
7474
* to prevent an endless recursion
@@ -84,10 +84,10 @@ class DefinePlugin {
8484
res.setRange(expr.range);
8585
return res;
8686
});
87-
parser.plugin("expression " + key, /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code));
87+
parser.hooks.expression.for(key).tap("DefinePlugin", /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code));
8888
}
8989
const typeofCode = isTypeof ? code : "typeof (" + code + ")";
90-
parser.plugin("evaluate typeof " + key, (expr) => {
90+
parser.hooks.evaluateTypeof.for(key).tap("DefinePlugin", (expr) => {
9191
/**
9292
* this is needed in case there is a recursion in the DefinePlugin
9393
* to prevent an endless recursion
@@ -103,7 +103,7 @@ class DefinePlugin {
103103
res.setRange(expr.range);
104104
return res;
105105
});
106-
parser.plugin("typeof " + key, (expr) => {
106+
parser.hooks.typeof.for(key).tap("DefinePlugin", (expr) => {
107107
const res = parser.evaluate(typeofCode);
108108
if(!res.isString()) return;
109109
return ParserHelpers.toConstantDependency(parser, JSON.stringify(res.string)).bind(parser)(expr);
@@ -112,11 +112,11 @@ class DefinePlugin {
112112

113113
const applyObjectDefine = (key, obj) => {
114114
const code = stringifyObj(obj);
115-
parser.plugin("can-rename " + key, ParserHelpers.approve);
116-
parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
117-
parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object"));
118-
parser.plugin("expression " + key, /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code));
119-
parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(parser, JSON.stringify("object")));
115+
parser.hooks.canRename.for(key).tap("DefinePlugin", ParserHelpers.approve);
116+
parser.hooks.evaluateIdentifier.for(key).tap("DefinePlugin", (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
117+
parser.hooks.evaluateTypeof.for(key).tap("DefinePlugin", ParserHelpers.evaluateToString("object"));
118+
parser.hooks.expression.for(key).tap("DefinePlugin", /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(parser, code) : ParserHelpers.toConstantDependency(parser, code));
119+
parser.hooks.typeof.for(key).tap("DefinePlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("object")));
120120
};
121121

122122
walkDefinitions(definitions, "");

lib/ExtendedAPIPlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class ExtendedAPIPlugin {
4141

4242
const handler = (parser, parserOptions) => {
4343
Object.keys(REPLACEMENTS).forEach(key => {
44-
parser.plugin(`expression ${key}`, ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key]));
45-
parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key]));
44+
parser.hooks.expression.for(key).tap("ExtendedAPIPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, REPLACEMENTS[key]));
45+
parser.hooks.evaluateTypeof.for(key).tap("ExtendedAPIPlugin", ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key]));
4646
});
4747
};
4848

lib/HotModuleReplacementPlugin.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,17 +193,17 @@ module.exports = class HotModuleReplacementPlugin {
193193
});
194194

195195
const handler = (parser, parserOptions) => {
196-
parser.plugin("expression __webpack_hash__", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.h()"));
197-
parser.plugin("evaluate typeof __webpack_hash__", ParserHelpers.evaluateToString("string"));
198-
parser.plugin("evaluate Identifier module.hot", expr => {
196+
parser.hooks.expression.for("__webpack_hash__").tap("HotModuleReplacementPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.h()"));
197+
parser.hooks.evaluateTypeof.for("__webpack_hash__").tap("HotModuleReplacementPlugin", ParserHelpers.evaluateToString("string"));
198+
parser.hooks.evaluateIdentifier.for("module.hot").tap("HotModuleReplacementPlugin", expr => {
199199
return ParserHelpers.evaluateToIdentifier("module.hot", !!parser.state.compilation.hotUpdateChunkTemplate)(expr);
200200
});
201201
// TODO webpack 5: refactor this, no custom hooks
202202
if(!parser.hooks.hotAcceptCallback)
203203
parser.hooks.hotAcceptCallback = new SyncBailHook(["expression", "requests"]);
204204
if(!parser.hooks.hotAcceptWithoutCallback)
205205
parser.hooks.hotAcceptWithoutCallback = new SyncBailHook(["expression", "requests"]);
206-
parser.plugin("call module.hot.accept", expr => {
206+
parser.hooks.call.for("module.hot.accept").tap("HotModuleReplacementPlugin", expr => {
207207
if(!parser.state.compilation.hotUpdateChunkTemplate) return false;
208208
if(expr.arguments.length >= 1) {
209209
const arg = parser.evaluateExpression(expr.arguments[0]);
@@ -231,7 +231,7 @@ module.exports = class HotModuleReplacementPlugin {
231231
}
232232
}
233233
});
234-
parser.plugin("call module.hot.decline", expr => {
234+
parser.hooks.call.for("module.hot.decline").tap("HotModuleReplacementPlugin", expr => {
235235
if(!parser.state.compilation.hotUpdateChunkTemplate) return false;
236236
if(expr.arguments.length === 1) {
237237
const arg = parser.evaluateExpression(expr.arguments[0]);
@@ -250,7 +250,7 @@ module.exports = class HotModuleReplacementPlugin {
250250
});
251251
}
252252
});
253-
parser.plugin("expression module.hot", ParserHelpers.skipTraversal);
253+
parser.hooks.expression.for("module.hot").tap("HotModuleReplacementPlugin", ParserHelpers.skipTraversal);
254254
};
255255

256256
// TODO add HMR support for javascript/esm

lib/NodeStuffPlugin.js

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ class NodeStuffPlugin {
3232
localOptions = Object.assign({}, localOptions, parserOptions.node);
3333

3434
const setConstant = (expressionName, value) => {
35-
parser.plugin(`expression ${expressionName}`, () => {
35+
parser.hooks.expression.for(expressionName).tap("NodeStuffPlugin", () => {
3636
parser.state.current.addVariable(expressionName, JSON.stringify(value));
3737
return true;
3838
});
3939
};
4040

4141
const setModuleConstant = (expressionName, fn) => {
42-
parser.plugin(`expression ${expressionName}`, () => {
42+
parser.hooks.expression.for(expressionName).tap("NodeStuffPlugin", () => {
4343
parser.state.current.addVariable(expressionName, JSON.stringify(fn(parser.state.module)));
4444
return true;
4545
});
@@ -50,7 +50,7 @@ class NodeStuffPlugin {
5050
} else if(localOptions.__filename) {
5151
setModuleConstant("__filename", module => path.relative(context, module.resource));
5252
}
53-
parser.plugin("evaluate Identifier __filename", expr => {
53+
parser.hooks.evaluateIdentifier.for("__filename").tap("NodeStuffPlugin", expr => {
5454
if(!parser.state.module) return;
5555
const resource = parser.state.module.resource;
5656
const i = resource.indexOf("?");
@@ -61,31 +61,28 @@ class NodeStuffPlugin {
6161
} else if(localOptions.__dirname) {
6262
setModuleConstant("__dirname", module => path.relative(context, module.context));
6363
}
64-
parser.plugin("evaluate Identifier __dirname", expr => {
64+
parser.hooks.evaluateIdentifier.for("__dirname").tap("NodeStuffPlugin", expr => {
6565
if(!parser.state.module) return;
6666
return ParserHelpers.evaluateToString(parser.state.module.context)(expr);
6767
});
68-
parser.plugin("expression require.main", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.c[__webpack_require__.s]"));
69-
parser.plugin(
70-
"expression require.extensions",
71-
ParserHelpers.expressionIsUnsupported(parser, "require.extensions is not supported by webpack. Use a loader instead.")
72-
);
73-
parser.plugin("expression module.loaded", expr => {
68+
parser.hooks.expression.for("require.main").tap("NodeStuffPlugin", ParserHelpers.toConstantDependencyWithWebpackRequire(parser, "__webpack_require__.c[__webpack_require__.s]"));
69+
parser.hooks.expression.for("require.extensions").tap("NodeStuffPlugin", ParserHelpers.expressionIsUnsupported(parser, "require.extensions is not supported by webpack. Use a loader instead."));
70+
parser.hooks.expression.for("module.loaded").tap("NodeStuffPlugin", expr => {
7471
parser.state.module.buildMeta.moduleConcatenationBailout = "module.loaded";
7572
return ParserHelpers.toConstantDependency(parser, "module.l")(expr);
7673
});
77-
parser.plugin("expression module.id", expr => {
74+
parser.hooks.expression.for("module.id").tap("NodeStuffPlugin", expr => {
7875
parser.state.module.buildMeta.moduleConcatenationBailout = "module.id";
7976
return ParserHelpers.toConstantDependency(parser, "module.i")(expr);
8077
});
81-
parser.plugin("expression module.exports", () => {
78+
parser.hooks.expression.for("module.exports").tap("NodeStuffPlugin", () => {
8279
const module = parser.state.module;
8380
const isHarmony = module.buildMeta && module.buildMeta.harmonyModule;
8481
if(!isHarmony)
8582
return true;
8683
});
87-
parser.plugin("evaluate Identifier module.hot", ParserHelpers.evaluateToIdentifier("module.hot", false));
88-
parser.plugin("expression module", () => {
84+
parser.hooks.evaluateIdentifier.for("module.hot").tap("NodeStuffPlugin", ParserHelpers.evaluateToIdentifier("module.hot", false));
85+
parser.hooks.expression.for("module").tap("NodeStuffPlugin", () => {
8986
const module = parser.state.module;
9087
const isHarmony = module.buildMeta && module.buildMeta.harmonyModule;
9188
let moduleJsPath = path.join(__dirname, "..", "buildin", isHarmony ? "harmony-module.js" : "module.js");

0 commit comments

Comments
 (0)