@xmachines/play-tanstack-react-router 1.0.0-beta.6 → 1.0.0-beta.7
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 +4 -1
- package/dist/route-map.d.ts +4 -1
- package/dist/route-map.d.ts.map +1 -1
- package/dist/route-map.js +64 -6
- package/dist/route-map.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -174,4 +174,7 @@ This keeps routing infrastructure passive while preserving business-logic contro
|
|
|
174
174
|
|
|
175
175
|
## License
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
Copyright (c) 2016 [Mikael Karon](mailto:mikael@karon.se). All rights reserved.
|
|
178
|
+
|
|
179
|
+
This work is licensed under the terms of the MIT license.
|
|
180
|
+
For a copy, see <https://opensource.org/licenses/MIT>.
|
package/dist/route-map.d.ts
CHANGED
|
@@ -42,7 +42,8 @@ export interface RouteMapping {
|
|
|
42
42
|
export declare class RouteMap {
|
|
43
43
|
private stateIdToPath;
|
|
44
44
|
private pathToStateId;
|
|
45
|
-
private
|
|
45
|
+
private patternBuckets;
|
|
46
|
+
private pathMatchCache;
|
|
46
47
|
/**
|
|
47
48
|
* Create RouteMap from route mappings
|
|
48
49
|
*
|
|
@@ -64,6 +65,8 @@ export declare class RouteMap {
|
|
|
64
65
|
* ```
|
|
65
66
|
*/
|
|
66
67
|
getStateIdByPath(path: string): string | null;
|
|
68
|
+
private getIndexKey;
|
|
69
|
+
private getCandidates;
|
|
67
70
|
/**
|
|
68
71
|
* Get router path from state ID
|
|
69
72
|
*
|
package/dist/route-map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-map.d.ts","sourceRoot":"","sources":["../src/route-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,wBAAwB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,QAAQ;IACpB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"route-map.d.ts","sourceRoot":"","sources":["../src/route-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,wBAAwB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,QAAQ;IACpB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAA0E;IAChG,OAAO,CAAC,cAAc,CAA6B;IAEnD;;;;OAIG;gBACS,MAAM,EAAE,YAAY,EAAE;IA+BlC;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAwB7C,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,aAAa;IAyCrB;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGhD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAcrE"}
|
package/dist/route-map.js
CHANGED
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
export class RouteMap {
|
|
33
33
|
stateIdToPath;
|
|
34
34
|
pathToStateId;
|
|
35
|
-
|
|
35
|
+
patternBuckets;
|
|
36
|
+
pathMatchCache;
|
|
36
37
|
/**
|
|
37
38
|
* Create RouteMap from route mappings
|
|
38
39
|
*
|
|
@@ -41,7 +42,9 @@ export class RouteMap {
|
|
|
41
42
|
constructor(routes) {
|
|
42
43
|
this.stateIdToPath = new Map();
|
|
43
44
|
this.pathToStateId = new Map();
|
|
44
|
-
this.
|
|
45
|
+
this.patternBuckets = new Map();
|
|
46
|
+
this.pathMatchCache = new Map();
|
|
47
|
+
let patternOrder = 0;
|
|
45
48
|
for (const { stateId, path } of routes) {
|
|
46
49
|
this.stateIdToPath.set(stateId, path);
|
|
47
50
|
// Check if path has parameters
|
|
@@ -50,11 +53,14 @@ export class RouteMap {
|
|
|
50
53
|
const pattern = path
|
|
51
54
|
.replace(/\/:[^/]+\?/g, "(?:/([^/]+))?") // Optional params with optional slash
|
|
52
55
|
.replace(/:[^/]+/g, "([^/]+)"); // Required params
|
|
53
|
-
this.
|
|
56
|
+
const bucketKey = this.getIndexKey(path);
|
|
57
|
+
const bucket = this.patternBuckets.get(bucketKey) ?? [];
|
|
58
|
+
bucket.push({
|
|
54
59
|
pattern: new RegExp(`^${pattern}$`),
|
|
55
60
|
stateId,
|
|
56
|
-
|
|
61
|
+
order: patternOrder++,
|
|
57
62
|
});
|
|
63
|
+
this.patternBuckets.set(bucketKey, bucket);
|
|
58
64
|
}
|
|
59
65
|
else {
|
|
60
66
|
// Exact match for static paths
|
|
@@ -81,13 +87,65 @@ export class RouteMap {
|
|
|
81
87
|
const exactMatch = this.pathToStateId.get(path);
|
|
82
88
|
if (exactMatch)
|
|
83
89
|
return exactMatch;
|
|
90
|
+
const cachedMatch = this.pathMatchCache.get(path);
|
|
91
|
+
if (cachedMatch !== undefined) {
|
|
92
|
+
return cachedMatch;
|
|
93
|
+
}
|
|
84
94
|
// Try pattern match
|
|
85
|
-
|
|
86
|
-
|
|
95
|
+
const firstSegment = this.getIndexKey(path);
|
|
96
|
+
const candidates = this.getCandidates(firstSegment);
|
|
97
|
+
for (const { pattern, stateId } of candidates) {
|
|
98
|
+
if (pattern.test(path)) {
|
|
99
|
+
this.pathMatchCache.set(path, stateId);
|
|
87
100
|
return stateId;
|
|
101
|
+
}
|
|
88
102
|
}
|
|
103
|
+
this.pathMatchCache.set(path, null);
|
|
89
104
|
return null;
|
|
90
105
|
}
|
|
106
|
+
getIndexKey(path) {
|
|
107
|
+
const trimmed = path.startsWith("/") ? path.slice(1) : path;
|
|
108
|
+
if (trimmed.length === 0) {
|
|
109
|
+
return "/";
|
|
110
|
+
}
|
|
111
|
+
const segment = trimmed.split("/")[0];
|
|
112
|
+
if (segment.startsWith(":")) {
|
|
113
|
+
return "*";
|
|
114
|
+
}
|
|
115
|
+
return segment;
|
|
116
|
+
}
|
|
117
|
+
getCandidates(indexKey) {
|
|
118
|
+
const bucket = this.patternBuckets.get(indexKey) ?? [];
|
|
119
|
+
const wildcardBucket = this.patternBuckets.get("*") ?? [];
|
|
120
|
+
if (bucket.length === 0) {
|
|
121
|
+
return wildcardBucket;
|
|
122
|
+
}
|
|
123
|
+
if (wildcardBucket.length === 0) {
|
|
124
|
+
return bucket;
|
|
125
|
+
}
|
|
126
|
+
const merged = [];
|
|
127
|
+
let bucketIndex = 0;
|
|
128
|
+
let wildcardIndex = 0;
|
|
129
|
+
while (bucketIndex < bucket.length && wildcardIndex < wildcardBucket.length) {
|
|
130
|
+
if (bucket[bucketIndex].order < wildcardBucket[wildcardIndex].order) {
|
|
131
|
+
merged.push(bucket[bucketIndex]);
|
|
132
|
+
bucketIndex += 1;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
merged.push(wildcardBucket[wildcardIndex]);
|
|
136
|
+
wildcardIndex += 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
while (bucketIndex < bucket.length) {
|
|
140
|
+
merged.push(bucket[bucketIndex]);
|
|
141
|
+
bucketIndex += 1;
|
|
142
|
+
}
|
|
143
|
+
while (wildcardIndex < wildcardBucket.length) {
|
|
144
|
+
merged.push(wildcardBucket[wildcardIndex]);
|
|
145
|
+
wildcardIndex += 1;
|
|
146
|
+
}
|
|
147
|
+
return merged;
|
|
148
|
+
}
|
|
91
149
|
/**
|
|
92
150
|
* Get router path from state ID
|
|
93
151
|
*
|
package/dist/route-map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-map.js","sourceRoot":"","sources":["../src/route-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,QAAQ;IACZ,aAAa,CAAsB;IACnC,aAAa,CAAsB;IACnC,
|
|
1
|
+
{"version":3,"file":"route-map.js","sourceRoot":"","sources":["../src/route-map.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xmachines/play-tanstack-react-router",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.7",
|
|
4
4
|
"description": "TanStack React Router adapter for XMachines Play - synchronizes browser URL with actor state through passive infrastructure",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"routing",
|
|
@@ -37,15 +37,15 @@
|
|
|
37
37
|
"prepublishOnly": "npm run build"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@xmachines/play-actor": "1.0.0-beta.
|
|
41
|
-
"@xmachines/play-router": "1.0.0-beta.
|
|
42
|
-
"@xmachines/play-signals": "1.0.0-beta.
|
|
40
|
+
"@xmachines/play-actor": "1.0.0-beta.7",
|
|
41
|
+
"@xmachines/play-router": "1.0.0-beta.7",
|
|
42
|
+
"@xmachines/play-signals": "1.0.0-beta.7",
|
|
43
43
|
"xstate": "^5.28.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@tanstack/react-router": "^1.167.5",
|
|
47
47
|
"@types/node": "^25.5.0",
|
|
48
|
-
"@xmachines/shared": "1.0.0-beta.
|
|
48
|
+
"@xmachines/shared": "1.0.0-beta.7",
|
|
49
49
|
"typescript": "^5.9.3"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|