interface ESMSInitOptions { /** * Enable Shim Mode */ shimMode?: boolean; /** * Enable polyfill features. * Currently supports ['css-modules', 'json-modules'] */ polyfillEnable?: Array<'css-modules' | 'json-modules'> /** * #### Enforce Integrity * * Set to *true* to enable secure mode to not support loading modules without integrity (integrity is always verified though). * */ enforceIntegrity?: boolean; /** * Nonce for CSP build */ nonce?: boolean; /** * Disable retriggering of document readystate */ noLoadEventRetriggers?: true; /** * #### Skip Processing Stability * * > Non-spec feature * * When loading modules that you know will only use baseline modules * features, it is possible to set a rule to explicitly opt-out modules * from rewriting. This improves performance because those modules then do * not need to be processed or transformed at all, so that only local * application code is handled and not library code. * * This can be configured by setting the importShim.skip URL regular * expression: * * ```js * importShim.skip = /^https:\/\/cdn\.com/; * ``` * * By default, this expression supports jspm.dev, dev.jspm.io and * cdn.pika.dev. */ skip?: RegExp | string[] | string /** * #### Error hook * * Register a callback for any ES Module Shims module errors. * */ onerror?: (e: any) => any; /** * #### Polyfill hook * * Register a callback invoked when polyfill mode first engages. * */ onpolyfill?: () => void; /** * #### Resolve Hook * * Only supported in Shim Mode. * * Provide a custom resolver function. */ resolve?: ( id: string, parentUrl: string, resolve: (id: string, parentUrl: string) => string ) => string | Promise; /** * #### Fetch Hook * * Only supported in Shim Mode. * * > Stability: Non-spec feature * * This is provided as a convenience feature since the pipeline handles * the same data URL rewriting and circular handling of the module graph * that applies when trying to implement any module transform system. * * The ES Module Shims fetch hook can be used to implement transform * plugins. * * For example: * * ```js * importShim.fetch = async function (url) { * const response = await fetch(url); * if (response.url.endsWith('.ts')) { * const source = await response.body(); * const transformed = tsCompile(source); * return new Response(new Blob([transformed], { type: 'application/javascript' })); * } * return response; * }; * ``` * * Because the dependency analysis applies by ES Module Shims takes care * of ensuring all dependencies run through the same fetch hook, the above * is all that is needed to implement custom plugins. * * Streaming support is also provided, for example here is a hook with * streaming support for JSON: * * ```js * importShim.fetch = async function (url) { * const response = await fetch(url); * if (!response.ok) * throw new Error(`${response.status} ${response.statusText} ${response.url}`); * const contentType = response.headers.get('content-type'); * if (!/^application\/json($|;)/.test(contentType)) * return response; * const reader = response.body.getReader(); * return new Response(new ReadableStream({ * async start (controller) { * let done, value; * controller.enqueue(new Uint8Array([...'export default '].map(c => c.charCodeAt(0)))); * while (({ done, value } = await reader.read()) && !done) { * controller.enqueue(value); * } * controller.close(); * } * }), { * status: 200, * headers: { * "Content-Type": "application/javascript" * } * }); * } * ``` */ fetch?: (input: RequestInfo, init?: RequestInit) => Promise; /** * #### Revoke Blob URLs * * Set to *true* to cleanup blob URLs from memory after execution. * Can cost some compute time for large loads. * */ revokeBlobURLs?: boolean; /** * #### Map Overrides * * Set to *true* to permit overrides to import maps. * */ mapOverrides?: boolean; /** * #### Meta hook * * Register a callback for import.meta construction. * */ meta?: (meta: any, url: string) => void; /** * #### On import hook * * Register a callback for top-level imports. * */ onimport?: (url: string, options: any, parentUrl: string) => void; } interface ImportMap { imports: Record; scopes: Record>; } /** * Dynamic import(...) within any modules loaded will be rewritten as * importShim(...) automatically providing full support for all es-module-shims * features through dynamic import. * * To load code dynamically (say from the browser console), importShim can be * called similarly: * * ```js * importShim('/path/to/module.js').then(x => console.log(x)); * ``` */ declare function importShim( specifier: string, parentUrl?: string ): Promise<{ default: Default } & Exports>; declare namespace importShim { const resolve: (id: string, parentURL?: string) => string; const addImportMap: (importMap: Partial) => void; const getImportMap: () => ImportMap; } interface Window { esmsInitOptions?: ESMSInitOptions; importShim: typeof importShim; }