vorma 0.85.0-pre.3 → 0.85.0-pre.5

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 (264) hide show
  1. package/.dist/kit/converters/converters.d.ts +29 -0
  2. package/.dist/kit/converters/converters.d.ts.map +1 -0
  3. package/.dist/kit/converters/converters.js +67 -0
  4. package/.dist/kit/converters/converters.js.map +1 -0
  5. package/{npm_dist/typescript → .dist}/kit/cookies/cookies.d.ts +5 -2
  6. package/.dist/kit/cookies/cookies.d.ts.map +1 -0
  7. package/.dist/kit/cookies/cookies.js +26 -0
  8. package/.dist/kit/cookies/cookies.js.map +1 -0
  9. package/.dist/kit/csrf/csrf.d.ts +8 -0
  10. package/.dist/kit/csrf/csrf.d.ts.map +1 -0
  11. package/.dist/kit/csrf/csrf.js +9 -0
  12. package/.dist/kit/csrf/csrf.js.map +1 -0
  13. package/.dist/kit/debounce/debounce.d.ts +6 -0
  14. package/.dist/kit/debounce/debounce.d.ts.map +1 -0
  15. package/.dist/kit/debounce/debounce.js +20 -0
  16. package/.dist/kit/debounce/debounce.js.map +1 -0
  17. package/.dist/kit/fmt/fmt.d.ts +5 -0
  18. package/.dist/kit/fmt/fmt.d.ts.map +1 -0
  19. package/.dist/kit/fmt/fmt.js +8 -0
  20. package/.dist/kit/fmt/fmt.js.map +1 -0
  21. package/.dist/kit/json/json.d.ts +31 -0
  22. package/.dist/kit/json/json.d.ts.map +1 -0
  23. package/.dist/kit/json/json.js +110 -0
  24. package/.dist/kit/json/json.js.map +1 -0
  25. package/.dist/kit/listeners/listeners.d.ts +5 -0
  26. package/.dist/kit/listeners/listeners.d.ts.map +1 -0
  27. package/.dist/kit/listeners/listeners.js +18 -0
  28. package/.dist/kit/listeners/listeners.js.map +1 -0
  29. package/.dist/kit/matcher/find_best_match.d.ts +13 -0
  30. package/.dist/kit/matcher/find_best_match.d.ts.map +1 -0
  31. package/.dist/kit/matcher/find_best_match.js +92 -0
  32. package/.dist/kit/matcher/find_best_match.js.map +1 -0
  33. package/.dist/kit/matcher/find_nested_matches.d.ts +17 -0
  34. package/.dist/kit/matcher/find_nested_matches.d.ts.map +1 -0
  35. package/.dist/kit/matcher/find_nested_matches.js +183 -0
  36. package/.dist/kit/matcher/find_nested_matches.js.map +1 -0
  37. package/.dist/kit/matcher/register.d.ts +59 -0
  38. package/.dist/kit/matcher/register.d.ts.map +1 -0
  39. package/.dist/kit/matcher/register.js +159 -0
  40. package/.dist/kit/matcher/register.js.map +1 -0
  41. package/.dist/kit/matcher/utils.d.ts +6 -0
  42. package/.dist/kit/matcher/utils.d.ts.map +1 -0
  43. package/.dist/kit/matcher/utils.js +21 -0
  44. package/.dist/kit/matcher/utils.js.map +1 -0
  45. package/.dist/kit/result/result.d.ts +17 -0
  46. package/.dist/kit/result/result.d.ts.map +1 -0
  47. package/.dist/kit/result/result.js +21 -0
  48. package/.dist/kit/result/result.js.map +1 -0
  49. package/.dist/kit/theme/theme.d.ts +26 -0
  50. package/.dist/kit/theme/theme.d.ts.map +1 -0
  51. package/.dist/kit/theme/theme.js +122 -0
  52. package/.dist/kit/theme/theme.js.map +1 -0
  53. package/.dist/kit/url/url.d.ts +52 -0
  54. package/.dist/kit/url/url.d.ts.map +1 -0
  55. package/.dist/kit/url/url.js +103 -0
  56. package/.dist/kit/url/url.js.map +1 -0
  57. package/.dist/vorma/core/_index.d.ts +478 -0
  58. package/.dist/vorma/core/_index.d.ts.map +1 -0
  59. package/.dist/vorma/core/_index.js +1807 -0
  60. package/.dist/vorma/core/_index.js.map +1 -0
  61. package/.dist/vorma/tsx/preact/preact.d.ts +13 -0
  62. package/.dist/vorma/tsx/preact/preact.d.ts.map +1 -0
  63. package/.dist/vorma/tsx/preact/preact.js +172 -0
  64. package/.dist/vorma/tsx/preact/preact.js.map +1 -0
  65. package/.dist/vorma/tsx/react/react.d.ts +12 -0
  66. package/.dist/vorma/tsx/react/react.d.ts.map +1 -0
  67. package/.dist/vorma/tsx/react/react.js +203 -0
  68. package/.dist/vorma/tsx/react/react.js.map +1 -0
  69. package/.dist/vorma/tsx/solid/solid.d.ts +12 -0
  70. package/.dist/vorma/tsx/solid/solid.d.ts.map +1 -0
  71. package/.dist/vorma/tsx/solid/solid.js +247 -0
  72. package/.dist/vorma/tsx/solid/solid.js.map +1 -0
  73. package/.dist/vorma/vite/vite.d.mts +7 -0
  74. package/.dist/vorma/vite/vite.d.mts.map +1 -0
  75. package/.dist/vorma/vite/vite.mjs +155 -0
  76. package/.dist/vorma/vite/vite.mjs.map +1 -0
  77. package/README.md +3 -27
  78. package/{typescript/kit → kit}/debounce/debounce.ts +2 -2
  79. package/kit/json/stringify_stable.ts +68 -0
  80. package/kit/matcher/bench.txt +24 -0
  81. package/{typescript/kit → kit}/matcher/find_best_match.ts +49 -74
  82. package/kit/matcher/find_nested_matches.ts +366 -0
  83. package/kit/matcher/register.ts +318 -0
  84. package/{typescript/kit → kit}/matcher/utils.ts +3 -3
  85. package/kit/result/result.ts +11 -0
  86. package/kit/tsconfig.json +3 -0
  87. package/package.json +81 -94
  88. package/tsconfig.base.json +1 -1
  89. package/vorma/core/_index.ts +66 -0
  90. package/vorma/core/api_client.ts +103 -0
  91. package/vorma/core/constants.ts +16 -0
  92. package/vorma/core/create_client_core.ts +2207 -0
  93. package/vorma/core/css.ts +83 -0
  94. package/vorma/core/head.ts +210 -0
  95. package/vorma/core/make_link_props.ts +293 -0
  96. package/vorma/core/modules.ts +20 -0
  97. package/vorma/core/resolve_outlet_slot.ts +125 -0
  98. package/vorma/core/types.ts +330 -0
  99. package/vorma/core/ui_adapter_core.ts +251 -0
  100. package/vorma/core/url.ts +166 -0
  101. package/{typescript/vorma → vorma}/create/main.ts +47 -56
  102. package/{typescript/vorma → vorma}/create/package.json +7 -10
  103. package/vorma/create/tsconfig.json +3 -0
  104. package/vorma/tsx/preact/preact.tsx +312 -0
  105. package/{typescript/vorma/ui-adapters → vorma/tsx}/preact/tsconfig.json +1 -1
  106. package/vorma/tsx/react/react.tsx +340 -0
  107. package/{typescript/vorma/ui-adapters → vorma/tsx}/react/tsconfig.json +1 -1
  108. package/vorma/tsx/solid/solid.tsx +356 -0
  109. package/{typescript/vorma/ui-adapters → vorma/tsx}/solid/tsconfig.json +1 -1
  110. package/vorma/vite/tsconfig.json +3 -0
  111. package/vorma/vite/vite.ts +253 -0
  112. package/LICENSE +0 -28
  113. package/npm_dist/.buildts_cache.json +0 -1
  114. package/npm_dist/typescript/kit/converters/converters.d.ts +0 -26
  115. package/npm_dist/typescript/kit/converters/converters.d.ts.map +0 -1
  116. package/npm_dist/typescript/kit/converters/converters.js +0 -99
  117. package/npm_dist/typescript/kit/converters/converters.js.map +0 -7
  118. package/npm_dist/typescript/kit/cookies/cookies.d.ts.map +0 -1
  119. package/npm_dist/typescript/kit/cookies/cookies.js +0 -20
  120. package/npm_dist/typescript/kit/cookies/cookies.js.map +0 -7
  121. package/npm_dist/typescript/kit/csrf/csrf.d.ts +0 -5
  122. package/npm_dist/typescript/kit/csrf/csrf.d.ts.map +0 -1
  123. package/npm_dist/typescript/kit/csrf/csrf.js +0 -11
  124. package/npm_dist/typescript/kit/csrf/csrf.js.map +0 -7
  125. package/npm_dist/typescript/kit/debounce/debounce.d.ts +0 -4
  126. package/npm_dist/typescript/kit/debounce/debounce.d.ts.map +0 -1
  127. package/npm_dist/typescript/kit/debounce/debounce.js +0 -20
  128. package/npm_dist/typescript/kit/debounce/debounce.js.map +0 -7
  129. package/npm_dist/typescript/kit/fmt/fmt.d.ts +0 -2
  130. package/npm_dist/typescript/kit/fmt/fmt.d.ts.map +0 -1
  131. package/npm_dist/typescript/kit/fmt/fmt.js +0 -8
  132. package/npm_dist/typescript/kit/fmt/fmt.js.map +0 -7
  133. package/npm_dist/typescript/kit/json/deep_equals.d.ts +0 -7
  134. package/npm_dist/typescript/kit/json/deep_equals.d.ts.map +0 -1
  135. package/npm_dist/typescript/kit/json/json.d.ts +0 -4
  136. package/npm_dist/typescript/kit/json/json.d.ts.map +0 -1
  137. package/npm_dist/typescript/kit/json/json.js +0 -121
  138. package/npm_dist/typescript/kit/json/json.js.map +0 -7
  139. package/npm_dist/typescript/kit/json/search_param_serializer.d.ts +0 -2
  140. package/npm_dist/typescript/kit/json/search_param_serializer.d.ts.map +0 -1
  141. package/npm_dist/typescript/kit/json/stringify_stable.d.ts +0 -7
  142. package/npm_dist/typescript/kit/json/stringify_stable.d.ts.map +0 -1
  143. package/npm_dist/typescript/kit/listeners/listeners.d.ts +0 -2
  144. package/npm_dist/typescript/kit/listeners/listeners.d.ts.map +0 -1
  145. package/npm_dist/typescript/kit/listeners/listeners.js +0 -20
  146. package/npm_dist/typescript/kit/listeners/listeners.js.map +0 -7
  147. package/npm_dist/typescript/kit/matcher/find_best_match.d.ts +0 -10
  148. package/npm_dist/typescript/kit/matcher/find_best_match.d.ts.map +0 -1
  149. package/npm_dist/typescript/kit/matcher/find_best_match.js +0 -154
  150. package/npm_dist/typescript/kit/matcher/find_best_match.js.map +0 -7
  151. package/npm_dist/typescript/kit/matcher/find_nested_matches.d.ts +0 -14
  152. package/npm_dist/typescript/kit/matcher/find_nested_matches.d.ts.map +0 -1
  153. package/npm_dist/typescript/kit/matcher/find_nested_matches.js +0 -244
  154. package/npm_dist/typescript/kit/matcher/find_nested_matches.js.map +0 -7
  155. package/npm_dist/typescript/kit/matcher/register.d.ts +0 -54
  156. package/npm_dist/typescript/kit/matcher/register.d.ts.map +0 -1
  157. package/npm_dist/typescript/kit/matcher/register.js +0 -183
  158. package/npm_dist/typescript/kit/matcher/register.js.map +0 -7
  159. package/npm_dist/typescript/kit/matcher/utils.d.ts +0 -3
  160. package/npm_dist/typescript/kit/matcher/utils.d.ts.map +0 -1
  161. package/npm_dist/typescript/kit/matcher/utils.js +0 -32
  162. package/npm_dist/typescript/kit/matcher/utils.js.map +0 -7
  163. package/npm_dist/typescript/kit/theme/theme.d.ts +0 -24
  164. package/npm_dist/typescript/kit/theme/theme.d.ts.map +0 -1
  165. package/npm_dist/typescript/kit/theme/theme.js +0 -143
  166. package/npm_dist/typescript/kit/theme/theme.js.map +0 -7
  167. package/npm_dist/typescript/kit/url/url.d.ts +0 -49
  168. package/npm_dist/typescript/kit/url/url.d.ts.map +0 -1
  169. package/npm_dist/typescript/kit/url/url.js +0 -137
  170. package/npm_dist/typescript/kit/url/url.js.map +0 -7
  171. package/npm_dist/typescript/vorma/client/buildtime.d.ts +0 -3
  172. package/npm_dist/typescript/vorma/client/buildtime.d.ts.map +0 -1
  173. package/npm_dist/typescript/vorma/client/buildtime.js +0 -7
  174. package/npm_dist/typescript/vorma/client/buildtime.js.map +0 -7
  175. package/npm_dist/typescript/vorma/client/chunk-AELFYFRG.js +0 -3927
  176. package/npm_dist/typescript/vorma/client/chunk-AELFYFRG.js.map +0 -7
  177. package/npm_dist/typescript/vorma/client/index.d.ts +0 -13
  178. package/npm_dist/typescript/vorma/client/index.d.ts.map +0 -1
  179. package/npm_dist/typescript/vorma/client/index.js +0 -49
  180. package/npm_dist/typescript/vorma/client/index.js.map +0 -7
  181. package/npm_dist/typescript/vorma/client/internal/hmr_dev.d.ts +0 -28
  182. package/npm_dist/typescript/vorma/client/internal/hmr_dev.d.ts.map +0 -1
  183. package/npm_dist/typescript/vorma/client/internal/hmr_dev.js +0 -231
  184. package/npm_dist/typescript/vorma/client/internal/hmr_dev.js.map +0 -7
  185. package/npm_dist/typescript/vorma/client/internal.d.ts +0 -8
  186. package/npm_dist/typescript/vorma/client/internal.d.ts.map +0 -1
  187. package/npm_dist/typescript/vorma/client/internal.js +0 -51
  188. package/npm_dist/typescript/vorma/client/internal.js.map +0 -7
  189. package/npm_dist/typescript/vorma/client/src/runtime.d.ts +0 -643
  190. package/npm_dist/typescript/vorma/client/src/runtime.d.ts.map +0 -1
  191. package/npm_dist/typescript/vorma/client/testing.d.ts +0 -71
  192. package/npm_dist/typescript/vorma/client/testing.d.ts.map +0 -1
  193. package/npm_dist/typescript/vorma/client/testing.js +0 -309
  194. package/npm_dist/typescript/vorma/client/testing.js.map +0 -7
  195. package/npm_dist/typescript/vorma/client/vitest.dist.config.d.ts +0 -3
  196. package/npm_dist/typescript/vorma/client/vitest.dist.config.d.ts.map +0 -1
  197. package/npm_dist/typescript/vorma/create/main.d.ts +0 -3
  198. package/npm_dist/typescript/vorma/create/main.d.ts.map +0 -1
  199. package/npm_dist/typescript/vorma/create/runtime_helpers.d.ts +0 -28
  200. package/npm_dist/typescript/vorma/create/runtime_helpers.d.ts.map +0 -1
  201. package/npm_dist/typescript/vorma/ui-adapters/preact/index.d.ts +0 -2
  202. package/npm_dist/typescript/vorma/ui-adapters/preact/index.d.ts.map +0 -1
  203. package/npm_dist/typescript/vorma/ui-adapters/preact/index.js +0 -203
  204. package/npm_dist/typescript/vorma/ui-adapters/preact/index.js.map +0 -7
  205. package/npm_dist/typescript/vorma/ui-adapters/preact/src/preact.d.ts +0 -337
  206. package/npm_dist/typescript/vorma/ui-adapters/preact/src/preact.d.ts.map +0 -1
  207. package/npm_dist/typescript/vorma/ui-adapters/react/index.d.ts +0 -2
  208. package/npm_dist/typescript/vorma/ui-adapters/react/index.d.ts.map +0 -1
  209. package/npm_dist/typescript/vorma/ui-adapters/react/index.js +0 -242
  210. package/npm_dist/typescript/vorma/ui-adapters/react/index.js.map +0 -7
  211. package/npm_dist/typescript/vorma/ui-adapters/react/src/react.d.ts +0 -25
  212. package/npm_dist/typescript/vorma/ui-adapters/react/src/react.d.ts.map +0 -1
  213. package/npm_dist/typescript/vorma/ui-adapters/solid/index.d.ts +0 -2
  214. package/npm_dist/typescript/vorma/ui-adapters/solid/index.d.ts.map +0 -1
  215. package/npm_dist/typescript/vorma/ui-adapters/solid/index.js +0 -290
  216. package/npm_dist/typescript/vorma/ui-adapters/solid/index.js.map +0 -7
  217. package/npm_dist/typescript/vorma/ui-adapters/solid/src/solid.d.ts +0 -28
  218. package/npm_dist/typescript/vorma/ui-adapters/solid/src/solid.d.ts.map +0 -1
  219. package/npm_dist/typescript/vorma/vite/vite.d.ts +0 -11
  220. package/npm_dist/typescript/vorma/vite/vite.d.ts.map +0 -1
  221. package/npm_dist/typescript/vorma/vite/vite.js +0 -243
  222. package/npm_dist/typescript/vorma/vite/vite.js.map +0 -7
  223. package/typescript/kit/csrf/AGENTS.md +0 -2
  224. package/typescript/kit/json/stringify_stable.ts +0 -48
  225. package/typescript/kit/matcher/AGENTS.md +0 -2
  226. package/typescript/kit/matcher/find_nested_matches.ts +0 -355
  227. package/typescript/kit/matcher/register.ts +0 -277
  228. package/typescript/vorma/black_box_tests/dist/public_api_types.typecheck.ts +0 -1031
  229. package/typescript/vorma/black_box_tests/dist/tsconfig.json +0 -9
  230. package/typescript/vorma/black_box_tests/dist/vitest.config.ts +0 -85
  231. package/typescript/vorma/black_box_tests/src/tsconfig.json +0 -8
  232. package/typescript/vorma/client/README.md +0 -48
  233. package/typescript/vorma/client/buildtime.ts +0 -15
  234. package/typescript/vorma/client/index.ts +0 -66
  235. package/typescript/vorma/client/internal/hmr_dev.ts +0 -353
  236. package/typescript/vorma/client/internal.ts +0 -40
  237. package/typescript/vorma/client/src/import_meta.d.ts +0 -21
  238. package/typescript/vorma/client/src/runtime.ts +0 -5721
  239. package/typescript/vorma/client/testing.ts +0 -487
  240. package/typescript/vorma/client/tsconfig.json +0 -10
  241. package/typescript/vorma/client/vitest.dist.config.ts +0 -85
  242. package/typescript/vorma/create/runtime_helpers.ts +0 -164
  243. package/typescript/vorma/create/tsconfig.json +0 -3
  244. package/typescript/vorma/ui-adapters/README.md +0 -7
  245. package/typescript/vorma/ui-adapters/preact/index.ts +0 -12
  246. package/typescript/vorma/ui-adapters/preact/src/preact.tsx +0 -319
  247. package/typescript/vorma/ui-adapters/react/index.ts +0 -12
  248. package/typescript/vorma/ui-adapters/react/src/react.tsx +0 -372
  249. package/typescript/vorma/ui-adapters/solid/index.ts +0 -12
  250. package/typescript/vorma/ui-adapters/solid/src/solid.tsx +0 -446
  251. package/typescript/vorma/vite/tsconfig.json +0 -3
  252. package/typescript/vorma/vite/vite.ts +0 -341
  253. /package/{internal/site/frontend/assets/vorma-banner.webp → banner.webp} +0 -0
  254. /package/{typescript/kit → kit}/converters/converters.ts +0 -0
  255. /package/{typescript/kit → kit}/cookies/cookies.ts +0 -0
  256. /package/{typescript/kit → kit}/csrf/csrf.ts +0 -0
  257. /package/{typescript/kit → kit}/fmt/fmt.ts +0 -0
  258. /package/{typescript/kit → kit}/json/deep_equals.ts +0 -0
  259. /package/{typescript/kit → kit}/json/json.ts +0 -0
  260. /package/{typescript/kit → kit}/json/search_param_serializer.ts +0 -0
  261. /package/{typescript/kit → kit}/listeners/listeners.ts +0 -0
  262. /package/{typescript/kit → kit}/theme/theme.ts +0 -0
  263. /package/{typescript/kit → kit}/url/url.ts +0 -0
  264. /package/{typescript/kit → vorma/core}/tsconfig.json +0 -0
@@ -0,0 +1,29 @@
1
+ //#region kit/converters/converters.d.ts
2
+ type Bytes = Uint8Array;
3
+ type UTF8 = string;
4
+ type Hex = string;
5
+ type Base64 = string;
6
+ type Base64URL = string;
7
+ declare function bytesToUTF8(bytes: Uint8Array): UTF8;
8
+ declare function bytesToHex(bytes: Uint8Array): Hex;
9
+ declare function bytesToBase64(bytes: Uint8Array): Base64;
10
+ declare function bytesToBase64URL(bytes: Uint8Array): Base64URL;
11
+ declare function utf8ToBytes(utf8: UTF8): Uint8Array;
12
+ declare function utf8ToHex(utf8: UTF8): Hex;
13
+ declare function utf8ToBase64(utf8: UTF8): Base64;
14
+ declare function utf8ToBase64URL(utf8: UTF8): Base64URL;
15
+ declare function hexToBytes(hex: Hex): Uint8Array;
16
+ declare function hexToUTF8(hex: Hex): UTF8;
17
+ declare function hexToBase64(hex: Hex): Base64;
18
+ declare function hexToBase64URL(hex: Hex): Base64URL;
19
+ declare function base64ToBytes(base64: Base64): Uint8Array;
20
+ declare function base64ToUTF8(base64: Base64): UTF8;
21
+ declare function base64ToHex(base64: Base64): Hex;
22
+ declare function base64ToBase64URL(base64: Base64): Base64URL;
23
+ declare function base64URLToBytes(base64URL: Base64URL): Uint8Array;
24
+ declare function base64URLToUTF8(base64URL: Base64URL): UTF8;
25
+ declare function base64URLToHex(base64URL: Base64URL): Hex;
26
+ declare function base64URLToBase64(base64URL: Base64URL): Base64;
27
+ //#endregion
28
+ export { Base64, Base64URL, Bytes, Hex, UTF8, base64ToBase64URL, base64ToBytes, base64ToHex, base64ToUTF8, base64URLToBase64, base64URLToBytes, base64URLToHex, base64URLToUTF8, bytesToBase64, bytesToBase64URL, bytesToHex, bytesToUTF8, hexToBase64, hexToBase64URL, hexToBytes, hexToUTF8, utf8ToBase64, utf8ToBase64URL, utf8ToBytes, utf8ToHex };
29
+ //# sourceMappingURL=converters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converters.d.ts","names":[],"sources":["../../../kit/converters/converters.ts"],"mappings":";KAIY,KAAA,GAAQ,UAAA;AAAA,KACR,IAAA;AAAA,KACA,GAAA;AAAA,KACA,MAAA;AAAA,KACA,SAAA;AAAA,iBAOI,WAAA,CAAY,KAAA,EAAO,UAAA,GAAa,IAAA;AAAA,iBAKhC,UAAA,CAAW,KAAA,EAAO,UAAA,GAAa,GAAA;AAAA,iBAK/B,aAAA,CAAc,KAAA,EAAO,UAAA,GAAa,MAAA;AAAA,iBAMlC,gBAAA,CAAiB,KAAA,EAAO,UAAA,GAAa,SAAA;AAAA,iBAUrC,WAAA,CAAY,IAAA,EAAM,IAAA,GAAO,UAAA;AAAA,iBAKzB,SAAA,CAAU,IAAA,EAAM,IAAA,GAAO,GAAA;AAAA,iBAMvB,YAAA,CAAa,IAAA,EAAM,IAAA,GAAO,MAAA;AAAA,iBAM1B,eAAA,CAAgB,IAAA,EAAM,IAAA,GAAO,SAAA;AAAA,iBAU7B,UAAA,CAAW,GAAA,EAAK,GAAA,GAAM,UAAA;AAAA,iBAStB,SAAA,CAAU,GAAA,EAAK,GAAA,GAAM,IAAA;AAAA,iBAMrB,WAAA,CAAY,GAAA,EAAK,GAAA,GAAM,MAAA;AAAA,iBAMvB,cAAA,CAAe,GAAA,EAAK,GAAA,GAAM,SAAA;AAAA,iBAU1B,aAAA,CAAc,MAAA,EAAQ,MAAA,GAAS,UAAA;AAAA,iBAK/B,YAAA,CAAa,MAAA,EAAQ,MAAA,GAAS,IAAA;AAAA,iBAM9B,WAAA,CAAY,MAAA,EAAQ,MAAA,GAAS,GAAA;AAAA,iBAM7B,iBAAA,CAAkB,MAAA,EAAQ,MAAA,GAAS,SAAA;AAAA,iBAanC,gBAAA,CAAiB,SAAA,EAAW,SAAA,GAAY,UAAA;AAAA,iBAMxC,eAAA,CAAgB,SAAA,EAAW,SAAA,GAAY,IAAA;AAAA,iBAMvC,cAAA,CAAe,SAAA,EAAW,SAAA,GAAY,GAAA;AAAA,iBAMtC,iBAAA,CAAkB,SAAA,EAAW,SAAA,GAAY,MAAA"}
@@ -0,0 +1,67 @@
1
+ //#region kit/converters/converters.ts
2
+ function bytesToUTF8(bytes) {
3
+ return new TextDecoder().decode(bytes);
4
+ }
5
+ function bytesToHex(bytes) {
6
+ return Array.from(bytes, (x) => x.toString(16).padStart(2, "0")).join("");
7
+ }
8
+ function bytesToBase64(bytes) {
9
+ const callback = (x) => String.fromCodePoint(x);
10
+ return btoa(Array.from(bytes, callback).join(""));
11
+ }
12
+ function bytesToBase64URL(bytes) {
13
+ return base64ToBase64URL(bytesToBase64(bytes));
14
+ }
15
+ function utf8ToBytes(utf8) {
16
+ return new TextEncoder().encode(utf8);
17
+ }
18
+ function utf8ToHex(utf8) {
19
+ return bytesToHex(utf8ToBytes(utf8));
20
+ }
21
+ function utf8ToBase64(utf8) {
22
+ return bytesToBase64(utf8ToBytes(utf8));
23
+ }
24
+ function utf8ToBase64URL(utf8) {
25
+ return bytesToBase64URL(utf8ToBytes(utf8));
26
+ }
27
+ function hexToBytes(hex) {
28
+ const bytes = (hex.startsWith("0x") ? hex.slice(2) : hex).match(/.{1,2}/g)?.map((byte) => Number.parseInt(byte, 16)) || [];
29
+ return new Uint8Array(bytes);
30
+ }
31
+ function hexToUTF8(hex) {
32
+ return bytesToUTF8(hexToBytes(hex));
33
+ }
34
+ function hexToBase64(hex) {
35
+ return bytesToBase64(hexToBytes(hex));
36
+ }
37
+ function hexToBase64URL(hex) {
38
+ return bytesToBase64URL(hexToBytes(hex));
39
+ }
40
+ function base64ToBytes(base64) {
41
+ return Uint8Array.from(atob(base64), (m) => m.codePointAt(0) || 0);
42
+ }
43
+ function base64ToUTF8(base64) {
44
+ return bytesToUTF8(base64ToBytes(base64));
45
+ }
46
+ function base64ToHex(base64) {
47
+ return bytesToHex(base64ToBytes(base64));
48
+ }
49
+ function base64ToBase64URL(base64) {
50
+ return base64.replace(/[\r\n\t ]+/g, "").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
51
+ }
52
+ function base64URLToBytes(base64URL) {
53
+ return base64ToBytes(base64URLToBase64(base64URL));
54
+ }
55
+ function base64URLToUTF8(base64URL) {
56
+ return bytesToUTF8(base64URLToBytes(base64URL));
57
+ }
58
+ function base64URLToHex(base64URL) {
59
+ return bytesToHex(base64URLToBytes(base64URL));
60
+ }
61
+ function base64URLToBase64(base64URL) {
62
+ return base64URL.padEnd(base64URL.length + (4 - base64URL.length % 4) % 4, "=").replace(/-/g, "+").replace(/_/g, "/");
63
+ }
64
+ //#endregion
65
+ export { base64ToBase64URL, base64ToBytes, base64ToHex, base64ToUTF8, base64URLToBase64, base64URLToBytes, base64URLToHex, base64URLToUTF8, bytesToBase64, bytesToBase64URL, bytesToHex, bytesToUTF8, hexToBase64, hexToBase64URL, hexToBytes, hexToUTF8, utf8ToBase64, utf8ToBase64URL, utf8ToBytes, utf8ToHex };
66
+
67
+ //# sourceMappingURL=converters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converters.js","names":[],"sources":["../../../kit/converters/converters.ts"],"sourcesContent":["/////////////////////////////////////////////////////////////////////\n/////// TYPE ALIASES\n/////////////////////////////////////////////////////////////////////\n\nexport type Bytes = Uint8Array;\nexport type UTF8 = string;\nexport type Hex = string;\nexport type Base64 = string;\nexport type Base64URL = string;\n\n/////////////////////////////////////////////////////////////////////\n/////// BYTES --> X\n/////////////////////////////////////////////////////////////////////\n\n// --> UTF8\nexport function bytesToUTF8(bytes: Uint8Array): UTF8 {\n\treturn new TextDecoder().decode(bytes);\n}\n\n// --> HEX\nexport function bytesToHex(bytes: Uint8Array): Hex {\n\treturn Array.from(bytes, (x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n// --> BASE64\nexport function bytesToBase64(bytes: Uint8Array): Base64 {\n\tconst callback = (x: number) => String.fromCodePoint(x);\n\treturn btoa(Array.from(bytes, callback).join(\"\"));\n}\n\n// --> BASE64URL\nexport function bytesToBase64URL(bytes: Uint8Array): Base64URL {\n\tconst base64 = bytesToBase64(bytes);\n\treturn base64ToBase64URL(base64);\n}\n\n/////////////////////////////////////////////////////////////////////\n/////// UTF8 --> X\n/////////////////////////////////////////////////////////////////////\n\n// --> BYTES\nexport function utf8ToBytes(utf8: UTF8): Uint8Array {\n\treturn new TextEncoder().encode(utf8);\n}\n\n// --> HEX\nexport function utf8ToHex(utf8: UTF8): Hex {\n\tconst bytes = utf8ToBytes(utf8);\n\treturn bytesToHex(bytes);\n}\n\n// --> BASE64\nexport function utf8ToBase64(utf8: UTF8): Base64 {\n\tconst bytes = utf8ToBytes(utf8);\n\treturn bytesToBase64(bytes);\n}\n\n// --> BASE64URL\nexport function utf8ToBase64URL(utf8: UTF8): Base64URL {\n\tconst bytes = utf8ToBytes(utf8);\n\treturn bytesToBase64URL(bytes);\n}\n\n/////////////////////////////////////////////////////////////////////\n/////// HEX --> X\n/////////////////////////////////////////////////////////////////////\n\n// --> BYTES\nexport function hexToBytes(hex: Hex): Uint8Array {\n\tconst cleanHex = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n\tconst bytes =\n\t\tcleanHex.match(/.{1,2}/g)?.map((byte) => Number.parseInt(byte, 16)) ||\n\t\t[];\n\treturn new Uint8Array(bytes);\n}\n\n// --> UTF8\nexport function hexToUTF8(hex: Hex): UTF8 {\n\tconst bytes = hexToBytes(hex);\n\treturn bytesToUTF8(bytes);\n}\n\n// --> BASE64\nexport function hexToBase64(hex: Hex): Base64 {\n\tconst bytes = hexToBytes(hex);\n\treturn bytesToBase64(bytes);\n}\n\n// --> BASE64URL\nexport function hexToBase64URL(hex: Hex): Base64URL {\n\tconst bytes = hexToBytes(hex);\n\treturn bytesToBase64URL(bytes);\n}\n\n/////////////////////////////////////////////////////////////////////\n/////// BASE64 --> X\n/////////////////////////////////////////////////////////////////////\n\n// --> BYTES\nexport function base64ToBytes(base64: Base64): Uint8Array {\n\treturn Uint8Array.from(atob(base64), (m) => m.codePointAt(0) || 0);\n}\n\n// --> UTF8\nexport function base64ToUTF8(base64: Base64): UTF8 {\n\tconst bytes = base64ToBytes(base64);\n\treturn bytesToUTF8(bytes);\n}\n\n// --> HEX\nexport function base64ToHex(base64: Base64): Hex {\n\tconst bytes = base64ToBytes(base64);\n\treturn bytesToHex(bytes);\n}\n\n// --> BASE64URL\nexport function base64ToBase64URL(base64: Base64): Base64URL {\n\treturn base64\n\t\t.replace(/[\\r\\n\\t ]+/g, \"\")\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=+$/, \"\");\n}\n\n/////////////////////////////////////////////////////////////////////\n/////// BASE64URL --> X\n/////////////////////////////////////////////////////////////////////\n\n// --> BYTES\nexport function base64URLToBytes(base64URL: Base64URL): Uint8Array {\n\tconst base64 = base64URLToBase64(base64URL);\n\treturn base64ToBytes(base64);\n}\n\n// --> UTF8\nexport function base64URLToUTF8(base64URL: Base64URL): UTF8 {\n\tconst bytes = base64URLToBytes(base64URL);\n\treturn bytesToUTF8(bytes);\n}\n\n// --> HEX\nexport function base64URLToHex(base64URL: Base64URL): Hex {\n\tconst bytes = base64URLToBytes(base64URL);\n\treturn bytesToHex(bytes);\n}\n\n// --> BASE64\nexport function base64URLToBase64(base64URL: Base64URL): Base64 {\n\treturn base64URL\n\t\t.padEnd(base64URL.length + ((4 - (base64URL.length % 4)) % 4), \"=\")\n\t\t.replace(/-/g, \"+\")\n\t\t.replace(/_/g, \"/\");\n}\n"],"mappings":";AAeA,SAAgB,YAAY,OAAyB;AACpD,QAAO,IAAI,aAAa,CAAC,OAAO,MAAM;;AAIvC,SAAgB,WAAW,OAAwB;AAClD,QAAO,MAAM,KAAK,QAAQ,MAAM,EAAE,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG;;AAI1E,SAAgB,cAAc,OAA2B;CACxD,MAAM,YAAY,MAAc,OAAO,cAAc,EAAE;AACvD,QAAO,KAAK,MAAM,KAAK,OAAO,SAAS,CAAC,KAAK,GAAG,CAAC;;AAIlD,SAAgB,iBAAiB,OAA8B;AAE9D,QAAO,kBADQ,cAAc,MAAM,CACH;;AAQjC,SAAgB,YAAY,MAAwB;AACnD,QAAO,IAAI,aAAa,CAAC,OAAO,KAAK;;AAItC,SAAgB,UAAU,MAAiB;AAE1C,QAAO,WADO,YAAY,KAAK,CACP;;AAIzB,SAAgB,aAAa,MAAoB;AAEhD,QAAO,cADO,YAAY,KAAK,CACJ;;AAI5B,SAAgB,gBAAgB,MAAuB;AAEtD,QAAO,iBADO,YAAY,KAAK,CACD;;AAQ/B,SAAgB,WAAW,KAAsB;CAEhD,MAAM,SADW,IAAI,WAAW,KAAK,GAAG,IAAI,MAAM,EAAE,GAAG,KAE7C,MAAM,UAAU,EAAE,KAAK,SAAS,OAAO,SAAS,MAAM,GAAG,CAAC,IACnE,EAAE;AACH,QAAO,IAAI,WAAW,MAAM;;AAI7B,SAAgB,UAAU,KAAgB;AAEzC,QAAO,YADO,WAAW,IAAI,CACJ;;AAI1B,SAAgB,YAAY,KAAkB;AAE7C,QAAO,cADO,WAAW,IAAI,CACF;;AAI5B,SAAgB,eAAe,KAAqB;AAEnD,QAAO,iBADO,WAAW,IAAI,CACC;;AAQ/B,SAAgB,cAAc,QAA4B;AACzD,QAAO,WAAW,KAAK,KAAK,OAAO,GAAG,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE;;AAInE,SAAgB,aAAa,QAAsB;AAElD,QAAO,YADO,cAAc,OAAO,CACV;;AAI1B,SAAgB,YAAY,QAAqB;AAEhD,QAAO,WADO,cAAc,OAAO,CACX;;AAIzB,SAAgB,kBAAkB,QAA2B;AAC5D,QAAO,OACL,QAAQ,eAAe,GAAG,CAC1B,QAAQ,OAAO,IAAI,CACnB,QAAQ,OAAO,IAAI,CACnB,QAAQ,OAAO,GAAG;;AAQrB,SAAgB,iBAAiB,WAAkC;AAElE,QAAO,cADQ,kBAAkB,UAAU,CACf;;AAI7B,SAAgB,gBAAgB,WAA4B;AAE3D,QAAO,YADO,iBAAiB,UAAU,CAChB;;AAI1B,SAAgB,eAAe,WAA2B;AAEzD,QAAO,WADO,iBAAiB,UAAU,CACjB;;AAIzB,SAAgB,kBAAkB,WAA8B;AAC/D,QAAO,UACL,OAAO,UAAU,UAAW,IAAK,UAAU,SAAS,KAAM,GAAI,IAAI,CAClE,QAAQ,MAAM,IAAI,CAClB,QAAQ,MAAM,IAAI"}
@@ -1,13 +1,16 @@
1
+ //#region kit/cookies/cookies.d.ts
1
2
  /**
2
3
  * Checks the client cookie for a specific name. Returns the value if
3
4
  * found, otherwise undefined. Does not do any encoding or decoding.
4
5
  */
5
- export declare function getClientCookie(name: string): string | undefined;
6
+ declare function getClientCookie(name: string): string | undefined;
6
7
  /**
7
8
  * Sets a client cookie with the specified name and value. The cookie
8
9
  * is set to expire in one year and is accessible to all paths on the
9
10
  * domain. The SameSite attribute is set to Lax. Does not do any
10
11
  * encoding or decoding.
11
12
  */
12
- export declare function setClientCookie(name: string, value: string): void;
13
+ declare function setClientCookie(name: string, value: string): void;
14
+ //#endregion
15
+ export { getClientCookie, setClientCookie };
13
16
  //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","names":[],"sources":["../../../kit/cookies/cookies.ts"],"mappings":";;AAIA;;;iBAAgB,eAAA,CAAgB,IAAA;;AAkBhC;;;;;iBAAgB,eAAA,CAAgB,IAAA,UAAc,KAAA"}
@@ -0,0 +1,26 @@
1
+ //#region kit/cookies/cookies.ts
2
+ /**
3
+ * Checks the client cookie for a specific name. Returns the value if
4
+ * found, otherwise undefined. Does not do any encoding or decoding.
5
+ */
6
+ function getClientCookie(name) {
7
+ const expectedPrefix = `${name}=`;
8
+ const cookiePairs = document.cookie.split(";");
9
+ for (const cookiePair of cookiePairs) {
10
+ const trimmedPair = cookiePair.trim();
11
+ if (trimmedPair.startsWith(expectedPrefix)) return trimmedPair.slice(expectedPrefix.length);
12
+ }
13
+ }
14
+ /**
15
+ * Sets a client cookie with the specified name and value. The cookie
16
+ * is set to expire in one year and is accessible to all paths on the
17
+ * domain. The SameSite attribute is set to Lax. Does not do any
18
+ * encoding or decoding.
19
+ */
20
+ function setClientCookie(name, value) {
21
+ document.cookie = `${name}=${value}; path=/; max-age=31536000; SameSite=Lax`;
22
+ }
23
+ //#endregion
24
+ export { getClientCookie, setClientCookie };
25
+
26
+ //# sourceMappingURL=cookies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.js","names":[],"sources":["../../../kit/cookies/cookies.ts"],"sourcesContent":["/**\n * Checks the client cookie for a specific name. Returns the value if\n * found, otherwise undefined. Does not do any encoding or decoding.\n */\nexport function getClientCookie(name: string) {\n\tconst expectedPrefix = `${name}=`;\n\tconst cookiePairs = document.cookie.split(\";\");\n\tfor (const cookiePair of cookiePairs) {\n\t\tconst trimmedPair = cookiePair.trim();\n\t\tif (trimmedPair.startsWith(expectedPrefix)) {\n\t\t\treturn trimmedPair.slice(expectedPrefix.length);\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Sets a client cookie with the specified name and value. The cookie\n * is set to expire in one year and is accessible to all paths on the\n * domain. The SameSite attribute is set to Lax. Does not do any\n * encoding or decoding.\n */\nexport function setClientCookie(name: string, value: string) {\n\tdocument.cookie = `${name}=${value}; path=/; max-age=31536000; SameSite=Lax`;\n}\n"],"mappings":";;;;;AAIA,SAAgB,gBAAgB,MAAc;CAC7C,MAAM,iBAAiB,GAAG,KAAK;CAC/B,MAAM,cAAc,SAAS,OAAO,MAAM,IAAI;AAC9C,MAAK,MAAM,cAAc,aAAa;EACrC,MAAM,cAAc,WAAW,MAAM;AACrC,MAAI,YAAY,WAAW,eAAe,CACzC,QAAO,YAAY,MAAM,eAAe,OAAO;;;;;;;;;AAYlD,SAAgB,gBAAgB,MAAc,OAAe;AAC5D,UAAS,SAAS,GAAG,KAAK,GAAG,MAAM"}
@@ -0,0 +1,8 @@
1
+ //#region kit/csrf/csrf.d.ts
2
+ declare function getCSRFToken(opts: {
3
+ isDev: boolean;
4
+ cookieName?: string;
5
+ }): string | undefined;
6
+ //#endregion
7
+ export { getCSRFToken };
8
+ //# sourceMappingURL=csrf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csrf.d.ts","names":[],"sources":["../../../kit/csrf/csrf.ts"],"mappings":";iBAEgB,YAAA,CAAa,IAAA;EAC5B,KAAA;EACA,UAAA;AAAA"}
@@ -0,0 +1,9 @@
1
+ import { getClientCookie } from "vorma/kit/cookies";
2
+ //#region kit/csrf/csrf.ts
3
+ function getCSRFToken(opts) {
4
+ return getClientCookie((opts.isDev ? "__Dev-" : "__Host-") + (opts.cookieName || "csrf_token"));
5
+ }
6
+ //#endregion
7
+ export { getCSRFToken };
8
+
9
+ //# sourceMappingURL=csrf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csrf.js","names":[],"sources":["../../../kit/csrf/csrf.ts"],"sourcesContent":["import { getClientCookie } from \"vorma/kit/cookies\";\n\nexport function getCSRFToken(opts: {\n\tisDev: boolean;\n\tcookieName?: string;\n}): string | undefined {\n\tconst prefix = opts.isDev ? \"__Dev-\" : \"__Host-\";\n\tconst name = opts.cookieName || \"csrf_token\";\n\treturn getClientCookie(prefix + name);\n}\n"],"mappings":";;AAEA,SAAgB,aAAa,MAGN;AAGtB,QAAO,iBAFQ,KAAK,QAAQ,WAAW,cAC1B,KAAK,cAAc,cACK"}
@@ -0,0 +1,6 @@
1
+ //#region kit/debounce/debounce.d.ts
2
+ type Fn = (...args: Array<any>) => any;
3
+ declare function debounce<T extends Fn>(fn: T, delayInMs: number): (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>;
4
+ //#endregion
5
+ export { debounce };
6
+ //# sourceMappingURL=debounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.d.ts","names":[],"sources":["../../../kit/debounce/debounce.ts"],"mappings":";KAAK,EAAA,OAAS,IAAA,EAAM,KAAA;AAAA,iBAEJ,QAAA,WAAmB,EAAA,CAAA,CAClC,EAAA,EAAI,CAAA,EACJ,SAAA,eACM,IAAA,EAAM,UAAA,CAAW,CAAA,MAAO,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,CAAA"}
@@ -0,0 +1,20 @@
1
+ //#region kit/debounce/debounce.ts
2
+ function debounce(fn, delayInMs) {
3
+ let timeoutID;
4
+ return (...args) => {
5
+ return new Promise((resolve, reject) => {
6
+ clearTimeout(timeoutID);
7
+ timeoutID = globalThis.setTimeout(() => {
8
+ try {
9
+ resolve(fn(...args));
10
+ } catch (error) {
11
+ reject(error);
12
+ }
13
+ }, delayInMs);
14
+ });
15
+ };
16
+ }
17
+ //#endregion
18
+ export { debounce };
19
+
20
+ //# sourceMappingURL=debounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.js","names":[],"sources":["../../../kit/debounce/debounce.ts"],"sourcesContent":["type Fn = (...args: Array<any>) => any;\n\nexport function debounce<T extends Fn>(\n\tfn: T,\n\tdelayInMs: number,\n): (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>> {\n\tlet timeoutID: any;\n\n\treturn (...args: Parameters<T>) => {\n\t\treturn new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n\t\t\tclearTimeout(timeoutID);\n\t\t\ttimeoutID = globalThis.setTimeout(() => {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fn(...args));\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t}, delayInMs);\n\t\t});\n\t};\n}\n"],"mappings":";AAEA,SAAgB,SACf,IACA,WAC8D;CAC9D,IAAI;AAEJ,SAAQ,GAAG,SAAwB;AAClC,SAAO,IAAI,SAAiC,SAAS,WAAW;AAC/D,gBAAa,UAAU;AACvB,eAAY,WAAW,iBAAiB;AACvC,QAAI;AACH,aAAQ,GAAG,GAAG,KAAK,CAAC;aACZ,OAAO;AACf,YAAO,MAAM;;MAEZ,UAAU;IACZ"}
@@ -0,0 +1,5 @@
1
+ //#region kit/fmt/fmt.d.ts
2
+ declare function prettyJSON(obj: any): string;
3
+ //#endregion
4
+ export { prettyJSON };
5
+ //# sourceMappingURL=fmt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fmt.d.ts","names":[],"sources":["../../../kit/fmt/fmt.ts"],"mappings":";iBAAgB,UAAA,CAAW,GAAA"}
@@ -0,0 +1,8 @@
1
+ //#region kit/fmt/fmt.ts
2
+ function prettyJSON(obj) {
3
+ return JSON.stringify(obj, null, 2);
4
+ }
5
+ //#endregion
6
+ export { prettyJSON };
7
+
8
+ //# sourceMappingURL=fmt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fmt.js","names":[],"sources":["../../../kit/fmt/fmt.ts"],"sourcesContent":["export function prettyJSON(obj: any): string {\n\treturn JSON.stringify(obj, null, 2);\n}\n"],"mappings":";AAAA,SAAgB,WAAW,KAAkB;AAC5C,QAAO,KAAK,UAAU,KAAK,MAAM,EAAE"}
@@ -0,0 +1,31 @@
1
+ //#region kit/json/deep_equals.d.ts
2
+ /**
3
+ * Performs a deep equality comparison of two JSON-compatible values.
4
+ * Handles null, undefined, primitives, arrays, and plain objects, recursively.
5
+ * Does not support Maps, Sets, Functions, or other non-JSON types.
6
+ */
7
+ declare function jsonDeepEquals(a: unknown, b: unknown): boolean;
8
+ //#endregion
9
+ //#region kit/json/search_param_serializer.d.ts
10
+ declare function serializeToSearchParams(obj: unknown): URLSearchParams;
11
+ //#endregion
12
+ //#region .dist/kit/result/result.d.ts
13
+ //#region kit/result/result.d.ts
14
+ type Result<T> = {
15
+ ok: true;
16
+ val: T;
17
+ } | {
18
+ ok: false;
19
+ err: string;
20
+ };
21
+ //#endregion
22
+ //#region kit/json/stringify_stable.d.ts
23
+ /**
24
+ * Deterministically serializes a JSON-compatible value to a stable string.
25
+ * Returns an error Result if it detects a circular reference. Does not support
26
+ * Maps, Sets, Functions, or other non-JSON types.
27
+ */
28
+ declare function jsonStringifyStable(input: unknown): Result<string>;
29
+ //#endregion
30
+ export { jsonDeepEquals, jsonStringifyStable, serializeToSearchParams };
31
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","names":["Result","T","ok","val","err","R"],"sources":["../../../kit/json/deep_equals.ts","../../../kit/json/search_param_serializer.ts","../result/result.d.ts","../../../kit/json/stringify_stable.ts"],"mappings":";;AAKA;;;;iBAAgB,cAAA,CAAe,CAAA,WAAY,CAAA;;;iBCL3B,uBAAA,CAAwB,GAAA,YAAe,eAAA;;;;KCClDA,MAAAA;EACHE,EAAAA;EACAC,GAAAA,EAAKF,CAAAA;AAAAA;EAELC,EAAAA;EACAE,GAAAA;AAAAA;;;AFDF;;;;;AAAA,iBGEgB,mBAAA,CAAoB,KAAA,YAAiB,MAAA"}
@@ -0,0 +1,110 @@
1
+ import { R } from "vorma/kit/result";
2
+ //#region kit/json/deep_equals.ts
3
+ /**
4
+ * Performs a deep equality comparison of two JSON-compatible values.
5
+ * Handles null, undefined, primitives, arrays, and plain objects, recursively.
6
+ * Does not support Maps, Sets, Functions, or other non-JSON types.
7
+ */
8
+ function jsonDeepEquals(a, b) {
9
+ if (a === b) return true;
10
+ if (a == null || b == null) return false;
11
+ if (typeof a !== typeof b) return false;
12
+ const aIsArray = Array.isArray(a);
13
+ const bIsArray = Array.isArray(b);
14
+ if (aIsArray !== bIsArray) return false;
15
+ if (aIsArray && bIsArray) {
16
+ const leftArray = a;
17
+ const rightArray = b;
18
+ if (leftArray.length !== rightArray.length) return false;
19
+ return leftArray.every((item, index) => jsonDeepEquals(item, rightArray[index]));
20
+ }
21
+ if (typeof a === "object" && typeof b === "object") {
22
+ const leftObject = a;
23
+ const rightObject = b;
24
+ const aKeys = Object.keys(leftObject);
25
+ const bKeys = Object.keys(rightObject);
26
+ if (aKeys.length !== bKeys.length) return false;
27
+ return aKeys.every((key) => {
28
+ return Object.hasOwn(rightObject, key) && jsonDeepEquals(leftObject[key], rightObject[key]);
29
+ });
30
+ }
31
+ return false;
32
+ }
33
+ //#endregion
34
+ //#region kit/json/search_param_serializer.ts
35
+ function serializeToSearchParams(obj) {
36
+ const params = new URLSearchParams();
37
+ function appendValue(key, value) {
38
+ if (value === null || value === void 0) {
39
+ params.append(key, "");
40
+ return;
41
+ }
42
+ if (Array.isArray(value)) {
43
+ if (value.length === 0) params.append(key, "");
44
+ else for (const item of value) appendValue(key, item);
45
+ return;
46
+ }
47
+ if (typeof value === "object") {
48
+ const entries = Object.entries(value);
49
+ if (entries.length === 0) params.append(key, "");
50
+ else {
51
+ entries.sort(([keyA], [keyB]) => keyA.localeCompare(keyB));
52
+ for (const [subKey, subValue] of entries) appendValue(key ? `${key}.${subKey}` : subKey, subValue);
53
+ }
54
+ return;
55
+ }
56
+ params.append(key, String(value));
57
+ }
58
+ if (typeof obj === "object" && obj !== null) {
59
+ const entries = Object.entries(obj);
60
+ entries.sort(([keyA], [keyB]) => keyA.localeCompare(keyB));
61
+ for (const [key, value] of entries) appendValue(key, value);
62
+ }
63
+ return params;
64
+ }
65
+ //#endregion
66
+ //#region kit/json/stringify_stable.ts
67
+ /**
68
+ * Deterministically serializes a JSON-compatible value to a stable string.
69
+ * Returns an error Result if it detects a circular reference. Does not support
70
+ * Maps, Sets, Functions, or other non-JSON types.
71
+ */
72
+ function jsonStringifyStable(input) {
73
+ const stabilized_res = stabilizeStructure(input, /* @__PURE__ */ new WeakSet());
74
+ if (!stabilized_res.ok) return R.err(stabilized_res.err);
75
+ const stabilized = stabilized_res.val;
76
+ try {
77
+ const jsonString = JSON.stringify(stabilized);
78
+ return R.ok(jsonString);
79
+ } catch (err) {
80
+ return R.err(`Error during JSON stringification: ${err instanceof Error ? err.message : String(err)}`);
81
+ }
82
+ }
83
+ function stabilizeStructure(value, visited) {
84
+ if (value === null || typeof value !== "object") return R.ok(value);
85
+ if (visited.has(value)) return R.err("Circular reference detected during stable JSON stringification");
86
+ visited.add(value);
87
+ if (Array.isArray(value)) {
88
+ const result = [];
89
+ for (const item of value) {
90
+ const item_res = stabilizeStructure(item, visited);
91
+ if (!item_res.ok) return R.err(item_res.err);
92
+ result.push(item_res.val);
93
+ }
94
+ visited.delete(value);
95
+ return R.ok(result);
96
+ }
97
+ const keys = Object.keys(value).sort();
98
+ const stable = {};
99
+ for (const key of keys) {
100
+ const val_res = stabilizeStructure(value[key], visited);
101
+ if (!val_res.ok) return R.err(val_res.err);
102
+ stable[key] = val_res.val;
103
+ }
104
+ visited.delete(value);
105
+ return R.ok(stable);
106
+ }
107
+ //#endregion
108
+ export { jsonDeepEquals, jsonStringifyStable, serializeToSearchParams };
109
+
110
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","names":[],"sources":["../../../kit/json/deep_equals.ts","../../../kit/json/search_param_serializer.ts","../../../kit/json/stringify_stable.ts"],"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\tconst leftArray = a as unknown[];\n\t\tconst rightArray = b as unknown[];\n\t\tif (leftArray.length !== rightArray.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn leftArray.every((item, index) =>\n\t\t\tjsonDeepEquals(item, rightArray[index]),\n\t\t);\n\t}\n\n\t// Handle objects\n\tif (typeof a === \"object\" && typeof b === \"object\") {\n\t\tconst leftObject = a as Record<string, unknown>;\n\t\tconst rightObject = b as Record<string, unknown>;\n\t\tconst aKeys = Object.keys(leftObject);\n\t\tconst bKeys = Object.keys(rightObject);\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 (\n\t\t\t\tObject.hasOwn(rightObject, key) &&\n\t\t\t\tjsonDeepEquals(leftObject[key], rightObject[key])\n\t\t\t);\n\t\t});\n\t}\n\n\treturn false;\n}\n","export function serializeToSearchParams(obj: unknown): URLSearchParams {\n\tconst params = new URLSearchParams();\n\n\tfunction appendValue(key: string, value: unknown) {\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 as Record<string, unknown>);\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\t// oxlint-disable-next-line no-base-to-string\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","import { R, type Result } from \"vorma/kit/result\";\n\n/**\n * Deterministically serializes a JSON-compatible value to a stable string.\n * Returns an error Result if it detects a circular reference. Does not support\n * Maps, Sets, Functions, or other non-JSON types.\n */\nexport function jsonStringifyStable(input: unknown): Result<string> {\n\tconst stabilized_res = stabilizeStructure(input, new WeakSet());\n\tif (!stabilized_res.ok) {\n\t\treturn R.err(stabilized_res.err);\n\t}\n\tconst stabilized = stabilized_res.val;\n\ttry {\n\t\tconst jsonString = JSON.stringify(stabilized);\n\t\treturn R.ok(jsonString);\n\t} catch (err) {\n\t\treturn R.err(\n\t\t\t`Error during JSON stringification: ${\n\t\t\t\terr instanceof Error ? err.message : String(err)\n\t\t\t}`,\n\t\t);\n\t}\n}\n\nfunction stabilizeStructure(\n\tvalue: unknown,\n\tvisited: WeakSet<object>,\n): Result<unknown> {\n\tif (value === null || typeof value !== \"object\") {\n\t\treturn R.ok(value);\n\t}\n\n\tif (visited.has(value)) {\n\t\treturn R.err(\n\t\t\t\"Circular reference detected during stable JSON stringification\",\n\t\t);\n\t}\n\tvisited.add(value);\n\n\tif (Array.isArray(value)) {\n\t\tconst result: unknown[] = [];\n\t\tfor (const item of value) {\n\t\t\tconst item_res = stabilizeStructure(item, visited);\n\t\t\tif (!item_res.ok) {\n\t\t\t\treturn R.err(item_res.err);\n\t\t\t}\n\t\t\tresult.push(item_res.val);\n\t\t}\n\t\tvisited.delete(value);\n\t\treturn R.ok(result);\n\t}\n\n\tconst keys = Object.keys(value).sort();\n\tconst stable: Record<string, unknown> = {};\n\tfor (const key of keys) {\n\t\tconst val_res = stabilizeStructure(\n\t\t\t(value as Record<string, unknown>)[key],\n\t\t\tvisited,\n\t\t);\n\t\tif (!val_res.ok) {\n\t\t\treturn R.err(val_res.err);\n\t\t}\n\t\tstable[key] = val_res.val;\n\t}\n\tvisited.delete(value);\n\treturn R.ok(stable);\n}\n"],"mappings":";;;;;;;AAKA,SAAgB,eAAe,GAAY,GAAqB;AAE/D,KAAI,MAAM,EACT,QAAO;AAKR,KAAI,KAAK,QAAQ,KAAK,KACrB,QAAO;AAIR,KAAI,OAAO,MAAM,OAAO,EACvB,QAAO;CAGR,MAAM,WAAW,MAAM,QAAQ,EAAE;CACjC,MAAM,WAAW,MAAM,QAAQ,EAAE;AAGjC,KAAI,aAAa,SAChB,QAAO;AAIR,KAAI,YAAY,UAAU;EACzB,MAAM,YAAY;EAClB,MAAM,aAAa;AACnB,MAAI,UAAU,WAAW,WAAW,OACnC,QAAO;AAER,SAAO,UAAU,OAAO,MAAM,UAC7B,eAAe,MAAM,WAAW,OAAO,CACvC;;AAIF,KAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;EACnD,MAAM,aAAa;EACnB,MAAM,cAAc;EACpB,MAAM,QAAQ,OAAO,KAAK,WAAW;EACrC,MAAM,QAAQ,OAAO,KAAK,YAAY;AAEtC,MAAI,MAAM,WAAW,MAAM,OAC1B,QAAO;AAGR,SAAO,MAAM,OAAO,QAAQ;AAC3B,UACC,OAAO,OAAO,aAAa,IAAI,IAC/B,eAAe,WAAW,MAAM,YAAY,KAAK;IAEjD;;AAGH,QAAO;;;;AC7DR,SAAgB,wBAAwB,KAA+B;CACtE,MAAM,SAAS,IAAI,iBAAiB;CAEpC,SAAS,YAAY,KAAa,OAAgB;AACjD,MAAI,UAAU,QAAQ,UAAU,KAAA,GAAW;AAC1C,UAAO,OAAO,KAAK,GAAG;AACtB;;AAGD,MAAI,MAAM,QAAQ,MAAM,EAAE;AACzB,OAAI,MAAM,WAAW,EACpB,QAAO,OAAO,KAAK,GAAG;OAEtB,MAAK,MAAM,QAAQ,MAClB,aAAY,KAAK,KAAK;AAGxB;;AAGD,MAAI,OAAO,UAAU,UAAU;GAC9B,MAAM,UAAU,OAAO,QAAQ,MAAiC;AAChE,OAAI,QAAQ,WAAW,EACtB,QAAO,OAAO,KAAK,GAAG;QAChB;AAEN,YAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,cAAc,KAAK,CAAC;AAC1D,SAAK,MAAM,CAAC,QAAQ,aAAa,QAEhC,aADe,MAAM,GAAG,IAAI,GAAG,WAAW,QACtB,SAAS;;AAG/B;;AAID,SAAO,OAAO,KAAK,OAAO,MAAM,CAAC;;AAGlC,KAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;EAE5C,MAAM,UAAU,OAAO,QAAQ,IAAI;AACnC,UAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,cAAc,KAAK,CAAC;AAC1D,OAAK,MAAM,CAAC,KAAK,UAAU,QAC1B,aAAY,KAAK,MAAM;;AAIzB,QAAO;;;;;;;;;ACzCR,SAAgB,oBAAoB,OAAgC;CACnE,MAAM,iBAAiB,mBAAmB,uBAAO,IAAI,SAAS,CAAC;AAC/D,KAAI,CAAC,eAAe,GACnB,QAAO,EAAE,IAAI,eAAe,IAAI;CAEjC,MAAM,aAAa,eAAe;AAClC,KAAI;EACH,MAAM,aAAa,KAAK,UAAU,WAAW;AAC7C,SAAO,EAAE,GAAG,WAAW;UACf,KAAK;AACb,SAAO,EAAE,IACR,sCACC,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,GAEjD;;;AAIH,SAAS,mBACR,OACA,SACkB;AAClB,KAAI,UAAU,QAAQ,OAAO,UAAU,SACtC,QAAO,EAAE,GAAG,MAAM;AAGnB,KAAI,QAAQ,IAAI,MAAM,CACrB,QAAO,EAAE,IACR,iEACA;AAEF,SAAQ,IAAI,MAAM;AAElB,KAAI,MAAM,QAAQ,MAAM,EAAE;EACzB,MAAM,SAAoB,EAAE;AAC5B,OAAK,MAAM,QAAQ,OAAO;GACzB,MAAM,WAAW,mBAAmB,MAAM,QAAQ;AAClD,OAAI,CAAC,SAAS,GACb,QAAO,EAAE,IAAI,SAAS,IAAI;AAE3B,UAAO,KAAK,SAAS,IAAI;;AAE1B,UAAQ,OAAO,MAAM;AACrB,SAAO,EAAE,GAAG,OAAO;;CAGpB,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,MAAM;CACtC,MAAM,SAAkC,EAAE;AAC1C,MAAK,MAAM,OAAO,MAAM;EACvB,MAAM,UAAU,mBACd,MAAkC,MACnC,QACA;AACD,MAAI,CAAC,QAAQ,GACZ,QAAO,EAAE,IAAI,QAAQ,IAAI;AAE1B,SAAO,OAAO,QAAQ;;AAEvB,SAAQ,OAAO,MAAM;AACrB,QAAO,EAAE,GAAG,OAAO"}
@@ -0,0 +1,5 @@
1
+ //#region kit/listeners/listeners.d.ts
2
+ declare function addOnWindowFocusListener(callback: () => void): () => void;
3
+ //#endregion
4
+ export { addOnWindowFocusListener };
5
+ //# sourceMappingURL=listeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners.d.ts","names":[],"sources":["../../../kit/listeners/listeners.ts"],"mappings":";iBAEgB,wBAAA,CAAyB,QAAA"}
@@ -0,0 +1,18 @@
1
+ import { debounce } from "vorma/kit/debounce";
2
+ //#region kit/listeners/listeners.ts
3
+ function addOnWindowFocusListener(callback) {
4
+ const debouncedCallback = debounce(callback, 30);
5
+ const ifVisibleCallback = () => {
6
+ if (document.visibilityState === "visible") debouncedCallback();
7
+ };
8
+ window.addEventListener("focus", debouncedCallback);
9
+ window.addEventListener("visibilitychange", ifVisibleCallback);
10
+ return () => {
11
+ window.removeEventListener("focus", debouncedCallback);
12
+ window.removeEventListener("visibilitychange", ifVisibleCallback);
13
+ };
14
+ }
15
+ //#endregion
16
+ export { addOnWindowFocusListener };
17
+
18
+ //# sourceMappingURL=listeners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners.js","names":[],"sources":["../../../kit/listeners/listeners.ts"],"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\tvoid debouncedCallback();\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"],"mappings":";;AAEA,SAAgB,yBAAyB,UAAkC;CAC1E,MAAM,oBAAoB,SAAS,UAAU,GAAG;CAChD,MAAM,0BAA0B;AAC/B,MAAI,SAAS,oBAAoB,UAC3B,oBAAmB;;AAG1B,QAAO,iBAAiB,SAAS,kBAAkB;AACnD,QAAO,iBAAiB,oBAAoB,kBAAkB;AAC9D,cAAa;AACZ,SAAO,oBAAoB,SAAS,kBAAkB;AACtD,SAAO,oBAAoB,oBAAoB,kBAAkB"}
@@ -0,0 +1,13 @@
1
+ import { Params, PatternRegistry, RegisteredPattern } from "vorma/kit/matcher/register";
2
+
3
+ //#region kit/matcher/find_best_match.d.ts
4
+ type BestMatch = {
5
+ registeredPattern: RegisteredPattern;
6
+ params: Params;
7
+ splatValues: string[];
8
+ score: number;
9
+ };
10
+ declare function findBestMatch(registry: PatternRegistry, real_path: string): BestMatch | null;
11
+ //#endregion
12
+ export { findBestMatch };
13
+ //# sourceMappingURL=find_best_match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find_best_match.d.ts","names":[],"sources":["../../../kit/matcher/find_best_match.ts"],"mappings":";;;KAaK,SAAA;EACJ,iBAAA,EAAmB,iBAAA;EACnB,MAAA,EAAQ,MAAA;EACR,WAAA;EACA,KAAA;AAAA;AAAA,iBAuGe,aAAA,CACf,QAAA,EAAU,eAAA,EACV,SAAA,WACE,SAAA"}
@@ -0,0 +1,92 @@
1
+ import { NODE_DYNAMIC, NODE_SPLAT, SCORE_DYNAMIC, SCORE_STATIC_MATCH, SEG_TYPES } from "vorma/kit/matcher/register";
2
+ import { parseSegments } from "vorma/kit/matcher/utils";
3
+ //#region kit/matcher/find_best_match.ts
4
+ function dfs_best(registry, node, segments, depth, score, state, check_trailing) {
5
+ const at_normal_end = check_trailing && depth === segments.length - 1;
6
+ if (node.pattern.length > 0) {
7
+ const rp = registry.dynamicPatterns.get(node.pattern);
8
+ if (rp) {
9
+ if (depth === segments.length || node.nodeType === NODE_SPLAT || at_normal_end) {
10
+ if (!state.found || score > state.best_score) {
11
+ state.best = {
12
+ registeredPattern: rp,
13
+ params: {},
14
+ splatValues: [],
15
+ score
16
+ };
17
+ state.best_score = score;
18
+ state.found = true;
19
+ }
20
+ }
21
+ }
22
+ }
23
+ if (depth >= segments.length) return;
24
+ if (node.children !== null) {
25
+ const child = node.children.get(segments[depth]);
26
+ if (child) {
27
+ dfs_best(registry, child, segments, depth + 1, score + SCORE_STATIC_MATCH, state, check_trailing);
28
+ if (state.found && depth + 1 === segments.length && child.pattern !== "") return;
29
+ }
30
+ }
31
+ for (const child of node.dynChildren) switch (child.nodeType) {
32
+ case NODE_DYNAMIC:
33
+ if (segments[depth] !== "") dfs_best(registry, child, segments, depth + 1, score + SCORE_DYNAMIC, state, check_trailing);
34
+ break;
35
+ case NODE_SPLAT:
36
+ if (child.pattern.length > 0) {
37
+ const rp = registry.dynamicPatterns.get(child.pattern);
38
+ if (rp && !state.found) {
39
+ state.best = {
40
+ registeredPattern: rp,
41
+ params: {},
42
+ splatValues: [],
43
+ score: 0
44
+ };
45
+ state.found = true;
46
+ }
47
+ }
48
+ break;
49
+ }
50
+ }
51
+ function findBestMatch(registry, real_path) {
52
+ const rr = registry.staticPatterns.get(real_path);
53
+ if (rr) return {
54
+ registeredPattern: rr,
55
+ params: {},
56
+ splatValues: [],
57
+ score: 0
58
+ };
59
+ const segments = parseSegments(real_path);
60
+ const has_trailing = real_path.length > 0 && real_path[real_path.length - 1] === "/";
61
+ if (has_trailing) {
62
+ const without_slash = real_path.substring(0, real_path.length - 1);
63
+ const rr_no_slash = registry.staticPatterns.get(without_slash);
64
+ if (rr_no_slash) return {
65
+ registeredPattern: rr_no_slash,
66
+ params: {},
67
+ splatValues: [],
68
+ score: 0
69
+ };
70
+ }
71
+ const state = {
72
+ best: null,
73
+ best_score: 0,
74
+ found: false
75
+ };
76
+ dfs_best(registry, registry.rootNode, segments, 0, 0, state, has_trailing);
77
+ if (!state.found || !state.best) return null;
78
+ if (state.best.registeredPattern.numberOfDynamicParamSegs > 0) {
79
+ const params = {};
80
+ for (let i = 0; i < state.best.registeredPattern.normalizedSegments.length; i++) {
81
+ const seg = state.best.registeredPattern.normalizedSegments[i];
82
+ if (seg.segType === SEG_TYPES.dynamic) params[seg.normalizedVal.substring(1)] = segments[i];
83
+ }
84
+ state.best.params = params;
85
+ }
86
+ if (state.best.registeredPattern.normalizedPattern === "/*" || state.best.registeredPattern.lastSegIsNonRootSplat) state.best.splatValues = segments.slice(state.best.registeredPattern.normalizedSegments.length - 1);
87
+ return state.best;
88
+ }
89
+ //#endregion
90
+ export { findBestMatch };
91
+
92
+ //# sourceMappingURL=find_best_match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find_best_match.js","names":[],"sources":["../../../kit/matcher/find_best_match.ts"],"sourcesContent":["import {\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 \"vorma/kit/matcher/register\";\nimport { parseSegments } from \"vorma/kit/matcher/utils\";\n\ntype BestMatch = {\n\tregisteredPattern: RegisteredPattern;\n\tparams: Params;\n\tsplatValues: string[];\n\tscore: number;\n};\n\ntype DfsBestState = {\n\tbest: BestMatch | null;\n\tbest_score: number;\n\tfound: boolean;\n};\n\nfunction dfs_best(\n\tregistry: PatternRegistry,\n\tnode: SegmentNode,\n\tsegments: string[],\n\tdepth: number,\n\tscore: number,\n\tstate: DfsBestState,\n\tcheck_trailing: boolean,\n): void {\n\tconst at_normal_end = check_trailing && 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\tat_normal_end\n\t\t\t) {\n\t\t\t\tif (!state.found || score > state.best_score) {\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.best_score = score;\n\t\t\t\t\tstate.found = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (depth >= segments.length) {\n\t\treturn;\n\t}\n\n\tif (node.children !== null) {\n\t\tconst child = node.children.get(segments[depth]!);\n\t\tif (child) {\n\t\t\tdfs_best(\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\tcheck_trailing,\n\t\t\t);\n\n\t\t\tif (\n\t\t\t\tstate.found &&\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\tdfs_best(\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\tcheck_trailing,\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.found) {\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.found = 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\treal_path: string,\n): BestMatch | null {\n\tconst rr = registry.staticPatterns.get(real_path);\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(real_path);\n\tconst has_trailing =\n\t\treal_path.length > 0 && real_path[real_path.length - 1] === \"/\";\n\n\tif (has_trailing) {\n\t\tconst without_slash = real_path.substring(0, real_path.length - 1);\n\t\tconst rr_no_slash = registry.staticPatterns.get(without_slash);\n\t\tif (rr_no_slash) {\n\t\t\treturn {\n\t\t\t\tregisteredPattern: rr_no_slash,\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\tconst state: DfsBestState = {\n\t\tbest: null,\n\t\tbest_score: 0,\n\t\tfound: false,\n\t};\n\n\tdfs_best(registry, registry.rootNode, segments, 0, 0, state, has_trailing);\n\n\tif (!state.found || !state.best) {\n\t\treturn null;\n\t}\n\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\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"],"mappings":";;;AA0BA,SAAS,SACR,UACA,MACA,UACA,OACA,OACA,OACA,gBACO;CACP,MAAM,gBAAgB,kBAAkB,UAAU,SAAS,SAAS;AAEpE,KAAI,KAAK,QAAQ,SAAS,GAAG;EAC5B,MAAM,KAAK,SAAS,gBAAgB,IAAI,KAAK,QAAQ;AACrD,MAAI;OAEF,UAAU,SAAS,UACnB,KAAK,aAAa,cAClB;QAEI,CAAC,MAAM,SAAS,QAAQ,MAAM,YAAY;AAC7C,WAAM,OAAO;MACZ,mBAAmB;MACnB,QAAQ,EAAE;MACV,aAAa,EAAE;MACf;MACA;AACD,WAAM,aAAa;AACnB,WAAM,QAAQ;;;;;AAMlB,KAAI,SAAS,SAAS,OACrB;AAGD,KAAI,KAAK,aAAa,MAAM;EAC3B,MAAM,QAAQ,KAAK,SAAS,IAAI,SAAS,OAAQ;AACjD,MAAI,OAAO;AACV,YACC,UACA,OACA,UACA,QAAQ,GACR,QAAQ,oBACR,OACA,eACA;AAED,OACC,MAAM,SACN,QAAQ,MAAM,SAAS,UACvB,MAAM,YAAY,GAElB;;;AAKH,MAAK,MAAM,SAAS,KAAK,YACxB,SAAQ,MAAM,UAAd;EACC,KAAK;AACJ,OAAI,SAAS,WAAW,GACvB,UACC,UACA,OACA,UACA,QAAQ,GACR,QAAQ,eACR,OACA,eACA;AAEF;EAED,KAAK;AACJ,OAAI,MAAM,QAAQ,SAAS,GAAG;IAC7B,MAAM,KAAK,SAAS,gBAAgB,IAAI,MAAM,QAAQ;AACtD,QAAI,MAAM,CAAC,MAAM,OAAO;AACvB,WAAM,OAAO;MACZ,mBAAmB;MACnB,QAAQ,EAAE;MACV,aAAa,EAAE;MACf,OAAO;MACP;AACD,WAAM,QAAQ;;;AAGhB;;;AAKJ,SAAgB,cACf,UACA,WACmB;CACnB,MAAM,KAAK,SAAS,eAAe,IAAI,UAAU;AACjD,KAAI,GACH,QAAO;EACN,mBAAmB;EACnB,QAAQ,EAAE;EACV,aAAa,EAAE;EACf,OAAO;EACP;CAGF,MAAM,WAAW,cAAc,UAAU;CACzC,MAAM,eACL,UAAU,SAAS,KAAK,UAAU,UAAU,SAAS,OAAO;AAE7D,KAAI,cAAc;EACjB,MAAM,gBAAgB,UAAU,UAAU,GAAG,UAAU,SAAS,EAAE;EAClE,MAAM,cAAc,SAAS,eAAe,IAAI,cAAc;AAC9D,MAAI,YACH,QAAO;GACN,mBAAmB;GACnB,QAAQ,EAAE;GACV,aAAa,EAAE;GACf,OAAO;GACP;;CAIH,MAAM,QAAsB;EAC3B,MAAM;EACN,YAAY;EACZ,OAAO;EACP;AAED,UAAS,UAAU,SAAS,UAAU,UAAU,GAAG,GAAG,OAAO,aAAa;AAE1E,KAAI,CAAC,MAAM,SAAS,CAAC,MAAM,KAC1B,QAAO;AAGR,KAAI,MAAM,KAAK,kBAAkB,2BAA2B,GAAG;EAC9D,MAAM,SAAiB,EAAE;AACzB,OACC,IAAI,IAAI,GACR,IAAI,MAAM,KAAK,kBAAkB,mBAAmB,QACpD,KACC;GACD,MAAM,MAAM,MAAM,KAAK,kBAAkB,mBAAmB;AAC5D,OAAI,IAAI,YAAY,UAAU,QAC7B,QAAO,IAAI,cAAc,UAAU,EAAE,IAAI,SAAS;;AAGpD,QAAM,KAAK,SAAS;;AAGrB,KACC,MAAM,KAAK,kBAAkB,sBAAsB,QACnD,MAAM,KAAK,kBAAkB,sBAE7B,OAAM,KAAK,cAAc,SAAS,MACjC,MAAM,KAAK,kBAAkB,mBAAmB,SAAS,EACzD;AAGF,QAAO,MAAM"}
@@ -0,0 +1,17 @@
1
+ import { Params, PatternRegistry, RegisteredPattern } from "vorma/kit/matcher/register";
2
+
3
+ //#region kit/matcher/find_nested_matches.d.ts
4
+ type Match = {
5
+ registeredPattern: RegisteredPattern;
6
+ params: Params;
7
+ splatValues: string[];
8
+ };
9
+ type FindNestedMatchesResult = {
10
+ params: Params;
11
+ splatValues: string[];
12
+ matches: Match[];
13
+ };
14
+ declare function findNestedMatches(registry: PatternRegistry, real_path: string): FindNestedMatchesResult | null;
15
+ //#endregion
16
+ export { Match, findNestedMatches };
17
+ //# sourceMappingURL=find_nested_matches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find_nested_matches.d.ts","names":[],"sources":["../../../kit/matcher/find_nested_matches.ts"],"mappings":";;;KAaY,KAAA;EACX,iBAAA,EAAmB,iBAAA;EACnB,MAAA,EAAQ,MAAA;EACR,WAAA;AAAA;AAAA,KAGI,uBAAA;EACJ,MAAA,EAAQ,MAAA;EACR,WAAA;EACA,OAAA,EAAS,KAAA;AAAA;AAAA,iBAuKM,iBAAA,CACf,QAAA,EAAU,eAAA,EACV,SAAA,WACE,uBAAA"}