@ereo/client 0.2.35 → 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 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 cached = prefetchCache.get(url);
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(url, entry);
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 || !href.startsWith(window.location.origin)) {
647
+ if (!isSameOriginHref(href)) {
618
648
  return () => {};
619
649
  }
620
- const url = new URL(href).pathname;
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('a[href^="/"]');
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.startsWith("/")) {
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('a[href^="/"]');
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
@@ -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;AAkBD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCzD;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"}
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,8 +1,8 @@
1
1
  {
2
2
  "name": "@ereo/client",
3
- "version": "0.2.35",
3
+ "version": "0.2.37",
4
4
  "license": "MIT",
5
- "author": "Ereo Team",
5
+ "author": "Enoch Kujem Abassey",
6
6
  "homepage": "https://ereojs.github.io/ereoJS",
7
7
  "repository": {
8
8
  "type": "git",
@@ -32,7 +32,7 @@
32
32
  "typecheck": "tsc --noEmit"
33
33
  },
34
34
  "dependencies": {
35
- "@ereo/core": "^0.2.35"
35
+ "@ereo/core": "^0.2.37"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/react": "^18.2.0",