webpack/lib/dependencies/SystemPlugin.js

50 lines
1.9 KiB
JavaScript
Raw Normal View History

/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const ParserHelpers = require("../ParserHelpers");
class SystemPlugin {
constructor(options) {
this.options = options;
}
apply(compiler) {
2017-12-06 22:01:25 +08:00
compiler.hooks.compilation.tap("SystemPlugin", (compilation, {
normalModuleFactory
}) => {
const handler = (parser, parserOptions) => {
if(typeof parserOptions.system !== "undefined" && !parserOptions.system)
return;
2017-11-08 18:32:05 +08:00
const setNotSupported = name => {
parser.hooks.evaluateTypeof.for(name).tap("SystemPlugin", ParserHelpers.evaluateToString("undefined"));
parser.hooks.expression.for(name).tap("SystemPlugin",
ParserHelpers.expressionIsUnsupported(parser, name + " is not supported by webpack.")
);
2017-11-08 18:32:05 +08:00
};
parser.hooks.typeof.for("System.import").tap("SystemPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("function")));
parser.hooks.evaluateTypeof.for("System.import").tap("SystemPlugin", ParserHelpers.evaluateToString("function"));
parser.hooks.typeof.for("System").tap("SystemPlugin", ParserHelpers.toConstantDependency(parser, JSON.stringify("object")));
parser.hooks.evaluateTypeof.for("System").tap("SystemPlugin", ParserHelpers.evaluateToString("object"));
setNotSupported("System.set");
setNotSupported("System.get");
setNotSupported("System.register");
parser.hooks.expression.for("System").tap("SystemPlugin", () => {
const systemPolyfillRequire = ParserHelpers.requireFileAsExpression(
2017-11-08 18:32:05 +08:00
parser.state.module.context, require.resolve("../../buildin/system.js"));
return ParserHelpers.addParsedVariableToModule(parser, "System", systemPolyfillRequire);
});
};
normalModuleFactory.hooks.parser.for("javascript/auto").tap("SystemPlugin", handler);
normalModuleFactory.hooks.parser.for("javascript/dynamic").tap("SystemPlugin", handler);
});
}
}
module.exports = SystemPlugin;