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.
- package/LICENSE +28 -0
- package/README.md +48 -0
- package/internal/framework/_typescript/client/index.ts +64 -0
- package/internal/framework/_typescript/client/src/asset_manager.ts +67 -0
- package/internal/framework/_typescript/client/src/client.ts +1201 -0
- package/internal/framework/_typescript/client/src/client_loaders.ts +249 -0
- package/internal/framework/_typescript/client/src/component_loader.ts +105 -0
- package/internal/framework/_typescript/client/src/error_boundary.ts +7 -0
- package/internal/framework/_typescript/client/src/events.ts +54 -0
- package/internal/framework/_typescript/client/src/global_loading_indicator/global_loading_indicator.ts +125 -0
- package/internal/framework/_typescript/client/src/hard_reload.ts +1 -0
- package/internal/framework/_typescript/client/src/head_elements/head_elements.ts +193 -0
- package/internal/framework/_typescript/client/src/history/history.ts +118 -0
- package/internal/framework/_typescript/client/src/history/npm_history_types.ts +83 -0
- package/internal/framework/_typescript/client/src/hmr/hmr.ts +71 -0
- package/internal/framework/_typescript/client/src/init_client.ts +134 -0
- package/internal/framework/_typescript/client/src/links.ts +218 -0
- package/internal/framework/_typescript/client/src/redirects/redirects.ts +203 -0
- package/internal/framework/_typescript/client/src/rendering.ts +135 -0
- package/internal/framework/_typescript/client/src/resolve_public_href.ts +15 -0
- package/internal/framework/_typescript/client/src/scroll_state_manager.ts +100 -0
- package/internal/framework/_typescript/client/src/static_route_defs/route_def_helpers.ts +22 -0
- package/internal/framework/_typescript/client/src/ui_lib_impl_helpers/link_components.ts +131 -0
- package/internal/framework/_typescript/client/src/ui_lib_impl_helpers/route_components.ts +56 -0
- package/internal/framework/_typescript/client/src/ui_lib_impl_helpers/typed_navigate.ts +58 -0
- package/internal/framework/_typescript/client/src/utils/errors.ts +10 -0
- package/internal/framework/_typescript/client/src/utils/logging.ts +7 -0
- package/internal/framework/_typescript/client/src/vorma_app_helpers/vorma_app_helpers.ts +290 -0
- package/internal/framework/_typescript/client/src/vorma_ctx/vorma_ctx.ts +128 -0
- package/internal/framework/_typescript/client/src/window_focus_revalidation/window_focus_revalidation.ts +32 -0
- package/internal/framework/_typescript/client/tsconfig.json +3 -0
- package/internal/framework/_typescript/create/main.ts +378 -0
- package/internal/framework/_typescript/create/package.json +33 -0
- package/internal/framework/_typescript/create/pnpm-lock.yaml +70 -0
- package/internal/framework/_typescript/create/tsconfig.json +3 -0
- package/internal/framework/_typescript/preact/index.tsx +10 -0
- package/internal/framework/_typescript/preact/src/helpers.ts +113 -0
- package/internal/framework/_typescript/preact/src/link.tsx +107 -0
- package/internal/framework/_typescript/preact/src/preact.tsx +191 -0
- package/internal/framework/_typescript/preact/tsconfig.json +7 -0
- package/internal/framework/_typescript/react/index.tsx +10 -0
- package/internal/framework/_typescript/react/src/helpers.ts +118 -0
- package/internal/framework/_typescript/react/src/link.tsx +115 -0
- package/internal/framework/_typescript/react/src/react.tsx +299 -0
- package/internal/framework/_typescript/react/tsconfig.json +6 -0
- package/internal/framework/_typescript/solid/index.tsx +10 -0
- package/internal/framework/_typescript/solid/src/helpers.ts +114 -0
- package/internal/framework/_typescript/solid/src/link.tsx +104 -0
- package/internal/framework/_typescript/solid/src/solid.tsx +204 -0
- package/internal/framework/_typescript/solid/tsconfig.json +7 -0
- package/internal/framework/_typescript/vite/tsconfig.json +3 -0
- package/internal/framework/_typescript/vite/vite.ts +93 -0
- package/internal/site/frontend/assets/vorma-banner.webp +0 -0
- package/kit/_typescript/converters/converters.ts +152 -0
- package/kit/_typescript/cookies/cookies.ts +18 -0
- package/kit/_typescript/csrf/csrf.ts +10 -0
- package/kit/_typescript/debounce/debounce.ts +17 -0
- package/kit/_typescript/fmt/fmt.ts +3 -0
- package/kit/_typescript/json/deep_equals.ts +54 -0
- package/kit/_typescript/json/json.ts +3 -0
- package/kit/_typescript/json/search_param_serializer.ts +49 -0
- package/kit/_typescript/json/stringify_stable.ts +43 -0
- package/kit/_typescript/listeners/listeners.ts +16 -0
- package/kit/_typescript/matcher/find_best_match.ts +205 -0
- package/kit/_typescript/matcher/find_nested_matches.ts +357 -0
- package/kit/_typescript/matcher/parse_segments.ts +30 -0
- package/kit/_typescript/matcher/register.ts +271 -0
- package/kit/_typescript/theme/theme.ts +166 -0
- package/kit/_typescript/tsconfig.json +3 -0
- package/kit/_typescript/url/url.ts +132 -0
- package/npm_dist/internal/framework/_typescript/client/index.d.ts +17 -0
- package/npm_dist/internal/framework/_typescript/client/index.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/index.js +2489 -0
- package/npm_dist/internal/framework/_typescript/client/index.js.map +7 -0
- package/npm_dist/internal/framework/_typescript/client/src/asset_manager.d.ts +6 -0
- package/npm_dist/internal/framework/_typescript/client/src/asset_manager.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/client.d.ts +119 -0
- package/npm_dist/internal/framework/_typescript/client/src/client.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/client_loaders.d.ts +18 -0
- package/npm_dist/internal/framework/_typescript/client/src/client_loaders.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/component_loader.d.ts +10 -0
- package/npm_dist/internal/framework/_typescript/client/src/component_loader.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/error_boundary.d.ts +3 -0
- package/npm_dist/internal/framework/_typescript/client/src/error_boundary.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/events.d.ts +26 -0
- package/npm_dist/internal/framework/_typescript/client/src/events.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/global_loading_indicator/global_loading_indicator.d.ts +12 -0
- package/npm_dist/internal/framework/_typescript/client/src/global_loading_indicator/global_loading_indicator.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/hard_reload.d.ts +2 -0
- package/npm_dist/internal/framework/_typescript/client/src/hard_reload.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/head_elements/head_elements.d.ts +7 -0
- package/npm_dist/internal/framework/_typescript/client/src/head_elements/head_elements.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/history/history.d.ts +14 -0
- package/npm_dist/internal/framework/_typescript/client/src/history/history.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/history/npm_history_types.d.ts +84 -0
- package/npm_dist/internal/framework/_typescript/client/src/history/npm_history_types.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/hmr/hmr.d.ts +3 -0
- package/npm_dist/internal/framework/_typescript/client/src/hmr/hmr.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/init_client.d.ts +9 -0
- package/npm_dist/internal/framework/_typescript/client/src/init_client.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/links.d.ts +33 -0
- package/npm_dist/internal/framework/_typescript/client/src/links.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/redirects/redirects.d.ts +26 -0
- package/npm_dist/internal/framework/_typescript/client/src/redirects/redirects.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/rendering.d.ts +18 -0
- package/npm_dist/internal/framework/_typescript/client/src/rendering.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/resolve_public_href.d.ts +2 -0
- package/npm_dist/internal/framework/_typescript/client/src/resolve_public_href.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/scroll_state_manager.d.ts +22 -0
- package/npm_dist/internal/framework/_typescript/client/src/scroll_state_manager.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/static_route_defs/route_def_helpers.d.ts +12 -0
- package/npm_dist/internal/framework/_typescript/client/src/static_route_defs/route_def_helpers.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/link_components.d.ts +28 -0
- package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/link_components.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/route_components.d.ts +18 -0
- package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/route_components.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/typed_navigate.d.ts +11 -0
- package/npm_dist/internal/framework/_typescript/client/src/ui_lib_impl_helpers/typed_navigate.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/utils/errors.d.ts +3 -0
- package/npm_dist/internal/framework/_typescript/client/src/utils/errors.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/utils/logging.d.ts +3 -0
- package/npm_dist/internal/framework/_typescript/client/src/utils/logging.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/vorma_app_helpers/vorma_app_helpers.d.ts +119 -0
- package/npm_dist/internal/framework/_typescript/client/src/vorma_app_helpers/vorma_app_helpers.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/vorma_ctx/vorma_ctx.d.ts +88 -0
- package/npm_dist/internal/framework/_typescript/client/src/vorma_ctx/vorma_ctx.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/client/src/window_focus_revalidation/window_focus_revalidation.d.ts +10 -0
- package/npm_dist/internal/framework/_typescript/client/src/window_focus_revalidation/window_focus_revalidation.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/create/main.d.ts +3 -0
- package/npm_dist/internal/framework/_typescript/create/main.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/preact/index.d.ts +4 -0
- package/npm_dist/internal/framework/_typescript/preact/index.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/preact/index.js +283 -0
- package/npm_dist/internal/framework/_typescript/preact/index.js.map +7 -0
- package/npm_dist/internal/framework/_typescript/preact/src/helpers.d.ts +21 -0
- package/npm_dist/internal/framework/_typescript/preact/src/helpers.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/preact/src/link.d.ts +11 -0
- package/npm_dist/internal/framework/_typescript/preact/src/link.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/preact/src/preact.d.ts +21 -0
- package/npm_dist/internal/framework/_typescript/preact/src/preact.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/react/index.d.ts +4 -0
- package/npm_dist/internal/framework/_typescript/react/index.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/react/index.js +370 -0
- package/npm_dist/internal/framework/_typescript/react/index.js.map +7 -0
- package/npm_dist/internal/framework/_typescript/react/src/helpers.d.ts +21 -0
- package/npm_dist/internal/framework/_typescript/react/src/helpers.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/react/src/link.d.ts +11 -0
- package/npm_dist/internal/framework/_typescript/react/src/link.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/react/src/react.d.ts +20 -0
- package/npm_dist/internal/framework/_typescript/react/src/react.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/solid/index.d.ts +4 -0
- package/npm_dist/internal/framework/_typescript/solid/index.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/solid/index.js +314 -0
- package/npm_dist/internal/framework/_typescript/solid/index.js.map +7 -0
- package/npm_dist/internal/framework/_typescript/solid/src/helpers.d.ts +22 -0
- package/npm_dist/internal/framework/_typescript/solid/src/helpers.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/solid/src/link.d.ts +11 -0
- package/npm_dist/internal/framework/_typescript/solid/src/link.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/solid/src/solid.d.ts +22 -0
- package/npm_dist/internal/framework/_typescript/solid/src/solid.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/vite/vite.d.ts +11 -0
- package/npm_dist/internal/framework/_typescript/vite/vite.d.ts.map +1 -0
- package/npm_dist/internal/framework/_typescript/vite/vite.js +82 -0
- package/npm_dist/internal/framework/_typescript/vite/vite.js.map +7 -0
- package/npm_dist/kit/_typescript/chunk-YBAPNBS2.js +202 -0
- package/npm_dist/kit/_typescript/chunk-YBAPNBS2.js.map +7 -0
- package/npm_dist/kit/_typescript/converters/converters.d.ts +26 -0
- package/npm_dist/kit/_typescript/converters/converters.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/converters/converters.js +99 -0
- package/npm_dist/kit/_typescript/converters/converters.js.map +7 -0
- package/npm_dist/kit/_typescript/cookies/cookies.d.ts +13 -0
- package/npm_dist/kit/_typescript/cookies/cookies.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/cookies/cookies.js +13 -0
- package/npm_dist/kit/_typescript/cookies/cookies.js.map +7 -0
- package/npm_dist/kit/_typescript/csrf/csrf.d.ts +5 -0
- package/npm_dist/kit/_typescript/csrf/csrf.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/csrf/csrf.js +11 -0
- package/npm_dist/kit/_typescript/csrf/csrf.js.map +7 -0
- package/npm_dist/kit/_typescript/debounce/debounce.d.ts +4 -0
- package/npm_dist/kit/_typescript/debounce/debounce.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/debounce/debounce.js +16 -0
- package/npm_dist/kit/_typescript/debounce/debounce.js.map +7 -0
- package/npm_dist/kit/_typescript/fmt/fmt.d.ts +2 -0
- package/npm_dist/kit/_typescript/fmt/fmt.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/fmt/fmt.js +8 -0
- package/npm_dist/kit/_typescript/fmt/fmt.js.map +7 -0
- package/npm_dist/kit/_typescript/json/deep_equals.d.ts +7 -0
- package/npm_dist/kit/_typescript/json/deep_equals.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/json/json.d.ts +4 -0
- package/npm_dist/kit/_typescript/json/json.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/json/json.js +110 -0
- package/npm_dist/kit/_typescript/json/json.js.map +7 -0
- package/npm_dist/kit/_typescript/json/search_param_serializer.d.ts +2 -0
- package/npm_dist/kit/_typescript/json/search_param_serializer.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/json/stringify_stable.d.ts +7 -0
- package/npm_dist/kit/_typescript/json/stringify_stable.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/listeners/listeners.d.ts +2 -0
- package/npm_dist/kit/_typescript/listeners/listeners.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/listeners/listeners.js +20 -0
- package/npm_dist/kit/_typescript/listeners/listeners.js.map +7 -0
- package/npm_dist/kit/_typescript/matcher/find_best_match.d.ts +10 -0
- package/npm_dist/kit/_typescript/matcher/find_best_match.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/matcher/find_best_match.js +146 -0
- package/npm_dist/kit/_typescript/matcher/find_best_match.js.map +7 -0
- package/npm_dist/kit/_typescript/matcher/find_nested_matches.d.ts +14 -0
- package/npm_dist/kit/_typescript/matcher/find_nested_matches.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/matcher/find_nested_matches.js +248 -0
- package/npm_dist/kit/_typescript/matcher/find_nested_matches.js.map +7 -0
- package/npm_dist/kit/_typescript/matcher/parse_segments.d.ts +2 -0
- package/npm_dist/kit/_typescript/matcher/parse_segments.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/matcher/register.d.ts +54 -0
- package/npm_dist/kit/_typescript/matcher/register.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/matcher/register.js +21 -0
- package/npm_dist/kit/_typescript/matcher/register.js.map +7 -0
- package/npm_dist/kit/_typescript/theme/theme.d.ts +23 -0
- package/npm_dist/kit/_typescript/theme/theme.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/theme/theme.js +122 -0
- package/npm_dist/kit/_typescript/theme/theme.js.map +7 -0
- package/npm_dist/kit/_typescript/url/url.d.ts +30 -0
- package/npm_dist/kit/_typescript/url/url.d.ts.map +1 -0
- package/npm_dist/kit/_typescript/url/url.js +100 -0
- package/npm_dist/kit/_typescript/url/url.js.map +7 -0
- package/package.json +135 -3
- package/tsconfig.base.json +17 -0
- 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 @@
|
|
|
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 @@
|
|
|
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
|