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;
 |