@rpcbase/router 0.92.0 → 0.93.0

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
@@ -1,56 +1,114 @@
1
1
  import { useLocation } from "react-router";
2
2
  export * from "react-router";
3
3
  import { lazy, useEffect, useRef } from "react";
4
+ import { c } from "react/compiler-runtime";
4
5
  const loadRoute = (importPromise) => {
5
6
  const Component = lazy(async () => {
6
7
  const module = await importPromise;
7
- return { default: module.default };
8
+ return {
9
+ default: module.default
10
+ };
8
11
  });
9
12
  const loader = async (args) => {
10
13
  const module = await importPromise;
11
14
  if (!module.loader) return null;
12
15
  return module.loader(args);
13
16
  };
14
- return { Component, loader };
17
+ return {
18
+ Component,
19
+ loader
20
+ };
15
21
  };
16
- const useApplyMeta = ({
17
- defaultTitle = "",
18
- defaultMeta = [],
19
- pagesMeta = {}
20
- } = {}) => {
22
+ const useApplyMeta = (t0) => {
23
+ const $ = c(12);
24
+ let t1;
25
+ if ($[0] !== t0) {
26
+ t1 = t0 === void 0 ? {} : t0;
27
+ $[0] = t0;
28
+ $[1] = t1;
29
+ } else {
30
+ t1 = $[1];
31
+ }
32
+ const {
33
+ defaultTitle: t2,
34
+ defaultMeta: t3,
35
+ pagesMeta: t4
36
+ } = t1;
37
+ const defaultTitle = t2 === void 0 ? "" : t2;
38
+ let t5;
39
+ if ($[2] !== t3) {
40
+ t5 = t3 === void 0 ? [] : t3;
41
+ $[2] = t3;
42
+ $[3] = t5;
43
+ } else {
44
+ t5 = $[3];
45
+ }
46
+ const defaultMeta = t5;
47
+ let t6;
48
+ if ($[4] !== t4) {
49
+ t6 = t4 === void 0 ? {} : t4;
50
+ $[4] = t4;
51
+ $[5] = t6;
52
+ } else {
53
+ t6 = $[5];
54
+ }
55
+ const pagesMeta = t6;
21
56
  const location = useLocation();
22
- useEffect(() => {
23
- const loadMeta = async () => {
24
- let pageMeta = pagesMeta[location.pathname];
25
- if (!pageMeta) {
26
- pageMeta = { title: defaultTitle, meta: defaultMeta };
27
- }
28
- document.title = pageMeta.title;
29
- document.querySelectorAll("[data-react-meta]").forEach((tag) => tag.remove());
30
- pageMeta.meta.forEach((meta) => {
31
- const metaElement = document.createElement("meta");
32
- metaElement.setAttribute("data-react-meta", "true");
33
- Object.entries(meta).forEach(([key, value]) => {
34
- if (value) {
35
- metaElement.setAttribute(key, value.toString());
36
- }
37
- });
38
- document.head.appendChild(metaElement);
39
- });
40
- const canonicalUrl = `${window.location.origin}${location.pathname}`;
41
- const existingCanonical = document.querySelector('link[rel="canonical"]');
42
- if (existingCanonical) {
43
- existingCanonical.remove();
44
- }
45
- const canonicalLink = document.createElement("link");
46
- canonicalLink.setAttribute("rel", "canonical");
47
- canonicalLink.setAttribute("href", canonicalUrl);
48
- canonicalLink.setAttribute("data-react-meta", "true");
49
- document.head.appendChild(canonicalLink);
57
+ let t7;
58
+ let t8;
59
+ if ($[6] !== defaultMeta || $[7] !== defaultTitle || $[8] !== location.pathname || $[9] !== pagesMeta) {
60
+ t7 = () => {
61
+ const loadMeta = async () => {
62
+ let pageMeta = pagesMeta[location.pathname];
63
+ if (!pageMeta) {
64
+ pageMeta = {
65
+ title: defaultTitle,
66
+ meta: defaultMeta
67
+ };
68
+ }
69
+ document.title = pageMeta.title;
70
+ document.querySelectorAll("[data-react-meta]").forEach(_temp);
71
+ pageMeta.meta.forEach(_temp2);
72
+ const canonicalUrl = `${window.location.origin}${location.pathname}`;
73
+ const existingCanonical = document.querySelector('link[rel="canonical"]');
74
+ if (existingCanonical) {
75
+ existingCanonical.remove();
76
+ }
77
+ const canonicalLink = document.createElement("link");
78
+ canonicalLink.setAttribute("rel", "canonical");
79
+ canonicalLink.setAttribute("href", canonicalUrl);
80
+ canonicalLink.setAttribute("data-react-meta", "true");
81
+ document.head.appendChild(canonicalLink);
82
+ };
83
+ loadMeta();
50
84
  };
51
- loadMeta();
52
- }, [location.pathname, defaultTitle, defaultMeta, pagesMeta]);
85
+ t8 = [location.pathname, defaultTitle, defaultMeta, pagesMeta];
86
+ $[6] = defaultMeta;
87
+ $[7] = defaultTitle;
88
+ $[8] = location.pathname;
89
+ $[9] = pagesMeta;
90
+ $[10] = t7;
91
+ $[11] = t8;
92
+ } else {
93
+ t7 = $[10];
94
+ t8 = $[11];
95
+ }
96
+ useEffect(t7, t8);
53
97
  };
98
+ function _temp(tag) {
99
+ return tag.remove();
100
+ }
101
+ function _temp2(meta) {
102
+ const metaElement = document.createElement("meta");
103
+ metaElement.setAttribute("data-react-meta", "true");
104
+ Object.entries(meta).forEach((t0) => {
105
+ const [key, value] = t0;
106
+ if (value) {
107
+ metaElement.setAttribute(key, value.toString());
108
+ }
109
+ });
110
+ document.head.appendChild(metaElement);
111
+ }
54
112
  const NAVIGATION_GUARDS_STORE_KEY = "__rpcbaseNavigationGuardsStore";
55
113
  const getNavigationGuardsStore = () => {
56
114
  const globalAny = globalThis;
@@ -113,15 +171,7 @@ const useRegisterNavigationGuard = (guard) => {
113
171
  return () => {
114
172
  removeNavigationGuard(guard.id);
115
173
  };
116
- }, [
117
- guard.id,
118
- guard.enabled,
119
- guard.message,
120
- guard.priority,
121
- guard.blockOnSearch,
122
- guard.shouldBlockNavigation,
123
- guard.shouldBlockUnload
124
- ]);
174
+ }, [guard.id, guard.enabled, guard.message, guard.priority, guard.blockOnSearch, guard.shouldBlockNavigation, guard.shouldBlockUnload]);
125
175
  };
126
176
  export {
127
177
  getNavigationGuards,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/loadRoute.tsx","../src/useApplyMeta.tsx","../src/navigationGuards.ts"],"sourcesContent":["import { lazy } from \"react\"\nimport { LoaderFunction } from \"react-router\"\nimport { Loader, LoaderArgs } from \"@rpcbase/client\"\n\n\ntype RouteModule = {\n default: React.ComponentType<unknown>\n loader?: Loader\n}\n\ntype RouteWithLoader = {\n Component: React.LazyExoticComponent<React.ComponentType<unknown>>\n loader?: LoaderFunction\n}\n\nexport const loadRoute = (importPromise: Promise<RouteModule>): RouteWithLoader => {\n const Component = lazy(async () => {\n const module = await importPromise\n return { default: module.default }\n })\n\n const loader = async (args: LoaderArgs) => {\n const module = await importPromise\n if (!module.loader) return null\n return module.loader(args)\n }\n\n return { Component, loader: loader as unknown as LoaderFunction }\n}\n","import { useEffect } from \"react\"\nimport { useLocation } from \"react-router\"\n\n\ntype MetaAttributeValue = string | number | boolean | undefined\ntype MetaEntry = Record<string, MetaAttributeValue>\n\ntype PageMeta = {\n title: string\n meta: MetaEntry[]\n}\n\n\nexport const useApplyMeta = ({\n defaultTitle = \"\",\n defaultMeta = [],\n pagesMeta = {}\n}: {\n defaultTitle?: string\n defaultMeta?: MetaEntry[]\n pagesMeta?: Record<string, PageMeta>\n} = {}) => {\n const location = useLocation()\n\n useEffect(() => {\n const loadMeta = async () => {\n\n let pageMeta = pagesMeta[location.pathname]\n\n if (!pageMeta) {\n pageMeta = { title: defaultTitle, meta: defaultMeta }\n }\n\n document.title = pageMeta.title\n\n // Remove previous dynamically inserted tags\n document.querySelectorAll(\"[data-react-meta]\").forEach((tag) => tag.remove())\n\n // Inject new tags\n pageMeta.meta.forEach((meta) => {\n const metaElement = document.createElement(\"meta\")\n metaElement.setAttribute(\"data-react-meta\", \"true\")\n\n // Set all attributes from the meta object\n Object.entries(meta).forEach(([key, value]) => {\n if (value) {\n metaElement.setAttribute(key, value.toString())\n }\n })\n\n document.head.appendChild(metaElement)\n })\n\n // Update canonical link\n const canonicalUrl = `${window.location.origin}${location.pathname}`\n\n const existingCanonical = document.querySelector(\"link[rel=\\\"canonical\\\"]\")\n if (existingCanonical) {\n existingCanonical.remove()\n }\n\n const canonicalLink = document.createElement(\"link\")\n canonicalLink.setAttribute(\"rel\", \"canonical\")\n canonicalLink.setAttribute(\"href\", canonicalUrl)\n canonicalLink.setAttribute(\"data-react-meta\", \"true\")\n document.head.appendChild(canonicalLink)\n }\n\n loadMeta()\n }, [location.pathname, defaultTitle, defaultMeta, pagesMeta])\n}\n","import { useEffect, useRef } from \"react\"\nimport type { BlockerFunction } from \"react-router\"\n\n\nexport type NavigationGuard = {\n id: string\n enabled: boolean\n priority?: number\n message: string\n blockOnSearch?: boolean\n shouldBlockNavigation: BlockerFunction\n shouldBlockUnload: boolean\n}\n\ntype NavigationGuardsListener = () => void\n\ntype NavigationGuardsStore = {\n guards: Map<string, NavigationGuard>\n listeners: Set<NavigationGuardsListener>\n}\n\nconst NAVIGATION_GUARDS_STORE_KEY = \"__rpcbaseNavigationGuardsStore\"\n\nconst getNavigationGuardsStore = (): NavigationGuardsStore => {\n const globalAny = globalThis as {\n [NAVIGATION_GUARDS_STORE_KEY]?: NavigationGuardsStore\n }\n\n const existing = globalAny[NAVIGATION_GUARDS_STORE_KEY]\n if (existing) {\n return existing\n }\n\n const created: NavigationGuardsStore = {\n guards: new Map<string, NavigationGuard>(),\n listeners: new Set<NavigationGuardsListener>(),\n }\n\n globalAny[NAVIGATION_GUARDS_STORE_KEY] = created\n return created\n}\n\nconst notify = (): void => {\n getNavigationGuardsStore().listeners.forEach((listener) => {\n listener()\n })\n}\n\nconst isSameGuard = (a: NavigationGuard, b: NavigationGuard): boolean =>\n a.id === b.id &&\n a.enabled === b.enabled &&\n a.priority === b.priority &&\n a.message === b.message &&\n a.blockOnSearch === b.blockOnSearch &&\n a.shouldBlockNavigation === b.shouldBlockNavigation &&\n a.shouldBlockUnload === b.shouldBlockUnload\n\nexport const upsertNavigationGuard = (guard: NavigationGuard): void => {\n const guards = getNavigationGuardsStore().guards\n const prev = guards.get(guard.id)\n if (prev && isSameGuard(prev, guard)) {\n return\n }\n\n guards.set(guard.id, guard)\n notify()\n}\n\nexport const removeNavigationGuard = (id: string): void => {\n const guards = getNavigationGuardsStore().guards\n const didDelete = guards.delete(id)\n if (didDelete) {\n notify()\n }\n}\n\nexport const getNavigationGuards = (): NavigationGuard[] =>\n Array.from(getNavigationGuardsStore().guards.values())\n\nexport const subscribeNavigationGuards = (\n listener: NavigationGuardsListener,\n): (() => void) => {\n const listeners = getNavigationGuardsStore().listeners\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const useRegisterNavigationGuard = (guard: NavigationGuard): void => {\n const latestGuardRef = useRef(guard)\n latestGuardRef.current = guard\n\n const lastIdRef = useRef<string | null>(null)\n\n useEffect(() => {\n const lastId = lastIdRef.current\n if (lastId && lastId !== guard.id) {\n removeNavigationGuard(lastId)\n }\n lastIdRef.current = guard.id\n\n if (!guard.enabled) {\n removeNavigationGuard(guard.id)\n return\n }\n\n upsertNavigationGuard(latestGuardRef.current)\n return () => {\n removeNavigationGuard(guard.id)\n }\n }, [\n guard.id,\n guard.enabled,\n guard.message,\n guard.priority,\n guard.blockOnSearch,\n guard.shouldBlockNavigation,\n guard.shouldBlockUnload,\n ])\n}\n"],"names":[],"mappings":";;;AAeO,MAAM,YAAY,CAAC,kBAAyD;AACjF,QAAM,YAAY,KAAK,YAAY;AACjC,UAAM,SAAS,MAAM;AACrB,WAAO,EAAE,SAAS,OAAO,QAAA;AAAA,EAC3B,CAAC;AAED,QAAM,SAAS,OAAO,SAAqB;AACzC,UAAM,SAAS,MAAM;AACrB,QAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,WAAO,OAAO,OAAO,IAAI;AAAA,EAC3B;AAEA,SAAO,EAAE,WAAW,OAAA;AACtB;ACfO,MAAM,eAAe,CAAC;AAAA,EAC3B,eAAe;AAAA,EACf,cAAc,CAAA;AAAA,EACd,YAAY,CAAA;AACd,IAII,OAAO;AACT,QAAM,WAAW,YAAA;AAEjB,YAAU,MAAM;AACd,UAAM,WAAW,YAAY;AAE3B,UAAI,WAAW,UAAU,SAAS,QAAQ;AAE1C,UAAI,CAAC,UAAU;AACb,mBAAW,EAAE,OAAO,cAAc,MAAM,YAAA;AAAA,MAC1C;AAEA,eAAS,QAAQ,SAAS;AAG1B,eAAS,iBAAiB,mBAAmB,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ;AAG5E,eAAS,KAAK,QAAQ,CAAC,SAAS;AAC9B,cAAM,cAAc,SAAS,cAAc,MAAM;AACjD,oBAAY,aAAa,mBAAmB,MAAM;AAGlD,eAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC7C,cAAI,OAAO;AACT,wBAAY,aAAa,KAAK,MAAM,SAAA,CAAU;AAAA,UAChD;AAAA,QACF,CAAC;AAED,iBAAS,KAAK,YAAY,WAAW;AAAA,MACvC,CAAC;AAGD,YAAM,eAAe,GAAG,OAAO,SAAS,MAAM,GAAG,SAAS,QAAQ;AAElE,YAAM,oBAAoB,SAAS,cAAc,uBAAyB;AAC1E,UAAI,mBAAmB;AACrB,0BAAkB,OAAA;AAAA,MACpB;AAEA,YAAM,gBAAgB,SAAS,cAAc,MAAM;AACnD,oBAAc,aAAa,OAAO,WAAW;AAC7C,oBAAc,aAAa,QAAQ,YAAY;AAC/C,oBAAc,aAAa,mBAAmB,MAAM;AACpD,eAAS,KAAK,YAAY,aAAa;AAAA,IACzC;AAEA,aAAA;AAAA,EACF,GAAG,CAAC,SAAS,UAAU,cAAc,aAAa,SAAS,CAAC;AAC9D;ACjDA,MAAM,8BAA8B;AAEpC,MAAM,2BAA2B,MAA6B;AAC5D,QAAM,YAAY;AAIlB,QAAM,WAAW,UAAU,2BAA2B;AACtD,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,UAAiC;AAAA,IACrC,4BAAY,IAAA;AAAA,IACZ,+BAAe,IAAA;AAAA,EAA8B;AAG/C,YAAU,2BAA2B,IAAI;AACzC,SAAO;AACT;AAEA,MAAM,SAAS,MAAY;AACzB,6BAA2B,UAAU,QAAQ,CAAC,aAAa;AACzD,aAAA;AAAA,EACF,CAAC;AACH;AAEA,MAAM,cAAc,CAAC,GAAoB,MACvC,EAAE,OAAO,EAAE,MACX,EAAE,YAAY,EAAE,WAChB,EAAE,aAAa,EAAE,YACjB,EAAE,YAAY,EAAE,WAChB,EAAE,kBAAkB,EAAE,iBACtB,EAAE,0BAA0B,EAAE,yBAC9B,EAAE,sBAAsB,EAAE;AAErB,MAAM,wBAAwB,CAAC,UAAiC;AACrE,QAAM,SAAS,2BAA2B;AAC1C,QAAM,OAAO,OAAO,IAAI,MAAM,EAAE;AAChC,MAAI,QAAQ,YAAY,MAAM,KAAK,GAAG;AACpC;AAAA,EACF;AAEA,SAAO,IAAI,MAAM,IAAI,KAAK;AAC1B,SAAA;AACF;AAEO,MAAM,wBAAwB,CAAC,OAAqB;AACzD,QAAM,SAAS,2BAA2B;AAC1C,QAAM,YAAY,OAAO,OAAO,EAAE;AAClC,MAAI,WAAW;AACb,WAAA;AAAA,EACF;AACF;AAEO,MAAM,sBAAsB,MACjC,MAAM,KAAK,2BAA2B,OAAO,QAAQ;AAEhD,MAAM,4BAA4B,CACvC,aACiB;AACjB,QAAM,YAAY,2BAA2B;AAC7C,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAEO,MAAM,6BAA6B,CAAC,UAAiC;AAC1E,QAAM,iBAAiB,OAAO,KAAK;AACnC,iBAAe,UAAU;AAEzB,QAAM,YAAY,OAAsB,IAAI;AAE5C,YAAU,MAAM;AACd,UAAM,SAAS,UAAU;AACzB,QAAI,UAAU,WAAW,MAAM,IAAI;AACjC,4BAAsB,MAAM;AAAA,IAC9B;AACA,cAAU,UAAU,MAAM;AAE1B,QAAI,CAAC,MAAM,SAAS;AAClB,4BAAsB,MAAM,EAAE;AAC9B;AAAA,IACF;AAEA,0BAAsB,eAAe,OAAO;AAC5C,WAAO,MAAM;AACX,4BAAsB,MAAM,EAAE;AAAA,IAChC;AAAA,EACF,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EAAA,CACP;AACH;"}
1
+ {"version":3,"file":"index.js","sources":["../src/loadRoute.tsx","../src/useApplyMeta.tsx","../src/navigationGuards.ts"],"sourcesContent":["import { lazy } from \"react\"\nimport { LoaderFunction } from \"react-router\"\nimport { Loader, LoaderArgs } from \"@rpcbase/client\"\n\n\ntype RouteModule = {\n default: React.ComponentType<unknown>\n loader?: Loader\n}\n\ntype RouteWithLoader = {\n Component: React.LazyExoticComponent<React.ComponentType<unknown>>\n loader?: LoaderFunction\n}\n\nexport const loadRoute = (importPromise: Promise<RouteModule>): RouteWithLoader => {\n const Component = lazy(async () => {\n const module = await importPromise\n return { default: module.default }\n })\n\n const loader = async (args: LoaderArgs) => {\n const module = await importPromise\n if (!module.loader) return null\n return module.loader(args)\n }\n\n return { Component, loader: loader as unknown as LoaderFunction }\n}\n","import { useEffect } from \"react\"\nimport { useLocation } from \"react-router\"\n\n\ntype MetaAttributeValue = string | number | boolean | undefined\ntype MetaEntry = Record<string, MetaAttributeValue>\n\ntype PageMeta = {\n title: string\n meta: MetaEntry[]\n}\n\n\nexport const useApplyMeta = ({\n defaultTitle = \"\",\n defaultMeta = [],\n pagesMeta = {}\n}: {\n defaultTitle?: string\n defaultMeta?: MetaEntry[]\n pagesMeta?: Record<string, PageMeta>\n} = {}) => {\n const location = useLocation()\n\n useEffect(() => {\n const loadMeta = async () => {\n\n let pageMeta = pagesMeta[location.pathname]\n\n if (!pageMeta) {\n pageMeta = { title: defaultTitle, meta: defaultMeta }\n }\n\n document.title = pageMeta.title\n\n // Remove previous dynamically inserted tags\n document.querySelectorAll(\"[data-react-meta]\").forEach((tag) => tag.remove())\n\n // Inject new tags\n pageMeta.meta.forEach((meta) => {\n const metaElement = document.createElement(\"meta\")\n metaElement.setAttribute(\"data-react-meta\", \"true\")\n\n // Set all attributes from the meta object\n Object.entries(meta).forEach(([key, value]) => {\n if (value) {\n metaElement.setAttribute(key, value.toString())\n }\n })\n\n document.head.appendChild(metaElement)\n })\n\n // Update canonical link\n const canonicalUrl = `${window.location.origin}${location.pathname}`\n\n const existingCanonical = document.querySelector(\"link[rel=\\\"canonical\\\"]\")\n if (existingCanonical) {\n existingCanonical.remove()\n }\n\n const canonicalLink = document.createElement(\"link\")\n canonicalLink.setAttribute(\"rel\", \"canonical\")\n canonicalLink.setAttribute(\"href\", canonicalUrl)\n canonicalLink.setAttribute(\"data-react-meta\", \"true\")\n document.head.appendChild(canonicalLink)\n }\n\n loadMeta()\n }, [location.pathname, defaultTitle, defaultMeta, pagesMeta])\n}\n","import { useEffect, useRef } from \"react\"\nimport type { BlockerFunction } from \"react-router\"\n\n\nexport type NavigationGuard = {\n id: string\n enabled: boolean\n priority?: number\n message: string\n blockOnSearch?: boolean\n shouldBlockNavigation: BlockerFunction\n shouldBlockUnload: boolean\n}\n\ntype NavigationGuardsListener = () => void\n\ntype NavigationGuardsStore = {\n guards: Map<string, NavigationGuard>\n listeners: Set<NavigationGuardsListener>\n}\n\nconst NAVIGATION_GUARDS_STORE_KEY = \"__rpcbaseNavigationGuardsStore\"\n\nconst getNavigationGuardsStore = (): NavigationGuardsStore => {\n const globalAny = globalThis as {\n [NAVIGATION_GUARDS_STORE_KEY]?: NavigationGuardsStore\n }\n\n const existing = globalAny[NAVIGATION_GUARDS_STORE_KEY]\n if (existing) {\n return existing\n }\n\n const created: NavigationGuardsStore = {\n guards: new Map<string, NavigationGuard>(),\n listeners: new Set<NavigationGuardsListener>(),\n }\n\n globalAny[NAVIGATION_GUARDS_STORE_KEY] = created\n return created\n}\n\nconst notify = (): void => {\n getNavigationGuardsStore().listeners.forEach((listener) => {\n listener()\n })\n}\n\nconst isSameGuard = (a: NavigationGuard, b: NavigationGuard): boolean =>\n a.id === b.id &&\n a.enabled === b.enabled &&\n a.priority === b.priority &&\n a.message === b.message &&\n a.blockOnSearch === b.blockOnSearch &&\n a.shouldBlockNavigation === b.shouldBlockNavigation &&\n a.shouldBlockUnload === b.shouldBlockUnload\n\nexport const upsertNavigationGuard = (guard: NavigationGuard): void => {\n const guards = getNavigationGuardsStore().guards\n const prev = guards.get(guard.id)\n if (prev && isSameGuard(prev, guard)) {\n return\n }\n\n guards.set(guard.id, guard)\n notify()\n}\n\nexport const removeNavigationGuard = (id: string): void => {\n const guards = getNavigationGuardsStore().guards\n const didDelete = guards.delete(id)\n if (didDelete) {\n notify()\n }\n}\n\nexport const getNavigationGuards = (): NavigationGuard[] =>\n Array.from(getNavigationGuardsStore().guards.values())\n\nexport const subscribeNavigationGuards = (\n listener: NavigationGuardsListener,\n): (() => void) => {\n const listeners = getNavigationGuardsStore().listeners\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\nexport const useRegisterNavigationGuard = (guard: NavigationGuard): void => {\n const latestGuardRef = useRef(guard)\n latestGuardRef.current = guard\n\n const lastIdRef = useRef<string | null>(null)\n\n useEffect(() => {\n const lastId = lastIdRef.current\n if (lastId && lastId !== guard.id) {\n removeNavigationGuard(lastId)\n }\n lastIdRef.current = guard.id\n\n if (!guard.enabled) {\n removeNavigationGuard(guard.id)\n return\n }\n\n upsertNavigationGuard(latestGuardRef.current)\n return () => {\n removeNavigationGuard(guard.id)\n }\n }, [\n guard.id,\n guard.enabled,\n guard.message,\n guard.priority,\n guard.blockOnSearch,\n guard.shouldBlockNavigation,\n guard.shouldBlockUnload,\n ])\n}\n"],"names":["loadRoute","importPromise","Component","lazy","module","default","loader","args","useApplyMeta","t0","$","_c","t1","undefined","defaultTitle","t2","defaultMeta","t3","pagesMeta","t4","t5","t6","location","useLocation","t7","t8","pathname","loadMeta","pageMeta","meta","document","title","querySelectorAll","forEach","_temp","_temp2","canonicalUrl","window","origin","existingCanonical","querySelector","remove","canonicalLink","createElement","setAttribute","head","appendChild","useEffect","tag","metaElement","Object","entries","key","value","toString","NAVIGATION_GUARDS_STORE_KEY","getNavigationGuardsStore","globalAny","globalThis","existing","created","guards","Map","listeners","Set","notify","listener","isSameGuard","a","b","id","enabled","priority","message","blockOnSearch","shouldBlockNavigation","shouldBlockUnload","upsertNavigationGuard","guard","prev","get","set","removeNavigationGuard","didDelete","delete","getNavigationGuards","Array","from","values","subscribeNavigationGuards","add","useRegisterNavigationGuard","latestGuardRef","useRef","current","lastIdRef","lastId"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/router",
3
- "version": "0.92.0",
3
+ "version": "0.93.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"