summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/dependencies/ImportMetaPlugin.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-31 15:37:35 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-31 15:37:35 +0800
commitd5f14083061f2ce6a42313188443a42e30796320 (patch)
treecc6a9889e08b29595a76a33b9e7b4ef84866468b /node_modules/webpack/lib/dependencies/ImportMetaPlugin.js
parentb1a6ea021f29f182b62f9f81024a3d8ac8621b7f (diff)
added make browserlist(autoprefixer) work fixed
Diffstat (limited to 'node_modules/webpack/lib/dependencies/ImportMetaPlugin.js')
-rw-r--r--node_modules/webpack/lib/dependencies/ImportMetaPlugin.js255
1 files changed, 255 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/dependencies/ImportMetaPlugin.js b/node_modules/webpack/lib/dependencies/ImportMetaPlugin.js
new file mode 100644
index 00000000..27d3b60c
--- /dev/null
+++ b/node_modules/webpack/lib/dependencies/ImportMetaPlugin.js
@@ -0,0 +1,255 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Ivan Kopeykin @vankop
+*/
+
+"use strict";
+
+const { pathToFileURL } = require("url");
+const ModuleDependencyWarning = require("../ModuleDependencyWarning");
+const {
+ JAVASCRIPT_MODULE_TYPE_AUTO,
+ JAVASCRIPT_MODULE_TYPE_ESM
+} = require("../ModuleTypeConstants");
+const Template = require("../Template");
+const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
+const {
+ evaluateToIdentifier,
+ toConstantDependency,
+ evaluateToString,
+ evaluateToNumber
+} = require("../javascript/JavascriptParserHelpers");
+const memoize = require("../util/memoize");
+const propertyAccess = require("../util/propertyAccess");
+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")
+);
+
+const PLUGIN_NAME = "ImportMetaPlugin";
+
+class ImportMetaPlugin {
+ /**
+ * @param {Compiler} compiler compiler
+ */
+ apply(compiler) {
+ compiler.hooks.compilation.tap(
+ PLUGIN_NAME,
+ (compilation, { normalModuleFactory }) => {
+ /**
+ * @param {NormalModule} module module
+ * @returns {string} file url
+ */
+ const getUrl = module => {
+ return pathToFileURL(module.resource).toString();
+ };
+ /**
+ * @param {Parser} parser parser parser
+ * @param {JavascriptParserOptions} parserOptions parserOptions
+ * @returns {void}
+ */
+ const parserHandler = (parser, { importMeta }) => {
+ if (importMeta === false) {
+ const { importMetaName } = compilation.outputOptions;
+ if (importMetaName === "import.meta") return;
+
+ parser.hooks.expression
+ .for("import.meta")
+ .tap(PLUGIN_NAME, metaProperty => {
+ const dep = new ConstDependency(
+ /** @type {string} */ (importMetaName),
+ /** @type {Range} */ (metaProperty.range)
+ );
+ dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
+ parser.state.module.addPresentationalDependency(dep);
+ return true;
+ });
+ return;
+ }
+
+ /// import.meta direct ///
+ const webpackVersion = parseInt(
+ require("../../package.json").version,
+ 10
+ );
+ 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(".")
+ )} undefined${propertyAccess(members, 1)}`;
+ parser.hooks.typeof
+ .for("import.meta")
+ .tap(
+ PLUGIN_NAME,
+ toConstantDependency(parser, JSON.stringify("object"))
+ );
+ parser.hooks.expression
+ .for("import.meta")
+ .tap(PLUGIN_NAME, metaProperty => {
+ const referencedPropertiesInDestructuring =
+ parser.destructuringAssignmentPropertiesFor(metaProperty);
+ if (!referencedPropertiesInDestructuring) {
+ const CriticalDependencyWarning =
+ getCriticalDependencyWarning();
+ parser.state.module.addWarning(
+ new ModuleDependencyWarning(
+ parser.state.module,
+ new CriticalDependencyWarning(
+ "Accessing import.meta directly is unsupported (only property access or destructuring is supported)"
+ ),
+ /** @type {DependencyLocation} */ (metaProperty.loc)
+ )
+ );
+ const dep = new ConstDependency(
+ `${
+ parser.isAsiPosition(
+ /** @type {Range} */ (metaProperty.range)[0]
+ )
+ ? ";"
+ : ""
+ }({})`,
+ /** @type {Range} */ (metaProperty.range)
+ );
+ dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
+ parser.state.module.addPresentationalDependency(dep);
+ return true;
+ }
+
+ let str = "";
+ for (const prop of referencedPropertiesInDestructuring) {
+ switch (prop) {
+ case "url":
+ str += `url: ${importMetaUrl()},`;
+ break;
+ case "webpack":
+ str += `webpack: ${importMetaWebpackVersion()},`;
+ break;
+ default:
+ str += `[${JSON.stringify(
+ prop
+ )}]: ${importMetaUnknownProperty([prop])},`;
+ break;
+ }
+ }
+ const dep = new ConstDependency(
+ `({${str}})`,
+ /** @type {Range} */ (metaProperty.range)
+ );
+ dep.loc = /** @type {DependencyLocation} */ (metaProperty.loc);
+ parser.state.module.addPresentationalDependency(dep);
+ return true;
+ });
+ parser.hooks.evaluateTypeof
+ .for("import.meta")
+ .tap(PLUGIN_NAME, evaluateToString("object"));
+ parser.hooks.evaluateIdentifier.for("import.meta").tap(
+ PLUGIN_NAME,
+ evaluateToIdentifier("import.meta", "import.meta", () => [], true)
+ );
+
+ /// import.meta.url ///
+ parser.hooks.typeof
+ .for("import.meta.url")
+ .tap(
+ PLUGIN_NAME,
+ toConstantDependency(parser, JSON.stringify("string"))
+ );
+ parser.hooks.expression
+ .for("import.meta.url")
+ .tap(PLUGIN_NAME, expr => {
+ const dep = new ConstDependency(
+ importMetaUrl(),
+ /** @type {Range} */ (expr.range)
+ );
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+ parser.state.module.addPresentationalDependency(dep);
+ return true;
+ });
+ parser.hooks.evaluateTypeof
+ .for("import.meta.url")
+ .tap(PLUGIN_NAME, evaluateToString("string"));
+ parser.hooks.evaluateIdentifier
+ .for("import.meta.url")
+ .tap(PLUGIN_NAME, expr => {
+ return new BasicEvaluatedExpression()
+ .setString(getUrl(parser.state.module))
+ .setRange(/** @type {Range} */ (expr.range));
+ });
+
+ /// import.meta.webpack ///
+ parser.hooks.typeof
+ .for("import.meta.webpack")
+ .tap(
+ PLUGIN_NAME,
+ toConstantDependency(parser, JSON.stringify("number"))
+ );
+ parser.hooks.expression
+ .for("import.meta.webpack")
+ .tap(
+ PLUGIN_NAME,
+ toConstantDependency(parser, importMetaWebpackVersion())
+ );
+ parser.hooks.evaluateTypeof
+ .for("import.meta.webpack")
+ .tap(PLUGIN_NAME, evaluateToString("number"));
+ parser.hooks.evaluateIdentifier
+ .for("import.meta.webpack")
+ .tap(PLUGIN_NAME, evaluateToNumber(webpackVersion));
+
+ /// Unknown properties ///
+ parser.hooks.unhandledExpressionMemberChain
+ .for("import.meta")
+ .tap(PLUGIN_NAME, (expr, members) => {
+ const dep = new ConstDependency(
+ importMetaUnknownProperty(members),
+ /** @type {Range} */ (expr.range)
+ );
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+ parser.state.module.addPresentationalDependency(dep);
+ return true;
+ });
+ parser.hooks.evaluate
+ .for("MemberExpression")
+ .tap(PLUGIN_NAME, expression => {
+ const expr = /** @type {MemberExpression} */ (expression);
+ if (
+ expr.object.type === "MetaProperty" &&
+ expr.object.meta.name === "import" &&
+ expr.object.property.name === "meta" &&
+ expr.property.type ===
+ (expr.computed ? "Literal" : "Identifier")
+ ) {
+ return new BasicEvaluatedExpression()
+ .setUndefined()
+ .setRange(/** @type {Range} */ (expr.range));
+ }
+ });
+ };
+
+ normalModuleFactory.hooks.parser
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
+ .tap(PLUGIN_NAME, parserHandler);
+ normalModuleFactory.hooks.parser
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
+ .tap(PLUGIN_NAME, parserHandler);
+ }
+ );
+ }
+}
+
+module.exports = ImportMetaPlugin;