@wordpress/interactivity-router
Version:
Package that exposes state and actions from the `core/router` store, part of the Interactivity API.
64 lines (56 loc) • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.preloadScriptModules = exports.markScriptModuleAsResolved = exports.importScriptModules = void 0;
var _dynamicImportmap = require("./dynamic-importmap");
/**
* Internal dependencies
*/
/**
* IDs of modules that should be resolved by the browser rather than
* processed internally.
*/
const resolvedScriptModules = new Set();
/**
* Marks the specified module as natively resolved.
* @param url Script module URL.
*/
const markScriptModuleAsResolved = url => {
resolvedScriptModules.add(url);
};
/**
* Resolves and fetches modules present in the passed document, using the
* document's import map to resolve them.
*
* @param doc Document containing the modules to preload.
* @return Array of promises that resolve to a `ScriptModuleLoad` instance.
*/
exports.markScriptModuleAsResolved = markScriptModuleAsResolved;
const preloadScriptModules = doc => {
// Extract the import map from the document.
const importMapElement = doc.querySelector('script#wp-importmap[type=importmap]');
const importMap = importMapElement ? JSON.parse(importMapElement.text) : {
imports: {},
scopes: {}
};
// Remove imports also in the initial page's import map.
// Those should be handled natively.
for (const key in _dynamicImportmap.initialImportMap.imports) {
delete importMap.imports[key];
}
// Get the URL of all modules contained in the document.
const moduleUrls = [...doc.querySelectorAll('script[type=module][src]')].map(s => s.src);
// Resolve and fetch those not resolved natively.
return moduleUrls.filter(url => !resolvedScriptModules.has(url)).map(url => (0, _dynamicImportmap.preloadWithMap)(url, importMap));
};
/**
* Imports modules respresented by the passed `ScriptModuleLoad` instances.
*
* @param modules Array of `MoudleLoad` instances.
* @return Promise that resolves once all modules are imported.
*/
exports.preloadScriptModules = preloadScriptModules;
const importScriptModules = modules => Promise.all(modules.map(m => (0, _dynamicImportmap.importPreloadedModule)(m)));
exports.importScriptModules = importScriptModules;
//# sourceMappingURL=script-modules.js.map