UNPKG

@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
"use strict"; 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