| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Ivan Kopeykin @vankop*/"use strict";const InitFragment = require("../InitFragment");const makeSerializable = require("../util/makeSerializable");/** @typedef {import("webpack-sources").Source} Source *//** @typedef {import("../Generator").GenerateContext} GenerateContext *//** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext *//** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext *//** @typedef {Map<string, Set<string>>} ImportSpecifiers *//** * @extends {InitFragment<GenerateContext>} */class ExternalModuleInitFragment extends InitFragment {	/**	 * @param {string} importedModule imported module	 * @param {Array<{ name: string, value?: string }> | ImportSpecifiers} specifiers import specifiers	 * @param {string=} defaultImport default import	 */	constructor(importedModule, specifiers, defaultImport) {		super(			undefined,			InitFragment.STAGE_CONSTANTS,			0,			`external module imports|${importedModule}|${defaultImport || "null"}`		);		this.importedModule = importedModule;		if (Array.isArray(specifiers)) {			/** @type {ImportSpecifiers} */			this.specifiers = new Map();			for (const { name, value } of specifiers) {				let specifiers = this.specifiers.get(name);				if (!specifiers) {					specifiers = new Set();					this.specifiers.set(name, specifiers);				}				specifiers.add(value || name);			}		} else {			this.specifiers = specifiers;		}		this.defaultImport = defaultImport;	}	/**	 * @param {ExternalModuleInitFragment} other other	 * @returns {ExternalModuleInitFragment} ExternalModuleInitFragment	 */	merge(other) {		const newSpecifiersMap = new Map(this.specifiers);		for (const [name, specifiers] of other.specifiers) {			if (newSpecifiersMap.has(name)) {				const currentSpecifiers =					/** @type {Set<string>} */					(newSpecifiersMap.get(name));				for (const spec of specifiers) currentSpecifiers.add(spec);			} else {				newSpecifiersMap.set(name, specifiers);			}		}		return new ExternalModuleInitFragment(			this.importedModule,			newSpecifiersMap,			this.defaultImport		);	}	/**	 * @param {GenerateContext} context context	 * @returns {string | Source | undefined} the source code that will be included as initialization code	 */	getContent({ runtimeRequirements }) {		const namedImports = [];		for (const [name, specifiers] of this.specifiers) {			for (const spec of specifiers) {				if (spec === name) {					namedImports.push(name);				} else {					namedImports.push(`${name} as ${spec}`);				}			}		}		let importsString =			namedImports.length > 0 ? `{${namedImports.join(",")}}` : "";		if (this.defaultImport) {			importsString = `${this.defaultImport}${				importsString ? `, ${importsString}` : ""			}`;		}		return `import ${importsString} from ${JSON.stringify(			this.importedModule		)};`;	}	/**	 * @param {ObjectSerializerContext} context context	 */	serialize(context) {		super.serialize(context);		const { write } = context;		write(this.importedModule);		write(this.specifiers);		write(this.defaultImport);	}	/**	 * @param {ObjectDeserializerContext} context context	 */	deserialize(context) {		super.deserialize(context);		const { read } = context;		this.importedModule = read();		this.specifiers = read();		this.defaultImport = read();	}}makeSerializable(	ExternalModuleInitFragment,	"webpack/lib/dependencies/ExternalModuleInitFragment");module.exports = ExternalModuleInitFragment;
 |