UNPKG

@wordpress/interactivity-router

Version:

Package that exposes state and actions from the `core/router` store, part of the Interactivity API.

210 lines (208 loc) 6.53 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // packages/interactivity-router/src/assets/dynamic-importmap/resolver.ts var resolver_exports = {}; __export(resolver_exports, { addImportMap: () => addImportMap, resolve: () => resolve }); module.exports = __toCommonJS(resolver_exports); var backslashRegEx = /\\/g; function isURL(url) { if (url.indexOf(":") === -1) { return false; } try { new URL(url); return true; } catch { return false; } } function resolveIfNotPlainOrUrl(relUrl, parentUrl) { const hIdx = parentUrl.indexOf("#"), qIdx = parentUrl.indexOf("?"); if (hIdx + qIdx > -2) { parentUrl = parentUrl.slice( 0, // eslint-disable-next-line no-nested-ternary hIdx === -1 ? qIdx : qIdx === -1 || qIdx > hIdx ? hIdx : qIdx ); } if (relUrl.indexOf("\\") !== -1) { relUrl = relUrl.replace(backslashRegEx, "/"); } if (relUrl[0] === "/" && relUrl[1] === "/") { return parentUrl.slice(0, parentUrl.indexOf(":") + 1) + relUrl; } else if (relUrl[0] === "." && (relUrl[1] === "/" || relUrl[1] === "." && (relUrl[2] === "/" || relUrl.length === 2 && (relUrl += "/")) || relUrl.length === 1 && (relUrl += "/")) || relUrl[0] === "/") { const parentProtocol = parentUrl.slice( 0, parentUrl.indexOf(":") + 1 ); let pathname; if (parentUrl[parentProtocol.length + 1] === "/") { if (parentProtocol !== "file:") { pathname = parentUrl.slice(parentProtocol.length + 2); pathname = pathname.slice(pathname.indexOf("/") + 1); } else { pathname = parentUrl.slice(8); } } else { pathname = parentUrl.slice( parentProtocol.length + (parentUrl[parentProtocol.length] === "/") ); } if (relUrl[0] === "/") { return parentUrl.slice(0, parentUrl.length - pathname.length - 1) + relUrl; } const segmented = pathname.slice(0, pathname.lastIndexOf("/") + 1) + relUrl; const output = []; let segmentIndex = -1; for (let i = 0; i < segmented.length; i++) { if (segmentIndex !== -1) { if (segmented[i] === "/") { output.push(segmented.slice(segmentIndex, i + 1)); segmentIndex = -1; } continue; } else if (segmented[i] === ".") { if (segmented[i + 1] === "." && (segmented[i + 2] === "/" || i + 2 === segmented.length)) { output.pop(); i += 2; continue; } else if (segmented[i + 1] === "/" || i + 1 === segmented.length) { i += 1; continue; } } while (segmented[i] === "/") { i++; } segmentIndex = i; } if (segmentIndex !== -1) { output.push(segmented.slice(segmentIndex)); } return parentUrl.slice(0, parentUrl.length - pathname.length) + output.join(""); } } function resolveUrl(relUrl, parentUrl) { return resolveIfNotPlainOrUrl(relUrl, parentUrl) || (isURL(relUrl) ? relUrl : resolveIfNotPlainOrUrl("./" + relUrl, parentUrl)); } function getMatch(path, matchObj) { if (matchObj[path]) { return path; } let sepIndex = path.length; do { const segment = path.slice(0, sepIndex + 1); if (segment in matchObj) { return segment; } } while ((sepIndex = path.lastIndexOf("/", sepIndex - 1)) !== -1); } function applyPackages(id, packages) { const pkgName = getMatch(id, packages); if (pkgName) { const pkg = packages[pkgName]; if (pkg === null) { return; } return pkg + id.slice(pkgName.length); } } function resolveImportMap(importMap2, resolvedOrPlain, parentUrl) { let scopeUrl = parentUrl && getMatch(parentUrl, importMap2.scopes); while (scopeUrl) { const packageResolution = applyPackages( resolvedOrPlain, importMap2.scopes[scopeUrl] ); if (packageResolution) { return packageResolution; } scopeUrl = getMatch( scopeUrl.slice(0, scopeUrl.lastIndexOf("/")), importMap2.scopes ); } return applyPackages(resolvedOrPlain, importMap2.imports) || resolvedOrPlain.indexOf(":") !== -1 && resolvedOrPlain; } function resolveAndComposePackages(packages, outPackages, baseUrl2, parentMap) { for (const p in packages) { const resolvedLhs = resolveIfNotPlainOrUrl(p, baseUrl2) || p; const target = packages[p]; if (typeof target !== "string") { continue; } const mapped = resolveImportMap( parentMap, resolveIfNotPlainOrUrl(target, baseUrl2) || target, baseUrl2 ); if (mapped) { outPackages[resolvedLhs] = mapped; continue; } } } function resolveAndComposeImportMap(json, baseUrl2, parentMap) { const outMap = { imports: Object.assign({}, parentMap.imports), scopes: Object.assign({}, parentMap.scopes) }; if (json.imports) { resolveAndComposePackages( json.imports, outMap.imports, baseUrl2, parentMap ); } if (json.scopes) { for (const s in json.scopes) { const resolvedScope = resolveUrl(s, baseUrl2); resolveAndComposePackages( json.scopes[s], outMap.scopes[resolvedScope] || (outMap.scopes[resolvedScope] = {}), baseUrl2, parentMap ); } } return outMap; } var importMap = { imports: {}, scopes: {} }; var baseUrl = document.baseURI; var pageBaseUrl = baseUrl; function addImportMap(importMapIn) { importMap = resolveAndComposeImportMap( importMapIn, pageBaseUrl, importMap ); } function resolve(id, parentUrl) { const urlResolved = resolveIfNotPlainOrUrl(id, parentUrl); return resolveImportMap(importMap, urlResolved || id, parentUrl) || id; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { addImportMap, resolve }); //# sourceMappingURL=resolver.cjs.map