| | |
| | | /** @typedef {import("../Dependency")} Dependency */ |
| | | /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */ |
| | | /** @typedef {import("../Module")} Module */ |
| | | /** @typedef {import("../CssModule")} CssModule */ |
| | | /** @typedef {import("../ModuleGraph")} ModuleGraph */ |
| | | /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */ |
| | | /** @typedef {import("../javascript/JavascriptParser").Range} Range */ |
| | |
| | | /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */ |
| | | /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */ |
| | | /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */ |
| | | /** @typedef {import("./CssIcssExportDependency").ExportMode} ExportMode */ |
| | | /** @typedef {import("./CssIcssExportDependency").ExportType} ExportType */ |
| | | |
| | | class CssIcssImportDependency extends CssImportDependency { |
| | | /** |
| | | * Example of dependency: |
| | | * |
| | | * :import('./style.css') { IMPORTED_NAME: v-primary } |
| | | * :import('./style.css') { value: name } |
| | | * @param {string} request request request path which needs resolving |
| | | * @param {Range} range the range of dependency |
| | | * @param {"local" | "global"} mode mode of the parsed CSS |
| | | * @param {string} name importName name |
| | | * @param {string} importName import name (`name` from example) |
| | | * @param {string} localName local name (`value` from example) |
| | | */ |
| | | constructor(request, range, mode, name) { |
| | | constructor(request, range, mode, importName, localName) { |
| | | super(request, range, mode); |
| | | this.name = name; |
| | | this.importName = importName; |
| | | this.localName = localName; |
| | | } |
| | | |
| | | get type() { |
| | | return "css :import"; |
| | | } |
| | | |
| | | /** |
| | | * @returns {string | null} an identifier to merge equal requests |
| | | */ |
| | | getResourceIdentifier() { |
| | | return `${super.getResourceIdentifier()}|mode${this.mode}|name${this.name}`; |
| | | } |
| | | |
| | | /** |
| | |
| | | getReferencedExports(moduleGraph, runtime) { |
| | | return [ |
| | | { |
| | | name: [this.name], |
| | | name: [this.importName], |
| | | canMangle: true |
| | | } |
| | | ]; |
| | | } |
| | | |
| | | /** |
| | | * Returns warnings |
| | | * Returns warnings. |
| | | * @param {ModuleGraph} moduleGraph module graph |
| | | * @returns {WebpackError[] | null | undefined} warnings |
| | | */ |
| | |
| | | |
| | | if ( |
| | | module && |
| | | !moduleGraph.getExportsInfo(module).isExportProvided(this.name) |
| | | !moduleGraph.getExportsInfo(module).isExportProvided(this.importName) |
| | | ) { |
| | | const error = new WebpackError( |
| | | `Referenced name "${this.name}" in "${this.userRequest}" not found` |
| | | `Referenced name "${this.importName}" in "${this.userRequest}" not found` |
| | | ); |
| | | error.module = module; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Serializes this instance into the provided serializer context. |
| | | * @param {ObjectSerializerContext} context context |
| | | */ |
| | | serialize(context) { |
| | | const { write } = context; |
| | | write(this.name); |
| | | write(this.importName); |
| | | write(this.localName); |
| | | super.serialize(context); |
| | | } |
| | | |
| | | /** |
| | | * Restores this instance from the provided deserializer context. |
| | | * @param {ObjectDeserializerContext} context context |
| | | */ |
| | | deserialize(context) { |
| | | const { read } = context; |
| | | this.name = read(); |
| | | this.importName = read(); |
| | | this.localName = read(); |
| | | super.deserialize(context); |
| | | } |
| | | } |
| | |
| | | CssImportDependency.Template |
| | | ) { |
| | | /** |
| | | * Applies the plugin by registering its hooks on the compiler. |
| | | * @param {Dependency} dependency the dependency for which the template should be applied |
| | | * @param {ReplaceSource} source the current replace source which can be modified |
| | | * @param {DependencyTemplateContext} templateContext the context object |
| | | * @returns {void} |
| | | */ |
| | | apply(dependency, source, templateContext) { |
| | | // We remove everything in CSS parser |
| | | // Nothing |
| | | } |
| | | }; |
| | | |