@wordpress/asset-loader 1.1.1-next.16d95556a.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.2.0 (2025-11-26)
6
+
5
7
  ## 1.1.0 (2025-11-12)
6
8
 
7
9
  ### New Features
package/build/index.js CHANGED
@@ -23,6 +23,41 @@ __export(index_exports, {
23
23
  default: () => index_default
24
24
  });
25
25
  module.exports = __toCommonJS(index_exports);
26
+ function injectImportMap(scriptModules) {
27
+ if (!scriptModules || Object.keys(scriptModules).length === 0) {
28
+ return;
29
+ }
30
+ const existingMapElement = document.querySelector(
31
+ "script#wp-importmap[type=importmap]"
32
+ );
33
+ if (existingMapElement) {
34
+ try {
35
+ const existingMap = JSON.parse(existingMapElement.text);
36
+ if (!existingMap.imports) {
37
+ existingMap.imports = {};
38
+ }
39
+ existingMap.imports = {
40
+ ...existingMap.imports,
41
+ ...scriptModules
42
+ };
43
+ existingMapElement.text = JSON.stringify(existingMap, null, 2);
44
+ } catch (error) {
45
+ console.error("Failed to parse or update import map:", error);
46
+ }
47
+ } else {
48
+ const script = document.createElement("script");
49
+ script.type = "importmap";
50
+ script.id = "wp-importmap";
51
+ script.text = JSON.stringify(
52
+ {
53
+ imports: scriptModules
54
+ },
55
+ null,
56
+ 2
57
+ );
58
+ document.head.appendChild(script);
59
+ }
60
+ }
26
61
  function loadStylesheet(handle, styleData) {
27
62
  return new Promise((resolve) => {
28
63
  if (!styleData.src) {
@@ -141,7 +176,10 @@ async function performScriptLoad(scriptElements, destination) {
141
176
  await Promise.all(parallel);
142
177
  parallel = [];
143
178
  }
144
- async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles) {
179
+ async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles, htmlTemplates, scriptModules) {
180
+ if (scriptModules) {
181
+ injectImportMap(scriptModules);
182
+ }
145
183
  const orderedStyles = buildDependencyOrderedList(stylesData);
146
184
  const orderedScripts = buildDependencyOrderedList(scriptsData);
147
185
  const stylePromises = [];
@@ -156,11 +194,8 @@ async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles)
156
194
  injectInlineStyle(handle, afterInline, "after");
157
195
  }
158
196
  }
159
- const scriptElementsHead = [];
160
- const scriptElementsBody = [];
197
+ const scriptElements = [];
161
198
  for (const handle of orderedScripts) {
162
- const inFooter = scriptsData[handle].in_footer || false;
163
- const scriptElements = inFooter ? scriptElementsBody : scriptElementsHead;
164
199
  const beforeInline = inlineScripts.before?.[handle];
165
200
  if (beforeInline) {
166
201
  scriptElements.push(
@@ -175,11 +210,30 @@ async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles)
175
210
  );
176
211
  }
177
212
  }
178
- const scriptsPromise = (async () => {
179
- await performScriptLoad(scriptElementsHead, document.head);
180
- await performScriptLoad(scriptElementsBody, document.body);
181
- })();
213
+ const scriptsPromise = performScriptLoad(scriptElements, document.body);
182
214
  await Promise.all([Promise.all(stylePromises), scriptsPromise]);
215
+ if (htmlTemplates && htmlTemplates.length > 0) {
216
+ htmlTemplates.forEach((templateHtml) => {
217
+ const scriptMatch = templateHtml.match(
218
+ /<script([^>]*)>(.*?)<\/script>/is
219
+ );
220
+ if (scriptMatch) {
221
+ const attributes = scriptMatch[1];
222
+ const content = scriptMatch[2];
223
+ const script = document.createElement("script");
224
+ const idMatch = attributes.match(/id=["']([^"']+)["']/);
225
+ if (idMatch) {
226
+ script.id = idMatch[1];
227
+ }
228
+ const typeMatch = attributes.match(/type=["']([^"']+)["']/);
229
+ if (typeMatch) {
230
+ script.type = typeMatch[1];
231
+ }
232
+ script.textContent = content;
233
+ document.body.appendChild(script);
234
+ }
235
+ });
236
+ }
183
237
  }
184
238
  var index_default = loadAssets;
185
239
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["type Style = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tmedia?: string;\n};\n\ntype InlineStyle = string | string[];\n\ntype Script = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tin_footer?: boolean;\n};\n\ntype InlineScript = string | string[];\n\nfunction loadStylesheet( handle: string, styleData: Style ): Promise< void > {\n\treturn new Promise( ( resolve ) => {\n\t\tif ( ! styleData.src ) {\n\t\t\tresolve(); // No external file to load\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingLink = document.getElementById( handle + '-css' );\n\t\tif ( existingLink ) {\n\t\t\tresolve(); // Already loaded\n\t\t\treturn;\n\t\t}\n\n\t\tconst link = document.createElement( 'link' );\n\t\tlink.rel = 'stylesheet';\n\t\tlink.href =\n\t\t\tstyleData.src +\n\t\t\t( styleData.version ? '?ver=' + styleData.version : '' );\n\t\tlink.id = handle + '-css';\n\t\tlink.media = styleData.media || 'all';\n\n\t\tlink.onload = () => resolve();\n\t\tlink.onerror = () => {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( `Failed to load stylesheet: ${ handle }` );\n\t\t\tresolve();\n\t\t};\n\n\t\tdocument.head.appendChild( link );\n\t} );\n}\n\nfunction loadScript( handle: string, scriptData: Script ): HTMLScriptElement {\n\t// If no external script source, just mark as processed and resolve\n\tif ( ! scriptData.src ) {\n\t\t// Still mark as processed with an ID so we don't repeat processing\n\t\tconst marker = document.createElement( 'script' );\n\t\tmarker.id = handle + '-js';\n\t\tmarker.textContent = '// Processed: ' + handle;\n\t\treturn marker;\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.src =\n\t\tscriptData.src +\n\t\t( scriptData.version ? '?ver=' + scriptData.version : '' );\n\tscript.id = handle + '-js';\n\tscript.async = false;\n\n\treturn script;\n}\n\n// Function to inject inline styles\nfunction injectInlineStyle(\n\thandle: string,\n\tinlineStyle: InlineStyle,\n\tposition: 'before' | 'after'\n) {\n\t// Handle both string and array formats\n\tlet styleContent = '';\n\tif ( Array.isArray( inlineStyle ) ) {\n\t\tstyleContent = inlineStyle.join( '\\n' );\n\t} else if ( typeof inlineStyle === 'string' ) {\n\t\tstyleContent = inlineStyle;\n\t}\n\n\tif ( styleContent && styleContent.trim() ) {\n\t\tconst styleId = handle + '-' + position + '-inline-css';\n\t\tif ( ! document.getElementById( styleId ) ) {\n\t\t\tconst style = document.createElement( 'style' );\n\t\t\tstyle.id = styleId;\n\t\t\tstyle.textContent = styleContent.trim();\n\t\t\tdocument.head.appendChild( style );\n\t\t}\n\t}\n}\n\nfunction injectInlineScript(\n\thandle: string,\n\tinlineScript: InlineScript,\n\tposition: 'before' | 'after'\n): HTMLScriptElement {\n\tlet scriptContent = inlineScript;\n\tif ( Array.isArray( scriptContent ) ) {\n\t\tscriptContent = scriptContent.join( '\\n' );\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.id = handle + '-' + position + '-js';\n\tscript.textContent = scriptContent.trim();\n\n\treturn script;\n}\n\n// Function to create dependency-ordered list respecting WordPress dependency graph\nfunction buildDependencyOrderedList< T extends Style | Script >(\n\tassetsData: Record< string, T >\n) {\n\tconst visited = new Set();\n\tconst visiting = new Set();\n\tconst orderedList: string[] = [];\n\n\tfunction visit( handle: string ) {\n\t\tif ( visited.has( handle ) ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( visiting.has( handle ) ) {\n\t\t\t// Circular dependency detected, skip to avoid infinite loop\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t`Circular dependency detected for handle: ${ handle }`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tvisiting.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\t// Visit all dependencies first\n\t\t\tconst deps = assetsData[ handle ].deps || [];\n\t\t\tdeps.forEach( ( dep ) => {\n\t\t\t\tif ( assetsData[ dep ] ) {\n\t\t\t\t\tvisit( dep );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tvisiting.delete( handle );\n\t\tvisited.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\torderedList.push( handle );\n\t\t}\n\t}\n\n\t// Visit all handles\n\tObject.keys( assetsData ).forEach( ( handle ) => {\n\t\tvisit( handle );\n\t} );\n\n\treturn orderedList;\n}\n\nasync function performScriptLoad(\n\tscriptElements: HTMLScriptElement[],\n\tdestination: HTMLElement\n) {\n\tlet parallel = [];\n\tfor ( const scriptElement of scriptElements ) {\n\t\tif ( scriptElement.src ) {\n\t\t\t// External scripts can be loaded in parallel. They will be executed in DOM order\n\t\t\t// because the `script` tags have an `async = false` attribute. Therefore cross-script\n\t\t\t// dependencies are guaranteed to be satisfied.\n\t\t\tconst loader = Promise.withResolvers< void >();\n\t\t\tscriptElement.onload = () => loader.resolve();\n\t\t\tscriptElement.onerror = () => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( `Failed to load script: ${ scriptElement.id }` );\n\t\t\t\tloader.resolve();\n\t\t\t};\n\t\t\tparallel.push( loader.promise );\n\t\t} else {\n\t\t\t// We've encountered an inline script. Inline scripts are executed immediately after\n\t\t\t// inserting them to the DOM. Therefore we need to wait for all external scripts to load.\n\t\t\tawait Promise.all( parallel );\n\t\t\tparallel = [];\n\t\t}\n\t\t// Append the `script` element (external or inline) to the DOM and trigger the load.\n\t\tdestination.appendChild( scriptElement );\n\t}\n\t// Wait for all the remainingexternal scripts to load.\n\tawait Promise.all( parallel );\n\tparallel = [];\n}\n\n// Main async function to load all assets and return editor settings\nasync function loadAssets(\n\tscriptsData: Record< string, Script >,\n\tinlineScripts: Record< 'before' | 'after', Record< string, InlineScript > >,\n\tstylesData: Record< string, Style >,\n\tinlineStyles: Record< 'before' | 'after', Record< string, InlineStyle > >\n): Promise< void > {\n\t// Build dependency-ordered lists\n\tconst orderedStyles = buildDependencyOrderedList( stylesData );\n\tconst orderedScripts = buildDependencyOrderedList( scriptsData );\n\n\tconst stylePromises: Promise< void >[] = [];\n\n\t// Load stylesheets in dependency order\n\tfor ( const handle of orderedStyles ) {\n\t\tconst beforeInline = inlineStyles.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tinjectInlineStyle( handle, beforeInline, 'before' );\n\t\t}\n\t\tstylePromises.push( loadStylesheet( handle, stylesData[ handle ] ) );\n\t\tconst afterInline = inlineStyles.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tinjectInlineStyle( handle, afterInline, 'after' );\n\t\t}\n\t}\n\n\t// Load scripts in dependency order\n\tconst scriptElementsHead: HTMLScriptElement[] = [];\n\tconst scriptElementsBody: HTMLScriptElement[] = [];\n\n\tfor ( const handle of orderedScripts ) {\n\t\tconst inFooter = scriptsData[ handle ].in_footer || false;\n\t\tconst scriptElements = inFooter\n\t\t\t? scriptElementsBody\n\t\t\t: scriptElementsHead;\n\n\t\tconst beforeInline = inlineScripts.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, beforeInline, 'before' )\n\t\t\t);\n\t\t}\n\n\t\tscriptElements.push( loadScript( handle, scriptsData[ handle ] ) );\n\n\t\tconst afterInline = inlineScripts.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, afterInline, 'after' )\n\t\t\t);\n\t\t}\n\t}\n\n\tconst scriptsPromise = ( async () => {\n\t\tawait performScriptLoad( scriptElementsHead, document.head );\n\t\tawait performScriptLoad( scriptElementsBody, document.body );\n\t} )();\n\n\tawait Promise.all( [ Promise.all( stylePromises ), scriptsPromise ] );\n}\n\nexport default loadAssets;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["type Style = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tmedia?: string;\n};\ntype InlineStyle = string | string[];\ntype Script = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tin_footer?: boolean;\n};\ntype InlineScript = string | string[];\ntype ScriptModules = Record< string, string >;\n\n/**\n * Injects or extends the import map with new module entries.\n *\n * @param scriptModules - Object mapping module specifiers to URLs\n */\nfunction injectImportMap( scriptModules: Record< string, string > ): void {\n\tif ( ! scriptModules || Object.keys( scriptModules ).length === 0 ) {\n\t\treturn;\n\t}\n\n\t// Find the existing import map script element\n\tconst existingMapElement = document.querySelector< HTMLScriptElement >(\n\t\t'script#wp-importmap[type=importmap]'\n\t);\n\n\tif ( existingMapElement ) {\n\t\ttry {\n\t\t\t// Parse the existing import map\n\t\t\tconst existingMap = JSON.parse( existingMapElement.text );\n\n\t\t\t// Ensure the imports object exists\n\t\t\tif ( ! existingMap.imports ) {\n\t\t\t\texistingMap.imports = {};\n\t\t\t}\n\n\t\t\t// Merge new imports with existing ones (new entries take precedence)\n\t\t\texistingMap.imports = {\n\t\t\t\t...existingMap.imports,\n\t\t\t\t...scriptModules,\n\t\t\t};\n\n\t\t\t// Update the script element's content\n\t\t\texistingMapElement.text = JSON.stringify( existingMap, null, 2 );\n\t\t} catch ( error ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( 'Failed to parse or update import map:', error );\n\t\t}\n\t} else {\n\t\t// If no import map exists, create a new one\n\t\tconst script = document.createElement( 'script' );\n\t\tscript.type = 'importmap';\n\t\tscript.id = 'wp-importmap';\n\t\tscript.text = JSON.stringify(\n\t\t\t{\n\t\t\t\timports: scriptModules,\n\t\t\t},\n\t\t\tnull,\n\t\t\t2\n\t\t);\n\t\tdocument.head.appendChild( script );\n\t}\n}\n\nfunction loadStylesheet( handle: string, styleData: Style ): Promise< void > {\n\treturn new Promise( ( resolve ) => {\n\t\tif ( ! styleData.src ) {\n\t\t\tresolve(); // No external file to load\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingLink = document.getElementById( handle + '-css' );\n\t\tif ( existingLink ) {\n\t\t\tresolve(); // Already loaded\n\t\t\treturn;\n\t\t}\n\n\t\tconst link = document.createElement( 'link' );\n\t\tlink.rel = 'stylesheet';\n\t\tlink.href =\n\t\t\tstyleData.src +\n\t\t\t( styleData.version ? '?ver=' + styleData.version : '' );\n\t\tlink.id = handle + '-css';\n\t\tlink.media = styleData.media || 'all';\n\n\t\tlink.onload = () => resolve();\n\t\tlink.onerror = () => {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( `Failed to load stylesheet: ${ handle }` );\n\t\t\tresolve();\n\t\t};\n\n\t\tdocument.head.appendChild( link );\n\t} );\n}\n\nfunction loadScript( handle: string, scriptData: Script ): HTMLScriptElement {\n\t// If no external script source, just mark as processed and resolve\n\tif ( ! scriptData.src ) {\n\t\t// Still mark as processed with an ID so we don't repeat processing\n\t\tconst marker = document.createElement( 'script' );\n\t\tmarker.id = handle + '-js';\n\t\tmarker.textContent = '// Processed: ' + handle;\n\t\treturn marker;\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.src =\n\t\tscriptData.src +\n\t\t( scriptData.version ? '?ver=' + scriptData.version : '' );\n\tscript.id = handle + '-js';\n\tscript.async = false;\n\n\treturn script;\n}\n\n// Function to inject inline styles\nfunction injectInlineStyle(\n\thandle: string,\n\tinlineStyle: InlineStyle,\n\tposition: 'before' | 'after'\n) {\n\t// Handle both string and array formats\n\tlet styleContent = '';\n\tif ( Array.isArray( inlineStyle ) ) {\n\t\tstyleContent = inlineStyle.join( '\\n' );\n\t} else if ( typeof inlineStyle === 'string' ) {\n\t\tstyleContent = inlineStyle;\n\t}\n\n\tif ( styleContent && styleContent.trim() ) {\n\t\tconst styleId = handle + '-' + position + '-inline-css';\n\t\tif ( ! document.getElementById( styleId ) ) {\n\t\t\tconst style = document.createElement( 'style' );\n\t\t\tstyle.id = styleId;\n\t\t\tstyle.textContent = styleContent.trim();\n\t\t\tdocument.head.appendChild( style );\n\t\t}\n\t}\n}\n\nfunction injectInlineScript(\n\thandle: string,\n\tinlineScript: InlineScript,\n\tposition: 'before' | 'after'\n): HTMLScriptElement {\n\tlet scriptContent = inlineScript;\n\tif ( Array.isArray( scriptContent ) ) {\n\t\tscriptContent = scriptContent.join( '\\n' );\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.id = handle + '-' + position + '-js';\n\tscript.textContent = scriptContent.trim();\n\n\treturn script;\n}\n\n// Function to create dependency-ordered list respecting WordPress dependency graph\nfunction buildDependencyOrderedList< T extends Style | Script >(\n\tassetsData: Record< string, T >\n) {\n\tconst visited = new Set();\n\tconst visiting = new Set();\n\tconst orderedList: string[] = [];\n\n\tfunction visit( handle: string ) {\n\t\tif ( visited.has( handle ) ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( visiting.has( handle ) ) {\n\t\t\t// Circular dependency detected, skip to avoid infinite loop\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t`Circular dependency detected for handle: ${ handle }`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tvisiting.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\t// Visit all dependencies first\n\t\t\tconst deps = assetsData[ handle ].deps || [];\n\t\t\tdeps.forEach( ( dep ) => {\n\t\t\t\tif ( assetsData[ dep ] ) {\n\t\t\t\t\tvisit( dep );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tvisiting.delete( handle );\n\t\tvisited.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\torderedList.push( handle );\n\t\t}\n\t}\n\n\t// Visit all handles\n\tObject.keys( assetsData ).forEach( ( handle ) => {\n\t\tvisit( handle );\n\t} );\n\n\treturn orderedList;\n}\n\nasync function performScriptLoad(\n\tscriptElements: HTMLScriptElement[],\n\tdestination: HTMLElement\n) {\n\tlet parallel = [];\n\tfor ( const scriptElement of scriptElements ) {\n\t\tif ( scriptElement.src ) {\n\t\t\t// External scripts can be loaded in parallel. They will be executed in DOM order\n\t\t\t// because the `script` tags have an `async = false` attribute. Therefore cross-script\n\t\t\t// dependencies are guaranteed to be satisfied.\n\t\t\tconst loader = Promise.withResolvers< void >();\n\t\t\tscriptElement.onload = () => loader.resolve();\n\t\t\tscriptElement.onerror = () => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( `Failed to load script: ${ scriptElement.id }` );\n\t\t\t\tloader.resolve();\n\t\t\t};\n\t\t\tparallel.push( loader.promise );\n\t\t} else {\n\t\t\t// We've encountered an inline script. Inline scripts are executed immediately after\n\t\t\t// inserting them to the DOM. Therefore we need to wait for all external scripts to load.\n\t\t\tawait Promise.all( parallel );\n\t\t\tparallel = [];\n\t\t}\n\t\t// Append the `script` element (external or inline) to the DOM and trigger the load.\n\t\tdestination.appendChild( scriptElement );\n\t}\n\t// Wait for all the remainingexternal scripts to load.\n\tawait Promise.all( parallel );\n\tparallel = [];\n}\n\n// Main async function to load all assets and return editor settings\nasync function loadAssets(\n\tscriptsData: Record< string, Script >,\n\tinlineScripts: Record< 'before' | 'after', Record< string, InlineScript > >,\n\tstylesData: Record< string, Style >,\n\tinlineStyles: Record< 'before' | 'after', Record< string, InlineStyle > >,\n\thtmlTemplates?: string[],\n\tscriptModules?: ScriptModules\n): Promise< void > {\n\t// Inject import map first so script modules can be resolved\n\tif ( scriptModules ) {\n\t\tinjectImportMap( scriptModules );\n\t}\n\n\t// Build dependency-ordered lists\n\tconst orderedStyles = buildDependencyOrderedList( stylesData );\n\tconst orderedScripts = buildDependencyOrderedList( scriptsData );\n\n\tconst stylePromises: Promise< void >[] = [];\n\n\t// Load stylesheets in dependency order\n\tfor ( const handle of orderedStyles ) {\n\t\tconst beforeInline = inlineStyles.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tinjectInlineStyle( handle, beforeInline, 'before' );\n\t\t}\n\t\tstylePromises.push( loadStylesheet( handle, stylesData[ handle ] ) );\n\t\tconst afterInline = inlineStyles.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tinjectInlineStyle( handle, afterInline, 'after' );\n\t\t}\n\t}\n\n\t// Load scripts in dependency order\n\tconst scriptElements: HTMLScriptElement[] = [];\n\n\tfor ( const handle of orderedScripts ) {\n\t\tconst beforeInline = inlineScripts.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, beforeInline, 'before' )\n\t\t\t);\n\t\t}\n\n\t\tscriptElements.push( loadScript( handle, scriptsData[ handle ] ) );\n\n\t\tconst afterInline = inlineScripts.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, afterInline, 'after' )\n\t\t\t);\n\t\t}\n\t}\n\n\tconst scriptsPromise = performScriptLoad( scriptElements, document.body );\n\n\tawait Promise.all( [ Promise.all( stylePromises ), scriptsPromise ] );\n\n\t// Inject HTML templates (e.g., wp.media templates) into the DOM\n\t// Note: We can't use innerHTML for script tags, so we need to parse and create elements properly\n\tif ( htmlTemplates && htmlTemplates.length > 0 ) {\n\t\thtmlTemplates.forEach( ( templateHtml ) => {\n\t\t\t// Extract the script tag attributes and content\n\t\t\tconst scriptMatch = templateHtml.match(\n\t\t\t\t/<script([^>]*)>(.*?)<\\/script>/is\n\t\t\t);\n\t\t\tif ( scriptMatch ) {\n\t\t\t\tconst attributes = scriptMatch[ 1 ];\n\t\t\t\tconst content = scriptMatch[ 2 ];\n\n\t\t\t\t// Create a new script element\n\t\t\t\tconst script = document.createElement( 'script' );\n\n\t\t\t\t// Extract and set the id attribute\n\t\t\t\tconst idMatch = attributes.match( /id=[\"']([^\"']+)[\"']/ );\n\t\t\t\tif ( idMatch ) {\n\t\t\t\t\tscript.id = idMatch[ 1 ];\n\t\t\t\t}\n\n\t\t\t\t// Extract and set the type attribute\n\t\t\t\tconst typeMatch = attributes.match( /type=[\"']([^\"']+)[\"']/ );\n\t\t\t\tif ( typeMatch ) {\n\t\t\t\t\tscript.type = typeMatch[ 1 ];\n\t\t\t\t}\n\n\t\t\t\t// Set the content\n\t\t\t\tscript.textContent = content;\n\n\t\t\t\t// Append to body\n\t\t\t\tdocument.body.appendChild( script );\n\t\t\t}\n\t\t} );\n\t}\n}\n\nexport default loadAssets;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,39 @@
1
1
  // packages/asset-loader/src/index.ts
2
+ function injectImportMap(scriptModules) {
3
+ if (!scriptModules || Object.keys(scriptModules).length === 0) {
4
+ return;
5
+ }
6
+ const existingMapElement = document.querySelector(
7
+ "script#wp-importmap[type=importmap]"
8
+ );
9
+ if (existingMapElement) {
10
+ try {
11
+ const existingMap = JSON.parse(existingMapElement.text);
12
+ if (!existingMap.imports) {
13
+ existingMap.imports = {};
14
+ }
15
+ existingMap.imports = {
16
+ ...existingMap.imports,
17
+ ...scriptModules
18
+ };
19
+ existingMapElement.text = JSON.stringify(existingMap, null, 2);
20
+ } catch (error) {
21
+ console.error("Failed to parse or update import map:", error);
22
+ }
23
+ } else {
24
+ const script = document.createElement("script");
25
+ script.type = "importmap";
26
+ script.id = "wp-importmap";
27
+ script.text = JSON.stringify(
28
+ {
29
+ imports: scriptModules
30
+ },
31
+ null,
32
+ 2
33
+ );
34
+ document.head.appendChild(script);
35
+ }
36
+ }
2
37
  function loadStylesheet(handle, styleData) {
3
38
  return new Promise((resolve) => {
4
39
  if (!styleData.src) {
@@ -117,7 +152,10 @@ async function performScriptLoad(scriptElements, destination) {
117
152
  await Promise.all(parallel);
118
153
  parallel = [];
119
154
  }
120
- async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles) {
155
+ async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles, htmlTemplates, scriptModules) {
156
+ if (scriptModules) {
157
+ injectImportMap(scriptModules);
158
+ }
121
159
  const orderedStyles = buildDependencyOrderedList(stylesData);
122
160
  const orderedScripts = buildDependencyOrderedList(scriptsData);
123
161
  const stylePromises = [];
@@ -132,11 +170,8 @@ async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles)
132
170
  injectInlineStyle(handle, afterInline, "after");
133
171
  }
134
172
  }
135
- const scriptElementsHead = [];
136
- const scriptElementsBody = [];
173
+ const scriptElements = [];
137
174
  for (const handle of orderedScripts) {
138
- const inFooter = scriptsData[handle].in_footer || false;
139
- const scriptElements = inFooter ? scriptElementsBody : scriptElementsHead;
140
175
  const beforeInline = inlineScripts.before?.[handle];
141
176
  if (beforeInline) {
142
177
  scriptElements.push(
@@ -151,11 +186,30 @@ async function loadAssets(scriptsData, inlineScripts, stylesData, inlineStyles)
151
186
  );
152
187
  }
153
188
  }
154
- const scriptsPromise = (async () => {
155
- await performScriptLoad(scriptElementsHead, document.head);
156
- await performScriptLoad(scriptElementsBody, document.body);
157
- })();
189
+ const scriptsPromise = performScriptLoad(scriptElements, document.body);
158
190
  await Promise.all([Promise.all(stylePromises), scriptsPromise]);
191
+ if (htmlTemplates && htmlTemplates.length > 0) {
192
+ htmlTemplates.forEach((templateHtml) => {
193
+ const scriptMatch = templateHtml.match(
194
+ /<script([^>]*)>(.*?)<\/script>/is
195
+ );
196
+ if (scriptMatch) {
197
+ const attributes = scriptMatch[1];
198
+ const content = scriptMatch[2];
199
+ const script = document.createElement("script");
200
+ const idMatch = attributes.match(/id=["']([^"']+)["']/);
201
+ if (idMatch) {
202
+ script.id = idMatch[1];
203
+ }
204
+ const typeMatch = attributes.match(/type=["']([^"']+)["']/);
205
+ if (typeMatch) {
206
+ script.type = typeMatch[1];
207
+ }
208
+ script.textContent = content;
209
+ document.body.appendChild(script);
210
+ }
211
+ });
212
+ }
159
213
  }
160
214
  var index_default = loadAssets;
161
215
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["type Style = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tmedia?: string;\n};\n\ntype InlineStyle = string | string[];\n\ntype Script = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tin_footer?: boolean;\n};\n\ntype InlineScript = string | string[];\n\nfunction loadStylesheet( handle: string, styleData: Style ): Promise< void > {\n\treturn new Promise( ( resolve ) => {\n\t\tif ( ! styleData.src ) {\n\t\t\tresolve(); // No external file to load\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingLink = document.getElementById( handle + '-css' );\n\t\tif ( existingLink ) {\n\t\t\tresolve(); // Already loaded\n\t\t\treturn;\n\t\t}\n\n\t\tconst link = document.createElement( 'link' );\n\t\tlink.rel = 'stylesheet';\n\t\tlink.href =\n\t\t\tstyleData.src +\n\t\t\t( styleData.version ? '?ver=' + styleData.version : '' );\n\t\tlink.id = handle + '-css';\n\t\tlink.media = styleData.media || 'all';\n\n\t\tlink.onload = () => resolve();\n\t\tlink.onerror = () => {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( `Failed to load stylesheet: ${ handle }` );\n\t\t\tresolve();\n\t\t};\n\n\t\tdocument.head.appendChild( link );\n\t} );\n}\n\nfunction loadScript( handle: string, scriptData: Script ): HTMLScriptElement {\n\t// If no external script source, just mark as processed and resolve\n\tif ( ! scriptData.src ) {\n\t\t// Still mark as processed with an ID so we don't repeat processing\n\t\tconst marker = document.createElement( 'script' );\n\t\tmarker.id = handle + '-js';\n\t\tmarker.textContent = '// Processed: ' + handle;\n\t\treturn marker;\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.src =\n\t\tscriptData.src +\n\t\t( scriptData.version ? '?ver=' + scriptData.version : '' );\n\tscript.id = handle + '-js';\n\tscript.async = false;\n\n\treturn script;\n}\n\n// Function to inject inline styles\nfunction injectInlineStyle(\n\thandle: string,\n\tinlineStyle: InlineStyle,\n\tposition: 'before' | 'after'\n) {\n\t// Handle both string and array formats\n\tlet styleContent = '';\n\tif ( Array.isArray( inlineStyle ) ) {\n\t\tstyleContent = inlineStyle.join( '\\n' );\n\t} else if ( typeof inlineStyle === 'string' ) {\n\t\tstyleContent = inlineStyle;\n\t}\n\n\tif ( styleContent && styleContent.trim() ) {\n\t\tconst styleId = handle + '-' + position + '-inline-css';\n\t\tif ( ! document.getElementById( styleId ) ) {\n\t\t\tconst style = document.createElement( 'style' );\n\t\t\tstyle.id = styleId;\n\t\t\tstyle.textContent = styleContent.trim();\n\t\t\tdocument.head.appendChild( style );\n\t\t}\n\t}\n}\n\nfunction injectInlineScript(\n\thandle: string,\n\tinlineScript: InlineScript,\n\tposition: 'before' | 'after'\n): HTMLScriptElement {\n\tlet scriptContent = inlineScript;\n\tif ( Array.isArray( scriptContent ) ) {\n\t\tscriptContent = scriptContent.join( '\\n' );\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.id = handle + '-' + position + '-js';\n\tscript.textContent = scriptContent.trim();\n\n\treturn script;\n}\n\n// Function to create dependency-ordered list respecting WordPress dependency graph\nfunction buildDependencyOrderedList< T extends Style | Script >(\n\tassetsData: Record< string, T >\n) {\n\tconst visited = new Set();\n\tconst visiting = new Set();\n\tconst orderedList: string[] = [];\n\n\tfunction visit( handle: string ) {\n\t\tif ( visited.has( handle ) ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( visiting.has( handle ) ) {\n\t\t\t// Circular dependency detected, skip to avoid infinite loop\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t`Circular dependency detected for handle: ${ handle }`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tvisiting.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\t// Visit all dependencies first\n\t\t\tconst deps = assetsData[ handle ].deps || [];\n\t\t\tdeps.forEach( ( dep ) => {\n\t\t\t\tif ( assetsData[ dep ] ) {\n\t\t\t\t\tvisit( dep );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tvisiting.delete( handle );\n\t\tvisited.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\torderedList.push( handle );\n\t\t}\n\t}\n\n\t// Visit all handles\n\tObject.keys( assetsData ).forEach( ( handle ) => {\n\t\tvisit( handle );\n\t} );\n\n\treturn orderedList;\n}\n\nasync function performScriptLoad(\n\tscriptElements: HTMLScriptElement[],\n\tdestination: HTMLElement\n) {\n\tlet parallel = [];\n\tfor ( const scriptElement of scriptElements ) {\n\t\tif ( scriptElement.src ) {\n\t\t\t// External scripts can be loaded in parallel. They will be executed in DOM order\n\t\t\t// because the `script` tags have an `async = false` attribute. Therefore cross-script\n\t\t\t// dependencies are guaranteed to be satisfied.\n\t\t\tconst loader = Promise.withResolvers< void >();\n\t\t\tscriptElement.onload = () => loader.resolve();\n\t\t\tscriptElement.onerror = () => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( `Failed to load script: ${ scriptElement.id }` );\n\t\t\t\tloader.resolve();\n\t\t\t};\n\t\t\tparallel.push( loader.promise );\n\t\t} else {\n\t\t\t// We've encountered an inline script. Inline scripts are executed immediately after\n\t\t\t// inserting them to the DOM. Therefore we need to wait for all external scripts to load.\n\t\t\tawait Promise.all( parallel );\n\t\t\tparallel = [];\n\t\t}\n\t\t// Append the `script` element (external or inline) to the DOM and trigger the load.\n\t\tdestination.appendChild( scriptElement );\n\t}\n\t// Wait for all the remainingexternal scripts to load.\n\tawait Promise.all( parallel );\n\tparallel = [];\n}\n\n// Main async function to load all assets and return editor settings\nasync function loadAssets(\n\tscriptsData: Record< string, Script >,\n\tinlineScripts: Record< 'before' | 'after', Record< string, InlineScript > >,\n\tstylesData: Record< string, Style >,\n\tinlineStyles: Record< 'before' | 'after', Record< string, InlineStyle > >\n): Promise< void > {\n\t// Build dependency-ordered lists\n\tconst orderedStyles = buildDependencyOrderedList( stylesData );\n\tconst orderedScripts = buildDependencyOrderedList( scriptsData );\n\n\tconst stylePromises: Promise< void >[] = [];\n\n\t// Load stylesheets in dependency order\n\tfor ( const handle of orderedStyles ) {\n\t\tconst beforeInline = inlineStyles.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tinjectInlineStyle( handle, beforeInline, 'before' );\n\t\t}\n\t\tstylePromises.push( loadStylesheet( handle, stylesData[ handle ] ) );\n\t\tconst afterInline = inlineStyles.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tinjectInlineStyle( handle, afterInline, 'after' );\n\t\t}\n\t}\n\n\t// Load scripts in dependency order\n\tconst scriptElementsHead: HTMLScriptElement[] = [];\n\tconst scriptElementsBody: HTMLScriptElement[] = [];\n\n\tfor ( const handle of orderedScripts ) {\n\t\tconst inFooter = scriptsData[ handle ].in_footer || false;\n\t\tconst scriptElements = inFooter\n\t\t\t? scriptElementsBody\n\t\t\t: scriptElementsHead;\n\n\t\tconst beforeInline = inlineScripts.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, beforeInline, 'before' )\n\t\t\t);\n\t\t}\n\n\t\tscriptElements.push( loadScript( handle, scriptsData[ handle ] ) );\n\n\t\tconst afterInline = inlineScripts.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, afterInline, 'after' )\n\t\t\t);\n\t\t}\n\t}\n\n\tconst scriptsPromise = ( async () => {\n\t\tawait performScriptLoad( scriptElementsHead, document.head );\n\t\tawait performScriptLoad( scriptElementsBody, document.body );\n\t} )();\n\n\tawait Promise.all( [ Promise.all( stylePromises ), scriptsPromise ] );\n}\n\nexport default loadAssets;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["type Style = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tmedia?: string;\n};\ntype InlineStyle = string | string[];\ntype Script = {\n\tsrc: string;\n\tdeps?: string[];\n\tversion?: string;\n\tin_footer?: boolean;\n};\ntype InlineScript = string | string[];\ntype ScriptModules = Record< string, string >;\n\n/**\n * Injects or extends the import map with new module entries.\n *\n * @param scriptModules - Object mapping module specifiers to URLs\n */\nfunction injectImportMap( scriptModules: Record< string, string > ): void {\n\tif ( ! scriptModules || Object.keys( scriptModules ).length === 0 ) {\n\t\treturn;\n\t}\n\n\t// Find the existing import map script element\n\tconst existingMapElement = document.querySelector< HTMLScriptElement >(\n\t\t'script#wp-importmap[type=importmap]'\n\t);\n\n\tif ( existingMapElement ) {\n\t\ttry {\n\t\t\t// Parse the existing import map\n\t\t\tconst existingMap = JSON.parse( existingMapElement.text );\n\n\t\t\t// Ensure the imports object exists\n\t\t\tif ( ! existingMap.imports ) {\n\t\t\t\texistingMap.imports = {};\n\t\t\t}\n\n\t\t\t// Merge new imports with existing ones (new entries take precedence)\n\t\t\texistingMap.imports = {\n\t\t\t\t...existingMap.imports,\n\t\t\t\t...scriptModules,\n\t\t\t};\n\n\t\t\t// Update the script element's content\n\t\t\texistingMapElement.text = JSON.stringify( existingMap, null, 2 );\n\t\t} catch ( error ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( 'Failed to parse or update import map:', error );\n\t\t}\n\t} else {\n\t\t// If no import map exists, create a new one\n\t\tconst script = document.createElement( 'script' );\n\t\tscript.type = 'importmap';\n\t\tscript.id = 'wp-importmap';\n\t\tscript.text = JSON.stringify(\n\t\t\t{\n\t\t\t\timports: scriptModules,\n\t\t\t},\n\t\t\tnull,\n\t\t\t2\n\t\t);\n\t\tdocument.head.appendChild( script );\n\t}\n}\n\nfunction loadStylesheet( handle: string, styleData: Style ): Promise< void > {\n\treturn new Promise( ( resolve ) => {\n\t\tif ( ! styleData.src ) {\n\t\t\tresolve(); // No external file to load\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingLink = document.getElementById( handle + '-css' );\n\t\tif ( existingLink ) {\n\t\t\tresolve(); // Already loaded\n\t\t\treturn;\n\t\t}\n\n\t\tconst link = document.createElement( 'link' );\n\t\tlink.rel = 'stylesheet';\n\t\tlink.href =\n\t\t\tstyleData.src +\n\t\t\t( styleData.version ? '?ver=' + styleData.version : '' );\n\t\tlink.id = handle + '-css';\n\t\tlink.media = styleData.media || 'all';\n\n\t\tlink.onload = () => resolve();\n\t\tlink.onerror = () => {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( `Failed to load stylesheet: ${ handle }` );\n\t\t\tresolve();\n\t\t};\n\n\t\tdocument.head.appendChild( link );\n\t} );\n}\n\nfunction loadScript( handle: string, scriptData: Script ): HTMLScriptElement {\n\t// If no external script source, just mark as processed and resolve\n\tif ( ! scriptData.src ) {\n\t\t// Still mark as processed with an ID so we don't repeat processing\n\t\tconst marker = document.createElement( 'script' );\n\t\tmarker.id = handle + '-js';\n\t\tmarker.textContent = '// Processed: ' + handle;\n\t\treturn marker;\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.src =\n\t\tscriptData.src +\n\t\t( scriptData.version ? '?ver=' + scriptData.version : '' );\n\tscript.id = handle + '-js';\n\tscript.async = false;\n\n\treturn script;\n}\n\n// Function to inject inline styles\nfunction injectInlineStyle(\n\thandle: string,\n\tinlineStyle: InlineStyle,\n\tposition: 'before' | 'after'\n) {\n\t// Handle both string and array formats\n\tlet styleContent = '';\n\tif ( Array.isArray( inlineStyle ) ) {\n\t\tstyleContent = inlineStyle.join( '\\n' );\n\t} else if ( typeof inlineStyle === 'string' ) {\n\t\tstyleContent = inlineStyle;\n\t}\n\n\tif ( styleContent && styleContent.trim() ) {\n\t\tconst styleId = handle + '-' + position + '-inline-css';\n\t\tif ( ! document.getElementById( styleId ) ) {\n\t\t\tconst style = document.createElement( 'style' );\n\t\t\tstyle.id = styleId;\n\t\t\tstyle.textContent = styleContent.trim();\n\t\t\tdocument.head.appendChild( style );\n\t\t}\n\t}\n}\n\nfunction injectInlineScript(\n\thandle: string,\n\tinlineScript: InlineScript,\n\tposition: 'before' | 'after'\n): HTMLScriptElement {\n\tlet scriptContent = inlineScript;\n\tif ( Array.isArray( scriptContent ) ) {\n\t\tscriptContent = scriptContent.join( '\\n' );\n\t}\n\n\tconst script = document.createElement( 'script' );\n\tscript.id = handle + '-' + position + '-js';\n\tscript.textContent = scriptContent.trim();\n\n\treturn script;\n}\n\n// Function to create dependency-ordered list respecting WordPress dependency graph\nfunction buildDependencyOrderedList< T extends Style | Script >(\n\tassetsData: Record< string, T >\n) {\n\tconst visited = new Set();\n\tconst visiting = new Set();\n\tconst orderedList: string[] = [];\n\n\tfunction visit( handle: string ) {\n\t\tif ( visited.has( handle ) ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( visiting.has( handle ) ) {\n\t\t\t// Circular dependency detected, skip to avoid infinite loop\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t`Circular dependency detected for handle: ${ handle }`\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tvisiting.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\t// Visit all dependencies first\n\t\t\tconst deps = assetsData[ handle ].deps || [];\n\t\t\tdeps.forEach( ( dep ) => {\n\t\t\t\tif ( assetsData[ dep ] ) {\n\t\t\t\t\tvisit( dep );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tvisiting.delete( handle );\n\t\tvisited.add( handle );\n\n\t\tif ( assetsData[ handle ] ) {\n\t\t\torderedList.push( handle );\n\t\t}\n\t}\n\n\t// Visit all handles\n\tObject.keys( assetsData ).forEach( ( handle ) => {\n\t\tvisit( handle );\n\t} );\n\n\treturn orderedList;\n}\n\nasync function performScriptLoad(\n\tscriptElements: HTMLScriptElement[],\n\tdestination: HTMLElement\n) {\n\tlet parallel = [];\n\tfor ( const scriptElement of scriptElements ) {\n\t\tif ( scriptElement.src ) {\n\t\t\t// External scripts can be loaded in parallel. They will be executed in DOM order\n\t\t\t// because the `script` tags have an `async = false` attribute. Therefore cross-script\n\t\t\t// dependencies are guaranteed to be satisfied.\n\t\t\tconst loader = Promise.withResolvers< void >();\n\t\t\tscriptElement.onload = () => loader.resolve();\n\t\t\tscriptElement.onerror = () => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( `Failed to load script: ${ scriptElement.id }` );\n\t\t\t\tloader.resolve();\n\t\t\t};\n\t\t\tparallel.push( loader.promise );\n\t\t} else {\n\t\t\t// We've encountered an inline script. Inline scripts are executed immediately after\n\t\t\t// inserting them to the DOM. Therefore we need to wait for all external scripts to load.\n\t\t\tawait Promise.all( parallel );\n\t\t\tparallel = [];\n\t\t}\n\t\t// Append the `script` element (external or inline) to the DOM and trigger the load.\n\t\tdestination.appendChild( scriptElement );\n\t}\n\t// Wait for all the remainingexternal scripts to load.\n\tawait Promise.all( parallel );\n\tparallel = [];\n}\n\n// Main async function to load all assets and return editor settings\nasync function loadAssets(\n\tscriptsData: Record< string, Script >,\n\tinlineScripts: Record< 'before' | 'after', Record< string, InlineScript > >,\n\tstylesData: Record< string, Style >,\n\tinlineStyles: Record< 'before' | 'after', Record< string, InlineStyle > >,\n\thtmlTemplates?: string[],\n\tscriptModules?: ScriptModules\n): Promise< void > {\n\t// Inject import map first so script modules can be resolved\n\tif ( scriptModules ) {\n\t\tinjectImportMap( scriptModules );\n\t}\n\n\t// Build dependency-ordered lists\n\tconst orderedStyles = buildDependencyOrderedList( stylesData );\n\tconst orderedScripts = buildDependencyOrderedList( scriptsData );\n\n\tconst stylePromises: Promise< void >[] = [];\n\n\t// Load stylesheets in dependency order\n\tfor ( const handle of orderedStyles ) {\n\t\tconst beforeInline = inlineStyles.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tinjectInlineStyle( handle, beforeInline, 'before' );\n\t\t}\n\t\tstylePromises.push( loadStylesheet( handle, stylesData[ handle ] ) );\n\t\tconst afterInline = inlineStyles.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tinjectInlineStyle( handle, afterInline, 'after' );\n\t\t}\n\t}\n\n\t// Load scripts in dependency order\n\tconst scriptElements: HTMLScriptElement[] = [];\n\n\tfor ( const handle of orderedScripts ) {\n\t\tconst beforeInline = inlineScripts.before?.[ handle ];\n\t\tif ( beforeInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, beforeInline, 'before' )\n\t\t\t);\n\t\t}\n\n\t\tscriptElements.push( loadScript( handle, scriptsData[ handle ] ) );\n\n\t\tconst afterInline = inlineScripts.after?.[ handle ];\n\t\tif ( afterInline ) {\n\t\t\tscriptElements.push(\n\t\t\t\tinjectInlineScript( handle, afterInline, 'after' )\n\t\t\t);\n\t\t}\n\t}\n\n\tconst scriptsPromise = performScriptLoad( scriptElements, document.body );\n\n\tawait Promise.all( [ Promise.all( stylePromises ), scriptsPromise ] );\n\n\t// Inject HTML templates (e.g., wp.media templates) into the DOM\n\t// Note: We can't use innerHTML for script tags, so we need to parse and create elements properly\n\tif ( htmlTemplates && htmlTemplates.length > 0 ) {\n\t\thtmlTemplates.forEach( ( templateHtml ) => {\n\t\t\t// Extract the script tag attributes and content\n\t\t\tconst scriptMatch = templateHtml.match(\n\t\t\t\t/<script([^>]*)>(.*?)<\\/script>/is\n\t\t\t);\n\t\t\tif ( scriptMatch ) {\n\t\t\t\tconst attributes = scriptMatch[ 1 ];\n\t\t\t\tconst content = scriptMatch[ 2 ];\n\n\t\t\t\t// Create a new script element\n\t\t\t\tconst script = document.createElement( 'script' );\n\n\t\t\t\t// Extract and set the id attribute\n\t\t\t\tconst idMatch = attributes.match( /id=[\"']([^\"']+)[\"']/ );\n\t\t\t\tif ( idMatch ) {\n\t\t\t\t\tscript.id = idMatch[ 1 ];\n\t\t\t\t}\n\n\t\t\t\t// Extract and set the type attribute\n\t\t\t\tconst typeMatch = attributes.match( /type=[\"']([^\"']+)[\"']/ );\n\t\t\t\tif ( typeMatch ) {\n\t\t\t\t\tscript.type = typeMatch[ 1 ];\n\t\t\t\t}\n\n\t\t\t\t// Set the content\n\t\t\t\tscript.textContent = content;\n\n\t\t\t\t// Append to body\n\t\t\t\tdocument.body.appendChild( script );\n\t\t\t}\n\t\t} );\n\t}\n}\n\nexport default loadAssets;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -12,6 +12,7 @@ type Script = {
12
12
  in_footer?: boolean;
13
13
  };
14
14
  type InlineScript = string | string[];
15
- declare function loadAssets(scriptsData: Record<string, Script>, inlineScripts: Record<'before' | 'after', Record<string, InlineScript>>, stylesData: Record<string, Style>, inlineStyles: Record<'before' | 'after', Record<string, InlineStyle>>): Promise<void>;
15
+ type ScriptModules = Record<string, string>;
16
+ declare function loadAssets(scriptsData: Record<string, Script>, inlineScripts: Record<'before' | 'after', Record<string, InlineScript>>, stylesData: Record<string, Style>, inlineStyles: Record<'before' | 'after', Record<string, InlineStyle>>, htmlTemplates?: string[], scriptModules?: ScriptModules): Promise<void>;
16
17
  export default loadAssets;
17
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAErC,KAAK,MAAM,GAAG;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAkLtC,iBAAe,UAAU,CACxB,WAAW,EAAE,MAAM,CAAE,MAAM,EAAE,MAAM,CAAE,EACrC,aAAa,EAAE,MAAM,CAAE,QAAQ,GAAG,OAAO,EAAE,MAAM,CAAE,MAAM,EAAE,YAAY,CAAE,CAAE,EAC3E,UAAU,EAAE,MAAM,CAAE,MAAM,EAAE,KAAK,CAAE,EACnC,YAAY,EAAE,MAAM,CAAE,QAAQ,GAAG,OAAO,EAAE,MAAM,CAAE,MAAM,EAAE,WAAW,CAAE,CAAE,GACvE,OAAO,CAAE,IAAI,CAAE,CAqDjB;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AACF,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AACrC,KAAK,MAAM,GAAG;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AACF,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AACtC,KAAK,aAAa,GAAG,MAAM,CAAE,MAAM,EAAE,MAAM,CAAE,CAAC;AAuO9C,iBAAe,UAAU,CACxB,WAAW,EAAE,MAAM,CAAE,MAAM,EAAE,MAAM,CAAE,EACrC,aAAa,EAAE,MAAM,CAAE,QAAQ,GAAG,OAAO,EAAE,MAAM,CAAE,MAAM,EAAE,YAAY,CAAE,CAAE,EAC3E,UAAU,EAAE,MAAM,CAAE,MAAM,EAAE,KAAK,CAAE,EACnC,YAAY,EAAE,MAAM,CAAE,QAAQ,GAAG,OAAO,EAAE,MAAM,CAAE,MAAM,EAAE,WAAW,CAAE,CAAE,EACzE,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,aAAa,CAAC,EAAE,aAAa,GAC3B,OAAO,CAAE,IAAI,CAAE,CAqFjB;AAED,eAAe,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/asset-loader",
3
- "version": "1.1.1-next.16d95556a.0",
3
+ "version": "1.2.0",
4
4
  "description": "Utility to dynamically load WordPress scripts and styles with dependency resolution.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -40,5 +40,5 @@
40
40
  "publishConfig": {
41
41
  "access": "public"
42
42
  },
43
- "gitHead": "59a9383612bbe16e21af84d13b035bfbca7fe833"
43
+ "gitHead": "b35cf1a2dce04665e99fd6b9c2891c0b336361b9"
44
44
  }
package/src/index.ts CHANGED
@@ -4,17 +4,68 @@ type Style = {
4
4
  version?: string;
5
5
  media?: string;
6
6
  };
7
-
8
7
  type InlineStyle = string | string[];
9
-
10
8
  type Script = {
11
9
  src: string;
12
10
  deps?: string[];
13
11
  version?: string;
14
12
  in_footer?: boolean;
15
13
  };
16
-
17
14
  type InlineScript = string | string[];
15
+ type ScriptModules = Record< string, string >;
16
+
17
+ /**
18
+ * Injects or extends the import map with new module entries.
19
+ *
20
+ * @param scriptModules - Object mapping module specifiers to URLs
21
+ */
22
+ function injectImportMap( scriptModules: Record< string, string > ): void {
23
+ if ( ! scriptModules || Object.keys( scriptModules ).length === 0 ) {
24
+ return;
25
+ }
26
+
27
+ // Find the existing import map script element
28
+ const existingMapElement = document.querySelector< HTMLScriptElement >(
29
+ 'script#wp-importmap[type=importmap]'
30
+ );
31
+
32
+ if ( existingMapElement ) {
33
+ try {
34
+ // Parse the existing import map
35
+ const existingMap = JSON.parse( existingMapElement.text );
36
+
37
+ // Ensure the imports object exists
38
+ if ( ! existingMap.imports ) {
39
+ existingMap.imports = {};
40
+ }
41
+
42
+ // Merge new imports with existing ones (new entries take precedence)
43
+ existingMap.imports = {
44
+ ...existingMap.imports,
45
+ ...scriptModules,
46
+ };
47
+
48
+ // Update the script element's content
49
+ existingMapElement.text = JSON.stringify( existingMap, null, 2 );
50
+ } catch ( error ) {
51
+ // eslint-disable-next-line no-console
52
+ console.error( 'Failed to parse or update import map:', error );
53
+ }
54
+ } else {
55
+ // If no import map exists, create a new one
56
+ const script = document.createElement( 'script' );
57
+ script.type = 'importmap';
58
+ script.id = 'wp-importmap';
59
+ script.text = JSON.stringify(
60
+ {
61
+ imports: scriptModules,
62
+ },
63
+ null,
64
+ 2
65
+ );
66
+ document.head.appendChild( script );
67
+ }
68
+ }
18
69
 
19
70
  function loadStylesheet( handle: string, styleData: Style ): Promise< void > {
20
71
  return new Promise( ( resolve ) => {
@@ -196,8 +247,15 @@ async function loadAssets(
196
247
  scriptsData: Record< string, Script >,
197
248
  inlineScripts: Record< 'before' | 'after', Record< string, InlineScript > >,
198
249
  stylesData: Record< string, Style >,
199
- inlineStyles: Record< 'before' | 'after', Record< string, InlineStyle > >
250
+ inlineStyles: Record< 'before' | 'after', Record< string, InlineStyle > >,
251
+ htmlTemplates?: string[],
252
+ scriptModules?: ScriptModules
200
253
  ): Promise< void > {
254
+ // Inject import map first so script modules can be resolved
255
+ if ( scriptModules ) {
256
+ injectImportMap( scriptModules );
257
+ }
258
+
201
259
  // Build dependency-ordered lists
202
260
  const orderedStyles = buildDependencyOrderedList( stylesData );
203
261
  const orderedScripts = buildDependencyOrderedList( scriptsData );
@@ -218,15 +276,9 @@ async function loadAssets(
218
276
  }
219
277
 
220
278
  // Load scripts in dependency order
221
- const scriptElementsHead: HTMLScriptElement[] = [];
222
- const scriptElementsBody: HTMLScriptElement[] = [];
279
+ const scriptElements: HTMLScriptElement[] = [];
223
280
 
224
281
  for ( const handle of orderedScripts ) {
225
- const inFooter = scriptsData[ handle ].in_footer || false;
226
- const scriptElements = inFooter
227
- ? scriptElementsBody
228
- : scriptElementsHead;
229
-
230
282
  const beforeInline = inlineScripts.before?.[ handle ];
231
283
  if ( beforeInline ) {
232
284
  scriptElements.push(
@@ -244,12 +296,45 @@ async function loadAssets(
244
296
  }
245
297
  }
246
298
 
247
- const scriptsPromise = ( async () => {
248
- await performScriptLoad( scriptElementsHead, document.head );
249
- await performScriptLoad( scriptElementsBody, document.body );
250
- } )();
299
+ const scriptsPromise = performScriptLoad( scriptElements, document.body );
251
300
 
252
301
  await Promise.all( [ Promise.all( stylePromises ), scriptsPromise ] );
302
+
303
+ // Inject HTML templates (e.g., wp.media templates) into the DOM
304
+ // Note: We can't use innerHTML for script tags, so we need to parse and create elements properly
305
+ if ( htmlTemplates && htmlTemplates.length > 0 ) {
306
+ htmlTemplates.forEach( ( templateHtml ) => {
307
+ // Extract the script tag attributes and content
308
+ const scriptMatch = templateHtml.match(
309
+ /<script([^>]*)>(.*?)<\/script>/is
310
+ );
311
+ if ( scriptMatch ) {
312
+ const attributes = scriptMatch[ 1 ];
313
+ const content = scriptMatch[ 2 ];
314
+
315
+ // Create a new script element
316
+ const script = document.createElement( 'script' );
317
+
318
+ // Extract and set the id attribute
319
+ const idMatch = attributes.match( /id=["']([^"']+)["']/ );
320
+ if ( idMatch ) {
321
+ script.id = idMatch[ 1 ];
322
+ }
323
+
324
+ // Extract and set the type attribute
325
+ const typeMatch = attributes.match( /type=["']([^"']+)["']/ );
326
+ if ( typeMatch ) {
327
+ script.type = typeMatch[ 1 ];
328
+ }
329
+
330
+ // Set the content
331
+ script.textContent = content;
332
+
333
+ // Append to body
334
+ document.body.appendChild( script );
335
+ }
336
+ } );
337
+ }
253
338
  }
254
339
 
255
340
  export default loadAssets;
@@ -1 +1 @@
1
- {"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/index.ts"],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d996b738f5bceb47adf7455d124bf95945dd1bdb7ae59eaa5e63f10314b5e510","signature":"6679d5210ebacdd10d67701f2eb77317d930d4024959c1b6e86cd85588a9cd74"}],"root":[83],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"checkJs":true,"composite":true,"declaration":true,"declarationDir":"./build-types","declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":false,"jsx":1,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"rootDir":"./src","skipDefaultLibCheck":true,"strict":true,"target":99},"latestChangedDtsFile":"./build-types/index.d.ts","version":"5.9.3"}
1
+ {"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/index.ts"],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"ad7994d6c7daf7c5108f653ab083c525a4f510a7d1529e05ba40a15cc524db9a","signature":"a89c94bf9be67c44067e73c782565cc2d1d0811b4a1eba32466182d000ce8873"}],"root":[83],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"checkJs":true,"composite":true,"declaration":true,"declarationDir":"./build-types","declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":false,"jsx":1,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"rootDir":"./src","skipDefaultLibCheck":true,"strict":true,"target":99},"latestChangedDtsFile":"./build-types/index.d.ts","version":"5.9.3"}