WXL
3 天以前 3bd962a6d7f61239c020e2dbbeb7341e5b842dd1
node_modules/webpack/lib/dependencies/ImportParserPlugin.js
@@ -14,10 +14,11 @@
} = require("../javascript/JavascriptParser");
const traverseDestructuringAssignmentProperties = require("../util/traverseDestructuringAssignmentProperties");
const ContextDependencyHelpers = require("./ContextDependencyHelpers");
const { getNonOptionalPart } = require("./HarmonyImportDependency");
const ImportContextDependency = require("./ImportContextDependency");
const ImportDependency = require("./ImportDependency");
const ImportEagerDependency = require("./ImportEagerDependency");
const { ImportPhaseUtils, createGetImportPhase } = require("./ImportPhase");
const { createGetImportPhase } = require("./ImportPhase");
const ImportWeakDependency = require("./ImportWeakDependency");
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
@@ -29,7 +30,7 @@
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
/** @typedef {import("../javascript/JavascriptParser").ImportExpression} ImportExpression */
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
/** @typedef {import("../javascript/JavascriptParser").ParserState} ParserState */
/** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
/** @typedef {import("../javascript/JavascriptParser").Members} Members */
/** @typedef {import("../javascript/JavascriptParser").MembersOptionals} MembersOptionals */
/** @typedef {import("../javascript/JavascriptParser").ArrowFunctionExpression} ArrowFunctionExpression */
@@ -41,11 +42,12 @@
/** @typedef {{ references: RawReferencedExports, expression: ImportExpression }} ImportSettings */
/** @typedef {WeakMap<ImportExpression, RawReferencedExports>} State */
/** @type {WeakMap<ParserState, State>} */
/** @type {WeakMap<JavascriptParserState, State>} */
const parserStateMap = new WeakMap();
const dynamicImportTag = Symbol("import()");
/**
 * Returns import parser plugin state.
 * @param {JavascriptParser} parser javascript parser
 * @returns {State} import parser plugin state
 */
@@ -57,6 +59,7 @@
}
/**
 * Tag dynamic import referenced.
 * @param {JavascriptParser} parser javascript parser
 * @param {ImportExpression} importCall import expression
 * @param {string} variableName variable name
@@ -77,6 +80,7 @@
}
/**
 * Gets fulfilled callback namespace obj.
 * @param {CallExpression} importThen import().then() call
 * @returns {Identifier | ObjectPattern | undefined} the dynamic imported namespace obj
 */
@@ -95,6 +99,7 @@
}
/**
 * Walk import then fulfilled callback.
 * @param {JavascriptParser} parser javascript parser
 * @param {ImportExpression} importCall import expression
 * @param {ArrowFunctionExpression | FunctionExpression} fulfilledCallback the fulfilled callback
@@ -156,6 +161,7 @@
}
/**
 * Exports from enumerable.
 * @template T
 * @param {Iterable<T>} enumerable enumerable
 * @returns {T[][]} array of array
@@ -167,6 +173,7 @@
class ImportParserPlugin {
   /**
    * Creates an instance of ImportParserPlugin.
    * @param {JavascriptParserOptions} options options
    */
   constructor(options) {
@@ -174,21 +181,11 @@
   }
   /**
    * Applies the plugin by registering its hooks on the compiler.
    * @param {JavascriptParser} parser the parser
    * @returns {void}
    */
   apply(parser) {
      /**
       * @param {Members} members members
       * @param {MembersOptionals} membersOptionals members Optionals
       * @returns {string[]} a non optional part
       */
      function getNonOptionalPart(members, membersOptionals) {
         let i = 0;
         while (i < members.length && membersOptionals[i] === false) i++;
         return i !== members.length ? members.slice(0, i) : members;
      }
      parser.hooks.collectDestructuringAssignmentProperties.tap(
         PLUGIN_NAME,
         (expr) => {
@@ -262,11 +259,14 @@
      parser.hooks.importCall.tap(PLUGIN_NAME, (expr, importThen) => {
         const param = parser.evaluateExpression(expr.source);
         /** @type {null | string} */
         let chunkName = null;
         let mode = /** @type {ContextMode} */ (this.options.dynamicImportMode);
         /** @type {null | RegExp} */
         let include = null;
         /** @type {null | RegExp} */
         let exclude = null;
         /** @type {RawReferencedExports | null} */
         /** @type {null | RawReferencedExports} */
         let exports = null;
         /** @type {RawChunkGroupOptions} */
         const groupOptions = {};
@@ -312,11 +312,10 @@
            }
         }
         const phase = createGetImportPhase(this.options.deferImport)(
            parser,
            expr,
            () => importOptions
         );
         const phase = createGetImportPhase(
            this.options.deferImport,
            this.options.sourceImport
         )(parser, expr, () => importOptions);
         if (importOptions) {
            if (importOptions.webpackIgnore !== undefined) {
@@ -557,15 +556,6 @@
               mode = "async-weak";
            }
            if (ImportPhaseUtils.isDefer(phase)) {
               parser.state.module.addWarning(
                  new UnsupportedFeatureWarning(
                     "import.defer() is not yet supported for ContextModule (the import path is a dynamic expression).",
                     /** @type {DependencyLocation} */ (expr.loc)
                  )
               );
            }
            const dep = ContextDependencyHelpers.create(
               ImportContextDependency,
               /** @type {Range} */ (expr.range),
@@ -586,7 +576,8 @@
                  typePrefix: "import()",
                  category: "esm",
                  referencedExports: exports,
                  attributes: getImportAttributes(expr)
                  attributes: getImportAttributes(expr),
                  phase
               },
               parser
            );