102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
						|
	Author Tobias Koppers @sokra
 | 
						|
*/
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
const Dependency = require("../Dependency");
 | 
						|
const DependencyTemplate = require("../DependencyTemplate");
 | 
						|
 | 
						|
/** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
 | 
						|
/** @typedef {import("../Module")} Module */
 | 
						|
/** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
 | 
						|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
 | 
						|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
 | 
						|
 | 
						|
class ModuleDependency extends Dependency {
 | 
						|
	/**
 | 
						|
	 * @param {string} request request path which needs resolving
 | 
						|
	 */
 | 
						|
	constructor(request) {
 | 
						|
		super();
 | 
						|
		this.request = request;
 | 
						|
		this.userRequest = request;
 | 
						|
		this.range = undefined;
 | 
						|
		// TODO move it to subclasses and rename
 | 
						|
		// assertions must be serialized by subclasses that use it
 | 
						|
		/** @type {ImportAttributes | undefined} */
 | 
						|
		this.assertions = undefined;
 | 
						|
		this._context = undefined;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @returns {string | undefined} a request context
 | 
						|
	 */
 | 
						|
	getContext() {
 | 
						|
		return this._context;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @returns {string | null} an identifier to merge equal requests
 | 
						|
	 */
 | 
						|
	getResourceIdentifier() {
 | 
						|
		let str = `context${this._context || ""}|module${this.request}`;
 | 
						|
		if (this.assertions !== undefined) {
 | 
						|
			str += JSON.stringify(this.assertions);
 | 
						|
		}
 | 
						|
		return str;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @returns {boolean | TRANSITIVE} true, when changes to the referenced module could affect the referencing module; TRANSITIVE, when changes to the referenced module could affect referencing modules of the referencing module
 | 
						|
	 */
 | 
						|
	couldAffectReferencingModule() {
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param {string} context context directory
 | 
						|
	 * @returns {Module} ignored module
 | 
						|
	 */
 | 
						|
	createIgnoredModule(context) {
 | 
						|
		const RawModule = require("../RawModule");
 | 
						|
 | 
						|
		const module = new RawModule(
 | 
						|
			"/* (ignored) */",
 | 
						|
			`ignored|${context}|${this.request}`,
 | 
						|
			`${this.request} (ignored)`
 | 
						|
		);
 | 
						|
		module.factoryMeta = { sideEffectFree: true };
 | 
						|
		return module;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param {ObjectSerializerContext} context context
 | 
						|
	 */
 | 
						|
	serialize(context) {
 | 
						|
		const { write } = context;
 | 
						|
		write(this.request);
 | 
						|
		write(this.userRequest);
 | 
						|
		write(this._context);
 | 
						|
		write(this.range);
 | 
						|
		super.serialize(context);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param {ObjectDeserializerContext} context context
 | 
						|
	 */
 | 
						|
	deserialize(context) {
 | 
						|
		const { read } = context;
 | 
						|
		this.request = read();
 | 
						|
		this.userRequest = read();
 | 
						|
		this._context = read();
 | 
						|
		this.range = read();
 | 
						|
		super.deserialize(context);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
ModuleDependency.Template = DependencyTemplate;
 | 
						|
 | 
						|
module.exports = ModuleDependency;
 |