@xmachines/play-sveltekit-router 1.0.0-beta.24

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 ADDED
@@ -0,0 +1,31 @@
1
+ # @xmachines/play-sveltekit-router
2
+
3
+ Thin SvelteKit adapter for XMachines Play.
4
+
5
+ ## What it does
6
+
7
+ - Keeps `actor.currentRoute` and SvelteKit navigation in sync.
8
+ - Exposes a local `RouteMap` plus `createRouteMap(machine)` helper.
9
+ - Stays direct, with no shared `@xmachines/play-svelte-router` abstraction.
10
+ - Extracts route params and query values when browser navigation enters through SvelteKit.
11
+
12
+ ## Usage
13
+
14
+ ```ts
15
+ import { connectRouter, createRouteMap } from "@xmachines/play-sveltekit-router";
16
+
17
+ const routeMap = createRouteMap(machine);
18
+ const disconnect = connectRouter({ actor, routeMap });
19
+
20
+ onDestroy(disconnect);
21
+ ```
22
+
23
+ ## Notes
24
+
25
+ - `connectRouter()` returns a cleanup function. Call it during teardown to stop syncing actor updates.
26
+ - Actor routes may be either state IDs or resolved paths; the adapter normalizes both.
27
+ - Incoming SvelteKit paths are converted into `play.route` events with extracted `params` and `query`.
28
+
29
+ ## Route map
30
+
31
+ `createRouteMap(machine)` reads route metadata from the machine and builds a Play route map for SvelteKit paths.
@@ -0,0 +1,9 @@
1
+ import type { AbstractActor, Routable } from "@xmachines/play-actor";
2
+ import type { AnyActorLogic } from "xstate";
3
+ import type { RouteMap } from "./route-map.js";
4
+ export interface ConnectRouterOptions {
5
+ readonly actor: AbstractActor<AnyActorLogic> & Routable;
6
+ readonly routeMap: RouteMap;
7
+ }
8
+ export declare function connectRouter(options: ConnectRouterOptions): () => void;
9
+ //# sourceMappingURL=connect-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-router.d.ts","sourceRoot":"","sources":["../src/connect-router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAK5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC5B;AAaD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAkGvE"}
@@ -0,0 +1,103 @@
1
+ import { afterNavigate, goto } from "$app/navigation";
2
+ import { buildPlayRouteEvent } from "@xmachines/play-router";
3
+ import { watchSignal } from "@xmachines/play-signals";
4
+ import { extractRouteParams, resolveConcreteActorPath, } from "@xmachines/play-svelte-router";
5
+ function getCurrentLocation() {
6
+ const location = globalThis.location;
7
+ /* v8 ignore next */
8
+ if (!location)
9
+ return null;
10
+ return {
11
+ pathname: location.pathname,
12
+ search: location.search,
13
+ };
14
+ }
15
+ export function connectRouter(options) {
16
+ const { actor, routeMap } = options;
17
+ let isActive = true;
18
+ let isProcessingNavigation = false;
19
+ let lastSyncedPath = resolveConcreteActorPath(actor.currentRoute.get(), routeMap);
20
+ const syncActorFromRouter = (pathname, search) => {
21
+ if (!isActive || isProcessingNavigation)
22
+ return;
23
+ const nextRoute = buildPlayRouteEvent({
24
+ pathname,
25
+ search,
26
+ resolve: (sanitizedPathname) => {
27
+ const stateId = routeMap.getStateIdByPath(sanitizedPathname);
28
+ if (!stateId) {
29
+ return { to: null, params: {} };
30
+ }
31
+ const pattern = routeMap.getPathByStateId(stateId);
32
+ return {
33
+ to: stateId,
34
+ params: pattern ? extractRouteParams(sanitizedPathname, pattern) : {},
35
+ };
36
+ },
37
+ });
38
+ if (!nextRoute || nextRoute.pathname === lastSyncedPath)
39
+ return;
40
+ isProcessingNavigation = true;
41
+ lastSyncedPath = nextRoute.pathname;
42
+ try {
43
+ actor.send(nextRoute.event);
44
+ }
45
+ finally {
46
+ isProcessingNavigation = false;
47
+ }
48
+ };
49
+ const syncRouterFromActor = (route) => {
50
+ /* v8 ignore next */
51
+ if (!isActive || isProcessingNavigation || !route)
52
+ return;
53
+ const path = resolveConcreteActorPath(route, routeMap);
54
+ /* v8 ignore next */
55
+ if (!path || path === lastSyncedPath)
56
+ return;
57
+ const location = getCurrentLocation();
58
+ /* v8 ignore next 4 */
59
+ if (location && location.pathname === path) {
60
+ lastSyncedPath = path;
61
+ return;
62
+ }
63
+ isProcessingNavigation = true;
64
+ lastSyncedPath = path;
65
+ void goto(path, { noScroll: true, keepFocus: true })
66
+ .then(() => {
67
+ // afterNavigate resets isProcessingNavigation in the normal flow.
68
+ // Reset here as a safety net if afterNavigate never fires (e.g. same-page goto).
69
+ queueMicrotask(() => {
70
+ isProcessingNavigation = false;
71
+ });
72
+ })
73
+ .catch(() => {
74
+ isProcessingNavigation = false;
75
+ });
76
+ };
77
+ const unwatchRoute = watchSignal(actor.currentRoute, (route) => {
78
+ syncRouterFromActor(route);
79
+ });
80
+ afterNavigate((navigation) => {
81
+ if (!isActive)
82
+ return;
83
+ if (isProcessingNavigation) {
84
+ isProcessingNavigation = false;
85
+ return;
86
+ }
87
+ const url = navigation.to?.url ?? getCurrentLocation();
88
+ /* v8 ignore next */
89
+ if (!url)
90
+ return;
91
+ syncActorFromRouter(url.pathname, url.search);
92
+ });
93
+ const initialLocation = getCurrentLocation();
94
+ /* v8 ignore next 3 */
95
+ if (initialLocation) {
96
+ syncActorFromRouter(initialLocation.pathname, initialLocation.search);
97
+ }
98
+ return () => {
99
+ isActive = false;
100
+ unwatchRoute();
101
+ };
102
+ }
103
+ //# sourceMappingURL=connect-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-router.js","sourceRoot":"","sources":["../src/connect-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AnyStateMachine } from "xstate";
2
+ import { RouteMap } from "./route-map.js";
3
+ export declare function createRouteMap(machine: AnyStateMachine): RouteMap;
4
+ //# sourceMappingURL=create-route-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-route-map.d.ts","sourceRoot":"","sources":["../src/create-route-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CASjE"}
@@ -0,0 +1,12 @@
1
+ import { extractMachineRoutes, getRoutableRoutes } from "@xmachines/play-router";
2
+ import { RouteMap } from "./route-map.js";
3
+ export function createRouteMap(machine) {
4
+ const routeTree = extractMachineRoutes(machine);
5
+ const routes = getRoutableRoutes(routeTree);
6
+ const mappings = routes.map((node) => ({
7
+ stateId: node.stateId,
8
+ path: node.fullPath,
9
+ }));
10
+ return new RouteMap(mappings);
11
+ }
12
+ //# sourceMappingURL=create-route-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-route-map.js","sourceRoot":"","sources":["../src/create-route-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,OAAwB;IACtD,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,QAAQ;KACnB,CAAC,CAAC,CAAC;IAEJ,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @xmachines/play-sveltekit-router - SvelteKit router adapter for XMachines Play
3
+ */
4
+ export { RouteMap } from "./route-map.js";
5
+ export { createRouteMap } from "./create-route-map.js";
6
+ export { connectRouter } from "./connect-router.js";
7
+ export type { ConnectRouterOptions } from "./connect-router.js";
8
+ export type { RouteMapping, PlayRouteEvent, RouterBridge, RoutableActor } from "./types.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @xmachines/play-sveltekit-router - SvelteKit router adapter for XMachines Play
3
+ */
4
+ export { RouteMap } from "./route-map.js";
5
+ export { createRouteMap } from "./create-route-map.js";
6
+ export { connectRouter } from "./connect-router.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseRouteMap } from "@xmachines/play-router";
2
+ /**
3
+ * SvelteKit route map backed by the shared Play router base class.
4
+ */
5
+ export declare class RouteMap extends BaseRouteMap {
6
+ }
7
+ //# sourceMappingURL=route-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-map.d.ts","sourceRoot":"","sources":["../src/route-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;GAEG;AACH,qBAAa,QAAS,SAAQ,YAAY;CAAG"}
@@ -0,0 +1,7 @@
1
+ import { BaseRouteMap } from "@xmachines/play-router";
2
+ /**
3
+ * SvelteKit route map backed by the shared Play router base class.
4
+ */
5
+ export class RouteMap extends BaseRouteMap {
6
+ }
7
+ //# sourceMappingURL=route-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-map.js","sourceRoot":"","sources":["../src/route-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,YAAY;CAAG"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Type definitions for @xmachines/play-sveltekit-router
3
+ */
4
+ import type { AbstractActor, Routable } from "@xmachines/play-actor";
5
+ import type { AnyActorLogic } from "xstate";
6
+ export type { PlayRouteEvent, RouterBridge } from "@xmachines/play-router";
7
+ export interface RouteMapping {
8
+ /** XMachines state ID (for example `#home` or `dashboard.home`). */
9
+ readonly stateId: string;
10
+ /** SvelteKit pathname pattern. */
11
+ readonly path: string;
12
+ }
13
+ export type RoutableActor = AbstractActor<AnyActorLogic> & Routable;
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Type definitions for @xmachines/play-sveltekit-router
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@xmachines/play-sveltekit-router",
3
+ "version": "1.0.0-beta.24",
4
+ "description": "SvelteKit router adapter for XMachines Universal Player Architecture",
5
+ "keywords": [
6
+ "adapter",
7
+ "play",
8
+ "router",
9
+ "state-machine",
10
+ "svelte",
11
+ "sveltekit",
12
+ "xmachines"
13
+ ],
14
+ "license": "MIT",
15
+ "author": "XMachines Contributors",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git@gitlab.com:xmachin-es/xmachines-js.git",
19
+ "directory": "packages/play-sveltekit-router"
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "README.md",
24
+ "LICENSE"
25
+ ],
26
+ "type": "module",
27
+ "main": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "exports": {
30
+ ".": {
31
+ "source": "./src/index.ts",
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ }
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "scripts": {
40
+ "build": "tsc --build",
41
+ "lint": "oxlint .",
42
+ "format": "oxfmt .",
43
+ "test": "vitest",
44
+ "clean": "rm -rf dist *.tsbuildinfo coverage .vitest-attachments node_modules/.vite*",
45
+ "prepublishOnly": "npm run build"
46
+ },
47
+ "dependencies": {
48
+ "@xmachines/play": "1.0.0-beta.24",
49
+ "@xmachines/play-actor": "1.0.0-beta.24",
50
+ "@xmachines/play-router": "1.0.0-beta.24",
51
+ "@xmachines/play-signals": "1.0.0-beta.24",
52
+ "@xmachines/play-svelte-router": "1.0.0-beta.24"
53
+ },
54
+ "devDependencies": {
55
+ "@sveltejs/kit": "^2.16.0",
56
+ "@sveltejs/vite-plugin-svelte": "^7.0.0",
57
+ "@types/node": "^25.5.0",
58
+ "@xmachines/shared": "1.0.0-beta.24",
59
+ "oxfmt": "^0.43.0",
60
+ "oxlint": "^1.57.0",
61
+ "svelte": "^5.46.4",
62
+ "typescript": "^5.9.3 || ^6.0.2",
63
+ "vitest": "^4.1.2",
64
+ "xstate": "^5.30.0"
65
+ },
66
+ "peerDependencies": {
67
+ "@sveltejs/kit": "^2.16.0",
68
+ "svelte": "^5.46.4",
69
+ "xstate": "^5.30.0"
70
+ }
71
+ }