| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const LocalModule = require("./LocalModule");/** @typedef {import("../javascript/JavascriptParser").ParserState} ParserState *//** * @param {string} parent parent module * @param {string} mod module to resolve * @returns {string} resolved module */const lookup = (parent, mod) => {	if (mod.charAt(0) !== ".") return mod;	const path = parent.split("/");	const segments = mod.split("/");	path.pop();	for (let i = 0; i < segments.length; i++) {		const seg = segments[i];		if (seg === "..") {			path.pop();		} else if (seg !== ".") {			path.push(seg);		}	}	return path.join("/");};/** * @param {ParserState} state parser state * @param {string} name name * @returns {LocalModule} local module */module.exports.addLocalModule = (state, name) => {	if (!state.localModules) {		state.localModules = [];	}	const m = new LocalModule(name, state.localModules.length);	state.localModules.push(m);	return m;};/** * @param {ParserState} state parser state * @param {string} name name * @param {string=} namedModule named module * @returns {LocalModule | null} local module or null */module.exports.getLocalModule = (state, name, namedModule) => {	if (!state.localModules) return null;	if (namedModule) {		// resolve dependency name relative to the defining named module		name = lookup(namedModule, name);	}	for (let i = 0; i < state.localModules.length; i++) {		if (state.localModules[i].name === name) {			return state.localModules[i];		}	}	return null;};
 |