@ereo/client 0.2.36 → 0.2.37
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/dist/index.js +41 -11
- package/dist/prefetch.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -570,17 +570,47 @@ var defaultOptions = {
|
|
|
570
570
|
function isCacheValid(entry, cacheDuration) {
|
|
571
571
|
return Date.now() - entry.timestamp < cacheDuration;
|
|
572
572
|
}
|
|
573
|
+
function normalizePrefetchUrl(url) {
|
|
574
|
+
if (typeof window !== "undefined") {
|
|
575
|
+
try {
|
|
576
|
+
const parsed = new URL(url, window.location.origin);
|
|
577
|
+
if (parsed.origin !== window.location.origin) {
|
|
578
|
+
return url;
|
|
579
|
+
}
|
|
580
|
+
return parsed.pathname + parsed.search;
|
|
581
|
+
} catch {
|
|
582
|
+
return url;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
try {
|
|
586
|
+
const parsed = new URL(url);
|
|
587
|
+
return parsed.pathname + parsed.search;
|
|
588
|
+
} catch {
|
|
589
|
+
return url;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
function isSameOriginHref(href) {
|
|
593
|
+
if (typeof window === "undefined" || !href) {
|
|
594
|
+
return false;
|
|
595
|
+
}
|
|
596
|
+
try {
|
|
597
|
+
return new URL(href, window.location.origin).origin === window.location.origin;
|
|
598
|
+
} catch {
|
|
599
|
+
return false;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
573
602
|
async function prefetch(url) {
|
|
574
|
-
const
|
|
603
|
+
const cacheKey = normalizePrefetchUrl(url);
|
|
604
|
+
const cached = prefetchCache.get(cacheKey);
|
|
575
605
|
if (cached && (cached.loading || isCacheValid(cached, defaultOptions.cacheDuration))) {
|
|
576
606
|
return;
|
|
577
607
|
}
|
|
578
608
|
const entry = {
|
|
579
|
-
url,
|
|
609
|
+
url: cacheKey,
|
|
580
610
|
timestamp: Date.now(),
|
|
581
611
|
loading: true
|
|
582
612
|
};
|
|
583
|
-
prefetchCache.set(
|
|
613
|
+
prefetchCache.set(cacheKey, entry);
|
|
584
614
|
try {
|
|
585
615
|
const response = await fetch(url, {
|
|
586
616
|
method: "GET",
|
|
@@ -602,7 +632,7 @@ async function prefetch(url) {
|
|
|
602
632
|
}
|
|
603
633
|
}
|
|
604
634
|
function getPrefetchedData(url) {
|
|
605
|
-
const entry = prefetchCache.get(url);
|
|
635
|
+
const entry = prefetchCache.get(normalizePrefetchUrl(url));
|
|
606
636
|
if (entry && isCacheValid(entry, defaultOptions.cacheDuration) && entry.data) {
|
|
607
637
|
return entry.data;
|
|
608
638
|
}
|
|
@@ -614,10 +644,10 @@ function clearPrefetchCache() {
|
|
|
614
644
|
function setupLinkPrefetch(element, options = {}) {
|
|
615
645
|
const { strategy, threshold } = { ...defaultOptions, ...options };
|
|
616
646
|
const href = element.href;
|
|
617
|
-
if (!href
|
|
647
|
+
if (!isSameOriginHref(href)) {
|
|
618
648
|
return () => {};
|
|
619
649
|
}
|
|
620
|
-
const url =
|
|
650
|
+
const url = normalizePrefetchUrl(href);
|
|
621
651
|
let cleanup = null;
|
|
622
652
|
switch (strategy) {
|
|
623
653
|
case "hover": {
|
|
@@ -657,18 +687,18 @@ function setupAutoPrefetch(options = {}) {
|
|
|
657
687
|
if (typeof document === "undefined")
|
|
658
688
|
return () => {};
|
|
659
689
|
const cleanups = [];
|
|
660
|
-
const links = document.querySelectorAll(
|
|
690
|
+
const links = document.querySelectorAll("a[href]");
|
|
661
691
|
links.forEach((link) => {
|
|
662
692
|
cleanups.push(setupLinkPrefetch(link, options));
|
|
663
693
|
});
|
|
664
694
|
const observer = new MutationObserver((mutations) => {
|
|
665
695
|
for (const mutation of mutations) {
|
|
666
696
|
for (const node of mutation.addedNodes) {
|
|
667
|
-
if (node instanceof HTMLAnchorElement && node.href
|
|
697
|
+
if (node instanceof HTMLAnchorElement && isSameOriginHref(node.href)) {
|
|
668
698
|
cleanups.push(setupLinkPrefetch(node, options));
|
|
669
699
|
}
|
|
670
700
|
if (node instanceof Element) {
|
|
671
|
-
const newLinks = node.querySelectorAll(
|
|
701
|
+
const newLinks = node.querySelectorAll("a[href]");
|
|
672
702
|
newLinks.forEach((link) => {
|
|
673
703
|
cleanups.push(setupLinkPrefetch(link, options));
|
|
674
704
|
});
|
|
@@ -686,11 +716,11 @@ async function prefetchAll(urls) {
|
|
|
686
716
|
await Promise.all(urls.map(prefetch));
|
|
687
717
|
}
|
|
688
718
|
function isPrefetching(url) {
|
|
689
|
-
const entry = prefetchCache.get(url);
|
|
719
|
+
const entry = prefetchCache.get(normalizePrefetchUrl(url));
|
|
690
720
|
return entry?.loading ?? false;
|
|
691
721
|
}
|
|
692
722
|
function isPrefetched(url) {
|
|
693
|
-
const entry = prefetchCache.get(url);
|
|
723
|
+
const entry = prefetchCache.get(normalizePrefetchUrl(url));
|
|
694
724
|
return entry?.data !== undefined;
|
|
695
725
|
}
|
|
696
726
|
// src/hooks.ts
|
package/dist/prefetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefetch.d.ts","sourceRoot":"","sources":["../src/prefetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACnD,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"prefetch.d.ts","sourceRoot":"","sources":["../src/prefetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACnD,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmDD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAM/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,eAAoB,GAC5B,MAAM,IAAI,CAmDZ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,IAAI,CAkC3E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ereo/client",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.37",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Enoch Kujem Abassey",
|
|
6
6
|
"homepage": "https://ereojs.github.io/ereoJS",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"typecheck": "tsc --noEmit"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@ereo/core": "^0.2.
|
|
35
|
+
"@ereo/core": "^0.2.37"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/react": "^18.2.0",
|