es-module-shims 1.7.1 → 1.7.3

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.
@@ -1,4 +1,4 @@
1
- /* ES Module Shims Wasm 1.7.1 */
1
+ /* ES Module Shims Wasm 1.7.3 */
2
2
  (function () {
3
3
 
4
4
  const hasWindow = typeof window !== 'undefined';
@@ -333,13 +333,14 @@
333
333
  iframe.style.display = 'none';
334
334
  iframe.setAttribute('nonce', nonce);
335
335
  function cb ({ data }) {
336
- // failed feature detection (security policy) -> revert to default assumptions
337
- if (Array.isArray(data)) {
338
- supportsImportMaps = data[0];
339
- supportsImportMeta = data[1];
340
- supportsCssAssertions = data[2];
341
- supportsJsonAssertions = data[3];
336
+ const isFeatureDetectionMessage = Array.isArray(data) && data[0] === 'esms';
337
+ if (!isFeatureDetectionMessage) {
338
+ return;
342
339
  }
340
+ supportsImportMaps = data[1];
341
+ supportsImportMeta = data[2];
342
+ supportsCssAssertions = data[3];
343
+ supportsJsonAssertions = data[4];
343
344
  resolve();
344
345
  document.head.removeChild(iframe);
345
346
  window.removeEventListener('message', cb, false);
@@ -348,7 +349,7 @@
348
349
 
349
350
  const importMapTest = `<script nonce=${nonce || ''}>b=(s,type='text/javascript')=>URL.createObjectURL(new Blob([s],{type}));document.head.appendChild(Object.assign(document.createElement('script'),{type:'importmap',nonce:"${nonce}",innerText:\`{"imports":{"x":"\${b('')}"}}\`}));Promise.all([${
350
351
  supportsImportMaps ? 'true,true' : `'x',b('${importMetaCheck}')`}, ${cssModulesEnabled ? `b('${cssModulesCheck}'.replace('x',b('','text/css')))` : 'false'}, ${
351
- jsonModulesEnabled ? `b('${jsonModulesCheck}'.replace('x',b('{}','text/json')))` : 'false'}].map(x =>typeof x==='string'?import(x).then(x =>!!x,()=>false):x)).then(a=>parent.postMessage(a,'*'))<${''}/script>`;
352
+ jsonModulesEnabled ? `b('${jsonModulesCheck}'.replace('x',b('{}','text/json')))` : 'false'}].map(x =>typeof x==='string'?import(x).then(x =>!!x,()=>false):x)).then(a=>parent.postMessage(['esms'].concat(a),'*'))<${''}/script>`;
352
353
 
353
354
  // Safari will call onload eagerly on head injection, but we don't want the Wechat
354
355
  // path to trigger before setting srcdoc, therefore we track the timing
@@ -595,88 +596,109 @@
595
596
  // edge doesnt execute sibling in order, so we fix this up by ensuring all previous executions are explicit dependencies
596
597
  let resolvedSource = edge && lastLoad ? `import '${lastLoad}';` : '';
597
598
 
598
- if (!imports.length) {
599
- resolvedSource += source;
600
- }
601
- else {
602
- // once all deps have loaded we can inline the dependency resolution blobs
603
- // and define this blob
604
- let lastIndex = 0, depIndex = 0, dynamicImportEndStack = [];
605
- function pushStringTo (originalIndex) {
606
- while (dynamicImportEndStack[dynamicImportEndStack.length - 1] < originalIndex) {
607
- const dynamicImportEnd = dynamicImportEndStack.pop();
608
- resolvedSource += `${source.slice(lastIndex, dynamicImportEnd)}, ${urlJsString(load.r)}`;
609
- lastIndex = dynamicImportEnd;
610
- }
611
- resolvedSource += source.slice(lastIndex, originalIndex);
612
- lastIndex = originalIndex;
599
+ // once all deps have loaded we can inline the dependency resolution blobs
600
+ // and define this blob
601
+ let lastIndex = 0, depIndex = 0, dynamicImportEndStack = [];
602
+ function pushStringTo (originalIndex) {
603
+ while (dynamicImportEndStack[dynamicImportEndStack.length - 1] < originalIndex) {
604
+ const dynamicImportEnd = dynamicImportEndStack.pop();
605
+ resolvedSource += `${source.slice(lastIndex, dynamicImportEnd)}, ${urlJsString(load.r)}`;
606
+ lastIndex = dynamicImportEnd;
613
607
  }
614
- for (const { s: start, ss: statementStart, se: statementEnd, d: dynamicImportIndex } of imports) {
615
- // dependency source replacements
616
- if (dynamicImportIndex === -1) {
617
- let depLoad = load.d[depIndex++], blobUrl = depLoad.b, cycleShell = !blobUrl;
618
- if (cycleShell) {
619
- // circular shell creation
620
- if (!(blobUrl = depLoad.s)) {
621
- blobUrl = depLoad.s = createBlob(`export function u$_(m){${
622
- depLoad.a[1].map(({ s, e }, i) => {
623
- const q = depLoad.S[s] === '"' || depLoad.S[s] === "'";
624
- return `e$_${i}=m${q ? `[` : '.'}${depLoad.S.slice(s, e)}${q ? `]` : ''}`;
625
- }).join(',')
626
- }}${
627
- depLoad.a[1].length ? `let ${depLoad.a[1].map((_, i) => `e$_${i}`).join(',')};` : ''
628
- }export {${
629
- depLoad.a[1].map(({ s, e }, i) => `e$_${i} as ${depLoad.S.slice(s, e)}`).join(',')
630
- }}\n//# sourceURL=${depLoad.r}?cycle`);
631
- }
632
- }
633
-
634
- pushStringTo(start - 1);
635
- resolvedSource += `/*${source.slice(start - 1, statementEnd)}*/${urlJsString(blobUrl)}`;
608
+ resolvedSource += source.slice(lastIndex, originalIndex);
609
+ lastIndex = originalIndex;
610
+ }
636
611
 
637
- // circular shell execution
638
- if (!cycleShell && depLoad.s) {
639
- resolvedSource += `;import*as m$_${depIndex} from'${depLoad.b}';import{u$_ as u$_${depIndex}}from'${depLoad.s}';u$_${depIndex}(m$_${depIndex})`;
640
- depLoad.s = undefined;
612
+ for (const { s: start, ss: statementStart, se: statementEnd, d: dynamicImportIndex } of imports) {
613
+ // dependency source replacements
614
+ if (dynamicImportIndex === -1) {
615
+ let depLoad = load.d[depIndex++], blobUrl = depLoad.b, cycleShell = !blobUrl;
616
+ if (cycleShell) {
617
+ // circular shell creation
618
+ if (!(blobUrl = depLoad.s)) {
619
+ blobUrl = depLoad.s = createBlob(`export function u$_(m){${
620
+ depLoad.a[1].map(({ s, e }, i) => {
621
+ const q = depLoad.S[s] === '"' || depLoad.S[s] === "'";
622
+ return `e$_${i}=m${q ? `[` : '.'}${depLoad.S.slice(s, e)}${q ? `]` : ''}`;
623
+ }).join(',')
624
+ }}${
625
+ depLoad.a[1].length ? `let ${depLoad.a[1].map((_, i) => `e$_${i}`).join(',')};` : ''
626
+ }export {${
627
+ depLoad.a[1].map(({ s, e }, i) => `e$_${i} as ${depLoad.S.slice(s, e)}`).join(',')
628
+ }}\n//# sourceURL=${depLoad.r}?cycle`);
641
629
  }
642
- lastIndex = statementEnd;
643
- }
644
- // import.meta
645
- else if (dynamicImportIndex === -2) {
646
- load.m = { url: load.r, resolve: metaResolve };
647
- metaHook(load.m, load.u);
648
- pushStringTo(start);
649
- resolvedSource += `importShim._r[${urlJsString(load.u)}].m`;
650
- lastIndex = statementEnd;
651
630
  }
652
- // dynamic import
653
- else {
654
- pushStringTo(statementStart + 6);
655
- resolvedSource += `Shim(`;
656
- dynamicImportEndStack.push(statementEnd - 1);
657
- lastIndex = start;
631
+
632
+ pushStringTo(start - 1);
633
+ resolvedSource += `/*${source.slice(start - 1, statementEnd)}*/${urlJsString(blobUrl)}`;
634
+
635
+ // circular shell execution
636
+ if (!cycleShell && depLoad.s) {
637
+ resolvedSource += `;import*as m$_${depIndex} from'${depLoad.b}';import{u$_ as u$_${depIndex}}from'${depLoad.s}';u$_${depIndex}(m$_${depIndex})`;
638
+ depLoad.s = undefined;
658
639
  }
640
+ lastIndex = statementEnd;
641
+ }
642
+ // import.meta
643
+ else if (dynamicImportIndex === -2) {
644
+ load.m = { url: load.r, resolve: metaResolve };
645
+ metaHook(load.m, load.u);
646
+ pushStringTo(start);
647
+ resolvedSource += `importShim._r[${urlJsString(load.u)}].m`;
648
+ lastIndex = statementEnd;
649
+ }
650
+ // dynamic import
651
+ else {
652
+ pushStringTo(statementStart + 6);
653
+ resolvedSource += `Shim(`;
654
+ dynamicImportEndStack.push(statementEnd - 1);
655
+ lastIndex = start;
659
656
  }
657
+ }
660
658
 
661
- // support progressive cycle binding updates (try statement avoids tdz errors)
662
- if (load.s)
663
- resolvedSource += `\n;import{u$_}from'${load.s}';try{u$_({${exports.filter(e => e.ln).map(({ s, e, ln }) => `${source.slice(s, e)}:${ln}`).join(',')}})}catch(_){};\n`;
659
+ // support progressive cycle binding updates (try statement avoids tdz errors)
660
+ if (load.s)
661
+ resolvedSource += `\n;import{u$_}from'${load.s}';try{u$_({${exports.filter(e => e.ln).map(({ s, e, ln }) => `${source.slice(s, e)}:${ln}`).join(',')}})}catch(_){};\n`;
662
+
663
+ function pushSourceURL (commentPrefix, commentStart) {
664
+ const urlStart = commentStart + commentPrefix.length;
665
+ const commentEnd = source.indexOf('\n', urlStart);
666
+ const urlEnd = commentEnd !== -1 ? commentEnd : source.length;
667
+ pushStringTo(urlStart);
668
+ resolvedSource += new URL(source.slice(urlStart, urlEnd), load.r).href;
669
+ lastIndex = urlEnd;
670
+ }
671
+
672
+ let sourceURLCommentStart = source.lastIndexOf(sourceURLCommentPrefix);
673
+ let sourceMapURLCommentStart = source.lastIndexOf(sourceMapURLCommentPrefix);
674
+
675
+ // ignore sourceMap comments before already spliced code
676
+ if (sourceURLCommentStart < lastIndex) sourceURLCommentStart = -1;
677
+ if (sourceMapURLCommentStart < lastIndex) sourceMapURLCommentStart = -1;
664
678
 
665
- pushStringTo(source.length);
679
+ // sourceURL first / only
680
+ if (sourceURLCommentStart !== -1 && (sourceMapURLCommentStart === -1 || sourceMapURLCommentStart > sourceURLCommentStart)) {
681
+ pushSourceURL(sourceURLCommentPrefix, sourceURLCommentStart);
666
682
  }
683
+ // sourceMappingURL
684
+ if (sourceMapURLCommentStart !== -1) {
685
+ pushSourceURL(sourceMapURLCommentPrefix, sourceMapURLCommentStart);
686
+ // sourceURL last
687
+ if (sourceURLCommentStart !== -1 && (sourceURLCommentStart > sourceMapURLCommentStart))
688
+ pushSourceURL(sourceURLCommentPrefix, sourceURLCommentStart);
689
+ }
690
+
691
+ pushStringTo(source.length);
667
692
 
668
- let hasSourceURL = false;
669
- resolvedSource = resolvedSource.replace(sourceMapURLRegEx, (match, isMapping, url) => (hasSourceURL = !isMapping, match.replace(url, () => new URL(url, load.r))));
670
- if (!hasSourceURL)
671
- resolvedSource += '\n//# sourceURL=' + load.r;
693
+ if (sourceURLCommentStart === -1)
694
+ resolvedSource += sourceURLCommentPrefix + load.r;
672
695
 
673
696
  load.b = lastLoad = createBlob(resolvedSource);
674
697
  load.S = undefined;
675
698
  }
676
699
 
677
- // ; and // trailer support added for Ruby on Rails 7 source maps compatibility
678
- // https://github.com/guybedford/es-module-shims/issues/228
679
- const sourceMapURLRegEx = /\n\/\/# source(Mapping)?URL=([^\n]+)\s*((;|\/\/[^#][^\n]*)\s*)*$/;
700
+ const sourceURLCommentPrefix = '\n//# sourceURL=';
701
+ const sourceMapURLCommentPrefix = '\n//# sourceMappingURL=';
680
702
 
681
703
  const jsContentType = /^(text|application)\/(x-)?javascript(;|$)/;
682
704
  const jsonContentType = /^(text|application)\/json(;|$)/;
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "es-module-shims",
3
- "version": "1.7.1",
3
+ "version": "1.7.3",
4
4
  "description": "Shims for the latest ES module features",
5
5
  "main": "dist/es-module-shims.js",
6
6
  "exports": {
7
7
  ".": "./dist/es-module-shims.js",
8
+ "./debug": "./dist/es-module-shims.debug.js",
8
9
  "./wasm": "./dist/es-module-shims.wasm.js"
9
10
  },
10
11
  "types": "index.d.ts",