importmap-rails 0.7.0 → 0.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/es-module-shims.js +106 -97
- data/lib/importmap/map.rb +2 -3
- data/lib/importmap/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ce5ca88f369995c2b29b27b38e5f3539101b8c314237825cf5dc4bc1a653e32
|
4
|
+
data.tar.gz: a88e63335529c55217e121f9fabbff574da4010bbeecf948a7ec3f4d3ec505ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64ce4de1dd05d813987bbb663b60ef6023624eaf092d8578a87691998ceef32fb5d39fca5fd86cd8fd33a87d197bc28e345901d4e9cacbef235d953e5ea6aa70
|
7
|
+
data.tar.gz: b047cc3f19efc2d462fdc456b9c5dc95581e2bc79e53196575a096771a51a83e7334568f3eceda567775acd254d49437d34156b4432f08b942651052c059352b
|
@@ -1,8 +1,6 @@
|
|
1
|
-
/* ES Module Shims
|
1
|
+
/* ES Module Shims 1.0.4 */
|
2
2
|
(function () {
|
3
3
|
|
4
|
-
Promise.resolve();
|
5
|
-
|
6
4
|
const edge = navigator.userAgent.match(/Edge\/\d\d\.\d+$/);
|
7
5
|
|
8
6
|
let baseUrl;
|
@@ -203,7 +201,7 @@
|
|
203
201
|
let shimMode = !!esmsInitOptions$1.shimMode;
|
204
202
|
const resolveHook = shimMode && esmsInitOptions$1.resolve;
|
205
203
|
|
206
|
-
const skip = esmsInitOptions$1.skip ? new RegExp(esmsInitOptions$1.skip) :
|
204
|
+
const skip = esmsInitOptions$1.skip ? new RegExp(esmsInitOptions$1.skip) : null;
|
207
205
|
|
208
206
|
let nonce = esmsInitOptions$1.nonce;
|
209
207
|
|
@@ -331,7 +329,35 @@
|
|
331
329
|
|
332
330
|
let importMap = { imports: {}, scopes: {} };
|
333
331
|
let importMapSrcOrLazy = false;
|
334
|
-
let
|
332
|
+
let baselinePassthrough;
|
333
|
+
|
334
|
+
const initPromise = featureDetectionPromise.then(() => {
|
335
|
+
baselinePassthrough = supportsDynamicImport && supportsImportMeta && supportsImportMaps && (!jsonModulesEnabled || supportsJsonAssertions) && (!cssModulesEnabled || supportsCssAssertions) && !importMapSrcOrLazy && !false;
|
336
|
+
// shim mode is determined on initialization, no late shim mode
|
337
|
+
if (!shimMode && document.querySelectorAll('script[type="module-shim"],script[type="importmap-shim"]').length)
|
338
|
+
setShimMode();
|
339
|
+
if (shimMode || !baselinePassthrough) {
|
340
|
+
new MutationObserver(mutations => {
|
341
|
+
for (const mutation of mutations) {
|
342
|
+
if (mutation.type !== 'childList') continue;
|
343
|
+
for (const node of mutation.addedNodes) {
|
344
|
+
if (node.tagName === 'SCRIPT') {
|
345
|
+
if (!shimMode && node.type === 'module' || shimMode && node.type === 'module-shim')
|
346
|
+
processScript(node);
|
347
|
+
if (!shimMode && node.type === 'importmap' || shimMode && node.type === 'importmap-shim')
|
348
|
+
processImportMap(node);
|
349
|
+
}
|
350
|
+
else if (node.tagName === 'LINK' && node.rel === 'modulepreload')
|
351
|
+
processPreload(node);
|
352
|
+
}
|
353
|
+
}
|
354
|
+
}).observe(document, { childList: true, subtree: true });
|
355
|
+
processImportMaps();
|
356
|
+
processScriptsAndPreloads();
|
357
|
+
return undefined;
|
358
|
+
}
|
359
|
+
});
|
360
|
+
let importMapPromise = initPromise;
|
335
361
|
|
336
362
|
let acceptingImportMaps = true;
|
337
363
|
let nativeAcceptingImportMaps = true;
|
@@ -346,21 +372,20 @@
|
|
346
372
|
}
|
347
373
|
await importMapPromise;
|
348
374
|
// early analysis opt-out - no need to even fetch if we have feature support
|
349
|
-
if (!shimMode &&
|
375
|
+
if (!shimMode && baselinePassthrough) {
|
350
376
|
// for polyfill case, only dynamic import needs a return value here, and dynamic import will never pass nativelyLoaded
|
351
377
|
if (nativelyLoaded)
|
352
378
|
return null;
|
353
379
|
await lastStaticLoadPromise;
|
354
380
|
return dynamicImport(source ? createBlob(source) : url, { errUrl: url || source });
|
355
381
|
}
|
356
|
-
await undefined;
|
357
382
|
const load = getOrCreateLoad(url, fetchOpts, source);
|
358
383
|
const seen = {};
|
359
384
|
await loadAll(load, seen);
|
360
385
|
lastLoad = undefined;
|
361
386
|
resolveDeps(load, seen);
|
362
387
|
await lastStaticLoadPromise;
|
363
|
-
if (source && !shimMode && !load.n) {
|
388
|
+
if (source && !shimMode && !load.n && !false) {
|
364
389
|
const module = await dynamicImport(createBlob(source), { errUrl: source });
|
365
390
|
if (revokeBlobURLs) revokeObjectURLs(Object.keys(seen));
|
366
391
|
return module;
|
@@ -393,7 +418,17 @@
|
|
393
418
|
}
|
394
419
|
|
395
420
|
async function importShim (id, parentUrl = baseUrl, _assertion) {
|
396
|
-
|
421
|
+
// needed for shim check
|
422
|
+
await initPromise;
|
423
|
+
if (acceptingImportMaps || shimMode || !baselinePassthrough) {
|
424
|
+
processImportMaps();
|
425
|
+
if (!shimMode) {
|
426
|
+
acceptingImportMaps = false;
|
427
|
+
}
|
428
|
+
else {
|
429
|
+
nativeAcceptingImportMaps = false;
|
430
|
+
}
|
431
|
+
}
|
397
432
|
await importMapPromise;
|
398
433
|
return topLevelLoad((await resolve(id, parentUrl)).r || throwUnresolved(id, parentUrl), { credentials: 'same-origin' });
|
399
434
|
}
|
@@ -403,7 +438,6 @@
|
|
403
438
|
const meta = {};
|
404
439
|
|
405
440
|
async function importMetaResolve (id, parentUrl = this.url) {
|
406
|
-
await importMapPromise;
|
407
441
|
return (await resolve(id, `${parentUrl}`)).r || throwUnresolved(id, parentUrl);
|
408
442
|
}
|
409
443
|
|
@@ -490,17 +524,11 @@
|
|
490
524
|
resolvedSource += source.slice(lastIndex);
|
491
525
|
}
|
492
526
|
|
493
|
-
resolvedSource = resolvedSource.replace(/\/\/# sourceMappingURL=(.*)\s*$/, (match, url) =>
|
494
|
-
return match.replace(url, new URL(url, load.r));
|
495
|
-
});
|
527
|
+
resolvedSource = resolvedSource.replace(/\/\/# sourceMappingURL=(.*)\s*$/, (match, url) => match.replace(url, () => new URL(url, load.r)));
|
496
528
|
let hasSourceURL = false;
|
497
|
-
resolvedSource = resolvedSource.replace(/\/\/# sourceURL=(.*)\s*$/, (match, url) =>
|
498
|
-
|
499
|
-
return match.replace(url, new URL(url, load.r));
|
500
|
-
});
|
501
|
-
if (!hasSourceURL) {
|
529
|
+
resolvedSource = resolvedSource.replace(/\/\/# sourceURL=(.*)\s*$/, (match, url) => (hasSourceURL = true, match.replace(url, () => new URL(url, load.r))));
|
530
|
+
if (!hasSourceURL)
|
502
531
|
resolvedSource += '\n//# sourceURL=' + load.r;
|
503
|
-
}
|
504
532
|
|
505
533
|
load.b = lastLoad = createBlob(resolvedSource);
|
506
534
|
load.S = undefined;
|
@@ -617,7 +645,7 @@
|
|
617
645
|
if (d !== -1) return;
|
618
646
|
if (!r)
|
619
647
|
throwUnresolved(n, load.r || load.u);
|
620
|
-
if (skip.test(r)) return { b: r };
|
648
|
+
if (skip && skip.test(r)) return { b: r };
|
621
649
|
if (childFetchOpts.integrity)
|
622
650
|
childFetchOpts = Object.assign({}, childFetchOpts, { integrity: undefined });
|
623
651
|
return getOrCreateLoad(r, childFetchOpts).f;
|
@@ -627,22 +655,16 @@
|
|
627
655
|
return load;
|
628
656
|
}
|
629
657
|
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
function processScripts () {
|
634
|
-
for (const link of document.querySelectorAll(preloadQuery))
|
635
|
-
processPreload(link);
|
636
|
-
const scripts = document.querySelectorAll(scriptQuery);
|
637
|
-
// early shim mode opt-in
|
638
|
-
if (!shimMode) {
|
639
|
-
for (const script of scripts) {
|
640
|
-
if (script.type.endsWith('-shim'))
|
641
|
-
setShimMode();
|
642
|
-
}
|
643
|
-
}
|
644
|
-
for (const script of scripts)
|
658
|
+
function processScriptsAndPreloads () {
|
659
|
+
for (const script of document.querySelectorAll(shimMode ? 'script[type="module-shim"]' : 'script[type="module"]'))
|
645
660
|
processScript(script);
|
661
|
+
for (const link of document.querySelectorAll('link[rel="modulepreload"]'))
|
662
|
+
processPreload(link);
|
663
|
+
}
|
664
|
+
|
665
|
+
function processImportMaps () {
|
666
|
+
for (const script of document.querySelectorAll(shimMode ? 'script[type="importmap-shim"]' : 'script[type="importmap"]'))
|
667
|
+
processImportMap(script);
|
646
668
|
}
|
647
669
|
|
648
670
|
function getFetchOpts (script) {
|
@@ -668,73 +690,74 @@
|
|
668
690
|
document.dispatchEvent(new Event('DOMContentLoaded'));
|
669
691
|
}
|
670
692
|
// this should always trigger because we assume es-module-shims is itself a domcontentloaded requirement
|
671
|
-
document.addEventListener('DOMContentLoaded',
|
693
|
+
document.addEventListener('DOMContentLoaded', async () => {
|
694
|
+
await initPromise;
|
695
|
+
domContentLoadedCheck();
|
696
|
+
if (shimMode || !baselinePassthrough) {
|
697
|
+
processImportMaps();
|
698
|
+
processScriptsAndPreloads();
|
699
|
+
}
|
700
|
+
});
|
672
701
|
|
673
702
|
let readyStateCompleteCnt = 1;
|
674
703
|
if (document.readyState === 'complete')
|
675
704
|
readyStateCompleteCheck();
|
676
705
|
else
|
677
|
-
document.addEventListener('readystatechange',
|
706
|
+
document.addEventListener('readystatechange', async () => {
|
707
|
+
await initPromise;
|
708
|
+
readyStateCompleteCheck();
|
709
|
+
});
|
678
710
|
function readyStateCompleteCheck () {
|
679
711
|
if (--readyStateCompleteCnt === 0 && !noLoadEventRetriggers)
|
680
712
|
document.dispatchEvent(new Event('readystatechange'));
|
681
713
|
}
|
682
714
|
|
683
|
-
function
|
684
|
-
if (
|
715
|
+
function processImportMap (script) {
|
716
|
+
if (!acceptingImportMaps)
|
685
717
|
return;
|
686
|
-
|
687
|
-
if (shim && !shimMode) setShimMode();
|
688
|
-
const type = shimMode ? script.type.slice(0, -5) : script.type;
|
689
|
-
// dont process module scripts in shim mode or noshim module scripts in polyfill mode
|
690
|
-
if (!shim && shimMode || script.getAttribute('noshim') !== null)
|
718
|
+
if (script.ep) // ep marker = script processed
|
691
719
|
return;
|
692
720
|
// empty inline scripts sometimes show before domready
|
693
721
|
if (!script.src && !script.innerHTML)
|
694
722
|
return;
|
695
723
|
script.ep = true;
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
if (isReadyScript) readyStateCompleteCnt++;
|
702
|
-
if (isDomContentLoadedScript) domContentLoadedCnt++;
|
703
|
-
const loadPromise = topLevelLoad(script.src || `${baseUrl}?${id++}`, getFetchOpts(script), !script.src && script.innerHTML, !shimMode, isReadyScript && lastStaticLoadPromise).then(() => {
|
704
|
-
if (!noLoadEventRetriggers)
|
705
|
-
triggerLoadEvent(script);
|
706
|
-
}).catch(e => {
|
707
|
-
if (!noLoadEventRetriggers)
|
708
|
-
triggerLoadEvent(script);
|
709
|
-
// setTimeout(() => { throw e; });
|
710
|
-
onerror(e);
|
711
|
-
});
|
712
|
-
if (isReadyScript)
|
713
|
-
lastStaticLoadPromise = loadPromise.then(readyStateCompleteCheck);
|
714
|
-
if (isDomContentLoadedScript)
|
715
|
-
loadPromise.then(domContentLoadedCheck);
|
724
|
+
// we dont currently support multiple, external or dynamic imports maps in polyfill mode to match native
|
725
|
+
if (script.src || !nativeAcceptingImportMaps) {
|
726
|
+
if (!shimMode)
|
727
|
+
return;
|
728
|
+
importMapSrcOrLazy = true;
|
716
729
|
}
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
importMapSrcOrLazy = true;
|
723
|
-
}
|
724
|
-
if (!shimMode) {
|
725
|
-
acceptingImportMaps = false;
|
726
|
-
}
|
727
|
-
else {
|
728
|
-
nativeAcceptingImportMaps = false;
|
729
|
-
}
|
730
|
-
importMapPromise = importMapPromise.then(async () => {
|
731
|
-
importMap = resolveAndComposeImportMap(script.src ? await (await fetchHook(script.src)).json() : JSON.parse(script.innerHTML), script.src || baseUrl, importMap);
|
732
|
-
});
|
730
|
+
if (!shimMode) {
|
731
|
+
acceptingImportMaps = false;
|
732
|
+
}
|
733
|
+
else {
|
734
|
+
nativeAcceptingImportMaps = false;
|
733
735
|
}
|
736
|
+
importMapPromise = importMapPromise.then(async () => {
|
737
|
+
importMap = resolveAndComposeImportMap(script.src ? await (await fetchHook(script.src)).json() : JSON.parse(script.innerHTML), script.src || baseUrl, importMap);
|
738
|
+
});
|
734
739
|
}
|
735
740
|
|
736
|
-
function
|
737
|
-
script.
|
741
|
+
function processScript (script) {
|
742
|
+
if (script.ep) // ep marker = script processed
|
743
|
+
return;
|
744
|
+
if (script.getAttribute('noshim') !== null)
|
745
|
+
return;
|
746
|
+
// empty inline scripts sometimes show before domready
|
747
|
+
if (!script.src && !script.innerHTML)
|
748
|
+
return;
|
749
|
+
script.ep = true;
|
750
|
+
// does this load block readystate complete
|
751
|
+
const isReadyScript = readyStateCompleteCnt > 0;
|
752
|
+
// does this load block DOMContentLoaded
|
753
|
+
const isDomContentLoadedScript = domContentLoadedCnt > 0;
|
754
|
+
if (isReadyScript) readyStateCompleteCnt++;
|
755
|
+
if (isDomContentLoadedScript) domContentLoadedCnt++;
|
756
|
+
const loadPromise = topLevelLoad(script.src || `${baseUrl}?${id++}`, getFetchOpts(script), !script.src && script.innerHTML, !shimMode, isReadyScript && lastStaticLoadPromise).catch(onerror);
|
757
|
+
if (isReadyScript)
|
758
|
+
lastStaticLoadPromise = loadPromise.then(readyStateCompleteCheck);
|
759
|
+
if (isDomContentLoadedScript)
|
760
|
+
loadPromise.then(domContentLoadedCheck);
|
738
761
|
}
|
739
762
|
|
740
763
|
const fetchCache = {};
|
@@ -747,22 +770,8 @@
|
|
747
770
|
fetchCache[link.href] = doFetch(link.href, getFetchOpts(link));
|
748
771
|
}
|
749
772
|
|
750
|
-
new MutationObserver(mutations => {
|
751
|
-
for (const mutation of mutations) {
|
752
|
-
if (mutation.type !== 'childList') continue;
|
753
|
-
for (const node of mutation.addedNodes) {
|
754
|
-
if (node.tagName === 'SCRIPT' && node.type)
|
755
|
-
processScript(node);
|
756
|
-
else if (node.tagName === 'LINK' && node.rel === 'modulepreload')
|
757
|
-
processPreload(node);
|
758
|
-
}
|
759
|
-
}
|
760
|
-
}).observe(document, { childList: true, subtree: true });
|
761
|
-
|
762
773
|
function throwUnresolved (id, parentUrl) {
|
763
774
|
throw Error("Unable to resolve specifier '" + id + (parentUrl ? "' from " + parentUrl : "'"));
|
764
775
|
}
|
765
776
|
|
766
|
-
|
767
|
-
|
768
|
-
}());
|
777
|
+
}());
|
data/lib/importmap/map.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "pathname"
|
2
|
-
require "active_support/evented_file_update_checker"
|
3
2
|
|
4
3
|
class Importmap::Map
|
5
4
|
attr_reader :packages, :directories
|
@@ -63,11 +62,11 @@ class Importmap::Map
|
|
63
62
|
def cache_sweeper(watches: nil)
|
64
63
|
if watches
|
65
64
|
@cache_sweeper =
|
66
|
-
|
65
|
+
Rails.application.config.file_watcher.new([], Array(watches).collect { |dir| [ dir.to_s, "js"] }.to_h) do
|
67
66
|
clear_cache
|
68
67
|
end
|
69
68
|
else
|
70
|
-
@cache_sweeper
|
69
|
+
@cache_sweeper
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
data/lib/importmap/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: importmap-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|