vorma 0.0.0-pre.0 → 0.82.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.
Files changed (225) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +48 -0
  3. package/internal/framework/_typescript/client/index.ts +64 -0
  4. package/internal/framework/_typescript/client/src/asset_manager.ts +67 -0
  5. package/internal/framework/_typescript/client/src/client.ts +1201 -0
  6. package/internal/framework/_typescript/client/src/client_loaders.ts +249 -0
  7. package/internal/framework/_typescript/client/src/component_loader.ts +105 -0
  8. package/internal/framework/_typescript/client/src/error_boundary.ts +7 -0
  9. package/internal/framework/_typescript/client/src/events.ts +54 -0
  10. package/internal/framework/_typescript/client/src/global_loading_indicator/global_loading_indicator.ts +125 -0
  11. package/internal/framework/_typescript/client/src/hard_reload.ts +1 -0
  12. package/internal/framework/_typescript/client/src/head_elements/head_elements.ts +193 -0
  13. package/internal/framework/_typescript/client/src/history/history.ts +118 -0
  14. package/internal/framework/_typescript/client/src/history/npm_history_types.ts +83 -0
  15. package/internal/framework/_typescript/client/src/hmr/hmr.ts +71 -0
  16. package/internal/framework/_typescript/client/src/init_client.ts +134 -0
  17. package/internal/framework/_typescript/client/src/links.ts +218 -0
  18. package/internal/framework/_typescript/client/src/redirects/redirects.ts +203 -0
  19. package/internal/framework/_typescript/client/src/rendering.ts +135 -0
  20. package/internal/framework/_typescript/client/src/resolve_public_href.ts +15 -0
  21. package/internal/framework/_typescript/client/src/scroll_state_manager.ts +100 -0
  22. package/internal/framework/_typescript/client/src/static_route_defs/route_def_helpers.ts +22 -0
  23. package/internal/framework/_typescript/client/src/ui_lib_impl_helpers/link_components.ts +131 -0
  24. package/internal/framework/_typescript/client/src/ui_lib_impl_helpers/route_components.ts +56 -0
  25. package/internal/framework/_typescript/client/src/ui_lib_impl_helpers/typed_navigate.ts +58 -0
  26. package/internal/framework/_typescript/client/src/utils/errors.ts +10 -0
  27. package/internal/framework/_typescript/client/src/utils/logging.ts +7 -0
  28. package/internal/framework/_typescript/client/src/vorma_app_helpers/vorma_app_helpers.ts +290 -0
  29. package/internal/framework/_typescript/client/src/vorma_ctx/vorma_ctx.ts +128 -0
  30. package/internal/framework/_typescript/client/src/window_focus_revalidation/window_focus_revalidation.ts +32 -0
  31. package/internal/framework/_typescript/client/tsconfig.json +3 -0
  32. package/internal/framework/_typescript/create/main.ts +378 -0
  33. package/internal/framework/_typescript/create/package.json +33 -0
  34. package/internal/framework/_typescript/create/pnpm-lock.yaml +70 -0
  35. package/internal/framework/_typescript/create/tsconfig.json +3 -0
  36. package/internal/framework/_typescript/preact/index.tsx +10 -0
  37. package/internal/framework/_typescript/preact/src/helpers.ts +113 -0
  38. package/internal/framework/_typescript/preact/src/link.tsx +107 -0
  39. package/internal/framework/_typescript/preact/src/preact.tsx +191 -0
  40. package/internal/framework/_typescript/preact/tsconfig.json +7 -0
  41. package/internal/framework/_typescript/react/index.tsx +10 -0
  42. package/internal/framework/_typescript/react/src/helpers.ts +118 -0
  43. package/internal/framework/_typescript/react/src/link.tsx +115 -0
  44. package/internal/framework/_typescript/react/src/react.tsx +299 -0
  45. package/internal/framework/_typescript/react/tsconfig.json +6 -0
  46. package/internal/framework/_typescript/solid/index.tsx +10 -0
  47. package/internal/framework/_typescript/solid/src/helpers.ts +114 -0
  48. package/internal/framework/_typescript/solid/src/link.tsx +104 -0
  49. package/internal/framework/_typescript/solid/src/solid.tsx +204 -0
  50. package/internal/framework/_typescript/solid/tsconfig.json +7 -0
  51. package/internal/framework/_typescript/vite/tsconfig.json +3 -0
  52. package/internal/framework/_typescript/vite/vite.ts +93 -0
  53. package/internal/site/frontend/assets/vorma-banner.webp +0 -0
  54. package/kit/_typescript/converters/converters.ts +152 -0
  55. package/kit/_typescript/cookies/cookies.ts +18 -0
  56. package/kit/_typescript/csrf/csrf.ts +10 -0
  57. package/kit/_typescript/debounce/debounce.ts +17 -0
  58. package/kit/_typescript/fmt/fmt.ts +3 -0
  59. package/kit/_typescript/json/deep_equals.ts +54 -0
  60. package/kit/_typescript/json/json.ts +3 -0
  61. package/kit/_typescript/json/search_param_serializer.ts +49 -0
  62. package/kit/_typescript/json/stringify_stable.ts +43 -0
  63. package/kit/_typescript/listeners/listeners.ts +16 -0
  64. package/kit/_typescript/matcher/find_best_match.ts +205 -0
  65. package/kit/_typescript/matcher/find_nested_matches.ts +357 -0
  66. package/kit/_typescript/matcher/parse_segments.ts +30 -0
  67. package/kit/_typescript/matcher/register.ts +271 -0
  68. package/kit/_typescript/theme/theme.ts +166 -0
  69. package/kit/_typescript/tsconfig.json +3 -0
  70. package/kit/_typescript/url/url.ts +132 -0
  71. package/npm_dist/internal/framework/_typescript/client/index.d.ts +17 -0
  72. package/npm_dist/internal/framework/_typescript/client/index.d.ts.map +1 -0
  73. package/npm_dist/internal/framework/_typescript/client/index.js +2489 -0
  74. package/npm_dist/internal/framework/_typescript/client/index.js.map +7 -0
  75. package/npm_dist/internal/framework/_typescript/client/src/asset_manager.d.ts +6 -0
  76. package/npm_dist/internal/framework/_typescript/client/src/asset_manager.d.ts.map +1 -0
  77. package/npm_dist/internal/framework/_typescript/client/src/client.d.ts +119 -0
  78. package/npm_dist/internal/framework/_typescript/client/src/client.d.ts.map +1 -0
  79. package/npm_dist/internal/framework/_typescript/client/src/client_loaders.d.ts +18 -0
  80. package/npm_dist/internal/framework/_typescript/client/src/client_loaders.d.ts.map +1 -0
  81. package/npm_dist/internal/framework/_typescript/client/src/component_loader.d.ts +10 -0
  82. package/npm_dist/internal/framework/_typescript/client/src/component_loader.d.ts.map +1 -0
  83. package/npm_dist/internal/framework/_typescript/client/src/error_boundary.d.ts +3 -0
  84. package/npm_dist/internal/framework/_typescript/client/src/error_boundary.d.ts.map +1 -0
  85. package/npm_dist/internal/framework/_typescript/client/src/events.d.ts +26 -0
  86. package/npm_dist/internal/framework/_typescript/client/src/events.d.ts.map +1 -0
  87. package/npm_dist/internal/framework/_typescript/client/src/global_loading_indicator/global_loading_indicator.d.ts +12 -0
  88. package/npm_dist/internal/framework/_typescript/client/src/global_loading_indicator/global_loading_indicator.d.ts.map +1 -0
  89. package/npm_dist/internal/framework/_typescript/client/src/hard_reload.d.ts +2 -0
  90. package/npm_dist/internal/framework/_typescript/client/src/hard_reload.d.ts.map +1 -0
  91. package/npm_dist/internal/framework/_typescript/client/src/head_elements/head_elements.d.ts +7 -0
  92. package/npm_dist/internal/framework/_typescript/client/src/head_elements/head_elements.d.ts.map +1 -0
  93. package/npm_dist/internal/framework/_typescript/client/src/history/history.d.ts +14 -0
  94. package/npm_dist/internal/framework/_typescript/client/src/history/history.d.ts.map +1 -0
  95. package/npm_dist/internal/framework/_typescript/client/src/history/npm_history_types.d.ts +84 -0
  96. package/npm_dist/internal/framework/_typescript/client/src/history/npm_history_types.d.ts.map +1 -0
  97. package/npm_dist/internal/framework/_typescript/client/src/hmr/hmr.d.ts +3 -0
  98. package/npm_dist/internal/framework/_typescript/client/src/hmr/hmr.d.ts.map +1 -0
  99. package/npm_dist/internal/framework/_typescript/client/src/init_client.d.ts +9 -0
  100. package/npm_dist/internal/framework/_typescript/client/src/init_client.d.ts.map +1 -0
  101. package/npm_dist/internal/framework/_typescript/client/src/links.d.ts +33 -0
  102. package/npm_dist/internal/framework/_typescript/client/src/links.d.ts.map +1 -0
  103. package/npm_dist/internal/framework/_typescript/client/src/redirects/redirects.d.ts +26 -0
  104. package/npm_dist/internal/framework/_typescript/client/src/redirects/redirects.d.ts.map +1 -0
  105. package/npm_dist/internal/framework/_typescript/client/src/rendering.d.ts +18 -0
  106. package/npm_dist/internal/framework/_typescript/client/src/rendering.d.ts.map +1 -0
  107. package/npm_dist/internal/framework/_typescript/client/src/resolve_public_href.d.ts +2 -0
  108. package/npm_dist/internal/framework/_typescript/client/src/resolve_public_href.d.ts.map +1 -0
  109. package/npm_dist/internal/framework/_typescript/client/src/scroll_state_manager.d.ts +22 -0
  110. package/npm_dist/internal/framework/_typescript/client/src/scroll_state_manager.d.ts.map +1 -0
  111. package/npm_dist/internal/framework/_typescript/client/src/static_route_defs/route_def_helpers.d.ts +12 -0
  112. package/npm_dist/internal/framework/_typescript/client/src/static_route_defs/route_def_helpers.d.ts.map +1 -0
  113. package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/link_components.d.ts +28 -0
  114. package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/link_components.d.ts.map +1 -0
  115. package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/route_components.d.ts +18 -0
  116. package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/route_components.d.ts.map +1 -0
  117. package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/typed_navigate.d.ts +11 -0
  118. package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/typed_navigate.d.ts.map +1 -0
  119. package/npm_dist/internal/framework/_typescript/client/src/utils/errors.d.ts +3 -0
  120. package/npm_dist/internal/framework/_typescript/client/src/utils/errors.d.ts.map +1 -0
  121. package/npm_dist/internal/framework/_typescript/client/src/utils/logging.d.ts +3 -0
  122. package/npm_dist/internal/framework/_typescript/client/src/utils/logging.d.ts.map +1 -0
  123. package/npm_dist/internal/framework/_typescript/client/src/vorma_app_helpers/vorma_app_helpers.d.ts +119 -0
  124. package/npm_dist/internal/framework/_typescript/client/src/vorma_app_helpers/vorma_app_helpers.d.ts.map +1 -0
  125. package/npm_dist/internal/framework/_typescript/client/src/vorma_ctx/vorma_ctx.d.ts +88 -0
  126. package/npm_dist/internal/framework/_typescript/client/src/vorma_ctx/vorma_ctx.d.ts.map +1 -0
  127. package/npm_dist/internal/framework/_typescript/client/src/window_focus_revalidation/window_focus_revalidation.d.ts +10 -0
  128. package/npm_dist/internal/framework/_typescript/client/src/window_focus_revalidation/window_focus_revalidation.d.ts.map +1 -0
  129. package/npm_dist/internal/framework/_typescript/create/main.d.ts +3 -0
  130. package/npm_dist/internal/framework/_typescript/create/main.d.ts.map +1 -0
  131. package/npm_dist/internal/framework/_typescript/preact/index.d.ts +4 -0
  132. package/npm_dist/internal/framework/_typescript/preact/index.d.ts.map +1 -0
  133. package/npm_dist/internal/framework/_typescript/preact/index.js +283 -0
  134. package/npm_dist/internal/framework/_typescript/preact/index.js.map +7 -0
  135. package/npm_dist/internal/framework/_typescript/preact/src/helpers.d.ts +21 -0
  136. package/npm_dist/internal/framework/_typescript/preact/src/helpers.d.ts.map +1 -0
  137. package/npm_dist/internal/framework/_typescript/preact/src/link.d.ts +11 -0
  138. package/npm_dist/internal/framework/_typescript/preact/src/link.d.ts.map +1 -0
  139. package/npm_dist/internal/framework/_typescript/preact/src/preact.d.ts +21 -0
  140. package/npm_dist/internal/framework/_typescript/preact/src/preact.d.ts.map +1 -0
  141. package/npm_dist/internal/framework/_typescript/react/index.d.ts +4 -0
  142. package/npm_dist/internal/framework/_typescript/react/index.d.ts.map +1 -0
  143. package/npm_dist/internal/framework/_typescript/react/index.js +370 -0
  144. package/npm_dist/internal/framework/_typescript/react/index.js.map +7 -0
  145. package/npm_dist/internal/framework/_typescript/react/src/helpers.d.ts +21 -0
  146. package/npm_dist/internal/framework/_typescript/react/src/helpers.d.ts.map +1 -0
  147. package/npm_dist/internal/framework/_typescript/react/src/link.d.ts +11 -0
  148. package/npm_dist/internal/framework/_typescript/react/src/link.d.ts.map +1 -0
  149. package/npm_dist/internal/framework/_typescript/react/src/react.d.ts +20 -0
  150. package/npm_dist/internal/framework/_typescript/react/src/react.d.ts.map +1 -0
  151. package/npm_dist/internal/framework/_typescript/solid/index.d.ts +4 -0
  152. package/npm_dist/internal/framework/_typescript/solid/index.d.ts.map +1 -0
  153. package/npm_dist/internal/framework/_typescript/solid/index.js +314 -0
  154. package/npm_dist/internal/framework/_typescript/solid/index.js.map +7 -0
  155. package/npm_dist/internal/framework/_typescript/solid/src/helpers.d.ts +22 -0
  156. package/npm_dist/internal/framework/_typescript/solid/src/helpers.d.ts.map +1 -0
  157. package/npm_dist/internal/framework/_typescript/solid/src/link.d.ts +11 -0
  158. package/npm_dist/internal/framework/_typescript/solid/src/link.d.ts.map +1 -0
  159. package/npm_dist/internal/framework/_typescript/solid/src/solid.d.ts +22 -0
  160. package/npm_dist/internal/framework/_typescript/solid/src/solid.d.ts.map +1 -0
  161. package/npm_dist/internal/framework/_typescript/vite/vite.d.ts +11 -0
  162. package/npm_dist/internal/framework/_typescript/vite/vite.d.ts.map +1 -0
  163. package/npm_dist/internal/framework/_typescript/vite/vite.js +82 -0
  164. package/npm_dist/internal/framework/_typescript/vite/vite.js.map +7 -0
  165. package/npm_dist/kit/_typescript/chunk-YBAPNBS2.js +202 -0
  166. package/npm_dist/kit/_typescript/chunk-YBAPNBS2.js.map +7 -0
  167. package/npm_dist/kit/_typescript/converters/converters.d.ts +26 -0
  168. package/npm_dist/kit/_typescript/converters/converters.d.ts.map +1 -0
  169. package/npm_dist/kit/_typescript/converters/converters.js +99 -0
  170. package/npm_dist/kit/_typescript/converters/converters.js.map +7 -0
  171. package/npm_dist/kit/_typescript/cookies/cookies.d.ts +13 -0
  172. package/npm_dist/kit/_typescript/cookies/cookies.d.ts.map +1 -0
  173. package/npm_dist/kit/_typescript/cookies/cookies.js +13 -0
  174. package/npm_dist/kit/_typescript/cookies/cookies.js.map +7 -0
  175. package/npm_dist/kit/_typescript/csrf/csrf.d.ts +5 -0
  176. package/npm_dist/kit/_typescript/csrf/csrf.d.ts.map +1 -0
  177. package/npm_dist/kit/_typescript/csrf/csrf.js +11 -0
  178. package/npm_dist/kit/_typescript/csrf/csrf.js.map +7 -0
  179. package/npm_dist/kit/_typescript/debounce/debounce.d.ts +4 -0
  180. package/npm_dist/kit/_typescript/debounce/debounce.d.ts.map +1 -0
  181. package/npm_dist/kit/_typescript/debounce/debounce.js +16 -0
  182. package/npm_dist/kit/_typescript/debounce/debounce.js.map +7 -0
  183. package/npm_dist/kit/_typescript/fmt/fmt.d.ts +2 -0
  184. package/npm_dist/kit/_typescript/fmt/fmt.d.ts.map +1 -0
  185. package/npm_dist/kit/_typescript/fmt/fmt.js +8 -0
  186. package/npm_dist/kit/_typescript/fmt/fmt.js.map +7 -0
  187. package/npm_dist/kit/_typescript/json/deep_equals.d.ts +7 -0
  188. package/npm_dist/kit/_typescript/json/deep_equals.d.ts.map +1 -0
  189. package/npm_dist/kit/_typescript/json/json.d.ts +4 -0
  190. package/npm_dist/kit/_typescript/json/json.d.ts.map +1 -0
  191. package/npm_dist/kit/_typescript/json/json.js +110 -0
  192. package/npm_dist/kit/_typescript/json/json.js.map +7 -0
  193. package/npm_dist/kit/_typescript/json/search_param_serializer.d.ts +2 -0
  194. package/npm_dist/kit/_typescript/json/search_param_serializer.d.ts.map +1 -0
  195. package/npm_dist/kit/_typescript/json/stringify_stable.d.ts +7 -0
  196. package/npm_dist/kit/_typescript/json/stringify_stable.d.ts.map +1 -0
  197. package/npm_dist/kit/_typescript/listeners/listeners.d.ts +2 -0
  198. package/npm_dist/kit/_typescript/listeners/listeners.d.ts.map +1 -0
  199. package/npm_dist/kit/_typescript/listeners/listeners.js +20 -0
  200. package/npm_dist/kit/_typescript/listeners/listeners.js.map +7 -0
  201. package/npm_dist/kit/_typescript/matcher/find_best_match.d.ts +10 -0
  202. package/npm_dist/kit/_typescript/matcher/find_best_match.d.ts.map +1 -0
  203. package/npm_dist/kit/_typescript/matcher/find_best_match.js +146 -0
  204. package/npm_dist/kit/_typescript/matcher/find_best_match.js.map +7 -0
  205. package/npm_dist/kit/_typescript/matcher/find_nested_matches.d.ts +14 -0
  206. package/npm_dist/kit/_typescript/matcher/find_nested_matches.d.ts.map +1 -0
  207. package/npm_dist/kit/_typescript/matcher/find_nested_matches.js +248 -0
  208. package/npm_dist/kit/_typescript/matcher/find_nested_matches.js.map +7 -0
  209. package/npm_dist/kit/_typescript/matcher/parse_segments.d.ts +2 -0
  210. package/npm_dist/kit/_typescript/matcher/parse_segments.d.ts.map +1 -0
  211. package/npm_dist/kit/_typescript/matcher/register.d.ts +54 -0
  212. package/npm_dist/kit/_typescript/matcher/register.d.ts.map +1 -0
  213. package/npm_dist/kit/_typescript/matcher/register.js +21 -0
  214. package/npm_dist/kit/_typescript/matcher/register.js.map +7 -0
  215. package/npm_dist/kit/_typescript/theme/theme.d.ts +23 -0
  216. package/npm_dist/kit/_typescript/theme/theme.d.ts.map +1 -0
  217. package/npm_dist/kit/_typescript/theme/theme.js +122 -0
  218. package/npm_dist/kit/_typescript/theme/theme.js.map +7 -0
  219. package/npm_dist/kit/_typescript/url/url.d.ts +30 -0
  220. package/npm_dist/kit/_typescript/url/url.d.ts.map +1 -0
  221. package/npm_dist/kit/_typescript/url/url.js +100 -0
  222. package/npm_dist/kit/_typescript/url/url.js.map +7 -0
  223. package/package.json +135 -3
  224. package/tsconfig.base.json +17 -0
  225. package/index.js +0 -1
@@ -0,0 +1,110 @@
1
+ // kit/_typescript/json/deep_equals.ts
2
+ function jsonDeepEquals(a, b) {
3
+ if (a === b) {
4
+ return true;
5
+ }
6
+ if (a == null || b == null) {
7
+ return false;
8
+ }
9
+ if (typeof a !== typeof b) {
10
+ return false;
11
+ }
12
+ const aIsArray = Array.isArray(a);
13
+ const bIsArray = Array.isArray(b);
14
+ if (aIsArray !== bIsArray) {
15
+ return false;
16
+ }
17
+ if (aIsArray && bIsArray) {
18
+ if (a.length !== b.length) {
19
+ return false;
20
+ }
21
+ return a.every((item, index) => jsonDeepEquals(item, b[index]));
22
+ }
23
+ if (typeof a === "object" && typeof b === "object") {
24
+ const aKeys = Object.keys(a);
25
+ const bKeys = Object.keys(b);
26
+ if (aKeys.length !== bKeys.length) {
27
+ return false;
28
+ }
29
+ return aKeys.every((key) => {
30
+ return Object.hasOwn(b, key) && jsonDeepEquals(a[key], b[key]);
31
+ });
32
+ }
33
+ return false;
34
+ }
35
+
36
+ // kit/_typescript/json/search_param_serializer.ts
37
+ function serializeToSearchParams(obj) {
38
+ const params = new URLSearchParams();
39
+ function appendValue(key, value) {
40
+ if (value === null || value === void 0) {
41
+ params.append(key, "");
42
+ return;
43
+ }
44
+ if (Array.isArray(value)) {
45
+ if (value.length === 0) {
46
+ params.append(key, "");
47
+ } else {
48
+ for (const item of value) {
49
+ appendValue(key, item);
50
+ }
51
+ }
52
+ return;
53
+ }
54
+ if (typeof value === "object") {
55
+ const entries = Object.entries(value);
56
+ if (entries.length === 0) {
57
+ params.append(key, "");
58
+ } else {
59
+ entries.sort(([keyA], [keyB]) => keyA.localeCompare(keyB));
60
+ for (const [subKey, subValue] of entries) {
61
+ const newKey = key ? `${key}.${subKey}` : subKey;
62
+ appendValue(newKey, subValue);
63
+ }
64
+ }
65
+ return;
66
+ }
67
+ params.append(key, String(value));
68
+ }
69
+ if (typeof obj === "object" && obj !== null) {
70
+ const entries = Object.entries(obj);
71
+ entries.sort(([keyA], [keyB]) => keyA.localeCompare(keyB));
72
+ for (const [key, value] of entries) {
73
+ appendValue(key, value);
74
+ }
75
+ }
76
+ return params;
77
+ }
78
+
79
+ // kit/_typescript/json/stringify_stable.ts
80
+ function jsonStringifyStable(input) {
81
+ const stabilized = stabilizeStructure(input, /* @__PURE__ */ new WeakSet());
82
+ return JSON.stringify(stabilized);
83
+ }
84
+ function stabilizeStructure(value, visited) {
85
+ if (value === null || typeof value !== "object") {
86
+ return value;
87
+ }
88
+ if (visited.has(value)) {
89
+ throw new Error("Circular reference detected during stable JSON stringification");
90
+ }
91
+ visited.add(value);
92
+ if (Array.isArray(value)) {
93
+ const result = value.map((item) => stabilizeStructure(item, visited));
94
+ visited.delete(value);
95
+ return result;
96
+ }
97
+ const keys = Object.keys(value).sort();
98
+ const stable = {};
99
+ for (const key of keys) {
100
+ stable[key] = stabilizeStructure(value[key], visited);
101
+ }
102
+ visited.delete(value);
103
+ return stable;
104
+ }
105
+ export {
106
+ jsonDeepEquals,
107
+ jsonStringifyStable,
108
+ serializeToSearchParams
109
+ };
110
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../kit/_typescript/json/deep_equals.ts", "../../../../kit/_typescript/json/search_param_serializer.ts", "../../../../kit/_typescript/json/stringify_stable.ts"],
4
+ "sourcesContent": ["/**\n * Performs a deep equality comparison of two JSON-compatible values.\n * Handles null, undefined, primitives, arrays, and plain objects, recursively.\n * Does not support Maps, Sets, Functions, or other non-JSON types.\n */\nexport function jsonDeepEquals(a: unknown, b: unknown): boolean {\n\t// Tautology\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\t// If both were null or both were undefined, we would have early returned above.\n\t// So if either at this point is loosely null, we know they're not equal.\n\tif (a == null || b == null) {\n\t\treturn false;\n\t}\n\n\t// If types are different, we know they're not equal.\n\tif (typeof a !== typeof b) {\n\t\treturn false;\n\t}\n\n\tconst aIsArray = Array.isArray(a);\n\tconst bIsArray = Array.isArray(b);\n\n\t// If one is an array and the other is not, we know they're not equal.\n\tif (aIsArray !== bIsArray) {\n\t\treturn false;\n\t}\n\n\t// Handle arrays\n\tif (aIsArray && bIsArray) {\n\t\tif (a.length !== b.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn a.every((item, index) => jsonDeepEquals(item, b[index]));\n\t}\n\n\t// Handle objects\n\tif (typeof a === \"object\" && typeof b === \"object\") {\n\t\tconst aKeys = Object.keys(a as object);\n\t\tconst bKeys = Object.keys(b as object);\n\n\t\tif (aKeys.length !== bKeys.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn aKeys.every((key) => {\n\t\t\treturn Object.hasOwn(b, key) && jsonDeepEquals((a as any)[key], (b as any)[key]);\n\t\t});\n\t}\n\n\treturn false;\n}\n", "export function serializeToSearchParams(obj: Record<any, any>): URLSearchParams {\n\tconst params = new URLSearchParams();\n\n\tfunction appendValue(key: string, value: any) {\n\t\tif (value === null || value === undefined) {\n\t\t\tparams.append(key, \"\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0) {\n\t\t\t\tparams.append(key, \"\");\n\t\t\t} else {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tappendValue(key, item);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof value === \"object\") {\n\t\t\tconst entries = Object.entries(value);\n\t\t\tif (entries.length === 0) {\n\t\t\t\tparams.append(key, \"\");\n\t\t\t} else {\n\t\t\t\t// Sort nested keys alphabetically\n\t\t\t\tentries.sort(([keyA], [keyB]) => keyA.localeCompare(keyB));\n\t\t\t\tfor (const [subKey, subValue] of entries) {\n\t\t\t\t\tconst newKey = key ? `${key}.${subKey}` : subKey;\n\t\t\t\t\tappendValue(newKey, subValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tparams.append(key, String(value));\n\t}\n\n\tif (typeof obj === \"object\" && obj !== null) {\n\t\t// Sort top-level keys alphabetically\n\t\tconst entries = Object.entries(obj);\n\t\tentries.sort(([keyA], [keyB]) => keyA.localeCompare(keyB));\n\t\tfor (const [key, value] of entries) {\n\t\t\tappendValue(key, value);\n\t\t}\n\t}\n\n\treturn params;\n}\n", "/**\n * Deterministically serializes a JSON-compatible value to a stable string.\n * Throws if it detects a circular reference. Does not support Maps, Sets,\n * Functions, or other non-JSON types.\n */\nexport function jsonStringifyStable(input: unknown): string {\n\t// First stabilize the structure, then JSON.stringify\n\tconst stabilized = stabilizeStructure(input, new WeakSet());\n\n\treturn JSON.stringify(stabilized);\n}\n\nfunction stabilizeStructure(value: unknown, visited: WeakSet<object>): unknown {\n\t// Handle primitives and null\n\tif (value === null || typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\n\t// Prevent circular references\n\tif (visited.has(value)) {\n\t\tthrow new Error(\"Circular reference detected during stable JSON stringification\");\n\t}\n\tvisited.add(value);\n\n\t// Handle arrays - recursively stabilize each element\n\tif (Array.isArray(value)) {\n\t\tconst result = value.map((item) => stabilizeStructure(item, visited));\n\t\tvisited.delete(value); // Clean up after processing\n\t\treturn result;\n\t}\n\n\t// Handle objects - sort keys and recursively stabilize values\n\tconst keys = Object.keys(value).sort();\n\tconst stable: Record<string, unknown> = {};\n\n\t// Add sorted keys with stabilized values\n\tfor (const key of keys) {\n\t\tstable[key] = stabilizeStructure((value as Record<string, unknown>)[key], visited);\n\t}\n\n\tvisited.delete(value); // Clean up after processing\n\treturn stable;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export declare function serializeToSearchParams(obj: Record<any, any>): URLSearchParams;
2
+ //# sourceMappingURL=search_param_serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search_param_serializer.d.ts","sourceRoot":"","sources":["../../../../kit/_typescript/json/search_param_serializer.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,eAAe,CAgD9E"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Deterministically serializes a JSON-compatible value to a stable string.
3
+ * Throws if it detects a circular reference. Does not support Maps, Sets,
4
+ * Functions, or other non-JSON types.
5
+ */
6
+ export declare function jsonStringifyStable(input: unknown): string;
7
+ //# sourceMappingURL=stringify_stable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify_stable.d.ts","sourceRoot":"","sources":["../../../../kit/_typescript/json/stringify_stable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK1D"}
@@ -0,0 +1,2 @@
1
+ export declare function addOnWindowFocusListener(callback: () => void): () => void;
2
+ //# sourceMappingURL=listeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners.d.ts","sourceRoot":"","sources":["../../../../kit/_typescript/listeners/listeners.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAazE"}
@@ -0,0 +1,20 @@
1
+ // kit/_typescript/listeners/listeners.ts
2
+ import { debounce } from "vorma/kit/debounce";
3
+ function addOnWindowFocusListener(callback) {
4
+ const debouncedCallback = debounce(callback, 30);
5
+ const ifVisibleCallback = () => {
6
+ if (document.visibilityState === "visible") {
7
+ debouncedCallback();
8
+ }
9
+ };
10
+ window.addEventListener("focus", debouncedCallback);
11
+ window.addEventListener("visibilitychange", ifVisibleCallback);
12
+ return () => {
13
+ window.removeEventListener("focus", debouncedCallback);
14
+ window.removeEventListener("visibilitychange", ifVisibleCallback);
15
+ };
16
+ }
17
+ export {
18
+ addOnWindowFocusListener
19
+ };
20
+ //# sourceMappingURL=listeners.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../kit/_typescript/listeners/listeners.ts"],
4
+ "sourcesContent": ["import { debounce } from \"vorma/kit/debounce\";\n\nexport function addOnWindowFocusListener(callback: () => void): () => void {\n\tconst debouncedCallback = debounce(callback, 30);\n\tconst ifVisibleCallback = () => {\n\t\tif (document.visibilityState === \"visible\") {\n\t\t\tdebouncedCallback();\n\t\t}\n\t};\n\twindow.addEventListener(\"focus\", debouncedCallback);\n\twindow.addEventListener(\"visibilitychange\", ifVisibleCallback);\n\treturn () => {\n\t\twindow.removeEventListener(\"focus\", debouncedCallback);\n\t\twindow.removeEventListener(\"visibilitychange\", ifVisibleCallback);\n\t};\n}\n"],
5
+ "mappings": ";AAAA,SAAS,gBAAgB;AAElB,SAAS,yBAAyB,UAAkC;AAC1E,QAAM,oBAAoB,SAAS,UAAU,EAAE;AAC/C,QAAM,oBAAoB,MAAM;AAC/B,QAAI,SAAS,oBAAoB,WAAW;AAC3C,wBAAkB;AAAA,IACnB;AAAA,EACD;AACA,SAAO,iBAAiB,SAAS,iBAAiB;AAClD,SAAO,iBAAiB,oBAAoB,iBAAiB;AAC7D,SAAO,MAAM;AACZ,WAAO,oBAAoB,SAAS,iBAAiB;AACrD,WAAO,oBAAoB,oBAAoB,iBAAiB;AAAA,EACjE;AACD;",
6
+ "names": []
7
+ }
@@ -0,0 +1,10 @@
1
+ import { type Params, type PatternRegistry, type RegisteredPattern } from "./register.ts";
2
+ type BestMatch = {
3
+ registeredPattern: RegisteredPattern;
4
+ params: Params;
5
+ splatValues: string[];
6
+ score: number;
7
+ };
8
+ export declare function findBestMatch(registry: PatternRegistry, realPath: string): BestMatch | null;
9
+ export {};
10
+ //# sourceMappingURL=find_best_match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find_best_match.d.ts","sourceRoot":"","sources":["../../../../kit/_typescript/matcher/find_best_match.ts"],"names":[],"mappings":"AACA,OAAO,EAMN,KAAK,MAAM,EACX,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEtB,MAAM,eAAe,CAAC;AAEvB,KAAK,SAAS,GAAG;IAChB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAoGF,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAmFlB"}
@@ -0,0 +1,146 @@
1
+ import {
2
+ NODE_DYNAMIC,
3
+ NODE_SPLAT,
4
+ SCORE_DYNAMIC,
5
+ SCORE_STATIC_MATCH,
6
+ SEG_TYPES,
7
+ parseSegments
8
+ } from "../chunk-YBAPNBS2.js";
9
+
10
+ // kit/_typescript/matcher/find_best_match.ts
11
+ function dfsBest(registry, node, segments, depth, score, state, checkTrailingSlash) {
12
+ const atNormalEnd = checkTrailingSlash && depth === segments.length - 1;
13
+ if (node.pattern.length > 0) {
14
+ const rp = registry.dynamicPatterns.get(node.pattern);
15
+ if (rp) {
16
+ if (depth === segments.length || node.nodeType === NODE_SPLAT || atNormalEnd) {
17
+ if (!state.foundMatch || score > state.bestScore) {
18
+ state.best = {
19
+ registeredPattern: rp,
20
+ params: {},
21
+ splatValues: [],
22
+ score
23
+ };
24
+ state.bestScore = score;
25
+ state.foundMatch = true;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ if (depth >= segments.length) return;
31
+ if (node.children !== null) {
32
+ const child = node.children.get(segments[depth]);
33
+ if (child) {
34
+ dfsBest(
35
+ registry,
36
+ child,
37
+ segments,
38
+ depth + 1,
39
+ score + SCORE_STATIC_MATCH,
40
+ state,
41
+ checkTrailingSlash
42
+ );
43
+ if (state.foundMatch && depth + 1 === segments.length && child.pattern !== "") {
44
+ return;
45
+ }
46
+ }
47
+ }
48
+ for (const child of node.dynChildren) {
49
+ switch (child.nodeType) {
50
+ case NODE_DYNAMIC:
51
+ if (segments[depth] !== "") {
52
+ dfsBest(
53
+ registry,
54
+ child,
55
+ segments,
56
+ depth + 1,
57
+ score + SCORE_DYNAMIC,
58
+ state,
59
+ checkTrailingSlash
60
+ );
61
+ }
62
+ break;
63
+ case NODE_SPLAT:
64
+ if (child.pattern.length > 0) {
65
+ const rp = registry.dynamicPatterns.get(child.pattern);
66
+ if (rp && !state.foundMatch) {
67
+ state.best = {
68
+ registeredPattern: rp,
69
+ params: {},
70
+ splatValues: [],
71
+ score: 0
72
+ };
73
+ state.foundMatch = true;
74
+ }
75
+ }
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ function findBestMatch(registry, realPath) {
81
+ const rr = registry.staticPatterns.get(realPath);
82
+ if (rr) {
83
+ return {
84
+ registeredPattern: rr,
85
+ params: {},
86
+ splatValues: [],
87
+ score: 0
88
+ };
89
+ }
90
+ const segments = parseSegments(realPath);
91
+ const hasTrailingSlash = realPath.length > 0 && realPath[realPath.length - 1] === "/";
92
+ if (hasTrailingSlash) {
93
+ const pathWithoutTrailingSlash = realPath.substring(
94
+ 0,
95
+ realPath.length - 1
96
+ );
97
+ const rrWithoutSlash = registry.staticPatterns.get(
98
+ pathWithoutTrailingSlash
99
+ );
100
+ if (rrWithoutSlash) {
101
+ return {
102
+ registeredPattern: rrWithoutSlash,
103
+ params: {},
104
+ splatValues: [],
105
+ score: 0
106
+ };
107
+ }
108
+ }
109
+ const state = {
110
+ best: null,
111
+ bestScore: 0,
112
+ foundMatch: false
113
+ };
114
+ dfsBest(
115
+ registry,
116
+ registry.rootNode,
117
+ segments,
118
+ 0,
119
+ 0,
120
+ state,
121
+ hasTrailingSlash
122
+ );
123
+ if (!state.foundMatch || !state.best) {
124
+ return null;
125
+ }
126
+ if (state.best.registeredPattern.numberOfDynamicParamSegs > 0) {
127
+ const params = {};
128
+ for (let i = 0; i < state.best.registeredPattern.normalizedSegments.length; i++) {
129
+ const seg = state.best.registeredPattern.normalizedSegments[i];
130
+ if (seg.segType === SEG_TYPES.dynamic) {
131
+ params[seg.normalizedVal.substring(1)] = segments[i];
132
+ }
133
+ }
134
+ state.best.params = params;
135
+ }
136
+ if (state.best.registeredPattern.normalizedPattern === "/*" || state.best.registeredPattern.lastSegIsNonRootSplat) {
137
+ state.best.splatValues = segments.slice(
138
+ state.best.registeredPattern.normalizedSegments.length - 1
139
+ );
140
+ }
141
+ return state.best;
142
+ }
143
+ export {
144
+ findBestMatch
145
+ };
146
+ //# sourceMappingURL=find_best_match.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../kit/_typescript/matcher/find_best_match.ts"],
4
+ "sourcesContent": ["import { parseSegments } from \"./parse_segments.ts\";\nimport {\n\tNODE_DYNAMIC,\n\tNODE_SPLAT,\n\tSCORE_DYNAMIC,\n\tSCORE_STATIC_MATCH,\n\tSEG_TYPES,\n\ttype Params,\n\ttype PatternRegistry,\n\ttype RegisteredPattern,\n\ttype SegmentNode,\n} from \"./register.ts\";\n\ntype BestMatch = {\n\tregisteredPattern: RegisteredPattern;\n\tparams: Params;\n\tsplatValues: string[];\n\tscore: number;\n};\n\ntype DfsBestState = {\n\tbest: BestMatch | null;\n\tbestScore: number;\n\tfoundMatch: boolean;\n};\n\nfunction dfsBest(\n\tregistry: PatternRegistry,\n\tnode: SegmentNode,\n\tsegments: string[],\n\tdepth: number,\n\tscore: number,\n\tstate: DfsBestState,\n\tcheckTrailingSlash: boolean,\n): void {\n\tconst atNormalEnd = checkTrailingSlash && depth === segments.length - 1;\n\n\tif (node.pattern.length > 0) {\n\t\tconst rp = registry.dynamicPatterns.get(node.pattern);\n\t\tif (rp) {\n\t\t\tif (\n\t\t\t\tdepth === segments.length ||\n\t\t\t\tnode.nodeType === NODE_SPLAT ||\n\t\t\t\tatNormalEnd\n\t\t\t) {\n\t\t\t\tif (!state.foundMatch || score > state.bestScore) {\n\t\t\t\t\tstate.best = {\n\t\t\t\t\t\tregisteredPattern: rp,\n\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\tsplatValues: [],\n\t\t\t\t\t\tscore,\n\t\t\t\t\t};\n\t\t\t\t\tstate.bestScore = score;\n\t\t\t\t\tstate.foundMatch = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (depth >= segments.length) return;\n\n\tif (node.children !== null) {\n\t\tconst child = node.children.get(segments[depth]!);\n\t\tif (child) {\n\t\t\tdfsBest(\n\t\t\t\tregistry,\n\t\t\t\tchild,\n\t\t\t\tsegments,\n\t\t\t\tdepth + 1,\n\t\t\t\tscore + SCORE_STATIC_MATCH,\n\t\t\t\tstate,\n\t\t\t\tcheckTrailingSlash,\n\t\t\t);\n\n\t\t\tif (\n\t\t\t\tstate.foundMatch &&\n\t\t\t\tdepth + 1 === segments.length &&\n\t\t\t\tchild.pattern !== \"\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const child of node.dynChildren) {\n\t\tswitch (child.nodeType) {\n\t\t\tcase NODE_DYNAMIC:\n\t\t\t\tif (segments[depth] !== \"\") {\n\t\t\t\t\tdfsBest(\n\t\t\t\t\t\tregistry,\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tsegments,\n\t\t\t\t\t\tdepth + 1,\n\t\t\t\t\t\tscore + SCORE_DYNAMIC,\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tcheckTrailingSlash,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase NODE_SPLAT:\n\t\t\t\tif (child.pattern.length > 0) {\n\t\t\t\t\tconst rp = registry.dynamicPatterns.get(child.pattern);\n\t\t\t\t\tif (rp && !state.foundMatch) {\n\t\t\t\t\t\tstate.best = {\n\t\t\t\t\t\t\tregisteredPattern: rp,\n\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t\tsplatValues: [],\n\t\t\t\t\t\t\tscore: 0,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tstate.foundMatch = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nexport function findBestMatch(\n\tregistry: PatternRegistry,\n\trealPath: string,\n): BestMatch | null {\n\t// Check static patterns first\n\tconst rr = registry.staticPatterns.get(realPath);\n\tif (rr) {\n\t\treturn {\n\t\t\tregisteredPattern: rr,\n\t\t\tparams: {},\n\t\t\tsplatValues: [],\n\t\t\tscore: 0,\n\t\t};\n\t}\n\n\tconst segments = parseSegments(realPath);\n\tconst hasTrailingSlash =\n\t\trealPath.length > 0 && realPath[realPath.length - 1] === \"/\";\n\n\t// Check static pattern without trailing slash\n\tif (hasTrailingSlash) {\n\t\tconst pathWithoutTrailingSlash = realPath.substring(\n\t\t\t0,\n\t\t\trealPath.length - 1,\n\t\t);\n\t\tconst rrWithoutSlash = registry.staticPatterns.get(\n\t\t\tpathWithoutTrailingSlash,\n\t\t);\n\t\tif (rrWithoutSlash) {\n\t\t\treturn {\n\t\t\t\tregisteredPattern: rrWithoutSlash,\n\t\t\t\tparams: {},\n\t\t\t\tsplatValues: [],\n\t\t\t\tscore: 0,\n\t\t\t};\n\t\t}\n\t}\n\n\t// Search for dynamic patterns\n\tconst state: DfsBestState = {\n\t\tbest: null,\n\t\tbestScore: 0,\n\t\tfoundMatch: false,\n\t};\n\n\tdfsBest(\n\t\tregistry,\n\t\tregistry.rootNode,\n\t\tsegments,\n\t\t0,\n\t\t0,\n\t\tstate,\n\t\thasTrailingSlash,\n\t);\n\n\tif (!state.foundMatch || !state.best) {\n\t\treturn null;\n\t}\n\n\t// Populate params\n\tif (state.best.registeredPattern.numberOfDynamicParamSegs > 0) {\n\t\tconst params: Params = {};\n\t\tfor (\n\t\t\tlet i = 0;\n\t\t\ti < state.best.registeredPattern.normalizedSegments.length;\n\t\t\ti++\n\t\t) {\n\t\t\tconst seg = state.best.registeredPattern.normalizedSegments[i]!;\n\t\t\tif (seg.segType === SEG_TYPES.dynamic) {\n\t\t\t\tparams[seg.normalizedVal.substring(1)] = segments[i]!;\n\t\t\t}\n\t\t}\n\t\tstate.best.params = params;\n\t}\n\n\t// Populate splat values\n\tif (\n\t\tstate.best.registeredPattern.normalizedPattern === \"/*\" ||\n\t\tstate.best.registeredPattern.lastSegIsNonRootSplat\n\t) {\n\t\tstate.best.splatValues = segments.slice(\n\t\t\tstate.best.registeredPattern.normalizedSegments.length - 1,\n\t\t);\n\t}\n\n\treturn state.best;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import type { Params, PatternRegistry, RegisteredPattern } from "./register.ts";
2
+ export type Match = {
3
+ registeredPattern: RegisteredPattern;
4
+ params: Params;
5
+ splatValues: string[];
6
+ };
7
+ type FindNestedMatchesResult = {
8
+ params: Params;
9
+ splatValues: string[];
10
+ matches: Match[];
11
+ };
12
+ export declare function findNestedMatches(registry: PatternRegistry, realPath: string): FindNestedMatchesResult | null;
13
+ export {};
14
+ //# sourceMappingURL=find_nested_matches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find_nested_matches.d.ts","sourceRoot":"","sources":["../../../../kit/_typescript/matcher/find_nested_matches.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,MAAM,EACN,eAAe,EACf,iBAAiB,EAEjB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,KAAK,GAAG;IACnB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AA2JF,wBAAgB,iBAAiB,CAChC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACd,uBAAuB,GAAG,IAAI,CAmLhC"}
@@ -0,0 +1,248 @@
1
+ import {
2
+ NODE_DYNAMIC,
3
+ NODE_SPLAT,
4
+ SEG_TYPES,
5
+ parseSegments
6
+ } from "../chunk-YBAPNBS2.js";
7
+
8
+ // kit/_typescript/matcher/find_nested_matches.ts
9
+ function stripTrailingSlash(pattern) {
10
+ return pattern.length > 0 && pattern[pattern.length - 1] === "/" ? pattern.substring(0, pattern.length - 1) : pattern;
11
+ }
12
+ function dfsNestedMatches(registry, node, segments, depth, params, matches) {
13
+ if (node.pattern.length > 0) {
14
+ const rp = registry.dynamicPatterns.get(node.pattern);
15
+ if (rp && node.pattern !== "/*") {
16
+ const paramsCopy = { ...params };
17
+ let splatValues = [];
18
+ if (node.nodeType === NODE_SPLAT && depth < segments.length) {
19
+ splatValues = segments.slice(depth);
20
+ }
21
+ matches.set(node.pattern, {
22
+ registeredPattern: rp,
23
+ params: paramsCopy,
24
+ splatValues
25
+ });
26
+ if (depth === segments.length) {
27
+ const indexPattern = node.pattern + "/";
28
+ const rpIndex = registry.dynamicPatterns.get(indexPattern);
29
+ if (rpIndex) {
30
+ matches.set(indexPattern, {
31
+ registeredPattern: rpIndex,
32
+ params: paramsCopy,
33
+ splatValues: []
34
+ });
35
+ }
36
+ }
37
+ }
38
+ }
39
+ if (depth >= segments.length) return;
40
+ const seg = segments[depth];
41
+ if (node.children !== null) {
42
+ const child = node.children.get(seg);
43
+ if (child) {
44
+ dfsNestedMatches(
45
+ registry,
46
+ child,
47
+ segments,
48
+ depth + 1,
49
+ params,
50
+ matches
51
+ );
52
+ }
53
+ }
54
+ for (const child of node.dynChildren) {
55
+ switch (child.nodeType) {
56
+ case NODE_DYNAMIC: {
57
+ const oldVal = params[child.paramName];
58
+ const hadVal = oldVal !== void 0;
59
+ params[child.paramName] = seg;
60
+ dfsNestedMatches(
61
+ registry,
62
+ child,
63
+ segments,
64
+ depth + 1,
65
+ params,
66
+ matches
67
+ );
68
+ if (hadVal) {
69
+ params[child.paramName] = oldVal;
70
+ } else {
71
+ delete params[child.paramName];
72
+ }
73
+ break;
74
+ }
75
+ case NODE_SPLAT:
76
+ dfsNestedMatches(
77
+ registry,
78
+ child,
79
+ segments,
80
+ depth,
81
+ params,
82
+ matches
83
+ );
84
+ break;
85
+ }
86
+ }
87
+ }
88
+ function flattenAndSortMatches(matches, realPath, realSegmentLen) {
89
+ const results = Array.from(matches.values());
90
+ results.sort((i, j) => {
91
+ if (i.registeredPattern.lastSegIsIndex) return 1;
92
+ if (j.registeredPattern.lastSegIsIndex) return -1;
93
+ return i.registeredPattern.normalizedSegments.length - j.registeredPattern.normalizedSegments.length;
94
+ });
95
+ if (results.length === 0) return null;
96
+ const isNotSlashRoute = realPath !== "" && realPath !== "/";
97
+ if (isNotSlashRoute && results.length === 1 && results[0].registeredPattern.normalizedPattern === "") {
98
+ return null;
99
+ }
100
+ const lastMatch = results[results.length - 1];
101
+ if (!lastMatch.registeredPattern.lastSegIsNonRootSplat && lastMatch.registeredPattern.normalizedPattern !== "/*") {
102
+ const patternSegmentsLen = lastMatch.registeredPattern.normalizedSegments.length;
103
+ if (patternSegmentsLen < realSegmentLen) return null;
104
+ if (patternSegmentsLen === realSegmentLen && lastMatch.registeredPattern.numberOfDynamicParamSegs > 0 && Object.keys(lastMatch.params).length === 0) {
105
+ return null;
106
+ }
107
+ }
108
+ return {
109
+ params: lastMatch.params,
110
+ splatValues: lastMatch.splatValues,
111
+ matches: results
112
+ };
113
+ }
114
+ function findNestedMatches(registry, realPath) {
115
+ realPath = stripTrailingSlash(realPath);
116
+ const realSegments = parseSegments(realPath);
117
+ const matches = /* @__PURE__ */ new Map();
118
+ const emptyRR = registry.staticPatterns.get("");
119
+ if (emptyRR) {
120
+ matches.set(emptyRR.normalizedPattern, {
121
+ registeredPattern: emptyRR,
122
+ params: {},
123
+ splatValues: []
124
+ });
125
+ }
126
+ const realSegmentsLen = realSegments.length;
127
+ if (realPath === "") {
128
+ const rr = registry.staticPatterns.get("/");
129
+ if (rr) {
130
+ matches.set(rr.normalizedPattern, {
131
+ registeredPattern: rr,
132
+ params: {},
133
+ splatValues: []
134
+ });
135
+ } else {
136
+ const catchAllRR = registry.dynamicPatterns.get("/*");
137
+ if (catchAllRR) {
138
+ matches.set("/*", {
139
+ registeredPattern: catchAllRR,
140
+ params: {},
141
+ splatValues: []
142
+ });
143
+ }
144
+ }
145
+ return flattenAndSortMatches(matches, realPath, realSegmentsLen);
146
+ }
147
+ let pb = "";
148
+ let foundFullStatic = false;
149
+ for (let i = 0; i < realSegments.length; i++) {
150
+ pb += "/" + realSegments[i];
151
+ const rr = registry.staticPatterns.get(pb);
152
+ if (rr) {
153
+ matches.set(rr.normalizedPattern, {
154
+ registeredPattern: rr,
155
+ params: {},
156
+ splatValues: []
157
+ });
158
+ if (i === realSegmentsLen - 1) foundFullStatic = true;
159
+ }
160
+ if (i === realSegmentsLen - 1) {
161
+ pb += "/";
162
+ const rrWithSlash = registry.staticPatterns.get(pb);
163
+ if (rrWithSlash) {
164
+ matches.set(rrWithSlash.normalizedPattern, {
165
+ registeredPattern: rrWithSlash,
166
+ params: {},
167
+ splatValues: []
168
+ });
169
+ }
170
+ }
171
+ }
172
+ if (!foundFullStatic) {
173
+ const rr = registry.dynamicPatterns.get("/*");
174
+ if (rr) {
175
+ matches.set("/*", {
176
+ registeredPattern: rr,
177
+ params: {},
178
+ splatValues: realSegments
179
+ });
180
+ }
181
+ const params = {};
182
+ dfsNestedMatches(
183
+ registry,
184
+ registry.rootNode,
185
+ realSegments,
186
+ 0,
187
+ params,
188
+ matches
189
+ );
190
+ }
191
+ const hasEmptyRR = emptyRR !== void 0;
192
+ if (matches.has("/*")) {
193
+ if (hasEmptyRR) {
194
+ if (matches.size > 2) matches.delete("/*");
195
+ } else if (matches.size > 1) {
196
+ matches.delete("/*");
197
+ }
198
+ }
199
+ if (matches.size < 2) {
200
+ return flattenAndSortMatches(matches, realPath, realSegmentsLen);
201
+ }
202
+ let longestSegmentLen = 0;
203
+ const longestSegmentMatches = /* @__PURE__ */ new Map();
204
+ for (const match of matches.values()) {
205
+ if (match.registeredPattern.normalizedSegments.length > longestSegmentLen) {
206
+ longestSegmentLen = match.registeredPattern.normalizedSegments.length;
207
+ }
208
+ }
209
+ for (const match of matches.values()) {
210
+ if (match.registeredPattern.normalizedSegments.length === longestSegmentLen) {
211
+ longestSegmentMatches.set(
212
+ match.registeredPattern.lastSegType,
213
+ match
214
+ );
215
+ }
216
+ }
217
+ for (const [pattern, match] of matches) {
218
+ if (match.registeredPattern.normalizedSegments.length < longestSegmentLen) {
219
+ if (match.registeredPattern.lastSegIsNonRootSplat || match.registeredPattern.lastSegIsIndex) {
220
+ matches.delete(pattern);
221
+ }
222
+ }
223
+ }
224
+ if (matches.size < 2) {
225
+ return flattenAndSortMatches(matches, realPath, realSegmentsLen);
226
+ }
227
+ if (longestSegmentMatches.size > 1) {
228
+ const indexMatch = longestSegmentMatches.get(SEG_TYPES.index);
229
+ if (indexMatch) {
230
+ matches.delete(indexMatch.registeredPattern.normalizedPattern);
231
+ }
232
+ const dynamicExists = longestSegmentMatches.has(SEG_TYPES.dynamic);
233
+ const splatExists = longestSegmentMatches.has(SEG_TYPES.splat);
234
+ if (realSegmentsLen === longestSegmentLen && dynamicExists && splatExists) {
235
+ const splatMatch = longestSegmentMatches.get(SEG_TYPES.splat);
236
+ matches.delete(splatMatch.registeredPattern.normalizedPattern);
237
+ }
238
+ if (realSegmentsLen > longestSegmentLen && splatExists && dynamicExists) {
239
+ const dynamicMatch = longestSegmentMatches.get(SEG_TYPES.dynamic);
240
+ matches.delete(dynamicMatch.registeredPattern.normalizedPattern);
241
+ }
242
+ }
243
+ return flattenAndSortMatches(matches, realPath, realSegmentsLen);
244
+ }
245
+ export {
246
+ findNestedMatches
247
+ };
248
+ //# sourceMappingURL=find_nested_matches.js.map