vorma 0.85.0-pre.1 → 0.85.0-pre.3
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/README.md +1 -2
- package/npm_dist/.buildts_cache.json +1 -1
- package/npm_dist/typescript/kit/converters/converters.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/converters/converters.js +1 -1
- package/npm_dist/{kit/_typescript → typescript/kit}/converters/converters.js.map +1 -1
- package/npm_dist/typescript/kit/cookies/cookies.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/cookies/cookies.js +1 -1
- package/npm_dist/{kit/_typescript → typescript/kit}/cookies/cookies.js.map +1 -1
- package/npm_dist/typescript/kit/csrf/csrf.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/csrf/csrf.js +1 -1
- package/npm_dist/{kit/_typescript → typescript/kit}/csrf/csrf.js.map +1 -1
- package/npm_dist/typescript/kit/debounce/debounce.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/debounce/debounce.js +1 -1
- package/npm_dist/{kit/_typescript → typescript/kit}/debounce/debounce.js.map +1 -1
- package/npm_dist/typescript/kit/fmt/fmt.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/fmt/fmt.js +1 -1
- package/npm_dist/{kit/_typescript → typescript/kit}/fmt/fmt.js.map +1 -1
- package/npm_dist/typescript/kit/json/deep_equals.d.ts.map +1 -0
- package/npm_dist/typescript/kit/json/json.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/json/json.js +10 -5
- package/npm_dist/{kit/_typescript → typescript/kit}/json/json.js.map +3 -3
- package/npm_dist/typescript/kit/json/search_param_serializer.d.ts.map +1 -0
- package/npm_dist/typescript/kit/json/stringify_stable.d.ts.map +1 -0
- package/npm_dist/typescript/kit/listeners/listeners.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/listeners/listeners.js +2 -2
- package/npm_dist/typescript/kit/listeners/listeners.js.map +7 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/matcher/find_best_match.d.ts +1 -1
- package/npm_dist/typescript/kit/matcher/find_best_match.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/matcher/find_best_match.js +4 -5
- package/npm_dist/typescript/kit/matcher/find_best_match.js.map +7 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/matcher/find_nested_matches.d.ts +1 -1
- package/npm_dist/typescript/kit/matcher/find_nested_matches.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/matcher/find_nested_matches.js +4 -8
- package/npm_dist/typescript/kit/matcher/find_nested_matches.js.map +7 -0
- package/npm_dist/typescript/kit/matcher/register.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript/chunk-LNARYAGF.js → typescript/kit/matcher/register.js} +13 -33
- package/npm_dist/typescript/kit/matcher/register.js.map +7 -0
- package/npm_dist/typescript/kit/matcher/utils.d.ts +3 -0
- package/npm_dist/typescript/kit/matcher/utils.d.ts.map +1 -0
- package/npm_dist/typescript/kit/matcher/utils.js +32 -0
- package/npm_dist/typescript/kit/matcher/utils.js.map +7 -0
- package/npm_dist/typescript/kit/theme/theme.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/theme/theme.js +1 -1
- package/npm_dist/{kit/_typescript → typescript/kit}/theme/theme.js.map +1 -1
- package/npm_dist/{kit/_typescript → typescript/kit}/url/url.d.ts +9 -0
- package/npm_dist/typescript/kit/url/url.d.ts.map +1 -0
- package/npm_dist/{kit/_typescript → typescript/kit}/url/url.js +34 -12
- package/npm_dist/typescript/kit/url/url.js.map +7 -0
- package/npm_dist/typescript/vorma/client/buildtime.d.ts +3 -0
- package/npm_dist/typescript/vorma/client/buildtime.d.ts.map +1 -0
- package/npm_dist/{vormaclient → typescript/vorma}/client/buildtime.js +1 -1
- package/npm_dist/typescript/vorma/client/buildtime.js.map +7 -0
- package/npm_dist/typescript/vorma/client/chunk-AELFYFRG.js +3927 -0
- package/npm_dist/typescript/vorma/client/chunk-AELFYFRG.js.map +7 -0
- package/npm_dist/typescript/vorma/client/index.d.ts +13 -0
- package/npm_dist/typescript/vorma/client/index.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/client/index.js +49 -0
- package/npm_dist/typescript/vorma/client/internal/hmr_dev.d.ts +28 -0
- package/npm_dist/typescript/vorma/client/internal/hmr_dev.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/client/internal/hmr_dev.js +231 -0
- package/npm_dist/typescript/vorma/client/internal/hmr_dev.js.map +7 -0
- package/npm_dist/typescript/vorma/client/internal.d.ts +8 -0
- package/npm_dist/typescript/vorma/client/internal.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/client/internal.js +51 -0
- package/npm_dist/typescript/vorma/client/internal.js.map +7 -0
- package/npm_dist/typescript/vorma/client/src/runtime.d.ts +643 -0
- package/npm_dist/typescript/vorma/client/src/runtime.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/client/testing.d.ts +71 -0
- package/npm_dist/typescript/vorma/client/testing.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/client/testing.js +309 -0
- package/npm_dist/typescript/vorma/client/testing.js.map +7 -0
- package/npm_dist/typescript/vorma/client/vitest.dist.config.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/create/main.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/create/runtime_helpers.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/ui-adapters/preact/index.d.ts +2 -0
- package/npm_dist/typescript/vorma/ui-adapters/preact/index.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/ui-adapters/preact/index.js +203 -0
- package/npm_dist/typescript/vorma/ui-adapters/preact/index.js.map +7 -0
- package/npm_dist/typescript/vorma/ui-adapters/preact/src/preact.d.ts +337 -0
- package/npm_dist/typescript/vorma/ui-adapters/preact/src/preact.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/ui-adapters/react/index.d.ts +2 -0
- package/npm_dist/typescript/vorma/ui-adapters/react/index.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/ui-adapters/react/index.js +242 -0
- package/npm_dist/typescript/vorma/ui-adapters/react/index.js.map +7 -0
- package/npm_dist/typescript/vorma/ui-adapters/react/src/react.d.ts +25 -0
- package/npm_dist/typescript/vorma/ui-adapters/react/src/react.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/ui-adapters/solid/index.d.ts +2 -0
- package/npm_dist/typescript/vorma/ui-adapters/solid/index.d.ts.map +1 -0
- package/npm_dist/typescript/vorma/ui-adapters/solid/index.js +290 -0
- package/npm_dist/typescript/vorma/ui-adapters/solid/index.js.map +7 -0
- package/npm_dist/typescript/vorma/ui-adapters/solid/src/solid.d.ts +28 -0
- package/npm_dist/typescript/vorma/ui-adapters/solid/src/solid.d.ts.map +1 -0
- package/npm_dist/{vormaclient → typescript/vorma}/vite/vite.d.ts +2 -4
- package/npm_dist/typescript/vorma/vite/vite.d.ts.map +1 -0
- package/npm_dist/{vormaclient → typescript/vorma}/vite/vite.js +95 -29
- package/npm_dist/typescript/vorma/vite/vite.js.map +7 -0
- package/package.json +67 -58
- package/tsconfig.base.json +1 -30
- package/{kit/_typescript → typescript/kit}/json/search_param_serializer.ts +1 -0
- package/{kit/_typescript → typescript/kit}/json/stringify_stable.ts +7 -2
- package/{kit/_typescript → typescript/kit}/listeners/listeners.ts +1 -1
- package/{kit/_typescript → typescript/kit}/matcher/find_best_match.ts +2 -2
- package/{kit/_typescript → typescript/kit}/matcher/find_nested_matches.ts +7 -9
- package/{kit/_typescript → typescript/kit}/matcher/register.ts +12 -7
- package/{kit/_typescript/matcher/parse_segments.ts → typescript/kit/matcher/utils.ts} +6 -2
- package/{kit/_typescript → typescript/kit}/url/url.ts +60 -11
- package/typescript/vorma/black_box_tests/dist/public_api_types.typecheck.ts +1031 -0
- package/typescript/vorma/black_box_tests/dist/tsconfig.json +9 -0
- package/typescript/vorma/black_box_tests/dist/vitest.config.ts +85 -0
- package/typescript/vorma/black_box_tests/src/tsconfig.json +8 -0
- package/typescript/vorma/client/README.md +48 -0
- package/typescript/vorma/client/buildtime.ts +15 -0
- package/typescript/vorma/client/index.ts +66 -0
- package/typescript/vorma/client/internal/hmr_dev.ts +353 -0
- package/typescript/vorma/client/internal.ts +40 -0
- package/typescript/vorma/client/src/runtime.ts +5721 -0
- package/typescript/vorma/client/testing.ts +487 -0
- package/typescript/vorma/client/tsconfig.json +10 -0
- package/typescript/vorma/client/vitest.dist.config.ts +85 -0
- package/{vormaclient → typescript/vorma}/create/main.ts +9 -9
- package/{vormaclient → typescript/vorma}/create/package.json +3 -3
- package/typescript/vorma/create/tsconfig.json +3 -0
- package/typescript/vorma/ui-adapters/README.md +7 -0
- package/{vormaclient/solid/index.tsx → typescript/vorma/ui-adapters/preact/index.ts} +5 -3
- package/typescript/vorma/ui-adapters/preact/src/preact.tsx +319 -0
- package/{vormaclient → typescript/vorma/ui-adapters}/preact/tsconfig.json +1 -1
- package/{vormaclient/preact/index.tsx → typescript/vorma/ui-adapters/react/index.ts} +5 -3
- package/typescript/vorma/ui-adapters/react/src/react.tsx +372 -0
- package/{vormaclient → typescript/vorma/ui-adapters}/react/tsconfig.json +1 -1
- package/{vormaclient/react/index.tsx → typescript/vorma/ui-adapters/solid/index.ts} +5 -3
- package/typescript/vorma/ui-adapters/solid/src/solid.tsx +446 -0
- package/{vormaclient → typescript/vorma/ui-adapters}/solid/tsconfig.json +1 -1
- package/typescript/vorma/vite/tsconfig.json +3 -0
- package/{vormaclient → typescript/vorma}/vite/vite.ts +133 -48
- package/npm_dist/kit/_typescript/chunk-LNARYAGF.js.map +0 -7
- package/npm_dist/kit/_typescript/chunk-YBAPNBS2.js +0 -202
- package/npm_dist/kit/_typescript/chunk-YBAPNBS2.js.map +0 -7
- package/npm_dist/kit/_typescript/converters/converters.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/cookies/cookies.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/csrf/csrf.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/debounce/debounce.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/fmt/fmt.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/json/deep_equals.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/json/json.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/json/search_param_serializer.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/json/stringify_stable.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/listeners/listeners.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/listeners/listeners.js.map +0 -7
- package/npm_dist/kit/_typescript/matcher/find_best_match.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/matcher/find_best_match.js.map +0 -7
- package/npm_dist/kit/_typescript/matcher/find_nested_matches.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/matcher/find_nested_matches.js.map +0 -7
- package/npm_dist/kit/_typescript/matcher/parse_segments.d.ts +0 -2
- package/npm_dist/kit/_typescript/matcher/parse_segments.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/matcher/register.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/matcher/register.js +0 -21
- package/npm_dist/kit/_typescript/theme/theme.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/url/url.d.ts.map +0 -1
- package/npm_dist/kit/_typescript/url/url.js.map +0 -7
- package/npm_dist/vormaclient/client/buildtime.d.ts +0 -5
- package/npm_dist/vormaclient/client/buildtime.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/buildtime.js.map +0 -7
- package/npm_dist/vormaclient/client/chunk-FSS7CPEB.js +0 -4352
- package/npm_dist/vormaclient/client/chunk-FSS7CPEB.js.map +0 -7
- package/npm_dist/vormaclient/client/chunk-SNLAUOLY.js +0 -4411
- package/npm_dist/vormaclient/client/chunk-SNLAUOLY.js.map +0 -7
- package/npm_dist/vormaclient/client/chunk-UZYFIXMX.js +0 -4400
- package/npm_dist/vormaclient/client/chunk-UZYFIXMX.js.map +0 -7
- package/npm_dist/vormaclient/client/chunk-X2HRWFEN.js +0 -4411
- package/npm_dist/vormaclient/client/chunk-X2HRWFEN.js.map +0 -7
- package/npm_dist/vormaclient/client/chunk-Z5RFOZDO.js +0 -4494
- package/npm_dist/vormaclient/client/chunk-Z5RFOZDO.js.map +0 -7
- package/npm_dist/vormaclient/client/index.d.ts +0 -11
- package/npm_dist/vormaclient/client/index.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/index.js +0 -197
- package/npm_dist/vormaclient/client/index.js.map +0 -7
- package/npm_dist/vormaclient/client/internal.d.ts +0 -7
- package/npm_dist/vormaclient/client/internal.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/internal.js +0 -161
- package/npm_dist/vormaclient/client/internal.js.map +0 -7
- package/npm_dist/vormaclient/client/src/app/context.d.ts +0 -102
- package/npm_dist/vormaclient/client/src/app/context.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/app/helpers.d.ts +0 -149
- package/npm_dist/vormaclient/client/src/app/helpers.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/app/init.d.ts +0 -13
- package/npm_dist/vormaclient/client/src/app/init.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/client.d.ts +0 -33
- package/npm_dist/vormaclient/client/src/client.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/extras.d.ts +0 -31
- package/npm_dist/vormaclient/client/src/core/extras.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/links.d.ts +0 -34
- package/npm_dist/vormaclient/client/src/core/links.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/begin_navigation.d.ts +0 -20
- package/npm_dist/vormaclient/client/src/core/navigation/begin_navigation.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/begin_navigation_flow.d.ts +0 -80
- package/npm_dist/vormaclient/client/src/core/navigation/begin_navigation_flow.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data.d.ts +0 -3
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data_server.d.ts +0 -50
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data_server.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data_skip.d.ts +0 -18
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data_skip.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data_skip_match.d.ts +0 -41
- package/npm_dist/vormaclient/client/src/core/navigation/fetch_route_data_skip_match.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/navigation_controls.d.ts +0 -18
- package/npm_dist/vormaclient/client/src/core/navigation/navigation_controls.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/runtime.d.ts +0 -9
- package/npm_dist/vormaclient/client/src/core/navigation/runtime.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/runtime_navigation_outcome.d.ts +0 -24
- package/npm_dist/vormaclient/client/src/core/navigation/runtime_navigation_outcome.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/runtime_slots.d.ts +0 -26
- package/npm_dist/vormaclient/client/src/core/navigation/runtime_slots.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/runtime_submit.d.ts +0 -16
- package/npm_dist/vormaclient/client/src/core/navigation/runtime_submit.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/navigation/types.d.ts +0 -86
- package/npm_dist/vormaclient/client/src/core/navigation/types.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/redirects.d.ts +0 -27
- package/npm_dist/vormaclient/client/src/core/redirects.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/core/render_runtime.d.ts +0 -62
- package/npm_dist/vormaclient/client/src/core/render_runtime.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/platform/events.d.ts +0 -26
- package/npm_dist/vormaclient/client/src/platform/events.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/platform/history.d.ts +0 -26
- package/npm_dist/vormaclient/client/src/platform/history.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/platform/safety.d.ts +0 -9
- package/npm_dist/vormaclient/client/src/platform/safety.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/platform/scroll.d.ts +0 -22
- package/npm_dist/vormaclient/client/src/platform/scroll.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/platform/url.d.ts +0 -35
- package/npm_dist/vormaclient/client/src/platform/url.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/tests/contracts/contract_test_harness.d.ts +0 -99
- package/npm_dist/vormaclient/client/src/tests/contracts/contract_test_harness.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/ui/head.d.ts +0 -7
- package/npm_dist/vormaclient/client/src/ui/head.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/ui/helpers.d.ts +0 -62
- package/npm_dist/vormaclient/client/src/ui/helpers.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/src/ui/route_outlet_runtime.d.ts +0 -44
- package/npm_dist/vormaclient/client/src/ui/route_outlet_runtime.d.ts.map +0 -1
- package/npm_dist/vormaclient/client/vitest.dist.config.d.ts.map +0 -1
- package/npm_dist/vormaclient/create/main.d.ts.map +0 -1
- package/npm_dist/vormaclient/create/runtime_helpers.d.ts.map +0 -1
- package/npm_dist/vormaclient/preact/index.d.ts +0 -4
- package/npm_dist/vormaclient/preact/index.d.ts.map +0 -1
- package/npm_dist/vormaclient/preact/index.js +0 -284
- package/npm_dist/vormaclient/preact/index.js.map +0 -7
- package/npm_dist/vormaclient/preact/src/helpers.d.ts +0 -21
- package/npm_dist/vormaclient/preact/src/helpers.d.ts.map +0 -1
- package/npm_dist/vormaclient/preact/src/link.d.ts +0 -11
- package/npm_dist/vormaclient/preact/src/link.d.ts.map +0 -1
- package/npm_dist/vormaclient/preact/src/preact.d.ts +0 -21
- package/npm_dist/vormaclient/preact/src/preact.d.ts.map +0 -1
- package/npm_dist/vormaclient/react/index.d.ts +0 -4
- package/npm_dist/vormaclient/react/index.d.ts.map +0 -1
- package/npm_dist/vormaclient/react/index.js +0 -308
- package/npm_dist/vormaclient/react/index.js.map +0 -7
- package/npm_dist/vormaclient/react/src/helpers.d.ts +0 -21
- package/npm_dist/vormaclient/react/src/helpers.d.ts.map +0 -1
- package/npm_dist/vormaclient/react/src/link.d.ts +0 -11
- package/npm_dist/vormaclient/react/src/link.d.ts.map +0 -1
- package/npm_dist/vormaclient/react/src/react.d.ts +0 -20
- package/npm_dist/vormaclient/react/src/react.d.ts.map +0 -1
- package/npm_dist/vormaclient/solid/index.d.ts +0 -4
- package/npm_dist/vormaclient/solid/index.d.ts.map +0 -1
- package/npm_dist/vormaclient/solid/index.js +0 -453
- package/npm_dist/vormaclient/solid/index.js.map +0 -7
- package/npm_dist/vormaclient/solid/src/helpers.d.ts +0 -22
- package/npm_dist/vormaclient/solid/src/helpers.d.ts.map +0 -1
- package/npm_dist/vormaclient/solid/src/link.d.ts +0 -12
- package/npm_dist/vormaclient/solid/src/link.d.ts.map +0 -1
- package/npm_dist/vormaclient/solid/src/solid.d.ts +0 -22
- package/npm_dist/vormaclient/solid/src/solid.d.ts.map +0 -1
- package/npm_dist/vormaclient/vite/vite.d.ts.map +0 -1
- package/npm_dist/vormaclient/vite/vite.js.map +0 -7
- package/vormaclient/client/buildtime.ts +0 -13
- package/vormaclient/client/dist_tests/ambient_modules.d.ts +0 -18
- package/vormaclient/client/dist_tests/dist_test_harness.ts +0 -94
- package/vormaclient/client/dist_tests/tsconfig.json +0 -8
- package/vormaclient/client/index.ts +0 -56
- package/vormaclient/client/internal.ts +0 -26
- package/vormaclient/client/src/app/context.ts +0 -188
- package/vormaclient/client/src/app/helpers.ts +0 -397
- package/vormaclient/client/src/app/init.ts +0 -221
- package/vormaclient/client/src/client.ts +0 -116
- package/vormaclient/client/src/core/extras.ts +0 -350
- package/vormaclient/client/src/core/links.ts +0 -464
- package/vormaclient/client/src/core/navigation/begin_navigation.ts +0 -177
- package/vormaclient/client/src/core/navigation/begin_navigation_flow.ts +0 -328
- package/vormaclient/client/src/core/navigation/fetch_route_data.ts +0 -68
- package/vormaclient/client/src/core/navigation/fetch_route_data_server.ts +0 -264
- package/vormaclient/client/src/core/navigation/fetch_route_data_skip.ts +0 -225
- package/vormaclient/client/src/core/navigation/fetch_route_data_skip_match.ts +0 -270
- package/vormaclient/client/src/core/navigation/navigation_controls.ts +0 -203
- package/vormaclient/client/src/core/navigation/runtime.ts +0 -234
- package/vormaclient/client/src/core/navigation/runtime_navigation_outcome.ts +0 -544
- package/vormaclient/client/src/core/navigation/runtime_slots.ts +0 -324
- package/vormaclient/client/src/core/navigation/runtime_submit.ts +0 -516
- package/vormaclient/client/src/core/navigation/types.ts +0 -103
- package/vormaclient/client/src/core/redirects.ts +0 -417
- package/vormaclient/client/src/core/render_runtime.ts +0 -724
- package/vormaclient/client/src/platform/events.ts +0 -63
- package/vormaclient/client/src/platform/history.ts +0 -245
- package/vormaclient/client/src/platform/safety.ts +0 -72
- package/vormaclient/client/src/platform/scroll.ts +0 -191
- package/vormaclient/client/src/platform/url.ts +0 -137
- package/vormaclient/client/src/tests/contracts/README.md +0 -25
- package/vormaclient/client/src/tests/contracts/contract_test_harness.ts +0 -504
- package/vormaclient/client/src/ui/head.ts +0 -281
- package/vormaclient/client/src/ui/helpers.ts +0 -262
- package/vormaclient/client/src/ui/route_outlet_runtime.ts +0 -258
- package/vormaclient/client/tsconfig.json +0 -4
- package/vormaclient/client/vitest.dist.config.ts +0 -74
- package/vormaclient/create/pnpm-lock.yaml +0 -70
- package/vormaclient/create/tsconfig.json +0 -3
- package/vormaclient/preact/src/helpers.ts +0 -102
- package/vormaclient/preact/src/link.tsx +0 -99
- package/vormaclient/preact/src/preact.tsx +0 -247
- package/vormaclient/react/src/helpers.ts +0 -117
- package/vormaclient/react/src/link.tsx +0 -105
- package/vormaclient/react/src/react.tsx +0 -239
- package/vormaclient/solid/src/helpers.ts +0 -116
- package/vormaclient/solid/src/link.tsx +0 -99
- package/vormaclient/solid/src/solid.tsx +0 -468
- package/vormaclient/vite/tsconfig.json +0 -3
- /package/npm_dist/{kit/_typescript → typescript/kit}/converters/converters.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/cookies/cookies.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/csrf/csrf.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/debounce/debounce.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/fmt/fmt.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/json/deep_equals.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/json/json.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/json/search_param_serializer.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/json/stringify_stable.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/listeners/listeners.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/matcher/register.d.ts +0 -0
- /package/npm_dist/{kit/_typescript → typescript/kit}/theme/theme.d.ts +0 -0
- /package/npm_dist/{kit/_typescript/matcher/register.js.map → typescript/vorma/client/index.js.map} +0 -0
- /package/npm_dist/{vormaclient → typescript/vorma}/client/vitest.dist.config.d.ts +0 -0
- /package/npm_dist/{vormaclient → typescript/vorma}/create/main.d.ts +0 -0
- /package/npm_dist/{vormaclient → typescript/vorma}/create/runtime_helpers.d.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/converters/converters.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/cookies/cookies.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/csrf/AGENTS.md +0 -0
- /package/{kit/_typescript → typescript/kit}/csrf/csrf.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/debounce/debounce.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/fmt/fmt.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/json/deep_equals.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/json/json.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/matcher/AGENTS.md +0 -0
- /package/{kit/_typescript → typescript/kit}/theme/theme.ts +0 -0
- /package/{kit/_typescript → typescript/kit}/tsconfig.json +0 -0
- /package/{vormaclient → typescript/vorma}/client/src/import_meta.d.ts +0 -0
- /package/{vormaclient → typescript/vorma}/create/runtime_helpers.ts +0 -0
package/README.md
CHANGED
|
@@ -10,8 +10,7 @@ The Golang metaframework, powered by Vite.
|
|
|
10
10
|
|
|
11
11
|
[vorma.dev](https://vorma.dev) | [github.com](https://github.com/vormadev/vorma)
|
|
12
12
|
| [pkg.go.dev](https://pkg.go.dev/github.com/vormadev/vorma) |
|
|
13
|
-
[
|
|
14
|
-
[x.com](https://x.com/vormadev)
|
|
13
|
+
[npmx.dev](https://npmx.dev/package/vorma) | [x.com](https://x.com/vormadev)
|
|
15
14
|
|
|
16
15
|
## Quick Start
|
|
17
16
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":
|
|
1
|
+
{"version":2,"input_hash":"f68b7119e7ccfd740b37b11544c1903a018cea9579af895c625f19fd12c944d2","output_hash":"720842a4466cb58ff76875d467bdc91602fe4e830f0b747bbfdf4fa39c76743c"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converters.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/converters/converters.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC;AAC/B,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAC1B,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAC5B,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAO/B,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAEnD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAEjD;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGvD;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAG7D;AAOD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAElD;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAGzC;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAG/C;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAGrD;AAOD,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,CAM/C;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAGxC;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAG5C;AAGD,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,CAGlD;AAOD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAExD;AAGD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGjD;AAGD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAG/C;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAM3D;AAOD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAGjE;AAGD,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAG1D;AAGD,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,GAAG,CAGxD;AAGD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAK9D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../kit/
|
|
3
|
+
"sources": ["../../../../typescript/kit/converters/converters.ts"],
|
|
4
4
|
"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"],
|
|
5
5
|
"mappings": ";AAeO,SAAS,YAAY,OAAyB;AACpD,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK;AACtC;AAGO,SAAS,WAAW,OAAwB;AAClD,SAAO,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACzE;AAGO,SAAS,cAAc,OAA2B;AACxD,QAAM,WAAW,CAAC,MAAc,OAAO,cAAc,CAAC;AACtD,SAAO,KAAK,MAAM,KAAK,OAAO,QAAQ,EAAE,KAAK,EAAE,CAAC;AACjD;AAGO,SAAS,iBAAiB,OAA8B;AAC9D,QAAM,SAAS,cAAc,KAAK;AAClC,SAAO,kBAAkB,MAAM;AAChC;AAOO,SAAS,YAAY,MAAwB;AACnD,SAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AACrC;AAGO,SAAS,UAAU,MAAiB;AAC1C,QAAM,QAAQ,YAAY,IAAI;AAC9B,SAAO,WAAW,KAAK;AACxB;AAGO,SAAS,aAAa,MAAoB;AAChD,QAAM,QAAQ,YAAY,IAAI;AAC9B,SAAO,cAAc,KAAK;AAC3B;AAGO,SAAS,gBAAgB,MAAuB;AACtD,QAAM,QAAQ,YAAY,IAAI;AAC9B,SAAO,iBAAiB,KAAK;AAC9B;AAOO,SAAS,WAAW,KAAsB;AAChD,QAAM,WAAW,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AACvD,QAAM,QACL,SAAS,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,OAAO,SAAS,MAAM,EAAE,CAAC,KAClE,CAAC;AACF,SAAO,IAAI,WAAW,KAAK;AAC5B;AAGO,SAAS,UAAU,KAAgB;AACzC,QAAM,QAAQ,WAAW,GAAG;AAC5B,SAAO,YAAY,KAAK;AACzB;AAGO,SAAS,YAAY,KAAkB;AAC7C,QAAM,QAAQ,WAAW,GAAG;AAC5B,SAAO,cAAc,KAAK;AAC3B;AAGO,SAAS,eAAe,KAAqB;AACnD,QAAM,QAAQ,WAAW,GAAG;AAC5B,SAAO,iBAAiB,KAAK;AAC9B;AAOO,SAAS,cAAc,QAA4B;AACzD,SAAO,WAAW,KAAK,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC;AAClE;AAGO,SAAS,aAAa,QAAsB;AAClD,QAAM,QAAQ,cAAc,MAAM;AAClC,SAAO,YAAY,KAAK;AACzB;AAGO,SAAS,YAAY,QAAqB;AAChD,QAAM,QAAQ,cAAc,MAAM;AAClC,SAAO,WAAW,KAAK;AACxB;AAGO,SAAS,kBAAkB,QAA2B;AAC5D,SAAO,OACL,QAAQ,eAAe,EAAE,EACzB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,EAAE;AACpB;AAOO,SAAS,iBAAiB,WAAkC;AAClE,QAAM,SAAS,kBAAkB,SAAS;AAC1C,SAAO,cAAc,MAAM;AAC5B;AAGO,SAAS,gBAAgB,WAA4B;AAC3D,QAAM,QAAQ,iBAAiB,SAAS;AACxC,SAAO,YAAY,KAAK;AACzB;AAGO,SAAS,eAAe,WAA2B;AACzD,QAAM,QAAQ,iBAAiB,SAAS;AACxC,SAAO,WAAW,KAAK;AACxB;AAGO,SAAS,kBAAkB,WAA8B;AAC/D,SAAO,UACL,OAAO,UAAU,UAAW,IAAK,UAAU,SAAS,KAAM,GAAI,GAAG,EACjE,QAAQ,MAAM,GAAG,EACjB,QAAQ,MAAM,GAAG;AACpB;",
|
|
6
6
|
"names": []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/cookies/cookies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,sBAU3C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAE1D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../kit/
|
|
3
|
+
"sources": ["../../../../typescript/kit/cookies/cookies.ts"],
|
|
4
4
|
"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"],
|
|
5
5
|
"mappings": ";AAIO,SAAS,gBAAgB,MAAc;AAC7C,QAAM,iBAAiB,GAAG,IAAI;AAC9B,QAAM,cAAc,SAAS,OAAO,MAAM,GAAG;AAC7C,aAAW,cAAc,aAAa;AACrC,UAAM,cAAc,WAAW,KAAK;AACpC,QAAI,YAAY,WAAW,cAAc,GAAG;AAC3C,aAAO,YAAY,MAAM,eAAe,MAAM;AAAA,IAC/C;AAAA,EACD;AACA,SAAO;AACR;AAQO,SAAS,gBAAgB,MAAc,OAAe;AAC5D,WAAS,SAAS,GAAG,IAAI,IAAI,KAAK;AACnC;",
|
|
6
6
|
"names": []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/csrf/csrf.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,GAAG,SAAS,CAIrB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../kit/
|
|
3
|
+
"sources": ["../../../../typescript/kit/csrf/csrf.ts"],
|
|
4
4
|
"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"],
|
|
5
5
|
"mappings": ";AAAA,SAAS,uBAAuB;AAEzB,SAAS,aAAa,MAGN;AACtB,QAAM,SAAS,KAAK,QAAQ,WAAW;AACvC,QAAM,OAAO,KAAK,cAAc;AAChC,SAAO,gBAAgB,SAAS,IAAI;AACrC;",
|
|
6
6
|
"names": []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/debounce/debounce.ts"],"names":[],"mappings":"AAAA,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;AAEvC,wBAAgB,QAAQ,CAAC,CAAC,SAAS,EAAE,EACpC,EAAE,EAAE,CAAC,EACL,SAAS,EAAE,MAAM,GACf,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAe7D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../kit/
|
|
3
|
+
"sources": ["../../../../typescript/kit/debounce/debounce.ts"],
|
|
4
4
|
"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: number;\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 = window.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"],
|
|
5
5
|
"mappings": ";AAEO,SAAS,SACf,IACA,WAC8D;AAC9D,MAAI;AAEJ,SAAO,IAAI,SAAwB;AAClC,WAAO,IAAI,QAAgC,CAAC,SAAS,WAAW;AAC/D,mBAAa,SAAS;AACtB,kBAAY,OAAO,WAAW,MAAM;AACnC,YAAI;AACH,kBAAQ,GAAG,GAAG,IAAI,CAAC;AAAA,QACpB,SAAS,OAAO;AACf,iBAAO,KAAK;AAAA,QACb;AAAA,MACD,GAAG,SAAS;AAAA,IACb,CAAC;AAAA,EACF;AACD;",
|
|
6
6
|
"names": []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fmt.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/fmt/fmt.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE3C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../kit/
|
|
3
|
+
"sources": ["../../../../typescript/kit/fmt/fmt.ts"],
|
|
4
4
|
"sourcesContent": ["export function prettyJSON(obj: any): string {\n\treturn JSON.stringify(obj, null, 2);\n}\n"],
|
|
5
5
|
"mappings": ";AAAO,SAAS,WAAW,KAAkB;AAC5C,SAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACnC;",
|
|
6
6
|
"names": []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep_equals.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/json/deep_equals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAyD9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/json/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// kit/
|
|
1
|
+
// typescript/kit/json/deep_equals.ts
|
|
2
2
|
function jsonDeepEquals(a, b) {
|
|
3
3
|
if (a === b) {
|
|
4
4
|
return true;
|
|
@@ -39,7 +39,7 @@ function jsonDeepEquals(a, b) {
|
|
|
39
39
|
return false;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
// kit/
|
|
42
|
+
// typescript/kit/json/search_param_serializer.ts
|
|
43
43
|
function serializeToSearchParams(obj) {
|
|
44
44
|
const params = new URLSearchParams();
|
|
45
45
|
function appendValue(key, value) {
|
|
@@ -82,7 +82,7 @@ function serializeToSearchParams(obj) {
|
|
|
82
82
|
return params;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
// kit/
|
|
85
|
+
// typescript/kit/json/stringify_stable.ts
|
|
86
86
|
function jsonStringifyStable(input) {
|
|
87
87
|
const stabilized = stabilizeStructure(input, /* @__PURE__ */ new WeakSet());
|
|
88
88
|
return JSON.stringify(stabilized);
|
|
@@ -92,7 +92,9 @@ function stabilizeStructure(value, visited) {
|
|
|
92
92
|
return value;
|
|
93
93
|
}
|
|
94
94
|
if (visited.has(value)) {
|
|
95
|
-
throw new Error(
|
|
95
|
+
throw new Error(
|
|
96
|
+
"Circular reference detected during stable JSON stringification"
|
|
97
|
+
);
|
|
96
98
|
}
|
|
97
99
|
visited.add(value);
|
|
98
100
|
if (Array.isArray(value)) {
|
|
@@ -103,7 +105,10 @@ function stabilizeStructure(value, visited) {
|
|
|
103
105
|
const keys = Object.keys(value).sort();
|
|
104
106
|
const stable = {};
|
|
105
107
|
for (const key of keys) {
|
|
106
|
-
stable[key] = stabilizeStructure(
|
|
108
|
+
stable[key] = stabilizeStructure(
|
|
109
|
+
value[key],
|
|
110
|
+
visited
|
|
111
|
+
);
|
|
107
112
|
}
|
|
108
113
|
visited.delete(value);
|
|
109
114
|
return stable;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../kit/
|
|
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\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\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]
|
|
5
|
-
"mappings": ";AAKO,SAAS,eAAe,GAAY,GAAqB;AAE/D,MAAI,MAAM,GAAG;AACZ,WAAO;AAAA,EACR;AAIA,MAAI,KAAK,QAAQ,KAAK,MAAM;AAC3B,WAAO;AAAA,EACR;AAGA,MAAI,OAAO,MAAM,OAAO,GAAG;AAC1B,WAAO;AAAA,EACR;AAEA,QAAM,WAAW,MAAM,QAAQ,CAAC;AAChC,QAAM,WAAW,MAAM,QAAQ,CAAC;AAGhC,MAAI,aAAa,UAAU;AAC1B,WAAO;AAAA,EACR;AAGA,MAAI,YAAY,UAAU;AACzB,UAAM,YAAY;AAClB,UAAM,aAAa;AACnB,QAAI,UAAU,WAAW,WAAW,QAAQ;AAC3C,aAAO;AAAA,IACR;AACA,WAAO,UAAU;AAAA,MAAM,CAAC,MAAM,UAC7B,eAAe,MAAM,WAAW,KAAK,CAAC;AAAA,IACvC;AAAA,EACD;AAGA,MAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AACnD,UAAM,aAAa;AACnB,UAAM,cAAc;AACpB,UAAM,QAAQ,OAAO,KAAK,UAAU;AACpC,UAAM,QAAQ,OAAO,KAAK,WAAW;AAErC,QAAI,MAAM,WAAW,MAAM,QAAQ;AAClC,aAAO;AAAA,IACR;AAEA,WAAO,MAAM,MAAM,CAAC,QAAQ;AAC3B,aACC,OAAO,OAAO,aAAa,GAAG,KAC9B,eAAe,WAAW,GAAG,GAAG,YAAY,GAAG,CAAC;AAAA,IAElD,CAAC;AAAA,EACF;AAEA,SAAO;AACR;;;AC9DO,SAAS,wBAAwB,KAA+B;AACtE,QAAM,SAAS,IAAI,gBAAgB;AAEnC,WAAS,YAAY,KAAa,OAAgB;AACjD,QAAI,UAAU,QAAQ,UAAU,QAAW;AAC1C,aAAO,OAAO,KAAK,EAAE;AACrB;AAAA,IACD;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,UAAI,MAAM,WAAW,GAAG;AACvB,eAAO,OAAO,KAAK,EAAE;AAAA,MACtB,OAAO;AACN,mBAAW,QAAQ,OAAO;AACzB,sBAAY,KAAK,IAAI;AAAA,QACtB;AAAA,MACD;AACA;AAAA,IACD;AAEA,QAAI,OAAO,UAAU,UAAU;AAC9B,YAAM,UAAU,OAAO,QAAQ,KAAgC;AAC/D,UAAI,QAAQ,WAAW,GAAG;AACzB,eAAO,OAAO,KAAK,EAAE;AAAA,MACtB,OAAO;AAEN,gBAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC;AACzD,mBAAW,CAAC,QAAQ,QAAQ,KAAK,SAAS;AACzC,gBAAM,SAAS,MAAM,GAAG,GAAG,IAAI,MAAM,KAAK;AAC1C,sBAAY,QAAQ,QAAQ;AAAA,QAC7B;AAAA,MACD;AACA;AAAA,IACD;
|
|
3
|
+
"sources": ["../../../../typescript/kit/json/deep_equals.ts", "../../../../typescript/kit/json/search_param_serializer.ts", "../../../../typescript/kit/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\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", "/**\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(\n\t\t\t\"Circular reference detected during stable JSON stringification\",\n\t\t);\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(\n\t\t\t(value as Record<string, unknown>)[key],\n\t\t\tvisited,\n\t\t);\n\t}\n\n\tvisited.delete(value); // Clean up after processing\n\treturn stable;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search_param_serializer.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/json/search_param_serializer.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAiDrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify_stable.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/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":["../../../../typescript/kit/listeners/listeners.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAazE"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// kit/
|
|
1
|
+
// typescript/kit/listeners/listeners.ts
|
|
2
2
|
import { debounce } from "vorma/kit/debounce";
|
|
3
3
|
function addOnWindowFocusListener(callback) {
|
|
4
4
|
const debouncedCallback = debounce(callback, 30);
|
|
5
5
|
const ifVisibleCallback = () => {
|
|
6
6
|
if (document.visibilityState === "visible") {
|
|
7
|
-
debouncedCallback();
|
|
7
|
+
void debouncedCallback();
|
|
8
8
|
}
|
|
9
9
|
};
|
|
10
10
|
window.addEventListener("focus", debouncedCallback);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../typescript/kit/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\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"],
|
|
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,WAAK,kBAAkB;AAAA,IACxB;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
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Params, type PatternRegistry, type RegisteredPattern } from "
|
|
1
|
+
import { type Params, type PatternRegistry, type RegisteredPattern } from "vorma/kit/matcher/register";
|
|
2
2
|
type BestMatch = {
|
|
3
3
|
registeredPattern: RegisteredPattern;
|
|
4
4
|
params: Params;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find_best_match.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/matcher/find_best_match.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,MAAM,EACX,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEtB,MAAM,4BAA4B,CAAC;AAGpC,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;AA6GF,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAmFlB"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
// typescript/kit/matcher/find_best_match.ts
|
|
1
2
|
import {
|
|
2
3
|
NODE_DYNAMIC,
|
|
3
4
|
NODE_SPLAT,
|
|
4
5
|
SCORE_DYNAMIC,
|
|
5
6
|
SCORE_STATIC_MATCH,
|
|
6
|
-
SEG_TYPES
|
|
7
|
-
|
|
8
|
-
} from "
|
|
9
|
-
|
|
10
|
-
// kit/_typescript/matcher/find_best_match.ts
|
|
7
|
+
SEG_TYPES
|
|
8
|
+
} from "vorma/kit/matcher/register";
|
|
9
|
+
import { parseSegments } from "vorma/kit/matcher/utils";
|
|
11
10
|
function dfsBest(props) {
|
|
12
11
|
const {
|
|
13
12
|
registry,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../typescript/kit/matcher/find_best_match.ts"],
|
|
4
|
+
"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\tbestScore: number;\n\tfoundMatch: boolean;\n};\n\nfunction dfsBest(props: {\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 {\n\t\tregistry,\n\t\tnode,\n\t\tsegments,\n\t\tdepth,\n\t\tscore,\n\t\tstate,\n\t\tcheckTrailingSlash,\n\t} = props;\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\tnode: child,\n\t\t\t\tsegments,\n\t\t\t\tdepth: depth + 1,\n\t\t\t\tscore: score + 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\tnode: child,\n\t\t\t\t\t\tsegments,\n\t\t\t\t\t\tdepth: depth + 1,\n\t\t\t\t\t\tscore: score + 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\tnode: registry.rootNode,\n\t\tsegments,\n\t\tdepth: 0,\n\t\tscore: 0,\n\t\tstate,\n\t\tcheckTrailingSlash: hasTrailingSlash,\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 @@
|
|
|
1
|
+
{"version":3,"file":"find_nested_matches.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/matcher/find_nested_matches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EACN,eAAe,EACf,iBAAiB,EAEjB,MAAM,4BAA4B,CAAC;AAQpC,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;AAqJF,wBAAgB,iBAAiB,CAChC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACd,uBAAuB,GAAG,IAAI,CAmLhC"}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
+
// typescript/kit/matcher/find_nested_matches.ts
|
|
1
2
|
import {
|
|
2
3
|
NODE_DYNAMIC,
|
|
3
4
|
NODE_SPLAT,
|
|
4
|
-
SEG_TYPES
|
|
5
|
-
|
|
6
|
-
} from "
|
|
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
|
-
}
|
|
5
|
+
SEG_TYPES
|
|
6
|
+
} from "vorma/kit/matcher/register";
|
|
7
|
+
import { parseSegments, stripTrailingSlash } from "vorma/kit/matcher/utils";
|
|
12
8
|
function dfsNestedMatches(registry, node, segments, depth, params, matches) {
|
|
13
9
|
if (node.pattern.length > 0) {
|
|
14
10
|
const rp = registry.dynamicPatterns.get(node.pattern);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../typescript/kit/matcher/find_nested_matches.ts"],
|
|
4
|
+
"sourcesContent": ["import type {\n\tParams,\n\tPatternRegistry,\n\tRegisteredPattern,\n\tSegmentNode,\n} from \"vorma/kit/matcher/register\";\nimport {\n\tNODE_DYNAMIC,\n\tNODE_SPLAT,\n\tSEG_TYPES,\n} from \"vorma/kit/matcher/register\";\nimport { parseSegments, stripTrailingSlash } from \"vorma/kit/matcher/utils\";\n\nexport type Match = {\n\tregisteredPattern: RegisteredPattern;\n\tparams: Params;\n\tsplatValues: string[];\n};\n\ntype FindNestedMatchesResult = {\n\tparams: Params;\n\tsplatValues: string[];\n\tmatches: Match[];\n};\n\nfunction dfsNestedMatches(\n\tregistry: PatternRegistry,\n\tnode: SegmentNode,\n\tsegments: string[],\n\tdepth: number,\n\tparams: Params,\n\tmatches: Map<string, Match>,\n): void {\n\tif (node.pattern.length > 0) {\n\t\tconst rp = registry.dynamicPatterns.get(node.pattern);\n\t\tif (rp && node.pattern !== \"/*\") {\n\t\t\tconst paramsCopy = { ...params };\n\t\t\tlet splatValues: string[] = [];\n\n\t\t\tif (node.nodeType === NODE_SPLAT && depth < segments.length) {\n\t\t\t\tsplatValues = segments.slice(depth);\n\t\t\t}\n\n\t\t\tmatches.set(node.pattern, {\n\t\t\t\tregisteredPattern: rp,\n\t\t\t\tparams: paramsCopy,\n\t\t\t\tsplatValues,\n\t\t\t});\n\n\t\t\tif (depth === segments.length) {\n\t\t\t\tconst indexPattern = node.pattern + \"/\";\n\t\t\t\tconst rpIndex = registry.dynamicPatterns.get(indexPattern);\n\t\t\t\tif (rpIndex) {\n\t\t\t\t\tmatches.set(indexPattern, {\n\t\t\t\t\t\tregisteredPattern: rpIndex,\n\t\t\t\t\t\tparams: paramsCopy,\n\t\t\t\t\t\tsplatValues: [],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (depth >= segments.length) return;\n\n\tconst seg = segments[depth]!;\n\n\tif (node.children !== null) {\n\t\tconst child = node.children.get(seg);\n\t\tif (child) {\n\t\t\tdfsNestedMatches(\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\tparams,\n\t\t\t\tmatches,\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\tconst oldVal = params[child.paramName];\n\t\t\t\tconst hadVal = oldVal !== undefined;\n\t\t\t\tparams[child.paramName] = seg;\n\n\t\t\t\tdfsNestedMatches(\n\t\t\t\t\tregistry,\n\t\t\t\t\tchild,\n\t\t\t\t\tsegments,\n\t\t\t\t\tdepth + 1,\n\t\t\t\t\tparams,\n\t\t\t\t\tmatches,\n\t\t\t\t);\n\n\t\t\t\tif (hadVal) {\n\t\t\t\t\tparams[child.paramName] = oldVal!;\n\t\t\t\t} else {\n\t\t\t\t\tdelete params[child.paramName];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase NODE_SPLAT:\n\t\t\t\tdfsNestedMatches(\n\t\t\t\t\tregistry,\n\t\t\t\t\tchild,\n\t\t\t\t\tsegments,\n\t\t\t\t\tdepth,\n\t\t\t\t\tparams,\n\t\t\t\t\tmatches,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction flattenAndSortMatches(\n\tmatches: Map<string, Match>,\n\trealPath: string,\n\trealSegmentLen: number,\n): FindNestedMatchesResult | null {\n\tconst results: Match[] = Array.from(matches.values());\n\n\tresults.sort((i, j) => {\n\t\tif (i.registeredPattern.lastSegIsIndex) return 1;\n\t\tif (j.registeredPattern.lastSegIsIndex) return -1;\n\t\treturn (\n\t\t\ti.registeredPattern.normalizedSegments.length -\n\t\t\tj.registeredPattern.normalizedSegments.length\n\t\t);\n\t});\n\n\tif (results.length === 0) return null;\n\n\tconst isNotSlashRoute = realPath !== \"\" && realPath !== \"/\";\n\tif (\n\t\tisNotSlashRoute &&\n\t\tresults.length === 1 &&\n\t\tresults[0]!.registeredPattern.normalizedPattern === \"\"\n\t) {\n\t\treturn null;\n\t}\n\n\tconst lastMatch = results[results.length - 1]!;\n\n\tif (\n\t\t!lastMatch.registeredPattern.lastSegIsNonRootSplat &&\n\t\tlastMatch.registeredPattern.normalizedPattern !== \"/*\"\n\t) {\n\t\tconst patternSegmentsLen =\n\t\t\tlastMatch.registeredPattern.normalizedSegments.length;\n\n\t\tif (patternSegmentsLen < realSegmentLen) return null;\n\n\t\tif (\n\t\t\tpatternSegmentsLen === realSegmentLen &&\n\t\t\tlastMatch.registeredPattern.numberOfDynamicParamSegs > 0 &&\n\t\t\tObject.keys(lastMatch.params).length === 0\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn {\n\t\tparams: lastMatch.params,\n\t\tsplatValues: lastMatch.splatValues,\n\t\tmatches: results,\n\t};\n}\n\nexport function findNestedMatches(\n\tregistry: PatternRegistry,\n\trealPath: string,\n): FindNestedMatchesResult | null {\n\trealPath = stripTrailingSlash(realPath);\n\n\tconst realSegments = parseSegments(realPath);\n\tconst matches: Map<string, Match> = new Map();\n\n\t// Check for empty pattern\n\tconst emptyRR = registry.staticPatterns.get(\"\");\n\tif (emptyRR) {\n\t\tmatches.set(emptyRR.normalizedPattern, {\n\t\t\tregisteredPattern: emptyRR,\n\t\t\tparams: {},\n\t\t\tsplatValues: [],\n\t\t});\n\t}\n\n\tconst realSegmentsLen = realSegments.length;\n\n\t// Handle root path\n\tif (realPath === \"\") {\n\t\tconst rr = registry.staticPatterns.get(\"/\");\n\t\tif (rr) {\n\t\t\tmatches.set(rr.normalizedPattern, {\n\t\t\t\tregisteredPattern: rr,\n\t\t\t\tparams: {},\n\t\t\t\tsplatValues: [],\n\t\t\t});\n\t\t} else {\n\t\t\tconst catchAllRR = registry.dynamicPatterns.get(\"/*\");\n\t\t\tif (catchAllRR) {\n\t\t\t\tmatches.set(\"/*\", {\n\t\t\t\t\tregisteredPattern: catchAllRR,\n\t\t\t\t\tparams: {},\n\t\t\t\t\tsplatValues: [],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn flattenAndSortMatches(matches, realPath, realSegmentsLen);\n\t}\n\n\t// Check static patterns progressively\n\tlet pb = \"\";\n\tlet foundFullStatic = false;\n\n\tfor (let i = 0; i < realSegments.length; i++) {\n\t\tpb += \"/\" + realSegments[i];\n\t\tconst rr = registry.staticPatterns.get(pb);\n\t\tif (rr) {\n\t\t\tmatches.set(rr.normalizedPattern, {\n\t\t\t\tregisteredPattern: rr,\n\t\t\t\tparams: {},\n\t\t\t\tsplatValues: [],\n\t\t\t});\n\t\t\tif (i === realSegmentsLen - 1) foundFullStatic = true;\n\t\t}\n\t\tif (i === realSegmentsLen - 1) {\n\t\t\tpb += \"/\";\n\t\t\tconst rrWithSlash = registry.staticPatterns.get(pb);\n\t\t\tif (rrWithSlash) {\n\t\t\t\tmatches.set(rrWithSlash.normalizedPattern, {\n\t\t\t\t\tregisteredPattern: rrWithSlash,\n\t\t\t\t\tparams: {},\n\t\t\t\t\tsplatValues: [],\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check dynamic patterns if no full static match\n\tif (!foundFullStatic) {\n\t\tconst rr = registry.dynamicPatterns.get(\"/*\");\n\t\tif (rr) {\n\t\t\tmatches.set(\"/*\", {\n\t\t\t\tregisteredPattern: rr,\n\t\t\t\tparams: {},\n\t\t\t\tsplatValues: realSegments,\n\t\t\t});\n\t\t}\n\n\t\tconst params: Params = {};\n\t\tdfsNestedMatches(\n\t\t\tregistry,\n\t\t\tregistry.rootNode,\n\t\t\trealSegments,\n\t\t\t0,\n\t\t\tparams,\n\t\t\tmatches,\n\t\t);\n\t}\n\n\t// Clean up catch-all pattern if necessary\n\tconst hasEmptyRR = emptyRR !== undefined;\n\tif (matches.has(\"/*\")) {\n\t\tif (hasEmptyRR) {\n\t\t\tif (matches.size > 2) matches.delete(\"/*\");\n\t\t} else if (matches.size > 1) {\n\t\t\tmatches.delete(\"/*\");\n\t\t}\n\t}\n\n\tif (matches.size < 2) {\n\t\treturn flattenAndSortMatches(matches, realPath, realSegmentsLen);\n\t}\n\n\t// Find longest segment matches\n\tlet longestSegmentLen = 0;\n\tconst longestSegmentMatches: Map<string, Match> = new Map();\n\n\tfor (const match of matches.values()) {\n\t\tif (\n\t\t\tmatch.registeredPattern.normalizedSegments.length >\n\t\t\tlongestSegmentLen\n\t\t) {\n\t\t\tlongestSegmentLen =\n\t\t\t\tmatch.registeredPattern.normalizedSegments.length;\n\t\t}\n\t}\n\n\tfor (const match of matches.values()) {\n\t\tif (\n\t\t\tmatch.registeredPattern.normalizedSegments.length ===\n\t\t\tlongestSegmentLen\n\t\t) {\n\t\t\tlongestSegmentMatches.set(\n\t\t\t\tmatch.registeredPattern.lastSegType,\n\t\t\t\tmatch,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Remove shorter matches\n\tfor (const [pattern, match] of matches) {\n\t\tif (\n\t\t\tmatch.registeredPattern.normalizedSegments.length <\n\t\t\tlongestSegmentLen\n\t\t) {\n\t\t\tif (\n\t\t\t\tmatch.registeredPattern.lastSegIsNonRootSplat ||\n\t\t\t\tmatch.registeredPattern.lastSegIsIndex\n\t\t\t) {\n\t\t\t\tmatches.delete(pattern);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (matches.size < 2) {\n\t\treturn flattenAndSortMatches(matches, realPath, realSegmentsLen);\n\t}\n\n\t// Handle conflicts between longest matches\n\tif (longestSegmentMatches.size > 1) {\n\t\tconst indexMatch = longestSegmentMatches.get(SEG_TYPES.index);\n\t\tif (indexMatch) {\n\t\t\tmatches.delete(indexMatch.registeredPattern.normalizedPattern);\n\t\t}\n\n\t\tconst dynamicExists = longestSegmentMatches.has(SEG_TYPES.dynamic);\n\t\tconst splatExists = longestSegmentMatches.has(SEG_TYPES.splat);\n\n\t\tif (\n\t\t\trealSegmentsLen === longestSegmentLen &&\n\t\t\tdynamicExists &&\n\t\t\tsplatExists\n\t\t) {\n\t\t\tconst splatMatch = longestSegmentMatches.get(SEG_TYPES.splat)!;\n\t\t\tmatches.delete(splatMatch.registeredPattern.normalizedPattern);\n\t\t}\n\n\t\tif (\n\t\t\trealSegmentsLen > longestSegmentLen &&\n\t\t\tsplatExists &&\n\t\t\tdynamicExists\n\t\t) {\n\t\t\tconst dynamicMatch = longestSegmentMatches.get(SEG_TYPES.dynamic)!;\n\t\t\tmatches.delete(dynamicMatch.registeredPattern.normalizedPattern);\n\t\t}\n\t}\n\n\treturn flattenAndSortMatches(matches, realPath, realSegmentsLen);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/matcher/register.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5C,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,OAAO,GAAG;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,OAAO,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;IAC1C,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE;QACP,sBAAsB,EAAE,MAAM,CAAC;QAC/B,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,yBAAyB,EAAE,OAAO,CAAC;KACnC,CAAC;CACF,CAAC;AAMF,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,eAAO,MAAM,SAAS;WACH,OAAO;YACL,OAAO;aACL,OAAO;WACX,OAAO;CACzB,CAAC;AA8IF,wBAAgB,qBAAqB,CACpC,IAAI,CAAC,EAAE,mBAAmB,GACxB,eAAe,CAmBjB;AAED,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,eAAe,EACzB,eAAe,EAAE,MAAM,GACrB,iBAAiB,CA6CnB"}
|
|
@@ -1,29 +1,5 @@
|
|
|
1
|
-
// kit/
|
|
2
|
-
|
|
3
|
-
if (path === "" || path === "/") {
|
|
4
|
-
return path === "/" ? [""] : [];
|
|
5
|
-
}
|
|
6
|
-
const startIdx = path.startsWith("/") ? 1 : 0;
|
|
7
|
-
const segments = [];
|
|
8
|
-
let start = startIdx;
|
|
9
|
-
for (let i = startIdx; i < path.length; i++) {
|
|
10
|
-
if (path[i] === "/") {
|
|
11
|
-
if (i > start) {
|
|
12
|
-
segments.push(path.substring(start, i));
|
|
13
|
-
}
|
|
14
|
-
start = i + 1;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
if (start < path.length) {
|
|
18
|
-
segments.push(path.substring(start));
|
|
19
|
-
}
|
|
20
|
-
if (path.endsWith("/")) {
|
|
21
|
-
segments.push("");
|
|
22
|
-
}
|
|
23
|
-
return segments;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// kit/_typescript/matcher/register.ts
|
|
1
|
+
// typescript/kit/matcher/register.ts
|
|
2
|
+
import { parseSegments } from "vorma/kit/matcher/utils";
|
|
27
3
|
var NODE_STATIC = 0;
|
|
28
4
|
var NODE_DYNAMIC = 1;
|
|
29
5
|
var NODE_SPLAT = 2;
|
|
@@ -162,8 +138,14 @@ function createPatternRegistry(opts) {
|
|
|
162
138
|
}
|
|
163
139
|
function registerPattern(registry, originalPattern) {
|
|
164
140
|
const normalized = normalizePattern(originalPattern, registry.config);
|
|
165
|
-
|
|
166
|
-
|
|
141
|
+
const existingPattern = registry.staticPatterns.get(normalized.normalizedPattern) || registry.dynamicPatterns.get(normalized.normalizedPattern);
|
|
142
|
+
if (existingPattern) {
|
|
143
|
+
if (existingPattern.originalPattern === originalPattern) {
|
|
144
|
+
return existingPattern;
|
|
145
|
+
}
|
|
146
|
+
throw new Error(
|
|
147
|
+
`normalized pattern collision: "${originalPattern}" and "${existingPattern.originalPattern}" both normalize to "${normalized.normalizedPattern}"`
|
|
148
|
+
);
|
|
167
149
|
}
|
|
168
150
|
if (isStatic(normalized.normalizedSegments)) {
|
|
169
151
|
registry.staticPatterns.set(normalized.normalizedPattern, normalized);
|
|
@@ -188,16 +170,14 @@ function registerPattern(registry, originalPattern) {
|
|
|
188
170
|
}
|
|
189
171
|
return normalized;
|
|
190
172
|
}
|
|
191
|
-
|
|
192
173
|
export {
|
|
193
|
-
parseSegments,
|
|
194
|
-
NODE_STATIC,
|
|
195
174
|
NODE_DYNAMIC,
|
|
196
175
|
NODE_SPLAT,
|
|
197
|
-
|
|
176
|
+
NODE_STATIC,
|
|
198
177
|
SCORE_DYNAMIC,
|
|
178
|
+
SCORE_STATIC_MATCH,
|
|
199
179
|
SEG_TYPES,
|
|
200
180
|
createPatternRegistry,
|
|
201
181
|
registerPattern
|
|
202
182
|
};
|
|
203
|
-
//# sourceMappingURL=
|
|
183
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../typescript/kit/matcher/register.ts"],
|
|
4
|
+
"sourcesContent": ["import { parseSegments } from \"vorma/kit/matcher/utils\";\n\nexport type Params = Record<string, string>;\nexport type SegType = \"splat\" | \"static\" | \"dynamic\" | \"index\";\n\nexport type Segment = {\n\tnormalizedVal: string;\n\tsegType: SegType;\n};\n\nexport type RegisteredPattern = {\n\toriginalPattern: string;\n\tnormalizedPattern: string;\n\tnormalizedSegments: Segment[];\n\tlastSegType: SegType;\n\tlastSegIsNonRootSplat: boolean;\n\tlastSegIsIndex: boolean;\n\tnumberOfDynamicParamSegs: number;\n};\n\nexport type SegmentNode = {\n\tpattern: string;\n\tnodeType: number;\n\tchildren: Map<string, SegmentNode> | null;\n\tdynChildren: SegmentNode[];\n\tparamName: string;\n\tfinalScore: number;\n};\n\nexport type RegistrationOptions = {\n\tdynamicParamPrefixRune?: string;\n\tsplatSegmentRune?: string;\n\texplicitIndexSegment?: string;\n};\n\nexport type PatternRegistry = {\n\tstaticPatterns: Map<string, RegisteredPattern>;\n\tdynamicPatterns: Map<string, RegisteredPattern>;\n\trootNode: SegmentNode;\n\tconfig: {\n\t\tdynamicParamPrefixRune: string;\n\t\tsplatSegmentRune: string;\n\t\texplicitIndexSegment: string;\n\t\tslashIndexSegment: string;\n\t\tusingExplicitIndexSegment: boolean;\n\t};\n};\n\n/////////////////////////////////////////////////////////////////////\n/////// CONSTANTS\n/////////////////////////////////////////////////////////////////////\n\nexport const NODE_STATIC = 0;\nexport const NODE_DYNAMIC = 1;\nexport const NODE_SPLAT = 2;\nexport const SCORE_STATIC_MATCH = 2;\nexport const SCORE_DYNAMIC = 1;\n\nexport const SEG_TYPES = {\n\tsplat: \"splat\" as SegType,\n\tstatic: \"static\" as SegType,\n\tdynamic: \"dynamic\" as SegType,\n\tindex: \"index\" as SegType,\n};\n\n/////////////////////////////////////////////////////////////////////\n/////// REGISTRATION\n/////////////////////////////////////////////////////////////////////\n\nfunction createSegmentNode(): SegmentNode {\n\treturn {\n\t\tpattern: \"\",\n\t\tnodeType: NODE_STATIC,\n\t\tchildren: null,\n\t\tdynChildren: [],\n\t\tparamName: \"\",\n\t\tfinalScore: 0,\n\t};\n}\n\nfunction findOrCreateChild(node: SegmentNode, segment: string): SegmentNode {\n\tif (segment === \"*\" || (segment.length > 0 && segment[0] === \":\")) {\n\t\tfor (const child of node.dynChildren) {\n\t\t\tif (child.paramName === segment.substring(1)) return child;\n\t\t}\n\t\treturn addDynamicChild(node, segment);\n\t}\n\n\tif (node.children === null) node.children = new Map<string, SegmentNode>();\n\n\tlet child = node.children.get(segment);\n\tif (child) return child;\n\n\tchild = createSegmentNode();\n\tchild.nodeType = NODE_STATIC;\n\tnode.children.set(segment, child);\n\treturn child;\n}\n\nfunction addDynamicChild(node: SegmentNode, segment: string): SegmentNode {\n\tconst child = createSegmentNode();\n\tif (segment === \"*\") {\n\t\tchild.nodeType = NODE_SPLAT;\n\t} else {\n\t\tchild.nodeType = NODE_DYNAMIC;\n\t\tchild.paramName = segment.substring(1);\n\t}\n\tnode.dynChildren.push(child);\n\treturn child;\n}\n\nfunction getSegmentType(props: {\n\tsegment: string;\n\tdynamicPrefix: string;\n\tsplatRune: string;\n}): SegType {\n\tconst { segment, dynamicPrefix, splatRune } = props;\n\tif (segment === \"\") return SEG_TYPES.index;\n\tif (segment.length === 1 && segment === splatRune) return SEG_TYPES.splat;\n\tif (segment.length > 0 && segment[0] === dynamicPrefix)\n\t\treturn SEG_TYPES.dynamic;\n\treturn SEG_TYPES.static;\n}\n\nfunction isStatic(segments: Segment[]): boolean {\n\tfor (const segment of segments) {\n\t\tif (\n\t\t\tsegment.segType === SEG_TYPES.splat ||\n\t\t\tsegment.segType === SEG_TYPES.dynamic\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction normalizePattern(\n\toriginalPattern: string,\n\tconfig: PatternRegistry[\"config\"],\n): RegisteredPattern {\n\tlet normalizedPattern = originalPattern;\n\n\tif (config.usingExplicitIndexSegment) {\n\t\tif (normalizedPattern.endsWith(\"/\")) {\n\t\t\tif (normalizedPattern !== \"/\") {\n\t\t\t\tthrow new Error(`bad trailing slash: ${originalPattern}`);\n\t\t\t}\n\t\t\tnormalizedPattern = normalizedPattern.replace(/\\/+$/, \"\");\n\t\t}\n\t\tif (normalizedPattern.endsWith(config.slashIndexSegment)) {\n\t\t\tnormalizedPattern = normalizedPattern.slice(\n\t\t\t\t0,\n\t\t\t\t-config.explicitIndexSegment.length,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst rawSegments = parseSegments(normalizedPattern);\n\tconst segments: Segment[] = [];\n\tlet numberOfDynamicParamSegs = 0;\n\n\tfor (const seg of rawSegments) {\n\t\tlet normalizedVal = seg;\n\t\tconst segType = getSegmentType({\n\t\t\tsegment: seg,\n\t\t\tdynamicPrefix: config.dynamicParamPrefixRune,\n\t\t\tsplatRune: config.splatSegmentRune,\n\t\t});\n\n\t\tif (segType === SEG_TYPES.dynamic) {\n\t\t\tnumberOfDynamicParamSegs++;\n\t\t\tnormalizedVal = \":\" + seg.substring(1);\n\t\t}\n\t\tif (segType === SEG_TYPES.splat) {\n\t\t\tnormalizedVal = \"*\";\n\t\t}\n\n\t\tsegments.push({ normalizedVal, segType });\n\t}\n\n\tconst segLen = segments.length;\n\tlet lastType: SegType =\n\t\tsegLen > 0 ? segments[segLen - 1]!.segType : SEG_TYPES.static;\n\n\tlet finalNormalizedPattern = \"/\";\n\tfor (let i = 0; i < segments.length; i++) {\n\t\tfinalNormalizedPattern += segments[i]!.normalizedVal;\n\t\tif (i < segLen - 1) finalNormalizedPattern += \"/\";\n\t}\n\n\tif (finalNormalizedPattern.endsWith(\"/\") && lastType !== SEG_TYPES.index) {\n\t\tfinalNormalizedPattern = finalNormalizedPattern.replace(/\\/+$/, \"\");\n\t}\n\n\treturn {\n\t\toriginalPattern,\n\t\tnormalizedPattern: finalNormalizedPattern,\n\t\tnormalizedSegments: segments,\n\t\tlastSegType: lastType,\n\t\tlastSegIsNonRootSplat: lastType === SEG_TYPES.splat && segLen > 1,\n\t\tlastSegIsIndex: lastType === SEG_TYPES.index,\n\t\tnumberOfDynamicParamSegs,\n\t};\n}\n\nexport function createPatternRegistry(\n\topts?: RegistrationOptions,\n): PatternRegistry {\n\tconst config = {\n\t\tdynamicParamPrefixRune: opts?.dynamicParamPrefixRune ?? \":\",\n\t\tsplatSegmentRune: opts?.splatSegmentRune ?? \"*\",\n\t\texplicitIndexSegment: opts?.explicitIndexSegment ?? \"\",\n\t\tslashIndexSegment: \"/\" + (opts?.explicitIndexSegment ?? \"\"),\n\t\tusingExplicitIndexSegment: (opts?.explicitIndexSegment ?? \"\") !== \"\",\n\t};\n\n\tif (config.explicitIndexSegment.includes(\"/\")) {\n\t\tthrow new Error(\"explicit index segment cannot contain /\");\n\t}\n\n\treturn {\n\t\tstaticPatterns: new Map(),\n\t\tdynamicPatterns: new Map(),\n\t\trootNode: createSegmentNode(),\n\t\tconfig,\n\t};\n}\n\nexport function registerPattern(\n\tregistry: PatternRegistry,\n\toriginalPattern: string,\n): RegisteredPattern {\n\tconst normalized = normalizePattern(originalPattern, registry.config);\n\tconst existingPattern =\n\t\tregistry.staticPatterns.get(normalized.normalizedPattern) ||\n\t\tregistry.dynamicPatterns.get(normalized.normalizedPattern);\n\n\tif (existingPattern) {\n\t\tif (existingPattern.originalPattern === originalPattern) {\n\t\t\treturn existingPattern;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`normalized pattern collision: \"${originalPattern}\" and \"${existingPattern.originalPattern}\" both normalize to \"${normalized.normalizedPattern}\"`,\n\t\t);\n\t}\n\n\tif (isStatic(normalized.normalizedSegments)) {\n\t\tregistry.staticPatterns.set(normalized.normalizedPattern, normalized);\n\t\treturn normalized;\n\t}\n\n\tregistry.dynamicPatterns.set(normalized.normalizedPattern, normalized);\n\n\tlet current = registry.rootNode;\n\tlet nodeScore = 0;\n\n\tfor (let i = 0; i < normalized.normalizedSegments.length; i++) {\n\t\tconst segment = normalized.normalizedSegments[i]!;\n\t\tconst child = findOrCreateChild(current, segment.normalizedVal);\n\n\t\tif (segment.segType === SEG_TYPES.dynamic) {\n\t\t\tnodeScore += SCORE_DYNAMIC;\n\t\t} else if (segment.segType !== SEG_TYPES.splat) {\n\t\t\tnodeScore += SCORE_STATIC_MATCH;\n\t\t}\n\n\t\tif (i === normalized.normalizedSegments.length - 1) {\n\t\t\tchild.finalScore = nodeScore;\n\t\t\tchild.pattern = normalized.normalizedPattern;\n\t\t}\n\n\t\tcurrent = child;\n\t}\n\n\treturn normalized;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["child"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/matcher/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA2BpD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI1D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// typescript/kit/matcher/utils.ts
|
|
2
|
+
function parseSegments(path) {
|
|
3
|
+
if (path === "" || path === "/") {
|
|
4
|
+
return path === "/" ? [""] : [];
|
|
5
|
+
}
|
|
6
|
+
const startIdx = path.startsWith("/") ? 1 : 0;
|
|
7
|
+
const segments = [];
|
|
8
|
+
let start = startIdx;
|
|
9
|
+
for (let i = startIdx; i < path.length; i++) {
|
|
10
|
+
if (path[i] === "/") {
|
|
11
|
+
if (i > start) {
|
|
12
|
+
segments.push(path.substring(start, i));
|
|
13
|
+
}
|
|
14
|
+
start = i + 1;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (start < path.length) {
|
|
18
|
+
segments.push(path.substring(start));
|
|
19
|
+
}
|
|
20
|
+
if (path.endsWith("/")) {
|
|
21
|
+
segments.push("");
|
|
22
|
+
}
|
|
23
|
+
return segments;
|
|
24
|
+
}
|
|
25
|
+
function stripTrailingSlash(pattern) {
|
|
26
|
+
return pattern.length > 0 && pattern[pattern.length - 1] === "/" ? pattern.substring(0, pattern.length - 1) : pattern;
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
parseSegments,
|
|
30
|
+
stripTrailingSlash
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../typescript/kit/matcher/utils.ts"],
|
|
4
|
+
"sourcesContent": ["export function parseSegments(path: string): string[] {\n\tif (path === \"\" || path === \"/\") {\n\t\treturn path === \"/\" ? [\"\"] : [];\n\t}\n\n\tconst startIdx = path.startsWith(\"/\") ? 1 : 0;\n\tconst segments: string[] = [];\n\tlet start = startIdx;\n\n\tfor (let i = startIdx; i < path.length; i++) {\n\t\tif (path[i] === \"/\") {\n\t\t\tif (i > start) {\n\t\t\t\tsegments.push(path.substring(start, i));\n\t\t\t}\n\t\t\tstart = i + 1;\n\t\t}\n\t}\n\n\tif (start < path.length) {\n\t\tsegments.push(path.substring(start));\n\t}\n\n\tif (path.endsWith(\"/\")) {\n\t\tsegments.push(\"\");\n\t}\n\n\treturn segments;\n}\n\nexport function stripTrailingSlash(pattern: string): string {\n\treturn pattern.length > 0 && pattern[pattern.length - 1] === \"/\"\n\t\t? pattern.substring(0, pattern.length - 1)\n\t\t: pattern;\n}\n"],
|
|
5
|
+
"mappings": ";AAAO,SAAS,cAAc,MAAwB;AACrD,MAAI,SAAS,MAAM,SAAS,KAAK;AAChC,WAAO,SAAS,MAAM,CAAC,EAAE,IAAI,CAAC;AAAA,EAC/B;AAEA,QAAM,WAAW,KAAK,WAAW,GAAG,IAAI,IAAI;AAC5C,QAAM,WAAqB,CAAC;AAC5B,MAAI,QAAQ;AAEZ,WAAS,IAAI,UAAU,IAAI,KAAK,QAAQ,KAAK;AAC5C,QAAI,KAAK,CAAC,MAAM,KAAK;AACpB,UAAI,IAAI,OAAO;AACd,iBAAS,KAAK,KAAK,UAAU,OAAO,CAAC,CAAC;AAAA,MACvC;AACA,cAAQ,IAAI;AAAA,IACb;AAAA,EACD;AAEA,MAAI,QAAQ,KAAK,QAAQ;AACxB,aAAS,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACpC;AAEA,MAAI,KAAK,SAAS,GAAG,GAAG;AACvB,aAAS,KAAK,EAAE;AAAA,EACjB;AAEA,SAAO;AACR;AAEO,SAAS,mBAAmB,SAAyB;AAC3D,SAAO,QAAQ,SAAS,KAAK,QAAQ,QAAQ,SAAS,CAAC,MAAM,MAC1D,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC,IACvC;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../typescript/kit/theme/theme.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,QAAA,MAAM,YAAY,iCAAwB,CAAC;AAO3C,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACjE,KAAK,sBAAsB,GAAG;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;CAC7B,CAAC;AA0DF,wBAAgB,QAAQ,IAAI,KAAK,CAEhC;AAED,wBAAgB,aAAa,IAAI,KAAK,CAErC;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED,wBAAgB,qBAAqB,IAAI,aAAa,CAErD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,QAEpC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,QAEzC;AAcD,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC,KAAK,IAAI,GACxD,eAAe,CAQjB;AAED,KAAK,eAAe,GAAG,MAAM,IAAI,CAAC;AAElC,wBAAgB,SAAS,SAWxB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAStD"}
|