@wordpress/interactivity-router
Version:
Package that exposes state and actions from the `core/router` store, part of the Interactivity API.
256 lines (254 loc) • 8.71 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/interactivity-router/src/assets/dynamic-importmap/loader.ts
var loader_exports = {};
__export(loader_exports, {
importPreloadedModule: () => importPreloadedModule,
initPromise: () => initPromise,
initialImportMap: () => initialImportMap,
preloadModule: () => preloadModule,
registry: () => registry,
topLevelLoad: () => topLevelLoad
});
module.exports = __toCommonJS(loader_exports);
var lexer = __toESM(require("es-module-lexer"));
var import_fetch = require("./fetch.cjs");
var import_resolver = require("./resolver.cjs");
var initPromise = lexer.init;
var initialImportMapElement = window.document.querySelector(
"script#wp-importmap[type=importmap]"
);
var initialImportMap = initialImportMapElement ? JSON.parse(initialImportMapElement.text) : { imports: {}, scopes: {} };
var skip = (id) => Object.keys(initialImportMap.imports).includes(id);
var fetchCache = {};
var registry = {};
Object.keys(initialImportMap.imports).forEach((id) => {
registry[id] = {
blobUrl: id
};
});
async function loadAll(load, seen) {
if (load.blobUrl || seen[load.url]) {
return;
}
seen[load.url] = 1;
await load.linkPromise;
await Promise.all(load.deps.map((dep) => loadAll(dep, seen)));
}
function urlJsString(url) {
return `'${url.replace(/'/g, "\\'")}'`;
}
var createBlob = (source, type = "text/javascript") => URL.createObjectURL(new Blob([source], { type }));
function resolveDeps(load, seen) {
if (load.blobUrl || !seen[load.url]) {
return;
}
seen[load.url] = 0;
for (const dep of load.deps) {
resolveDeps(dep, seen);
}
const [imports, exports2] = load.analysis;
const source = load.source;
let resolvedSource = "";
if (!imports.length) {
resolvedSource += source;
} else {
let pushStringTo = function(originalIndex) {
while (dynamicImportEndStack.length && dynamicImportEndStack[dynamicImportEndStack.length - 1] < originalIndex) {
const dynamicImportEnd = dynamicImportEndStack.pop();
resolvedSource += `${source.slice(
lastIndex,
dynamicImportEnd
)}, ${urlJsString(load.responseUrl)}`;
lastIndex = dynamicImportEnd;
}
resolvedSource += source.slice(lastIndex, originalIndex);
lastIndex = originalIndex;
};
let lastIndex = 0;
let depIndex = 0;
const dynamicImportEndStack = [];
for (const {
s: start,
ss: statementStart,
se: statementEnd,
d: dynamicImportIndex
} of imports) {
if (dynamicImportIndex === -1) {
const depLoad = load.deps[depIndex++];
let blobUrl = depLoad.blobUrl;
const cycleShell = !blobUrl;
if (cycleShell) {
if (!(blobUrl = depLoad.shellUrl)) {
blobUrl = depLoad.shellUrl = createBlob(
`export function u$_(m){${depLoad.analysis[1].map(({ s, e }, i) => {
const q = depLoad.source[s] === '"' || depLoad.source[s] === "'";
return `e$_${i}=m${q ? `[` : "."}${depLoad.source.slice(s, e)}${q ? `]` : ""}`;
}).join(",")}}${depLoad.analysis[1].length ? `let ${depLoad.analysis[1].map((_, i) => `e$_${i}`).join(",")};` : ""}export {${depLoad.analysis[1].map(
({ s, e }, i) => `e$_${i} as ${depLoad.source.slice(
s,
e
)}`
).join(",")}}
//# sourceURL=${depLoad.responseUrl}?cycle`
);
}
}
pushStringTo(start - 1);
resolvedSource += `/*${source.slice(
start - 1,
statementEnd
)}*/${urlJsString(blobUrl)}`;
if (!cycleShell && depLoad.shellUrl) {
resolvedSource += `;import*as m$_${depIndex} from'${depLoad.blobUrl}';import{u$_ as u$_${depIndex}}from'${depLoad.shellUrl}';u$_${depIndex}(m$_${depIndex})`;
depLoad.shellUrl = void 0;
}
lastIndex = statementEnd;
} else if (dynamicImportIndex === -2) {
throw Error("The import.meta property is not supported.");
} else {
pushStringTo(statementStart);
resolvedSource += `wpInteractivityRouterImport(`;
dynamicImportEndStack.push(statementEnd - 1);
lastIndex = start;
}
}
if (load.shellUrl) {
resolvedSource += `
;import{u$_}from'${load.shellUrl}';try{u$_({${exports2.filter((e) => e.ln).map(({ s, e, ln }) => `${source.slice(s, e)}:${ln}`).join(",")}})}catch(_){};
`;
}
pushStringTo(source.length);
}
let hasSourceURL = false;
resolvedSource = resolvedSource.replace(
sourceMapURLRegEx,
(match, isMapping, url) => {
hasSourceURL = !isMapping;
return match.replace(
url,
() => new URL(url, load.responseUrl).toString()
);
}
);
if (!hasSourceURL) {
resolvedSource += "\n//# sourceURL=" + load.responseUrl;
}
load.blobUrl = createBlob(resolvedSource);
load.source = void 0;
}
var sourceMapURLRegEx = /\n\/\/# source(Mapping)?URL=([^\n]+)\s*((;|\/\/[^#][^\n]*)\s*)*$/;
function getOrCreateLoad(url, fetchOpts, parent) {
let load = registry[url];
if (load) {
return load;
}
load = { url };
if (registry[url]) {
let i = 0;
while (registry[load.url + ++i]) {
}
load.url += i;
}
registry[load.url] = load;
load.fetchPromise = (async () => {
let source;
({ responseUrl: load.responseUrl, source } = await (fetchCache[url] || (0, import_fetch.fetchModule)(url, fetchOpts, parent)));
try {
load.analysis = lexer.parse(source, load.url);
} catch (e) {
console.error(e);
load.analysis = [[], [], false, false];
}
load.source = source;
return load;
})();
load.linkPromise = load.fetchPromise.then(async () => {
let childFetchOpts = fetchOpts;
load.deps = (await Promise.all(
load.analysis[0].map(async ({ n, d }) => {
if (d !== -1 || !n) {
return void 0;
}
const responseUrl = (0, import_resolver.resolve)(
n,
load.responseUrl || load.url
);
if (skip && skip(responseUrl)) {
return { blobUrl: responseUrl };
}
if (childFetchOpts.integrity) {
childFetchOpts = {
...childFetchOpts,
integrity: void 0
};
}
return getOrCreateLoad(
responseUrl,
childFetchOpts,
load.responseUrl
).fetchPromise;
})
)).filter((l) => l);
});
return load;
}
var dynamicImport = (u) => import(
/* webpackIgnore: true */
u
);
async function preloadModule(url, fetchOpts) {
await initPromise;
const load = getOrCreateLoad(url, fetchOpts, null);
const seen = {};
await loadAll(load, seen);
resolveDeps(load, seen);
await Promise.resolve();
return load;
}
async function importPreloadedModule(load) {
const module2 = await dynamicImport(load.blobUrl);
if (load.shellUrl) {
(await dynamicImport(load.shellUrl)).u$_(module2);
}
return module2;
}
async function topLevelLoad(url, fetchOpts) {
const load = await preloadModule(url, fetchOpts);
return importPreloadedModule(load);
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
importPreloadedModule,
initPromise,
initialImportMap,
preloadModule,
registry,
topLevelLoad
});
//# sourceMappingURL=loader.cjs.map