one 1.21.7 → 1.21.9

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.
Files changed (151) hide show
  1. package/dist/cjs/cli/dev.native.js.map +1 -1
  2. package/dist/cjs/cli.cjs +0 -3
  3. package/dist/cjs/cli.native.js +0 -3
  4. package/dist/cjs/cli.native.js.map +1 -1
  5. package/dist/cjs/image/getImageData.cjs +1 -1
  6. package/dist/cjs/image/getImageData.native.js +1 -1
  7. package/dist/cjs/image/getImageData.native.js.map +1 -1
  8. package/dist/cjs/index.native.js.map +1 -1
  9. package/dist/cjs/layouts/Stack.cjs +3 -4
  10. package/dist/cjs/layouts/Stack.native.js +3 -4
  11. package/dist/cjs/layouts/Stack.native.js.map +1 -1
  12. package/dist/cjs/layouts/withLayoutContext.cjs +39 -8
  13. package/dist/cjs/layouts/withLayoutContext.native.js +43 -8
  14. package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
  15. package/dist/cjs/layouts/withLayoutContext.test.cjs +96 -0
  16. package/dist/cjs/layouts/withLayoutContext.test.native.js +100 -0
  17. package/dist/cjs/layouts/withLayoutContext.test.native.js.map +1 -0
  18. package/dist/cjs/router/Route.cjs +3 -0
  19. package/dist/cjs/router/Route.native.js +3 -0
  20. package/dist/cjs/router/Route.native.js.map +1 -1
  21. package/dist/cjs/router/protectedRoutes.test.cjs +22 -0
  22. package/dist/cjs/router/protectedRoutes.test.native.js +25 -0
  23. package/dist/cjs/router/protectedRoutes.test.native.js.map +1 -0
  24. package/dist/cjs/router/router.cjs +26 -8
  25. package/dist/cjs/router/router.native.js +26 -8
  26. package/dist/cjs/router/router.native.js.map +1 -1
  27. package/dist/cjs/router/useScreens.cjs +38 -11
  28. package/dist/cjs/router/useScreens.native.js +39 -11
  29. package/dist/cjs/router/useScreens.native.js.map +1 -1
  30. package/dist/cjs/router/useScreens.test.cjs +134 -0
  31. package/dist/cjs/router/useScreens.test.native.js +163 -0
  32. package/dist/cjs/router/useScreens.test.native.js.map +1 -0
  33. package/dist/cjs/views/Navigator.cjs +14 -6
  34. package/dist/cjs/views/Navigator.native.js +14 -6
  35. package/dist/cjs/views/Navigator.native.js.map +1 -1
  36. package/dist/cjs/views/Protected.native.js.map +1 -1
  37. package/dist/cjs/views/SuspenseFallback.cjs +18 -0
  38. package/dist/cjs/views/SuspenseFallback.native.js +21 -0
  39. package/dist/cjs/views/SuspenseFallback.native.js.map +1 -0
  40. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.cjs +47 -7
  41. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +47 -7
  42. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  43. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.cjs +15 -6
  44. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.native.js +15 -6
  45. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.native.js.map +1 -1
  46. package/dist/esm/cli/dev.mjs.map +1 -1
  47. package/dist/esm/cli/dev.native.js.map +1 -1
  48. package/dist/esm/cli.mjs +0 -3
  49. package/dist/esm/cli.mjs.map +1 -1
  50. package/dist/esm/cli.native.js +0 -3
  51. package/dist/esm/cli.native.js.map +1 -1
  52. package/dist/esm/image/getImageData.mjs +1 -1
  53. package/dist/esm/image/getImageData.mjs.map +1 -1
  54. package/dist/esm/image/getImageData.native.js +1 -1
  55. package/dist/esm/image/getImageData.native.js.map +1 -1
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/index.mjs.map +1 -1
  58. package/dist/esm/index.native.js.map +1 -1
  59. package/dist/esm/layouts/Stack.mjs +3 -4
  60. package/dist/esm/layouts/Stack.mjs.map +1 -1
  61. package/dist/esm/layouts/Stack.native.js +3 -4
  62. package/dist/esm/layouts/Stack.native.js.map +1 -1
  63. package/dist/esm/layouts/withLayoutContext.mjs +41 -11
  64. package/dist/esm/layouts/withLayoutContext.mjs.map +1 -1
  65. package/dist/esm/layouts/withLayoutContext.native.js +45 -11
  66. package/dist/esm/layouts/withLayoutContext.native.js.map +1 -1
  67. package/dist/esm/layouts/withLayoutContext.test.mjs +73 -0
  68. package/dist/esm/layouts/withLayoutContext.test.mjs.map +1 -0
  69. package/dist/esm/layouts/withLayoutContext.test.native.js +74 -0
  70. package/dist/esm/layouts/withLayoutContext.test.native.js.map +1 -0
  71. package/dist/esm/router/Route.mjs +3 -1
  72. package/dist/esm/router/Route.mjs.map +1 -1
  73. package/dist/esm/router/Route.native.js +3 -1
  74. package/dist/esm/router/Route.native.js.map +1 -1
  75. package/dist/esm/router/protectedRoutes.test.mjs +23 -0
  76. package/dist/esm/router/protectedRoutes.test.mjs.map +1 -0
  77. package/dist/esm/router/protectedRoutes.test.native.js +23 -0
  78. package/dist/esm/router/protectedRoutes.test.native.js.map +1 -0
  79. package/dist/esm/router/router.mjs +26 -9
  80. package/dist/esm/router/router.mjs.map +1 -1
  81. package/dist/esm/router/router.native.js +26 -9
  82. package/dist/esm/router/router.native.js.map +1 -1
  83. package/dist/esm/router/useScreens.mjs +39 -11
  84. package/dist/esm/router/useScreens.mjs.map +1 -1
  85. package/dist/esm/router/useScreens.native.js +40 -11
  86. package/dist/esm/router/useScreens.native.js.map +1 -1
  87. package/dist/esm/router/useScreens.test.mjs +105 -0
  88. package/dist/esm/router/useScreens.test.mjs.map +1 -0
  89. package/dist/esm/router/useScreens.test.native.js +130 -0
  90. package/dist/esm/router/useScreens.test.native.js.map +1 -0
  91. package/dist/esm/views/Navigator.mjs +15 -7
  92. package/dist/esm/views/Navigator.mjs.map +1 -1
  93. package/dist/esm/views/Navigator.native.js +15 -7
  94. package/dist/esm/views/Navigator.native.js.map +1 -1
  95. package/dist/esm/views/Protected.mjs.map +1 -1
  96. package/dist/esm/views/Protected.native.js.map +1 -1
  97. package/dist/esm/views/SuspenseFallback.mjs +2 -0
  98. package/dist/esm/views/SuspenseFallback.mjs.map +1 -0
  99. package/dist/esm/views/SuspenseFallback.native.js +2 -0
  100. package/dist/esm/views/SuspenseFallback.native.js.map +1 -0
  101. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs +47 -7
  102. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
  103. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js +47 -7
  104. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  105. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.mjs +15 -6
  106. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.mjs.map +1 -1
  107. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.native.js +15 -6
  108. package/dist/esm/vite/plugins/fileSystemRouterPlugin.test.native.js.map +1 -1
  109. package/package.json +11 -11
  110. package/src/cli/dev.ts +0 -1
  111. package/src/cli.ts +0 -3
  112. package/src/image/getImageData.ts +2 -2
  113. package/src/index.ts +1 -0
  114. package/src/layouts/Stack.tsx +4 -4
  115. package/src/layouts/withLayoutContext.test.tsx +74 -0
  116. package/src/layouts/withLayoutContext.tsx +71 -12
  117. package/src/router/Route.tsx +8 -0
  118. package/src/router/protectedRoutes.test.ts +35 -0
  119. package/src/router/router.ts +48 -20
  120. package/src/router/useScreens.test.tsx +139 -0
  121. package/src/router/useScreens.tsx +59 -13
  122. package/src/views/Navigator.tsx +25 -5
  123. package/src/views/Protected.tsx +3 -0
  124. package/src/views/SuspenseFallback.ts +7 -0
  125. package/src/vite/plugins/fileSystemRouterPlugin.test.ts +15 -6
  126. package/src/vite/plugins/fileSystemRouterPlugin.tsx +52 -7
  127. package/types/cli/dev.d.ts +0 -1
  128. package/types/cli/dev.d.ts.map +1 -1
  129. package/types/image/getImageData.d.ts +1 -1
  130. package/types/image/getImageData.d.ts.map +1 -1
  131. package/types/index.d.ts +1 -0
  132. package/types/index.d.ts.map +1 -1
  133. package/types/layouts/withLayoutContext.d.ts +7 -0
  134. package/types/layouts/withLayoutContext.d.ts.map +1 -1
  135. package/types/layouts/withLayoutContext.test.d.ts +2 -0
  136. package/types/layouts/withLayoutContext.test.d.ts.map +1 -0
  137. package/types/router/Route.d.ts +4 -0
  138. package/types/router/Route.d.ts.map +1 -1
  139. package/types/router/protectedRoutes.test.d.ts +2 -0
  140. package/types/router/protectedRoutes.test.d.ts.map +1 -0
  141. package/types/router/router.d.ts +4 -6
  142. package/types/router/router.d.ts.map +1 -1
  143. package/types/router/useScreens.d.ts.map +1 -1
  144. package/types/router/useScreens.test.d.ts +2 -0
  145. package/types/router/useScreens.test.d.ts.map +1 -0
  146. package/types/views/Navigator.d.ts.map +1 -1
  147. package/types/views/Protected.d.ts +3 -0
  148. package/types/views/Protected.d.ts.map +1 -1
  149. package/types/views/SuspenseFallback.d.ts +8 -0
  150. package/types/views/SuspenseFallback.d.ts.map +1 -0
  151. package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContextKey","registerProtectedRoutes","unregisterProtectedRoutes","useSortedScreens","withStaticProperties","isProtectedElement","Screen","StackScreen","jsx","useFilterScreenChildren","children","isCustomNavigator","contextKey","useMemo","customChildren","screens","protectedScreens","Set","flattenChild","child","exclude","isValidElement","type","props","name","Error","process","env","NODE_ENV","some","key","screenProps","add","push","excludeChildren","guard","Children","forEach","nested","console","warn","names","map","screen","size","length","withLayoutContext","Nav","processor","options","forwardRef","propsIn","ref","useEffect","processed","sorted","onlyMatching","id"],"sources":["../../../src/layouts/withLayoutContext.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","getContextKey","stripInvisibleSegmentsFromPath","useContextKey","useRouteNode","registerProtectedRoutes","replace","resolveProtectedHref","routeInfo","unregisterProtectedRoutes","useSortedScreens","sortRoutesWithInitial","withStaticProperties","isProtectedElement","Screen","StackScreen","jsx","useFilterScreenChildren","children","isCustomNavigator","contextKey","useMemo","customChildren","screens","protectedScreens","Set","guardedRedirects","Map","flattenChild","child","exclude","redirectTo","isValidElement","type","props","name","Error","process","env","NODE_ENV","some","key","screenProps","add","set","push","guardFails","guard","excludeChildren","childRedirectTo","Children","forEach","nested","console","warn","names","map","screen","size","length","useResolvedGuardedRedirects","node","defaultRoute","sort","initialRouteName","find","normalized","route","has","defaultHref","Array","from","withLayoutContext","Nav","processor","options","forwardRef","propsIn","ref","resolvedGuardedRedirects","currentPathname","pathname","protectedHref","useEffect","processed","sorted","onlyMatching","id"],"sources":["../../../src/layouts/withLayoutContext.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
- import { useContextKey } from "../router/Route.native.js";
4
- import { registerProtectedRoutes, unregisterProtectedRoutes } from "../router/router.native.js";
3
+ import { getContextKey, stripInvisibleSegmentsFromPath } from "../router/matchers.native.js";
4
+ import { useContextKey, useRouteNode } from "../router/Route.native.js";
5
+ import { registerProtectedRoutes, replace, resolveProtectedHref, routeInfo, unregisterProtectedRoutes } from "../router/router.native.js";
5
6
  import { useSortedScreens } from "../router/useScreens.native.js";
7
+ import { sortRoutesWithInitial } from "../router/sortRoutes.native.js";
6
8
  import { withStaticProperties } from "../utils/withStaticProperties.native.js";
7
9
  import { isProtectedElement } from "../views/Protected.native.js";
8
10
  import { Screen } from "../views/Screen.native.js";
@@ -22,8 +24,10 @@ function useFilterScreenChildren(children) {
22
24
  var customChildren = [];
23
25
  var screens = [];
24
26
  var protectedScreens = /* @__PURE__ */new Set();
27
+ var guardedRedirects = /* @__PURE__ */new Map();
25
28
  function flattenChild(child) {
26
- var exclude = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
29
+ var exclude = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false,
30
+ redirectTo = arguments.length > 2 ? arguments[2] : void 0;
27
31
  if (/* @__PURE__ */React.isValidElement(child) && (child.type === Screen || child.type === StackScreen)) {
28
32
  if (_type_of(child.props) === "object" && child.props && "name" in child.props && !child.props.name) {
29
33
  throw new Error(`<Screen /> component in \`default export\` at \`app${contextKey}/_layout\` must have a \`name\` prop when used as a child of a Layout Route.`);
@@ -38,15 +42,18 @@ function useFilterScreenChildren(children) {
38
42
  var screenProps = child.props;
39
43
  if (exclude && screenProps.name) {
40
44
  protectedScreens.add(screenProps.name);
45
+ guardedRedirects.set(screenProps.name, redirectTo);
41
46
  } else {
42
47
  screens.push(screenProps);
43
48
  }
44
49
  return;
45
50
  }
46
51
  if (isProtectedElement(child)) {
47
- var excludeChildren = exclude || !child.props.guard;
52
+ var guardFails = !child.props.guard;
53
+ var excludeChildren = exclude || guardFails;
54
+ var childRedirectTo = guardFails ? child.props.redirectTo : redirectTo;
48
55
  React.Children.forEach(child.props.children, function (nested) {
49
- flattenChild(nested, excludeChildren);
56
+ flattenChild(nested, excludeChildren, childRedirectTo);
50
57
  });
51
58
  return;
52
59
  }
@@ -70,10 +77,28 @@ function useFilterScreenChildren(children) {
70
77
  return {
71
78
  screens,
72
79
  children: customChildren,
73
- protectedScreens
80
+ protectedScreens,
81
+ guardedRedirects
74
82
  };
75
83
  }, [children, contextKey, isCustomNavigator]);
76
84
  }
85
+ function useResolvedGuardedRedirects(guardedRedirects) {
86
+ var node = useRouteNode();
87
+ return React.useMemo(function () {
88
+ if (!node) {
89
+ return guardedRedirects;
90
+ }
91
+ var defaultRoute = [...node.children].sort(sortRoutesWithInitial(node.initialRouteName)).find(function (child) {
92
+ var normalized = child.route.replace(/\/index$/, "");
93
+ return !(guardedRedirects.has(child.route) || guardedRedirects.has(normalized));
94
+ });
95
+ var defaultHref = defaultRoute ? stripInvisibleSegmentsFromPath(getContextKey(defaultRoute.contextKey)) || "/" : void 0;
96
+ return new Map(Array.from(guardedRedirects, function (param) {
97
+ var [name, redirectTo] = param;
98
+ return [name, redirectTo !== null && redirectTo !== void 0 ? redirectTo : defaultHref];
99
+ }));
100
+ }, [guardedRedirects, node]);
101
+ }
77
102
  function withLayoutContext(Nav, processor, options) {
78
103
  return withStaticProperties(/* @__PURE__ */React.forwardRef(function (propsIn, ref) {
79
104
  var {
@@ -83,17 +108,26 @@ function withLayoutContext(Nav, processor, options) {
83
108
  var contextKey = useContextKey();
84
109
  var {
85
110
  screens,
86
- protectedScreens
111
+ protectedScreens,
112
+ guardedRedirects
87
113
  } = useFilterScreenChildren(children, {
88
114
  contextKey
89
115
  });
90
- registerProtectedRoutes(contextKey, protectedScreens);
116
+ var resolvedGuardedRedirects = useResolvedGuardedRedirects(guardedRedirects);
117
+ registerProtectedRoutes(contextKey, resolvedGuardedRedirects);
118
+ var currentPathname = routeInfo === null || routeInfo === void 0 ? void 0 : routeInfo.pathname;
119
+ var protectedHref = currentPathname ? resolveProtectedHref(currentPathname) : currentPathname;
91
120
  React.useEffect(function () {
92
- registerProtectedRoutes(contextKey, protectedScreens);
121
+ registerProtectedRoutes(contextKey, resolvedGuardedRedirects);
93
122
  return function () {
94
123
  unregisterProtectedRoutes(contextKey);
95
124
  };
96
- }, [contextKey, protectedScreens]);
125
+ }, [contextKey, resolvedGuardedRedirects]);
126
+ React.useEffect(function () {
127
+ if (currentPathname && protectedHref && protectedHref !== currentPathname) {
128
+ replace(protectedHref);
129
+ }
130
+ }, [currentPathname, protectedHref]);
97
131
  var processed = processor ? processor(screens !== null && screens !== void 0 ? screens : []) : screens;
98
132
  var sorted = useSortedScreens(processed !== null && processed !== void 0 ? processed : [], {
99
133
  onlyMatching: true,
@@ -113,5 +147,5 @@ function withLayoutContext(Nav, processor, options) {
113
147
  Screen
114
148
  });
115
149
  }
116
- export { useFilterScreenChildren, withLayoutContext };
150
+ export { useFilterScreenChildren, useResolvedGuardedRedirects, withLayoutContext };
117
151
  //# sourceMappingURL=withLayoutContext.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","React","useContextKey","registerProtectedRoutes","unregisterProtectedRoutes","useSortedScreens","withStaticProperties","isProtectedElement","Screen","StackScreen","_type_of","obj","Symbol","constructor","useFilterScreenChildren","children","isCustomNavigator","contextKey","arguments","length","useMemo","customChildren","screens","protectedScreens","Set","flattenChild","child","exclude","isValidElement","type","props","name","Error","process","env","NODE_ENV","some","key","screenProps","add","push","excludeChildren","guard","Children","forEach","nested","console","warn","names","map","screen","size","withLayoutContext","Nav","processor","options","forwardRef","propsIn","ref","useEffect","processed","sorted","onlyMatching"],"sources":["../../../src/layouts/withLayoutContext.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","React","getContextKey","stripInvisibleSegmentsFromPath","useContextKey","useRouteNode","registerProtectedRoutes","replace","resolveProtectedHref","routeInfo","unregisterProtectedRoutes","useSortedScreens","sortRoutesWithInitial","withStaticProperties","isProtectedElement","Screen","StackScreen","_type_of","obj","Symbol","constructor","useFilterScreenChildren","children","isCustomNavigator","contextKey","arguments","length","useMemo","customChildren","screens","protectedScreens","Set","guardedRedirects","Map","flattenChild","child","exclude","redirectTo","isValidElement","type","props","name","Error","process","env","NODE_ENV","some","key","screenProps","add","set","push","guardFails","guard","excludeChildren","childRedirectTo","Children","forEach","nested","console","warn","names","map","screen","size","useResolvedGuardedRedirects","node","defaultRoute","sort","initialRouteName","find","normalized","route","has","defaultHref","Array","from","param","withLayoutContext","Nav","processor","options","forwardRef","propsIn","ref","resolvedGuardedRedirects","currentPathname","pathname","protectedHref","useEffect","processed"],"sources":["../../../src/layouts/withLayoutContext.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,73 @@
1
+ import TestRenderer, { act } from "react-test-renderer";
2
+ import { describe, expect, it } from "vitest";
3
+ import { Protected } from "../views/Protected.mjs";
4
+ import { Screen } from "../views/Screen.mjs";
5
+ import { useFilterScreenChildren } from "./withLayoutContext.mjs";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function readGuardedRedirects(children) {
8
+ let result;
9
+ function Capture() {
10
+ result = useFilterScreenChildren(children);
11
+ return null;
12
+ }
13
+ act(() => {
14
+ TestRenderer.create(/* @__PURE__ */jsx(Capture, {}));
15
+ });
16
+ return result.guardedRedirects;
17
+ }
18
+ describe("Protected redirectTo", () => {
19
+ it("associates a failed guard redirect with each protected screen", () => {
20
+ const redirects = readGuardedRedirects(/* @__PURE__ */jsxs(Protected, {
21
+ guard: false,
22
+ redirectTo: "/login",
23
+ children: [/* @__PURE__ */jsx(Screen, {
24
+ name: "dashboard"
25
+ }), /* @__PURE__ */jsx(Screen, {
26
+ name: "settings"
27
+ })]
28
+ }));
29
+ expect(Array.from(redirects)).toEqual([["dashboard", "/login"], ["settings", "/login"]]);
30
+ });
31
+ it("uses the innermost failing guard redirect", () => {
32
+ const redirects = readGuardedRedirects(/* @__PURE__ */jsx(Protected, {
33
+ guard: false,
34
+ redirectTo: "/login",
35
+ children: /* @__PURE__ */jsx(Protected, {
36
+ guard: false,
37
+ redirectTo: "/subscribe",
38
+ children: /* @__PURE__ */jsx(Screen, {
39
+ name: "premium"
40
+ })
41
+ })
42
+ }));
43
+ expect(redirects.get("premium")).toBe("/subscribe");
44
+ });
45
+ it("inherits a failed parent redirect through a passing child guard", () => {
46
+ const redirects = readGuardedRedirects(/* @__PURE__ */jsx(Protected, {
47
+ guard: false,
48
+ redirectTo: "/login",
49
+ children: /* @__PURE__ */jsx(Protected, {
50
+ guard: true,
51
+ children: /* @__PURE__ */jsx(Screen, {
52
+ name: "account"
53
+ })
54
+ })
55
+ }));
56
+ expect(redirects.get("account")).toBe("/login");
57
+ });
58
+ it("ignores redirectTo on a passing parent guard", () => {
59
+ const redirects = readGuardedRedirects(/* @__PURE__ */jsx(Protected, {
60
+ guard: true,
61
+ redirectTo: "/login",
62
+ children: /* @__PURE__ */jsx(Protected, {
63
+ guard: false,
64
+ children: /* @__PURE__ */jsx(Screen, {
65
+ name: "account"
66
+ })
67
+ })
68
+ }));
69
+ expect(redirects.has("account")).toBe(true);
70
+ expect(redirects.get("account")).toBeUndefined();
71
+ });
72
+ });
73
+ //# sourceMappingURL=withLayoutContext.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TestRenderer","act","describe","expect","it","Protected","Screen","useFilterScreenChildren","jsx","jsxs","readGuardedRedirects","children","result","Capture","create","guardedRedirects","redirects","guard","redirectTo","name","Array","from","toEqual","get","toBe","has","toBeUndefined"],"sources":["../../../src/layouts/withLayoutContext.test.tsx"],"sourcesContent":[null],"mappings":"AACA,OAAOA,YAAA,IAAgBC,GAAA,QAAW;AAClC,SAASC,QAAA,EAAUC,MAAA,EAAQC,EAAA,QAAU;AACrC,SAASC,SAAA,QAAiB;AAC1B,SAASC,MAAA,QAAc;AACvB,SAASC,uBAAA,QAA+B;AAWhB,SAAAC,GAAA,EASlBC,IAAA,QATkB;AATxB,SAASC,qBAAqBC,QAAA,EAA2B;EACvD,IAAIC,MAAA;EAEJ,SAASC,QAAA,EAAU;IACjBD,MAAA,GAASL,uBAAA,CAAwBI,QAAQ;IACzC,OAAO;EACT;EAEAV,GAAA,CAAI,MAAM;IACRD,YAAA,CAAac,MAAA,CAAO,eAAAN,GAAA,CAACK,OAAA,IAAQ,CAAE;EACjC,CAAC;EAED,OAAOD,MAAA,CAAQG,gBAAA;AACjB;AAEAb,QAAA,CAAS,wBAAwB,MAAM;EACrCE,EAAA,CAAG,iEAAiE,MAAM;IACxE,MAAMY,SAAA,GAAYN,oBAAA,CAChB,eAAAD,IAAA,CAACJ,SAAA;MAAUY,KAAA,EAAO;MAAOC,UAAA,EAAW;MAClCP,QAAA,kBAAAH,GAAA,CAACF,MAAA;QAAOa,IAAA,EAAK;MAAA,CAAY,GACzB,eAAAX,GAAA,CAACF,MAAA;QAAOa,IAAA,EAAK;MAAA,CAAW;IAAA,CAC1B,CACF;IAEAhB,MAAA,CAAOiB,KAAA,CAAMC,IAAA,CAAKL,SAAS,CAAC,EAAEM,OAAA,CAAQ,CACpC,CAAC,aAAa,QAAQ,GACtB,CAAC,YAAY,QAAQ,EACtB;EACH,CAAC;EAEDlB,EAAA,CAAG,6CAA6C,MAAM;IACpD,MAAMY,SAAA,GAAYN,oBAAA,CAChB,eAAAF,GAAA,CAACH,SAAA;MAAUY,KAAA,EAAO;MAAOC,UAAA,EAAW;MAClCP,QAAA,iBAAAH,GAAA,CAACH,SAAA;QAAUY,KAAA,EAAO;QAAOC,UAAA,EAAW;QAClCP,QAAA,iBAAAH,GAAA,CAACF,MAAA;UAAOa,IAAA,EAAK;QAAA,CAAU;MAAA,CACzB;IAAA,CACF,CACF;IAEAhB,MAAA,CAAOa,SAAA,CAAUO,GAAA,CAAI,SAAS,CAAC,EAAEC,IAAA,CAAK,YAAY;EACpD,CAAC;EAEDpB,EAAA,CAAG,mEAAmE,MAAM;IAC1E,MAAMY,SAAA,GAAYN,oBAAA,CAChB,eAAAF,GAAA,CAACH,SAAA;MAAUY,KAAA,EAAO;MAAOC,UAAA,EAAW;MAClCP,QAAA,iBAAAH,GAAA,CAACH,SAAA;QAAUY,KAAA,EAAK;QACdN,QAAA,iBAAAH,GAAA,CAACF,MAAA;UAAOa,IAAA,EAAK;QAAA,CAAU;MAAA,CACzB;IAAA,CACF,CACF;IAEAhB,MAAA,CAAOa,SAAA,CAAUO,GAAA,CAAI,SAAS,CAAC,EAAEC,IAAA,CAAK,QAAQ;EAChD,CAAC;EAEDpB,EAAA,CAAG,gDAAgD,MAAM;IACvD,MAAMY,SAAA,GAAYN,oBAAA,CAChB,eAAAF,GAAA,CAACH,SAAA;MAAUY,KAAA,EAAK;MAACC,UAAA,EAAW;MAC1BP,QAAA,iBAAAH,GAAA,CAACH,SAAA;QAAUY,KAAA,EAAO;QAChBN,QAAA,iBAAAH,GAAA,CAACF,MAAA;UAAOa,IAAA,EAAK;QAAA,CAAU;MAAA,CACzB;IAAA,CACF,CACF;IAEAhB,MAAA,CAAOa,SAAA,CAAUS,GAAA,CAAI,SAAS,CAAC,EAAED,IAAA,CAAK,IAAI;IAC1CrB,MAAA,CAAOa,SAAA,CAAUO,GAAA,CAAI,SAAS,CAAC,EAAEG,aAAA,CAAc;EACjD,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import TestRenderer, { act } from "react-test-renderer";
4
+ import { describe, expect, it } from "vitest";
5
+ import { Protected } from "../views/Protected.native.js";
6
+ import { Screen } from "../views/Screen.native.js";
7
+ import { useFilterScreenChildren } from "./withLayoutContext.native.js";
8
+ function readGuardedRedirects(children) {
9
+ var result;
10
+ function Capture() {
11
+ result = useFilterScreenChildren(children);
12
+ return null;
13
+ }
14
+ act(function () {
15
+ TestRenderer.create(/* @__PURE__ */_jsx(Capture, {}));
16
+ });
17
+ return result.guardedRedirects;
18
+ }
19
+ describe("Protected redirectTo", function () {
20
+ it("associates a failed guard redirect with each protected screen", function () {
21
+ var redirects = readGuardedRedirects(/* @__PURE__ */_jsxs(Protected, {
22
+ guard: false,
23
+ redirectTo: "/login",
24
+ children: [/* @__PURE__ */_jsx(Screen, {
25
+ name: "dashboard"
26
+ }), /* @__PURE__ */_jsx(Screen, {
27
+ name: "settings"
28
+ })]
29
+ }));
30
+ expect(Array.from(redirects)).toEqual([["dashboard", "/login"], ["settings", "/login"]]);
31
+ });
32
+ it("uses the innermost failing guard redirect", function () {
33
+ var redirects = readGuardedRedirects(/* @__PURE__ */_jsx(Protected, {
34
+ guard: false,
35
+ redirectTo: "/login",
36
+ children: /* @__PURE__ */_jsx(Protected, {
37
+ guard: false,
38
+ redirectTo: "/subscribe",
39
+ children: /* @__PURE__ */_jsx(Screen, {
40
+ name: "premium"
41
+ })
42
+ })
43
+ }));
44
+ expect(redirects.get("premium")).toBe("/subscribe");
45
+ });
46
+ it("inherits a failed parent redirect through a passing child guard", function () {
47
+ var redirects = readGuardedRedirects(/* @__PURE__ */_jsx(Protected, {
48
+ guard: false,
49
+ redirectTo: "/login",
50
+ children: /* @__PURE__ */_jsx(Protected, {
51
+ guard: true,
52
+ children: /* @__PURE__ */_jsx(Screen, {
53
+ name: "account"
54
+ })
55
+ })
56
+ }));
57
+ expect(redirects.get("account")).toBe("/login");
58
+ });
59
+ it("ignores redirectTo on a passing parent guard", function () {
60
+ var redirects = readGuardedRedirects(/* @__PURE__ */_jsx(Protected, {
61
+ guard: true,
62
+ redirectTo: "/login",
63
+ children: /* @__PURE__ */_jsx(Protected, {
64
+ guard: false,
65
+ children: /* @__PURE__ */_jsx(Screen, {
66
+ name: "account"
67
+ })
68
+ })
69
+ }));
70
+ expect(redirects.has("account")).toBe(true);
71
+ expect(redirects.get("account")).toBeUndefined();
72
+ });
73
+ });
74
+ //# sourceMappingURL=withLayoutContext.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","React","TestRenderer","act","describe","expect","it","Protected","Screen","useFilterScreenChildren","readGuardedRedirects","children","result","Capture","create","guardedRedirects","redirects","guard","redirectTo","name","Array","from","toEqual"],"sources":["../../../src/layouts/withLayoutContext.test.tsx"],"sourcesContent":[null],"mappings":"AACA,SAAOA,GAAA,IAAAC,IAAA,EAAAC,IAAgB,IAAAC,KAAW;AAClC,OAAAC,KAAS,aAAU;AACnB,OAAAC,YAAS,IAAAC,GAAiB;AAC1B,SAASC,QAAA,EAAAC,MAAc,EAAAC,EAAA;AACvB,SAASC,SAAA,sCAA+B;AAWhB,SAAAC,MASlB,mCATkB;AATxB,SAASC,uBAAqB,QAA2B;AACvD,SAAIC,qBAAAC,QAAA;EAEJ,IAAAC,MAAS;EACP,SAAAC,OAASA,CAAA;IACTD,MAAA,GAAOH,uBAAA,CAAAE,QAAA;IACT;EAEA;EACER,GAAA,aAAa;IACdD,YAAA,CAAAY,MAAA,gBAAAhB,IAAA,CAAAe,OAAA;EAED;EACF,OAAAD,MAAA,CAAAG,gBAAA;AAEA;AACEX,QAAG;EACDE,EAAA,gEAAkB;IAAA,IAChBU,SAAA,GAAAN,oBAAW,gBAAcV,KAAA,CAAAO,SAAW;MAClCU,KAAA;MAAyBC,UACzB;MAAwBP,QAC1B,GACF,eAAAb,IAAA,CAAAU,MAAA;QAEAW,IAAO;MACJ,IACA,eAAYrB,IAAQ,CAAAU,MAAA;QACtBW,IAAA;MACF;IAGC;IAAkBd,MAChB,CAAAe,KAAA,CAAAC,IAAA,CAAAL,SAAC,GAAAM,OAAU,EAKb,CAEA,WAAO,EACR,SAEE,EACD,CACE,YAKF,SAEA,CACD;EAED;EACEhB,EAAA,4CAAkB;IAAA,IAChBU,SAAA,GAAAN,oBAAW,gBAAMZ,IAAA,CAAAS,SAAW;MAK9BU,KAAA;MAEAC,UAAO,UAAc;MACrBP,QAAO,iBAAcb,IAAU,CAAES,SAAA;QAClCU,KAAA;QACFC,UAAA","ignoreList":[]}
@@ -9,8 +9,10 @@ import { RouteInfoContextProvider } from "./RouteInfoContext.mjs";
9
9
  import { jsx } from "react/jsx-runtime";
10
10
  const RouteParamsContext = createContext({});
11
11
  const CurrentRouteContext = React.createContext(null);
12
+ const SuspenseFallbackContext = createContext(void 0);
12
13
  if (process.env.NODE_ENV !== "production") {
13
14
  CurrentRouteContext.displayName = "RouteNode";
15
+ SuspenseFallbackContext.displayName = "SuspenseFallback";
14
16
  }
15
17
  function useRouteNode() {
16
18
  return useContext(CurrentRouteContext);
@@ -58,5 +60,5 @@ function Route({
58
60
  })
59
61
  });
60
62
  }
61
- export { Route, RouteParamsContext, useContextKey, useRouteNode };
63
+ export { Route, RouteParamsContext, SuspenseFallbackContext, useContextKey, useRouteNode };
62
64
  //# sourceMappingURL=Route.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useContext","findFocusedRoute","getResolvedLinking","getContextKey","mergeDynamicParams","getPathWithRecoveredDynamicSegment","routeInfo","RouteInfoContextProvider","jsx","RouteParamsContext","CurrentRouteContext","process","env","NODE_ENV","displayName","useRouteNode","useContextKey","node","Error","contextKey","getParamsFromCurrentUrl","route","linking","getStateFromPath","path","unstable_globalHref","state","config","focused","params","Route","children","parentParams","resolvedParams","useMemo","rp","ownParams","dynamic","length","Provider","value"],"sources":["../../../src/router/Route.tsx"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,KAAA,IAASC,aAAA,EAA+BC,UAAA,QAAkB;AACjE,SAASC,gBAAA,QAAwB;AAKjC,SAASC,kBAAA,QAA0B;AACnC,SAASC,aAAA,QAAqB;AAC9B,SAASC,kBAAA,QAA0B;AACnC,SAASC,kCAAA,QAA0C;AACnD,SAASC,SAAA,QAAiB;AAC1B,SAASC,wBAAA,QAAgC;AAmMjC,SAAAC,GAAA;AAtFD,MAAMC,kBAAA,GAAqBV,aAAA,CAEhC,CAAC,CAAC;AAEJ,MAAMW,mBAAA,GAAsBZ,KAAA,CAAMC,aAAA,CAAgC,IAAI;AAEtE,IAAIY,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,cAAc;EACzCH,mBAAA,CAAoBI,WAAA,GAAc;AACpC;AAGO,SAASC,aAAA,EAAiC;EAC/C,OAAOf,UAAA,CAAWU,mBAAmB;AACvC;AAEO,SAASM,cAAA,EAAwB;EACtC,MAAMC,IAAA,GAAOF,YAAA,CAAa;EAC1B,IAAIE,IAAA,IAAQ,MAAM;IAChB,MAAM,IAAIC,KAAA,CAAM,oDAAoD;EACtE;EACA,OAAOf,aAAA,CAAcc,IAAA,CAAKE,UAAU;AACtC;AAWA,SAASC,wBAAwBC,KAAA,EAGG;EAClC,MAAMC,OAAA,GAAUpB,kBAAA,CAAmB;EACnC,IAAI,CAACoB,OAAA,EAASC,gBAAA,EAAkB,OAAO;EACvC,MAAMC,IAAA,GAAOnB,kCAAA,CAAmC,CAC9CC,SAAA,EAAWmB,mBAAA,EACXJ,KAAA,EAAOG,IAAA,CACR;EACD,IAAI,CAACA,IAAA,EAAM,OAAO;EAClB,MAAME,KAAA,GAAQJ,OAAA,CAAQC,gBAAA,CAAiBC,IAAA,EAAMF,OAAA,CAAQK,MAAM;EAC3D,IAAI,CAACD,KAAA,EAAO,OAAO;EACnB,MAAME,OAAA,GAAU3B,gBAAA,CAAiByB,KAAK;EACtC,OAAOE,OAAA,EAASC,MAAA;AAClB;AAGO,SAASC,MAAM;EACpBC,QAAA;EACAd,IAAA;EACAI;AACF,GAOG;EACD,MAAMW,YAAA,GAAehC,UAAA,CAAWS,kBAAkB;EAUlD,MAAMwB,cAAA,GAAiBnC,KAAA,CAAMoC,OAAA,CAAQ,MAAM;IACzC,MAAMC,EAAA,GAAKd,KAAA,EAAOQ,MAAA;IAClB,MAAMO,SAAA,GAAYnB,IAAA,CAAKoB,OAAA,EAASC,MAAA,GAC5BlC,kBAAA,CAAmB+B,EAAA,EAAIlB,IAAA,CAAKoB,OAAA,EAASjB,uBAAA,CAAwBC,KAAK,CAAC,IACnEc,EAAA;IAEJ,IAAI,CAACH,YAAA,EAAc,OAAOI,SAAA;IAC1B,IAAI,CAACA,SAAA,EAAW,OAAOJ,YAAA;IACvB,OAAO;MAAE,GAAGA,YAAA;MAAc,GAAGI;IAAU;EACzC,GAAG,CAACnB,IAAA,EAAMe,YAAA,EAAcX,KAAA,EAAOf,SAAA,EAAWmB,mBAAmB,CAAC;EAE9D,OACE,eAAAjB,GAAA,CAACC,kBAAA,CAAmB8B,QAAA,EAAnB;IAA4BC,KAAA,EAAOP,cAAA;IAClCF,QAAA,iBAAAvB,GAAA,CAACE,mBAAA,CAAoB6B,QAAA,EAApB;MAA6BC,KAAA,EAAOvB,IAAA;MACnCc,QAAA,iBAAAvB,GAAA,CAACD,wBAAA;QAA0BwB;MAAA,CAAS;IAAA,CACtC;EAAA,CACF;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useContext","findFocusedRoute","getResolvedLinking","getContextKey","mergeDynamicParams","getPathWithRecoveredDynamicSegment","routeInfo","RouteInfoContextProvider","jsx","RouteParamsContext","CurrentRouteContext","SuspenseFallbackContext","process","env","NODE_ENV","displayName","useRouteNode","useContextKey","node","Error","contextKey","getParamsFromCurrentUrl","route","linking","getStateFromPath","path","unstable_globalHref","state","config","focused","params","Route","children","parentParams","resolvedParams","useMemo","rp","ownParams","dynamic","length","Provider","value"],"sources":["../../../src/router/Route.tsx"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,KAAA,IAASC,aAAA,EAA+BC,UAAA,QAAkB;AACjE,SAASC,gBAAA,QAAwB;AAMjC,SAASC,kBAAA,QAA0B;AACnC,SAASC,aAAA,QAAqB;AAC9B,SAASC,kBAAA,QAA0B;AACnC,SAASC,kCAAA,QAA0C;AACnD,SAASC,SAAA,QAAiB;AAC1B,SAASC,wBAAA,QAAgC;AA0MjC,SAAAC,GAAA;AA5FD,MAAMC,kBAAA,GAAqBV,aAAA,CAEhC,CAAC,CAAC;AAEJ,MAAMW,mBAAA,GAAsBZ,KAAA,CAAMC,aAAA,CAAgC,IAAI;AAG/D,MAAMY,uBAAA,GAA0BZ,aAAA,CAErC,MAAS;AAEX,IAAIa,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,cAAc;EACzCJ,mBAAA,CAAoBK,WAAA,GAAc;EAClCJ,uBAAA,CAAwBI,WAAA,GAAc;AACxC;AAGO,SAASC,aAAA,EAAiC;EAC/C,OAAOhB,UAAA,CAAWU,mBAAmB;AACvC;AAEO,SAASO,cAAA,EAAwB;EACtC,MAAMC,IAAA,GAAOF,YAAA,CAAa;EAC1B,IAAIE,IAAA,IAAQ,MAAM;IAChB,MAAM,IAAIC,KAAA,CAAM,oDAAoD;EACtE;EACA,OAAOhB,aAAA,CAAce,IAAA,CAAKE,UAAU;AACtC;AAWA,SAASC,wBAAwBC,KAAA,EAGG;EAClC,MAAMC,OAAA,GAAUrB,kBAAA,CAAmB;EACnC,IAAI,CAACqB,OAAA,EAASC,gBAAA,EAAkB,OAAO;EACvC,MAAMC,IAAA,GAAOpB,kCAAA,CAAmC,CAC9CC,SAAA,EAAWoB,mBAAA,EACXJ,KAAA,EAAOG,IAAA,CACR;EACD,IAAI,CAACA,IAAA,EAAM,OAAO;EAClB,MAAME,KAAA,GAAQJ,OAAA,CAAQC,gBAAA,CAAiBC,IAAA,EAAMF,OAAA,CAAQK,MAAM;EAC3D,IAAI,CAACD,KAAA,EAAO,OAAO;EACnB,MAAME,OAAA,GAAU5B,gBAAA,CAAiB0B,KAAK;EACtC,OAAOE,OAAA,EAASC,MAAA;AAClB;AAGO,SAASC,MAAM;EACpBC,QAAA;EACAd,IAAA;EACAI;AACF,GAOG;EACD,MAAMW,YAAA,GAAejC,UAAA,CAAWS,kBAAkB;EAUlD,MAAMyB,cAAA,GAAiBpC,KAAA,CAAMqC,OAAA,CAAQ,MAAM;IACzC,MAAMC,EAAA,GAAKd,KAAA,EAAOQ,MAAA;IAClB,MAAMO,SAAA,GAAYnB,IAAA,CAAKoB,OAAA,EAASC,MAAA,GAC5BnC,kBAAA,CAAmBgC,EAAA,EAAIlB,IAAA,CAAKoB,OAAA,EAASjB,uBAAA,CAAwBC,KAAK,CAAC,IACnEc,EAAA;IAEJ,IAAI,CAACH,YAAA,EAAc,OAAOI,SAAA;IAC1B,IAAI,CAACA,SAAA,EAAW,OAAOJ,YAAA;IACvB,OAAO;MAAE,GAAGA,YAAA;MAAc,GAAGI;IAAU;EACzC,GAAG,CAACnB,IAAA,EAAMe,YAAA,EAAcX,KAAA,EAAOhB,SAAA,EAAWoB,mBAAmB,CAAC;EAE9D,OACE,eAAAlB,GAAA,CAACC,kBAAA,CAAmB+B,QAAA,EAAnB;IAA4BC,KAAA,EAAOP,cAAA;IAClCF,QAAA,iBAAAxB,GAAA,CAACE,mBAAA,CAAoB8B,QAAA,EAApB;MAA6BC,KAAA,EAAOvB,IAAA;MACnCc,QAAA,iBAAAxB,GAAA,CAACD,wBAAA;QAA0ByB;MAAA,CAAS;IAAA,CACtC;EAAA,CACF;AAEJ","ignoreList":[]}
@@ -9,8 +9,10 @@ import { routeInfo } from "./router.native.js";
9
9
  import { RouteInfoContextProvider } from "./RouteInfoContext.native.js";
10
10
  var RouteParamsContext = /* @__PURE__ */createContext({});
11
11
  var CurrentRouteContext = /* @__PURE__ */React.createContext(null);
12
+ var SuspenseFallbackContext = /* @__PURE__ */createContext(void 0);
12
13
  if (process.env.NODE_ENV !== "production") {
13
14
  CurrentRouteContext.displayName = "RouteNode";
15
+ SuspenseFallbackContext.displayName = "SuspenseFallback";
14
16
  }
15
17
  function useRouteNode() {
16
18
  return useContext(CurrentRouteContext);
@@ -60,5 +62,5 @@ function Route(param) {
60
62
  })
61
63
  });
62
64
  }
63
- export { Route, RouteParamsContext, useContextKey, useRouteNode };
65
+ export { Route, RouteParamsContext, SuspenseFallbackContext, useContextKey, useRouteNode };
64
66
  //# sourceMappingURL=Route.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","React","createContext","useContext","findFocusedRoute","getResolvedLinking","getContextKey","mergeDynamicParams","getPathWithRecoveredDynamicSegment","routeInfo","RouteInfoContextProvider","RouteParamsContext","CurrentRouteContext","process","env","NODE_ENV","displayName","useRouteNode","useContextKey","node","Error","contextKey","getParamsFromCurrentUrl","route","linking","getStateFromPath","path","unstable_globalHref","state","config","focused","params","Route","param","children","parentParams","resolvedParams","useMemo","_node_dynamic","rp","ownParams","dynamic","length"],"sources":["../../../src/router/Route.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAAOA,GAAA,IAASC,IAAA,2BAA+B;AAC/C,OAAAC,KAAS,IAAAC,aAAA,EAAAC,UAAwB;AAKjC,SAASC,gBAAA,4CAA0B;AACnC,SAASC,kBAAA,QAAqB;AAC9B,SAASC,aAAA,8BAA0B;AACnC,SAASC,kBAAA;AACT,SAASC,kCAAiB;AAC1B,SAASC,SAAA;AAmMD,SAAAC,wBAAA;AAtFD,IAAAC,kBAAM,kBAEXT,aAAE;AAEJ,IAAAU,mBAAM,kBAA4BX,KAAA,CAAgCC,aAAI;AAEtE,IAAIW,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,cAAc;EACzCH,mBAAA,CAAoBI,WAAA,GAAc;AACpC;AAGO,SAASC,aAAA,EAAiC;EAC/C,OAAOd,UAAA,CAAWS,mBAAmB;AACvC;AAEO,SAASM,cAAA,EAAwB;EACtC,IAAAC,IAAM,GAAAF,YAAO;EACb,IAAIE,IAAA,IAAQ,MAAM;IAChB,MAAM,IAAIC,KAAA,CAAM,oDAAoD;EACtE;EACA,OAAOd,aAAA,CAAca,IAAA,CAAKE,UAAU;AACtC;AAWA,SAASC,wBAAwBC,KAAA,EAGG;EAClC,IAAAC,OAAM,GAAAnB,kBAAU;EAChB,IAAI,EAACmB,OAAA,KAAS,QAAAA,OAAkB,UAAO,aAAAA,OAAA,CAAAC,gBAAA;EACvC,IAAAC,IAAM,GAAAlB,kCAAO,EACXC,SAAA,KAAW,QAAAA,SAAA,uBAAAA,SAAA,CAAAkB,mBAAA,EACXJ,KAAA,KAAO,QAAAA,KAAA,uBAAAA,KAAA,CAAAG,IAAA,CACR;EACD,IAAI,CAACA,IAAA,EAAM,OAAO;EAClB,IAAAE,KAAM,GAAAJ,OAAQ,CAAAC,gBAAQ,CAAAC,IAAiB,EAAAF,OAAM,CAAAK,MAAQ;EACrD,IAAI,CAACD,KAAA,EAAO,OAAO;EACnB,IAAAE,OAAM,GAAA1B,gBAAU,CAAAwB,KAAiB;EACjC,OAAOE,OAAA,KAAS,QAAAA,OAAA,uBAAAA,OAAA,CAAAC,MAAA;AAClB;AAGO,SAASC,MAAMC,KAAA;EACpB;IAAAC,QAAA;IAAAf,IAAA;IAAAI;EAAA,IAAAU,KAAA;EACA,IAAAE,YAAA,GAAAhC,UAAA,CAAAQ,kBAAA;EACA,IAAAyB,cAAA,GAAAnC,KAAA,CAAAoC,OAAA;IAQC,IAAAC,aAAA;IACD,IAAMC,EAAA,GAAAhB,KAAA,KAAe,QAAAA,KAAW,mBAAkB,IAAAA,KAAA,CAAAQ,MAAA;IAUlD,IAAMS,SAAA,KAAAF,aAAuB,GAAAnB,IAAQ,CAAAsB,OAAM,cAAAH,aAAA,uBAAAA,aAAA,CAAAI,MAAA,IAAAnC,kBAAA,CAAAgC,EAAA,EAAApB,IAAA,CAAAsB,OAAA,EAAAnB,uBAAA,CAAAC,KAAA,KAAAgB,EAAA;IACzC,KAAAJ,YAAW,EAAO,OAAAK,SAAA;IAClB,KAAAA,SAAM,SAAiBL,YAAS;IAIhC,OAAK;MACL,GAAKA,YAAW;MAChB,GAAAK;IACF,CAAG;EAEH,IAOFrB,IAAA,E","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","React","createContext","useContext","findFocusedRoute","getResolvedLinking","getContextKey","mergeDynamicParams","getPathWithRecoveredDynamicSegment","routeInfo","RouteInfoContextProvider","RouteParamsContext","CurrentRouteContext","SuspenseFallbackContext","process","env","NODE_ENV","displayName","useRouteNode","useContextKey","node","Error","contextKey","getParamsFromCurrentUrl","route","linking","getStateFromPath","path","unstable_globalHref","state","config","focused","params","Route","param","children","parentParams","resolvedParams","useMemo","_node_dynamic","rp","ownParams","dynamic","length"],"sources":["../../../src/router/Route.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAAOA,GAAA,IAASC,IAAA,2BAA+B;AAC/C,OAAAC,KAAS,IAAAC,aAAA,EAAAC,UAAwB;AAMjC,SAASC,gBAAA,4CAA0B;AACnC,SAASC,kBAAA,QAAqB;AAC9B,SAASC,aAAA,8BAA0B;AACnC,SAASC,kBAAA;AACT,SAASC,kCAAiB;AAC1B,SAASC,SAAA;AA0MD,SAAAC,wBAAA;AA5FD,IAAAC,kBAAM,kBAEXT,aAAE;AAEJ,IAAAU,mBAAM,kBAA4BX,KAAA,CAAgCC,aAAI;AAG/D,IAAAW,uBAAM,kBAEXX,aAAS;AAEX,IAAIY,OAAA,CAAQC,GAAA,CAAIC,QAAA,KAAa,cAAc;EACzCJ,mBAAA,CAAoBK,WAAA,GAAc;EAClCJ,uBAAA,CAAwBI,WAAA,GAAc;AACxC;AAGO,SAASC,aAAA,EAAiC;EAC/C,OAAOf,UAAA,CAAWS,mBAAmB;AACvC;AAEO,SAASO,cAAA,EAAwB;EACtC,IAAAC,IAAM,GAAAF,YAAO;EACb,IAAIE,IAAA,IAAQ,MAAM;IAChB,MAAM,IAAIC,KAAA,CAAM,oDAAoD;EACtE;EACA,OAAOf,aAAA,CAAcc,IAAA,CAAKE,UAAU;AACtC;AAWA,SAASC,wBAAwBC,KAAA,EAGG;EAClC,IAAAC,OAAM,GAAApB,kBAAU;EAChB,IAAI,EAACoB,OAAA,KAAS,QAAAA,OAAkB,UAAO,aAAAA,OAAA,CAAAC,gBAAA;EACvC,IAAAC,IAAM,GAAAnB,kCAAO,EACXC,SAAA,KAAW,QAAAA,SAAA,uBAAAA,SAAA,CAAAmB,mBAAA,EACXJ,KAAA,KAAO,QAAAA,KAAA,uBAAAA,KAAA,CAAAG,IAAA,CACR;EACD,IAAI,CAACA,IAAA,EAAM,OAAO;EAClB,IAAAE,KAAM,GAAAJ,OAAQ,CAAAC,gBAAQ,CAAAC,IAAiB,EAAAF,OAAM,CAAAK,MAAQ;EACrD,IAAI,CAACD,KAAA,EAAO,OAAO;EACnB,IAAAE,OAAM,GAAA3B,gBAAU,CAAAyB,KAAiB;EACjC,OAAOE,OAAA,KAAS,QAAAA,OAAA,uBAAAA,OAAA,CAAAC,MAAA;AAClB;AAGO,SAASC,MAAMC,KAAA;EACpB;IAAAC,QAAA;IAAAf,IAAA;IAAAI;EAAA,IAAAU,KAAA;EACA,IAAAE,YAAA,GAAAjC,UAAA,CAAAQ,kBAAA;EACA,IAAA0B,cAAA,GAAApC,KAAA,CAAAqC,OAAA;IAQC,IAAAC,aAAA;IACD,IAAMC,EAAA,GAAAhB,KAAA,KAAe,QAAAA,KAAW,mBAAkB,IAAAA,KAAA,CAAAQ,MAAA;IAUlD,IAAMS,SAAA,KAAAF,aAAuB,GAAAnB,IAAQ,CAAAsB,OAAM,cAAAH,aAAA,uBAAAA,aAAA,CAAAI,MAAA,IAAApC,kBAAA,CAAAiC,EAAA,EAAApB,IAAA,CAAAsB,OAAA,EAAAnB,uBAAA,CAAAC,KAAA,KAAAgB,EAAA;IACzC,KAAAJ,YAAW,EAAO,OAAAK,SAAA;IAClB,KAAAA,SAAM,SAAiBL,YAAS;IAIhC,OAAK;MACL,GAAKA,YAAW;MAChB,GAAAK;IACF,CAAG;EAEH,IAOFrB,IAAA,E","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import { afterEach, describe, expect, it } from "vitest";
2
+ import { isRouteProtected, registerProtectedRoutes, resolveProtectedHref, unregisterProtectedRoutes } from "./router.mjs";
3
+ const contextKey = "/account";
4
+ afterEach(() => {
5
+ unregisterProtectedRoutes(contextKey);
6
+ });
7
+ describe("protected route redirects", () => {
8
+ it("resolves a protected href to its redirect target", () => {
9
+ registerProtectedRoutes(contextKey, /* @__PURE__ */new Map([["settings", "/login"]]));
10
+ expect(isRouteProtected("/account/settings?tab=billing")).toBe(true);
11
+ expect(resolveProtectedHref("/account/settings?tab=billing")).toBe("/login");
12
+ });
13
+ it("blocks a protected href without an explicit target", () => {
14
+ registerProtectedRoutes(contextKey, /* @__PURE__ */new Map([["settings", void 0]]));
15
+ expect(resolveProtectedHref("/account/settings")).toBeUndefined();
16
+ });
17
+ it("leaves allowed and similarly prefixed routes unchanged", () => {
18
+ registerProtectedRoutes(contextKey, /* @__PURE__ */new Map([["settings", "/login"]]));
19
+ expect(resolveProtectedHref("/account/profile")).toBe("/account/profile");
20
+ expect(resolveProtectedHref("/accounting/settings")).toBe("/accounting/settings");
21
+ });
22
+ });
23
+ //# sourceMappingURL=protectedRoutes.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["afterEach","describe","expect","it","isRouteProtected","registerProtectedRoutes","resolveProtectedHref","unregisterProtectedRoutes","contextKey","Map","toBe","toBeUndefined"],"sources":["../../../src/router/protectedRoutes.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,EAAWC,QAAA,EAAUC,MAAA,EAAQC,EAAA,QAAU;AAChD,SACEC,gBAAA,EACAC,uBAAA,EACAC,oBAAA,EACAC,yBAAA,QACK;AAEP,MAAMC,UAAA,GAAa;AAEnBR,SAAA,CAAU,MAAM;EACdO,yBAAA,CAA0BC,UAAU;AACtC,CAAC;AAEDP,QAAA,CAAS,6BAA6B,MAAM;EAC1CE,EAAA,CAAG,oDAAoD,MAAM;IAC3DE,uBAAA,CAAwBG,UAAA,EAAY,mBAAIC,GAAA,CAAI,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC;IAErEP,MAAA,CAAOE,gBAAA,CAAiB,+BAA+B,CAAC,EAAEM,IAAA,CAAK,IAAI;IACnER,MAAA,CAAOI,oBAAA,CAAqB,+BAA+B,CAAC,EAAEI,IAAA,CAAK,QAAQ;EAC7E,CAAC;EAEDP,EAAA,CAAG,sDAAsD,MAAM;IAC7DE,uBAAA,CAAwBG,UAAA,EAAY,mBAAIC,GAAA,CAAI,CAAC,CAAC,YAAY,MAAS,CAAC,CAAC,CAAC;IAEtEP,MAAA,CAAOI,oBAAA,CAAqB,mBAAmB,CAAC,EAAEK,aAAA,CAAc;EAClE,CAAC;EAEDR,EAAA,CAAG,0DAA0D,MAAM;IACjEE,uBAAA,CAAwBG,UAAA,EAAY,mBAAIC,GAAA,CAAI,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC;IAErEP,MAAA,CAAOI,oBAAA,CAAqB,kBAAkB,CAAC,EAAEI,IAAA,CAAK,kBAAkB;IACxER,MAAA,CAAOI,oBAAA,CAAqB,sBAAsB,CAAC,EAAEI,IAAA,CAAK,sBAAsB;EAClF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import { afterEach, describe, expect, it } from "vitest";
2
+ import { isRouteProtected, registerProtectedRoutes, resolveProtectedHref, unregisterProtectedRoutes } from "./router.native.js";
3
+ var contextKey = "/account";
4
+ afterEach(function () {
5
+ unregisterProtectedRoutes(contextKey);
6
+ });
7
+ describe("protected route redirects", function () {
8
+ it("resolves a protected href to its redirect target", function () {
9
+ registerProtectedRoutes(contextKey, /* @__PURE__ */new Map([["settings", "/login"]]));
10
+ expect(isRouteProtected("/account/settings?tab=billing")).toBe(true);
11
+ expect(resolveProtectedHref("/account/settings?tab=billing")).toBe("/login");
12
+ });
13
+ it("blocks a protected href without an explicit target", function () {
14
+ registerProtectedRoutes(contextKey, /* @__PURE__ */new Map([["settings", void 0]]));
15
+ expect(resolveProtectedHref("/account/settings")).toBeUndefined();
16
+ });
17
+ it("leaves allowed and similarly prefixed routes unchanged", function () {
18
+ registerProtectedRoutes(contextKey, /* @__PURE__ */new Map([["settings", "/login"]]));
19
+ expect(resolveProtectedHref("/account/profile")).toBe("/account/profile");
20
+ expect(resolveProtectedHref("/accounting/settings")).toBe("/accounting/settings");
21
+ });
22
+ });
23
+ //# sourceMappingURL=protectedRoutes.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["afterEach","describe","expect","it","isRouteProtected","registerProtectedRoutes","resolveProtectedHref","unregisterProtectedRoutes","contextKey","Map","toBe","toBeUndefined"],"sources":["../../../src/router/protectedRoutes.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,EAAWC,QAAA,EAAUC,MAAA,EAAQC,EAAA,QAAU;AAChD,SAAAC,gBAAA,EAAAC,uBAAA,EAAAC,oBAAA,EAAAC,yBAAA;AAAA,IACEC,UAAA;AAAAR,SACA;EACAO,yBAAA,CAAAC,UAAA;AAAA,EACA;AAAAP,QACK;EAEPE,EAAA,mDAAmB;IAEnBE,uBAAgB,CAAAG,UAAA,qBAAAC,GAAA,EACd,CACD,YAED,QAAS,CACJ,CACD;IAEAP,MAAA,CAAOE,gBAAA,CAAiB,+BAA+B,CAAC,EAAEM,IAAA,CAAK,IAAI;IACnER,MAAA,CAAOI,oBAAA,CAAqB,+BAA+B,CAAC,EAAEI,IAAA,CAAK,QAAQ;EAC7E,CAAC;EAEDP,EAAA,CAAG,sDAAsD,YAAM;IAC7DE,uBAAA,CAAwBG,UAAA,EAAY,mBAAIC,GAAA,CAAI,CAE5C,CACD,YAEE,OACD,CAEA;IACAP,MAAA,CAAOI,oBAAA,CAAqB,sBAAsBK,aAAQ;EAC5D,CAAC;EACFR,EAAA","ignoreList":[]}
@@ -30,24 +30,39 @@ import { clearNotFoundState, findNearestNotFoundRoute, setNotFoundState } from "
30
30
  let routeNode = null;
31
31
  let rootComponent;
32
32
  const protectedRouteRegistry = /* @__PURE__ */new Map();
33
- function registerProtectedRoutes(contextKey, protectedScreens) {
34
- if (protectedScreens.size === 0) protectedRouteRegistry.delete(contextKey);else protectedRouteRegistry.set(contextKey, protectedScreens);
33
+ function registerProtectedRoutes(contextKey, guardedRedirects) {
34
+ if (guardedRedirects.size === 0) protectedRouteRegistry.delete(contextKey);else protectedRouteRegistry.set(contextKey, guardedRedirects);
35
35
  }
36
36
  function unregisterProtectedRoutes(contextKey) {
37
37
  protectedRouteRegistry.delete(contextKey);
38
38
  }
39
- function isRouteProtected(href) {
40
- const normalizedHref = href.replace(/^\/+|\/+$/g, "");
41
- for (const [contextKey, protectedScreens] of protectedRouteRegistry) {
39
+ function getProtectedRedirect(href) {
40
+ const normalizedHref = extractPathnameFromHref(href).replace(/^\/+|\/+$/g, "");
41
+ for (const [contextKey, guardedRedirects] of protectedRouteRegistry) {
42
42
  const normalizedContextKey = contextKey.replace(/^\/+|\/+$/g, "");
43
- if (normalizedHref.startsWith(normalizedContextKey)) {
43
+ if (!normalizedContextKey || normalizedHref === normalizedContextKey || normalizedHref.startsWith(`${normalizedContextKey}/`)) {
44
44
  const routeName = normalizedHref.slice(normalizedContextKey.length).replace(/^\//, "").split("/")[0] || "index";
45
45
  const normalizedRouteName = routeName.replace(/\/index$/, "");
46
- if (protectedScreens.has(routeName) || protectedScreens.has(normalizedRouteName)) return true;
46
+ if (guardedRedirects.has(routeName)) return guardedRedirects.get(routeName);
47
+ if (guardedRedirects.has(normalizedRouteName)) return guardedRedirects.get(normalizedRouteName);
47
48
  }
48
49
  }
49
50
  return false;
50
51
  }
52
+ function resolveProtectedHref(href) {
53
+ let target = href;
54
+ const visited = /* @__PURE__ */new Set();
55
+ while (!visited.has(target)) {
56
+ visited.add(target);
57
+ const redirectTo = getProtectedRedirect(target);
58
+ if (redirectTo === false) return target;
59
+ if (redirectTo === void 0) return;
60
+ target = resolveHref(redirectTo);
61
+ }
62
+ }
63
+ function isRouteProtected(href) {
64
+ return getProtectedRedirect(href) !== false;
65
+ }
51
66
  let hasAttemptedToHideSplash = false;
52
67
  let initialState;
53
68
  let rootState;
@@ -571,7 +586,9 @@ async function linkTo(href, event, options) {
571
586
  return;
572
587
  }
573
588
  if (checkBlocker(href, event === "REPLACE" ? "replace" : "push")) return;
574
- if (isRouteProtected(href)) return;
589
+ const protectedHref = resolveProtectedHref(href);
590
+ if (!protectedHref) return;
591
+ if (protectedHref !== href) return linkTo(protectedHref, "REPLACE", options);
575
592
  const currentLayoutNode = routeNode;
576
593
  const currentPath = routeInfo?.pathname || "/";
577
594
  const interceptResult = findInterceptRoute(href, currentLayoutNode, currentPath);
@@ -796,5 +813,5 @@ function deepEqual(a, b) {
796
813
  }
797
814
  return false;
798
815
  }
799
- export { canDismiss, canGoBack, cleanup, consumePendingNavigationAction, dismiss, dismissAll, getPreloadHistory, getSafeWindowPathname2 as getSafeWindowPathname, getSortedRoutes, getValidationState, goBack, handleNavigationContainerStateChange, hasAttemptedToHideSplash, initClientMatches, initialPathname, initialState, initialize, isRouteProtected, lastIntendedPathname, linkTo, navigate, navigationRef, preloadRoute, preloadedLoaderData, preloadingLoader, push, registerProtectedRoutes, replace, rootComponent, rootState, rootStateSnapshot, routeInfo, routeInfoSnapshot, routeNode, setLoadingState, setParams, setValidationState, snapshot, subscribeToLoadingState, subscribeToRootState, subscribeToStore, subscribeToValidationState, unregisterProtectedRoutes, updateState, useOneRouter, useStoreRootState, useStoreRouteInfo, useValidationState };
816
+ export { canDismiss, canGoBack, cleanup, consumePendingNavigationAction, dismiss, dismissAll, getPreloadHistory, getSafeWindowPathname2 as getSafeWindowPathname, getSortedRoutes, getValidationState, goBack, handleNavigationContainerStateChange, hasAttemptedToHideSplash, initClientMatches, initialPathname, initialState, initialize, isRouteProtected, lastIntendedPathname, linkTo, navigate, navigationRef, preloadRoute, preloadedLoaderData, preloadingLoader, push, registerProtectedRoutes, replace, resolveProtectedHref, rootComponent, rootState, rootStateSnapshot, routeInfo, routeInfoSnapshot, routeNode, setLoadingState, setParams, setValidationState, snapshot, subscribeToLoadingState, subscribeToRootState, subscribeToStore, subscribeToValidationState, unregisterProtectedRoutes, updateState, useOneRouter, useStoreRootState, useStoreRouteInfo, useValidationState };
800
817
  //# sourceMappingURL=router.mjs.map