es-module-shims 1.7.2 → 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.
package/README.md CHANGED
@@ -29,7 +29,7 @@ Because we are still using the native module loader the edge cases work out comp
29
29
  Include ES Module Shims with a `async` attribute on the script, then include an import map and module scripts normally:
30
30
 
31
31
  ```html
32
- <script async src="https://ga.jspm.io/npm:es-module-shims@1.7.2/dist/es-module-shims.js"></script>
32
+ <script async src="https://ga.jspm.io/npm:es-module-shims@1.7.3/dist/es-module-shims.js"></script>
33
33
 
34
34
  <!-- https://generator.jspm.io/#U2NhYGBkDM0rySzJSU1hKEpNTC5xMLTQM9Az0C1K1jMAAKFS5w0gAA -->
35
35
  <script type="importmap">
@@ -1,4 +1,4 @@
1
- /* ES Module Shims DEBUG BUILD 1.7.2 */
1
+ /* ES Module Shims DEBUG BUILD 1.7.3 */
2
2
  (function () {
3
3
 
4
4
  const hasWindow = typeof window !== 'undefined';
@@ -603,88 +603,109 @@
603
603
  // edge doesnt execute sibling in order, so we fix this up by ensuring all previous executions are explicit dependencies
604
604
  let resolvedSource = edge && lastLoad ? `import '${lastLoad}';` : '';
605
605
 
606
- if (!imports.length) {
607
- resolvedSource += source;
608
- }
609
- else {
610
- // once all deps have loaded we can inline the dependency resolution blobs
611
- // and define this blob
612
- let lastIndex = 0, depIndex = 0, dynamicImportEndStack = [];
613
- function pushStringTo (originalIndex) {
614
- while (dynamicImportEndStack[dynamicImportEndStack.length - 1] < originalIndex) {
615
- const dynamicImportEnd = dynamicImportEndStack.pop();
616
- resolvedSource += `${source.slice(lastIndex, dynamicImportEnd)}, ${urlJsString(load.r)}`;
617
- lastIndex = dynamicImportEnd;
618
- }
619
- resolvedSource += source.slice(lastIndex, originalIndex);
620
- lastIndex = originalIndex;
606
+ // once all deps have loaded we can inline the dependency resolution blobs
607
+ // and define this blob
608
+ let lastIndex = 0, depIndex = 0, dynamicImportEndStack = [];
609
+ function pushStringTo (originalIndex) {
610
+ while (dynamicImportEndStack[dynamicImportEndStack.length - 1] < originalIndex) {
611
+ const dynamicImportEnd = dynamicImportEndStack.pop();
612
+ resolvedSource += `${source.slice(lastIndex, dynamicImportEnd)}, ${urlJsString(load.r)}`;
613
+ lastIndex = dynamicImportEnd;
621
614
  }
622
- for (const { s: start, ss: statementStart, se: statementEnd, d: dynamicImportIndex } of imports) {
623
- // dependency source replacements
624
- if (dynamicImportIndex === -1) {
625
- let depLoad = load.d[depIndex++], blobUrl = depLoad.b, cycleShell = !blobUrl;
626
- if (cycleShell) {
627
- // circular shell creation
628
- if (!(blobUrl = depLoad.s)) {
629
- blobUrl = depLoad.s = createBlob(`export function u$_(m){${
630
- depLoad.a[1].map(({ s, e }, i) => {
631
- const q = depLoad.S[s] === '"' || depLoad.S[s] === "'";
632
- return `e$_${i}=m${q ? `[` : '.'}${depLoad.S.slice(s, e)}${q ? `]` : ''}`;
633
- }).join(',')
634
- }}${
635
- depLoad.a[1].length ? `let ${depLoad.a[1].map((_, i) => `e$_${i}`).join(',')};` : ''
636
- }export {${
637
- depLoad.a[1].map(({ s, e }, i) => `e$_${i} as ${depLoad.S.slice(s, e)}`).join(',')
638
- }}\n//# sourceURL=${depLoad.r}?cycle`);
639
- }
640
- }
641
-
642
- pushStringTo(start - 1);
643
- resolvedSource += `/*${source.slice(start - 1, statementEnd)}*/${urlJsString(blobUrl)}`;
615
+ resolvedSource += source.slice(lastIndex, originalIndex);
616
+ lastIndex = originalIndex;
617
+ }
644
618
 
645
- // circular shell execution
646
- if (!cycleShell && depLoad.s) {
647
- resolvedSource += `;import*as m$_${depIndex} from'${depLoad.b}';import{u$_ as u$_${depIndex}}from'${depLoad.s}';u$_${depIndex}(m$_${depIndex})`;
648
- depLoad.s = undefined;
619
+ for (const { s: start, ss: statementStart, se: statementEnd, d: dynamicImportIndex } of imports) {
620
+ // dependency source replacements
621
+ if (dynamicImportIndex === -1) {
622
+ let depLoad = load.d[depIndex++], blobUrl = depLoad.b, cycleShell = !blobUrl;
623
+ if (cycleShell) {
624
+ // circular shell creation
625
+ if (!(blobUrl = depLoad.s)) {
626
+ blobUrl = depLoad.s = createBlob(`export function u$_(m){${
627
+ depLoad.a[1].map(({ s, e }, i) => {
628
+ const q = depLoad.S[s] === '"' || depLoad.S[s] === "'";
629
+ return `e$_${i}=m${q ? `[` : '.'}${depLoad.S.slice(s, e)}${q ? `]` : ''}`;
630
+ }).join(',')
631
+ }}${
632
+ depLoad.a[1].length ? `let ${depLoad.a[1].map((_, i) => `e$_${i}`).join(',')};` : ''
633
+ }export {${
634
+ depLoad.a[1].map(({ s, e }, i) => `e$_${i} as ${depLoad.S.slice(s, e)}`).join(',')
635
+ }}\n//# sourceURL=${depLoad.r}?cycle`);
649
636
  }
650
- lastIndex = statementEnd;
651
- }
652
- // import.meta
653
- else if (dynamicImportIndex === -2) {
654
- load.m = { url: load.r, resolve: metaResolve };
655
- metaHook(load.m, load.u);
656
- pushStringTo(start);
657
- resolvedSource += `importShim._r[${urlJsString(load.u)}].m`;
658
- lastIndex = statementEnd;
659
637
  }
660
- // dynamic import
661
- else {
662
- pushStringTo(statementStart + 6);
663
- resolvedSource += `Shim(`;
664
- dynamicImportEndStack.push(statementEnd - 1);
665
- lastIndex = start;
638
+
639
+ pushStringTo(start - 1);
640
+ resolvedSource += `/*${source.slice(start - 1, statementEnd)}*/${urlJsString(blobUrl)}`;
641
+
642
+ // circular shell execution
643
+ if (!cycleShell && depLoad.s) {
644
+ resolvedSource += `;import*as m$_${depIndex} from'${depLoad.b}';import{u$_ as u$_${depIndex}}from'${depLoad.s}';u$_${depIndex}(m$_${depIndex})`;
645
+ depLoad.s = undefined;
666
646
  }
647
+ lastIndex = statementEnd;
667
648
  }
649
+ // import.meta
650
+ else if (dynamicImportIndex === -2) {
651
+ load.m = { url: load.r, resolve: metaResolve };
652
+ metaHook(load.m, load.u);
653
+ pushStringTo(start);
654
+ resolvedSource += `importShim._r[${urlJsString(load.u)}].m`;
655
+ lastIndex = statementEnd;
656
+ }
657
+ // dynamic import
658
+ else {
659
+ pushStringTo(statementStart + 6);
660
+ resolvedSource += `Shim(`;
661
+ dynamicImportEndStack.push(statementEnd - 1);
662
+ lastIndex = start;
663
+ }
664
+ }
665
+
666
+ // support progressive cycle binding updates (try statement avoids tdz errors)
667
+ if (load.s)
668
+ 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`;
669
+
670
+ function pushSourceURL (commentPrefix, commentStart) {
671
+ const urlStart = commentStart + commentPrefix.length;
672
+ const commentEnd = source.indexOf('\n', urlStart);
673
+ const urlEnd = commentEnd !== -1 ? commentEnd : source.length;
674
+ pushStringTo(urlStart);
675
+ resolvedSource += new URL(source.slice(urlStart, urlEnd), load.r).href;
676
+ lastIndex = urlEnd;
677
+ }
678
+
679
+ let sourceURLCommentStart = source.lastIndexOf(sourceURLCommentPrefix);
680
+ let sourceMapURLCommentStart = source.lastIndexOf(sourceMapURLCommentPrefix);
668
681
 
669
- // support progressive cycle binding updates (try statement avoids tdz errors)
670
- if (load.s)
671
- 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`;
682
+ // ignore sourceMap comments before already spliced code
683
+ if (sourceURLCommentStart < lastIndex) sourceURLCommentStart = -1;
684
+ if (sourceMapURLCommentStart < lastIndex) sourceMapURLCommentStart = -1;
672
685
 
673
- pushStringTo(source.length);
686
+ // sourceURL first / only
687
+ if (sourceURLCommentStart !== -1 && (sourceMapURLCommentStart === -1 || sourceMapURLCommentStart > sourceURLCommentStart)) {
688
+ pushSourceURL(sourceURLCommentPrefix, sourceURLCommentStart);
674
689
  }
690
+ // sourceMappingURL
691
+ if (sourceMapURLCommentStart !== -1) {
692
+ pushSourceURL(sourceMapURLCommentPrefix, sourceMapURLCommentStart);
693
+ // sourceURL last
694
+ if (sourceURLCommentStart !== -1 && (sourceURLCommentStart > sourceMapURLCommentStart))
695
+ pushSourceURL(sourceURLCommentPrefix, sourceURLCommentStart);
696
+ }
697
+
698
+ pushStringTo(source.length);
675
699
 
676
- let hasSourceURL = false;
677
- resolvedSource = resolvedSource.replace(sourceMapURLRegEx, (match, isMapping, url) => (hasSourceURL = !isMapping, match.replace(url, () => new URL(url, load.r))));
678
- if (!hasSourceURL)
679
- resolvedSource += '\n//# sourceURL=' + load.r;
700
+ if (sourceURLCommentStart === -1)
701
+ resolvedSource += sourceURLCommentPrefix + load.r;
680
702
 
681
703
  load.b = lastLoad = createBlob(resolvedSource);
682
704
  load.S = undefined;
683
705
  }
684
706
 
685
- // ; and // trailer support added for Ruby on Rails 7 source maps compatibility
686
- // https://github.com/guybedford/es-module-shims/issues/228
687
- const sourceMapURLRegEx = /\n\/\/# source(Mapping)?URL=([^\n]+)\s*((;|\/\/[^#][^\n]*)\s*)*$/;
707
+ const sourceURLCommentPrefix = '\n//# sourceURL=';
708
+ const sourceMapURLCommentPrefix = '\n//# sourceMappingURL=';
688
709
 
689
710
  const jsContentType = /^(text|application)\/(x-)?javascript(;|$)/;
690
711
  const jsonContentType = /^(text|application)\/json(;|$)/;
@@ -1,4 +1,4 @@
1
- /* ES Module Shims 1.7.2 */
1
+ /* ES Module Shims 1.7.3 */
2
2
  (function () {
3
3
 
4
4
  const hasWindow = typeof window !== 'undefined';
@@ -596,88 +596,109 @@
596
596
  // edge doesnt execute sibling in order, so we fix this up by ensuring all previous executions are explicit dependencies
597
597
  let resolvedSource = edge && lastLoad ? `import '${lastLoad}';` : '';
598
598
 
599
- if (!imports.length) {
600
- resolvedSource += source;
601
- }
602
- else {
603
- // once all deps have loaded we can inline the dependency resolution blobs
604
- // and define this blob
605
- let lastIndex = 0, depIndex = 0, dynamicImportEndStack = [];
606
- function pushStringTo (originalIndex) {
607
- while (dynamicImportEndStack[dynamicImportEndStack.length - 1] < originalIndex) {
608
- const dynamicImportEnd = dynamicImportEndStack.pop();
609
- resolvedSource += `${source.slice(lastIndex, dynamicImportEnd)}, ${urlJsString(load.r)}`;
610
- lastIndex = dynamicImportEnd;
611
- }
612
- resolvedSource += source.slice(lastIndex, originalIndex);
613
- 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;
614
607
  }
615
- for (const { s: start, ss: statementStart, se: statementEnd, d: dynamicImportIndex } of imports) {
616
- // dependency source replacements
617
- if (dynamicImportIndex === -1) {
618
- let depLoad = load.d[depIndex++], blobUrl = depLoad.b, cycleShell = !blobUrl;
619
- if (cycleShell) {
620
- // circular shell creation
621
- if (!(blobUrl = depLoad.s)) {
622
- blobUrl = depLoad.s = createBlob(`export function u$_(m){${
623
- depLoad.a[1].map(({ s, e }, i) => {
624
- const q = depLoad.S[s] === '"' || depLoad.S[s] === "'";
625
- return `e$_${i}=m${q ? `[` : '.'}${depLoad.S.slice(s, e)}${q ? `]` : ''}`;
626
- }).join(',')
627
- }}${
628
- depLoad.a[1].length ? `let ${depLoad.a[1].map((_, i) => `e$_${i}`).join(',')};` : ''
629
- }export {${
630
- depLoad.a[1].map(({ s, e }, i) => `e$_${i} as ${depLoad.S.slice(s, e)}`).join(',')
631
- }}\n//# sourceURL=${depLoad.r}?cycle`);
632
- }
633
- }
634
-
635
- pushStringTo(start - 1);
636
- resolvedSource += `/*${source.slice(start - 1, statementEnd)}*/${urlJsString(blobUrl)}`;
608
+ resolvedSource += source.slice(lastIndex, originalIndex);
609
+ lastIndex = originalIndex;
610
+ }
637
611
 
638
- // circular shell execution
639
- if (!cycleShell && depLoad.s) {
640
- resolvedSource += `;import*as m$_${depIndex} from'${depLoad.b}';import{u$_ as u$_${depIndex}}from'${depLoad.s}';u$_${depIndex}(m$_${depIndex})`;
641
- 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`);
642
629
  }
643
- lastIndex = statementEnd;
644
- }
645
- // import.meta
646
- else if (dynamicImportIndex === -2) {
647
- load.m = { url: load.r, resolve: metaResolve };
648
- metaHook(load.m, load.u);
649
- pushStringTo(start);
650
- resolvedSource += `importShim._r[${urlJsString(load.u)}].m`;
651
- lastIndex = statementEnd;
652
630
  }
653
- // dynamic import
654
- else {
655
- pushStringTo(statementStart + 6);
656
- resolvedSource += `Shim(`;
657
- dynamicImportEndStack.push(statementEnd - 1);
658
- 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;
659
639
  }
640
+ lastIndex = statementEnd;
660
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;
656
+ }
657
+ }
658
+
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);
661
674
 
662
- // support progressive cycle binding updates (try statement avoids tdz errors)
663
- if (load.s)
664
- 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`;
675
+ // ignore sourceMap comments before already spliced code
676
+ if (sourceURLCommentStart < lastIndex) sourceURLCommentStart = -1;
677
+ if (sourceMapURLCommentStart < lastIndex) sourceMapURLCommentStart = -1;
665
678
 
666
- pushStringTo(source.length);
679
+ // sourceURL first / only
680
+ if (sourceURLCommentStart !== -1 && (sourceMapURLCommentStart === -1 || sourceMapURLCommentStart > sourceURLCommentStart)) {
681
+ pushSourceURL(sourceURLCommentPrefix, sourceURLCommentStart);
667
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);
668
692
 
669
- let hasSourceURL = false;
670
- resolvedSource = resolvedSource.replace(sourceMapURLRegEx, (match, isMapping, url) => (hasSourceURL = !isMapping, match.replace(url, () => new URL(url, load.r))));
671
- if (!hasSourceURL)
672
- resolvedSource += '\n//# sourceURL=' + load.r;
693
+ if (sourceURLCommentStart === -1)
694
+ resolvedSource += sourceURLCommentPrefix + load.r;
673
695
 
674
696
  load.b = lastLoad = createBlob(resolvedSource);
675
697
  load.S = undefined;
676
698
  }
677
699
 
678
- // ; and // trailer support added for Ruby on Rails 7 source maps compatibility
679
- // https://github.com/guybedford/es-module-shims/issues/228
680
- const sourceMapURLRegEx = /\n\/\/# source(Mapping)?URL=([^\n]+)\s*((;|\/\/[^#][^\n]*)\s*)*$/;
700
+ const sourceURLCommentPrefix = '\n//# sourceURL=';
701
+ const sourceMapURLCommentPrefix = '\n//# sourceMappingURL=';
681
702
 
682
703
  const jsContentType = /^(text|application)\/(x-)?javascript(;|$)/;
683
704
  const jsonContentType = /^(text|application)\/json(;|$)/;
@@ -1,4 +1,4 @@
1
- /* ES Module Shims Wasm 1.7.2 */
1
+ /* ES Module Shims Wasm 1.7.3 */
2
2
  (function () {
3
3
 
4
4
  const hasWindow = typeof window !== 'undefined';
@@ -596,88 +596,109 @@
596
596
  // edge doesnt execute sibling in order, so we fix this up by ensuring all previous executions are explicit dependencies
597
597
  let resolvedSource = edge && lastLoad ? `import '${lastLoad}';` : '';
598
598
 
599
- if (!imports.length) {
600
- resolvedSource += source;
601
- }
602
- else {
603
- // once all deps have loaded we can inline the dependency resolution blobs
604
- // and define this blob
605
- let lastIndex = 0, depIndex = 0, dynamicImportEndStack = [];
606
- function pushStringTo (originalIndex) {
607
- while (dynamicImportEndStack[dynamicImportEndStack.length - 1] < originalIndex) {
608
- const dynamicImportEnd = dynamicImportEndStack.pop();
609
- resolvedSource += `${source.slice(lastIndex, dynamicImportEnd)}, ${urlJsString(load.r)}`;
610
- lastIndex = dynamicImportEnd;
611
- }
612
- resolvedSource += source.slice(lastIndex, originalIndex);
613
- 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;
614
607
  }
615
- for (const { s: start, ss: statementStart, se: statementEnd, d: dynamicImportIndex } of imports) {
616
- // dependency source replacements
617
- if (dynamicImportIndex === -1) {
618
- let depLoad = load.d[depIndex++], blobUrl = depLoad.b, cycleShell = !blobUrl;
619
- if (cycleShell) {
620
- // circular shell creation
621
- if (!(blobUrl = depLoad.s)) {
622
- blobUrl = depLoad.s = createBlob(`export function u$_(m){${
623
- depLoad.a[1].map(({ s, e }, i) => {
624
- const q = depLoad.S[s] === '"' || depLoad.S[s] === "'";
625
- return `e$_${i}=m${q ? `[` : '.'}${depLoad.S.slice(s, e)}${q ? `]` : ''}`;
626
- }).join(',')
627
- }}${
628
- depLoad.a[1].length ? `let ${depLoad.a[1].map((_, i) => `e$_${i}`).join(',')};` : ''
629
- }export {${
630
- depLoad.a[1].map(({ s, e }, i) => `e$_${i} as ${depLoad.S.slice(s, e)}`).join(',')
631
- }}\n//# sourceURL=${depLoad.r}?cycle`);
632
- }
633
- }
634
-
635
- pushStringTo(start - 1);
636
- resolvedSource += `/*${source.slice(start - 1, statementEnd)}*/${urlJsString(blobUrl)}`;
608
+ resolvedSource += source.slice(lastIndex, originalIndex);
609
+ lastIndex = originalIndex;
610
+ }
637
611
 
638
- // circular shell execution
639
- if (!cycleShell && depLoad.s) {
640
- resolvedSource += `;import*as m$_${depIndex} from'${depLoad.b}';import{u$_ as u$_${depIndex}}from'${depLoad.s}';u$_${depIndex}(m$_${depIndex})`;
641
- 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`);
642
629
  }
643
- lastIndex = statementEnd;
644
- }
645
- // import.meta
646
- else if (dynamicImportIndex === -2) {
647
- load.m = { url: load.r, resolve: metaResolve };
648
- metaHook(load.m, load.u);
649
- pushStringTo(start);
650
- resolvedSource += `importShim._r[${urlJsString(load.u)}].m`;
651
- lastIndex = statementEnd;
652
630
  }
653
- // dynamic import
654
- else {
655
- pushStringTo(statementStart + 6);
656
- resolvedSource += `Shim(`;
657
- dynamicImportEndStack.push(statementEnd - 1);
658
- 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;
659
639
  }
640
+ lastIndex = statementEnd;
660
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;
656
+ }
657
+ }
658
+
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);
661
674
 
662
- // support progressive cycle binding updates (try statement avoids tdz errors)
663
- if (load.s)
664
- 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`;
675
+ // ignore sourceMap comments before already spliced code
676
+ if (sourceURLCommentStart < lastIndex) sourceURLCommentStart = -1;
677
+ if (sourceMapURLCommentStart < lastIndex) sourceMapURLCommentStart = -1;
665
678
 
666
- pushStringTo(source.length);
679
+ // sourceURL first / only
680
+ if (sourceURLCommentStart !== -1 && (sourceMapURLCommentStart === -1 || sourceMapURLCommentStart > sourceURLCommentStart)) {
681
+ pushSourceURL(sourceURLCommentPrefix, sourceURLCommentStart);
667
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);
668
692
 
669
- let hasSourceURL = false;
670
- resolvedSource = resolvedSource.replace(sourceMapURLRegEx, (match, isMapping, url) => (hasSourceURL = !isMapping, match.replace(url, () => new URL(url, load.r))));
671
- if (!hasSourceURL)
672
- resolvedSource += '\n//# sourceURL=' + load.r;
693
+ if (sourceURLCommentStart === -1)
694
+ resolvedSource += sourceURLCommentPrefix + load.r;
673
695
 
674
696
  load.b = lastLoad = createBlob(resolvedSource);
675
697
  load.S = undefined;
676
698
  }
677
699
 
678
- // ; and // trailer support added for Ruby on Rails 7 source maps compatibility
679
- // https://github.com/guybedford/es-module-shims/issues/228
680
- const sourceMapURLRegEx = /\n\/\/# source(Mapping)?URL=([^\n]+)\s*((;|\/\/[^#][^\n]*)\s*)*$/;
700
+ const sourceURLCommentPrefix = '\n//# sourceURL=';
701
+ const sourceMapURLCommentPrefix = '\n//# sourceMappingURL=';
681
702
 
682
703
  const jsContentType = /^(text|application)\/(x-)?javascript(;|$)/;
683
704
  const jsonContentType = /^(text|application)\/json(;|$)/;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-module-shims",
3
- "version": "1.7.2",
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": {