UNPKG

webpack

Version:

Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.

69 lines (59 loc) 1.6 kB
/* 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; var path = parent.split("/"); var 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 */ 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 */ 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; };