| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Ivan Kopeykin @vankop
- */
- "use strict";
- const makeSerializable = require("../util/makeSerializable");
- const ModuleDependency = require("./ModuleDependency");
- /** @import { ReplaceSource } from "webpack-sources" */
- /** @import { CssParserExportType } from "../../declarations/WebpackOptions" */
- /** @import Dependency from "../Dependency" */
- /**
- * @import {
- * CssDependencyTemplateContext as DependencyTemplateContext
- * } from "../DependencyTemplate"
- */
- /** @import { Inheritance } from "../css/CssModule" */
- /** @import { Range } from "../css/CssParser" */
- /**
- * @import {
- * ObjectDeserializerContext,
- * ObjectSerializerContext
- * } from "../serialization/ObjectMiddleware"
- */
- class CssImportDependency extends ModuleDependency {
- /**
- * Example of dependency:
- * \@import url("landscape.css") layer(forms) screen and (orientation: landscape) screen and (orientation: landscape);
- * @param {string} request request
- * @param {Range} range range of the argument
- * @param {"local" | "global"=} mode mode of the parsed CSS
- * @param {string=} layer layer
- * @param {string=} supports list of supports conditions
- * @param {string=} media list of media conditions
- * @param {Inheritance=} inheritance layer/supports/media chain inherited from the importing module
- * @param {CssParserExportType=} exportType exportType inherited from the importing module
- */
- constructor(
- request,
- range,
- mode,
- layer,
- supports,
- media,
- inheritance,
- exportType
- ) {
- super(request);
- this.range = range;
- this.mode = mode;
- /** @type {string | undefined} */
- this.layer = layer;
- /** @type {string | undefined} */
- this.supports = supports;
- /** @type {string | undefined} */
- this.media = media;
- /** @type {Inheritance | undefined} */
- this.inheritance = inheritance;
- /** @type {CssParserExportType | undefined} */
- this.exportType = exportType;
- }
- get type() {
- return "css @import";
- }
- get category() {
- return `css-import${this.mode ? `-${this.mode}-module` : ""}`;
- }
- /**
- * Returns true if this dependency can be concatenated
- * @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
- * @returns {boolean} true if this dependency can be concatenated
- */
- canConcatenate(concatenateCommonJsModules) {
- return true;
- }
- /**
- * Returns an identifier to merge equal requests.
- * @returns {string | null} an identifier to merge equal requests
- */
- getResourceIdentifier() {
- let str = `context${this._context || ""}|module${this.request}`;
- if (this.mode) {
- str += `|mode${this.mode}`;
- }
- if (this.layer) {
- str += `|layer${this.layer}`;
- }
- if (this.supports) {
- str += `|supports${this.supports}`;
- }
- if (this.media) {
- str += `|media${this.media}`;
- }
- return str;
- }
- /**
- * Serializes this instance into the provided serializer context.
- * @param {ObjectSerializerContext} context context
- */
- serialize(context) {
- const { write } = context;
- write(this.range);
- write(this.mode);
- write(this.layer);
- write(this.supports);
- write(this.media);
- write(this.inheritance);
- write(this.exportType);
- super.serialize(context);
- }
- /**
- * Restores this instance from the provided deserializer context.
- * @param {ObjectDeserializerContext} context context
- */
- deserialize(context) {
- const { read } = context;
- this.range = read();
- this.mode = read();
- this.layer = read();
- this.supports = read();
- this.media = read();
- this.inheritance = read();
- this.exportType = read();
- super.deserialize(context);
- }
- }
- CssImportDependency.Template = class CssImportDependencyTemplate extends (
- ModuleDependency.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) {
- if (templateContext.type === "javascript") return;
- const dep = /** @type {CssImportDependency} */ (dependency);
- source.replace(dep.range[0], dep.range[1] - 1, "");
- }
- };
- makeSerializable(
- CssImportDependency,
- "webpack/lib/dependencies/CssImportDependency"
- );
- module.exports = CssImportDependency;
|