@multiplatform.one/router 6.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +51 -0
  2. package/dist/cjs/hooks/useUrlState.cjs +30 -9
  3. package/dist/cjs/hooks/useUrlState.native.js +32 -9
  4. package/dist/cjs/hooks/useUrlState.native.js.map +1 -1
  5. package/dist/cjs/seam/DomNavigationHost.cjs +122 -0
  6. package/dist/cjs/seam/DomNavigationHost.native.js +186 -0
  7. package/dist/cjs/seam/DomNavigationHost.native.js.map +1 -0
  8. package/dist/cjs/seam/index.cjs +47 -0
  9. package/dist/cjs/seam/index.native.js +50 -0
  10. package/dist/cjs/seam/index.native.js.map +1 -0
  11. package/dist/cjs/seam/navigator.cjs +309 -0
  12. package/dist/cjs/seam/navigator.native.js +479 -0
  13. package/dist/cjs/seam/navigator.native.js.map +1 -0
  14. package/dist/cjs/seam/oneAdapter.cjs +128 -0
  15. package/dist/cjs/seam/oneAdapter.native.js +141 -0
  16. package/dist/cjs/seam/oneAdapter.native.js.map +1 -0
  17. package/dist/esm/hooks/useUrlState.mjs +31 -10
  18. package/dist/esm/hooks/useUrlState.mjs.map +1 -1
  19. package/dist/esm/hooks/useUrlState.native.js +33 -10
  20. package/dist/esm/hooks/useUrlState.native.js.map +1 -1
  21. package/dist/esm/seam/DomNavigationHost.mjs +96 -0
  22. package/dist/esm/seam/DomNavigationHost.mjs.map +1 -0
  23. package/dist/esm/seam/DomNavigationHost.native.js +157 -0
  24. package/dist/esm/seam/DomNavigationHost.native.js.map +1 -0
  25. package/dist/esm/seam/index.mjs +5 -0
  26. package/dist/esm/seam/index.mjs.map +1 -0
  27. package/dist/esm/seam/index.native.js +5 -0
  28. package/dist/esm/seam/index.native.js.map +1 -0
  29. package/dist/esm/seam/navigator.mjs +279 -0
  30. package/dist/esm/seam/navigator.mjs.map +1 -0
  31. package/dist/esm/seam/navigator.native.js +446 -0
  32. package/dist/esm/seam/navigator.native.js.map +1 -0
  33. package/dist/esm/seam/oneAdapter.mjs +90 -0
  34. package/dist/esm/seam/oneAdapter.mjs.map +1 -0
  35. package/dist/esm/seam/oneAdapter.native.js +100 -0
  36. package/dist/esm/seam/oneAdapter.native.js.map +1 -0
  37. package/dist/jsx/hooks/useUrlState.mjs +31 -10
  38. package/dist/jsx/hooks/useUrlState.mjs.map +1 -1
  39. package/dist/jsx/hooks/useUrlState.native.js +32 -9
  40. package/dist/jsx/hooks/useUrlState.native.js.map +1 -1
  41. package/dist/jsx/seam/DomNavigationHost.mjs +96 -0
  42. package/dist/jsx/seam/DomNavigationHost.mjs.map +1 -0
  43. package/dist/jsx/seam/DomNavigationHost.native.js +186 -0
  44. package/dist/jsx/seam/DomNavigationHost.native.js.map +1 -0
  45. package/dist/jsx/seam/index.mjs +5 -0
  46. package/dist/jsx/seam/index.mjs.map +1 -0
  47. package/dist/jsx/seam/index.native.js +50 -0
  48. package/dist/jsx/seam/index.native.js.map +1 -0
  49. package/dist/jsx/seam/navigator.mjs +279 -0
  50. package/dist/jsx/seam/navigator.mjs.map +1 -0
  51. package/dist/jsx/seam/navigator.native.js +479 -0
  52. package/dist/jsx/seam/navigator.native.js.map +1 -0
  53. package/dist/jsx/seam/oneAdapter.mjs +90 -0
  54. package/dist/jsx/seam/oneAdapter.mjs.map +1 -0
  55. package/dist/jsx/seam/oneAdapter.native.js +141 -0
  56. package/dist/jsx/seam/oneAdapter.native.js.map +1 -0
  57. package/package.json +26 -9
  58. package/src/hooks/urlStateEdges.spec.ts +98 -0
  59. package/src/hooks/useUrlState.ts +34 -8
  60. package/src/seam/DomNavigationHost.spec.tsx +78 -0
  61. package/src/seam/DomNavigationHost.tsx +150 -0
  62. package/src/seam/index.ts +41 -0
  63. package/src/seam/navigator.spec.ts +189 -0
  64. package/src/seam/navigator.ts +405 -0
  65. package/src/seam/oneAdapter.tsx +166 -0
  66. package/types/hooks/index.d.ts +2 -0
  67. package/types/hooks/index.d.ts.map +1 -0
  68. package/types/hooks/useUrlState.d.ts +36 -0
  69. package/types/hooks/useUrlState.d.ts.map +1 -0
  70. package/types/index.d.ts +4 -0
  71. package/types/index.d.ts.map +1 -0
  72. package/types/index.storybook.d.ts +4 -0
  73. package/types/index.storybook.d.ts.map +1 -0
  74. package/types/router/EmptyRouter.d.ts +7 -0
  75. package/types/router/EmptyRouter.d.ts.map +1 -0
  76. package/types/router/ReactRouter.d.ts +6 -0
  77. package/types/router/ReactRouter.d.ts.map +1 -0
  78. package/types/router/index.d.ts +2 -0
  79. package/types/router/index.d.ts.map +1 -0
  80. package/types/router/index.storybook-expo.d.ts +2 -0
  81. package/types/router/index.storybook-expo.d.ts.map +1 -0
  82. package/types/router/index.storybook.d.ts +2 -0
  83. package/types/router/index.storybook.d.ts.map +1 -0
  84. package/types/router/index.webext.d.ts +2 -0
  85. package/types/router/index.webext.d.ts.map +1 -0
  86. package/types/seam/DomNavigationHost.d.ts +33 -0
  87. package/types/seam/DomNavigationHost.d.ts.map +1 -0
  88. package/types/seam/index.d.ts +7 -0
  89. package/types/seam/index.d.ts.map +1 -0
  90. package/types/seam/navigator.d.ts +133 -0
  91. package/types/seam/navigator.d.ts.map +1 -0
  92. package/types/seam/oneAdapter.d.ts +57 -0
  93. package/types/seam/oneAdapter.d.ts.map +1 -0
  94. package/types/types.d.ts +40 -0
  95. package/types/types.d.ts.map +1 -0
  96. package/dist/cjs/hooks/useUrlState.spec.cjs +0 -280
  97. package/dist/cjs/hooks/useUrlState.spec.native.js +0 -315
  98. package/dist/cjs/hooks/useUrlState.spec.native.js.map +0 -1
  99. package/dist/esm/hooks/useUrlState.spec.mjs +0 -257
  100. package/dist/esm/hooks/useUrlState.spec.mjs.map +0 -1
  101. package/dist/esm/hooks/useUrlState.spec.native.js +0 -289
  102. package/dist/esm/hooks/useUrlState.spec.native.js.map +0 -1
  103. package/dist/jsx/hooks/useUrlState.spec.mjs +0 -257
  104. package/dist/jsx/hooks/useUrlState.spec.mjs.map +0 -1
  105. package/dist/jsx/hooks/useUrlState.spec.native.js +0 -315
  106. package/dist/jsx/hooks/useUrlState.spec.native.js.map +0 -1
@@ -0,0 +1,279 @@
1
+ import { createContext, useContext, useSyncExternalStore } from "react";
2
+ function compileRoute(def) {
3
+ const segments = def.pattern.split("/").filter(Boolean).map(seg => {
4
+ const m = seg.match(/^\[(\.{3})?(.+)\]$/);
5
+ return m ? {
6
+ param: m[2]
7
+ } : {
8
+ literal: seg
9
+ };
10
+ });
11
+ return {
12
+ ...def,
13
+ segments
14
+ };
15
+ }
16
+ function parseQuery(query) {
17
+ const params = {};
18
+ if (!query) return params;
19
+ for (const pair of query.split("&")) {
20
+ if (!pair) continue;
21
+ const eq = pair.indexOf("=");
22
+ const key = decodeURIComponent(eq === -1 ? pair : pair.slice(0, eq));
23
+ const value = eq === -1 ? "" : decodeURIComponent(pair.slice(eq + 1));
24
+ const prev = params[key];
25
+ if (prev === void 0) params[key] = value;else if (Array.isArray(prev)) prev.push(value);else params[key] = [prev, value];
26
+ }
27
+ return params;
28
+ }
29
+ function hrefToString(href) {
30
+ if (typeof href === "string") return href;
31
+ let path = href.pathname;
32
+ const leftover = [];
33
+ for (const [key, raw] of Object.entries(href.params ?? {})) {
34
+ const value = String(raw);
35
+ const token = `[${key}]`;
36
+ if (path.includes(token)) path = path.replace(token, encodeURIComponent(value));else leftover.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
37
+ }
38
+ return leftover.length ? `${path}?${leftover.join("&")}` : path;
39
+ }
40
+ const EMPTY_PARAMS = Object.freeze({});
41
+ class StackNavigator {
42
+ routes = [];
43
+ host = null;
44
+ listeners = /* @__PURE__ */new Set();
45
+ /** Stack mirror rebuilt from the host on every pushed/popped/replaced
46
+ * signal. */
47
+ stackTags = [];
48
+ paramsByTag = /* @__PURE__ */new Map();
49
+ pathnameByTag = /* @__PURE__ */new Map();
50
+ /** Tags whose page content has been navigated to at least once. The host
51
+ * gates each page's React content on this (lazy mounting) — a tag enters
52
+ * the set right before its first host push and never leaves (backgrounded
53
+ * pages stay alive, same as One keeping stack screens mounted). */
54
+ visitedTags = /* @__PURE__ */new Set();
55
+ /** Route-loader results, per tag (the loader bridge's store). */
56
+ loaderDataByTag = /* @__PURE__ */new Map();
57
+ /** Monotonic navigation sequence — a loader that resolves after a NEWER
58
+ * navigation started must not perform its (stale) host action. */
59
+ navSeq = 0;
60
+ generation = 0;
61
+ snapshot = {
62
+ pathname: "/",
63
+ tag: "",
64
+ depth: 0,
65
+ canGoBack: false,
66
+ generation: 0
67
+ };
68
+ get isConfigured() {
69
+ return this.routes.length > 0;
70
+ }
71
+ /** Register the route manifest. The FIRST route is the root page. */
72
+ configure(defs) {
73
+ this.routes = defs.map(compileRoute);
74
+ this.visitedTags = /* @__PURE__ */new Set();
75
+ this.loaderDataByTag = /* @__PURE__ */new Map();
76
+ const root = defs[0];
77
+ if (root) {
78
+ this.stackTags = [root.tag];
79
+ this.visitedTags.add(root.tag);
80
+ this.pathnameByTag.set(root.tag, root.pattern);
81
+ this.rebuildSnapshot();
82
+ }
83
+ }
84
+ /** Has this route's page been navigated to (⇒ its content may mount)? */
85
+ isVisited(tag) {
86
+ return tag !== null && this.visitedTags.has(tag);
87
+ }
88
+ /** The route's last loader result (stable identity until the loader runs
89
+ * again). undefined when the route has no loader / hasn't resolved. */
90
+ loaderSnapshot(tag) {
91
+ if (!tag) return void 0;
92
+ return this.loaderDataByTag.get(tag);
93
+ }
94
+ /** Resolve a route's loader WITHOUT navigating. For the initial page:
95
+ * entries can `await stackNavigator.preload("/")` during top-level await
96
+ * (where GJS reliably drains promise jobs) so even the root page's first
97
+ * paint has loader data. */
98
+ async preload(href) {
99
+ const hit = this.match(href);
100
+ if (!hit?.route.loader) return;
101
+ try {
102
+ const data = await hit.route.loader({
103
+ path: hit.pathname,
104
+ params: hit.params
105
+ });
106
+ this.loaderDataByTag.set(hit.route.tag, data);
107
+ this.rebuildSnapshot();
108
+ } catch (err) {
109
+ console.error(`[stack nav] preload loader for ${hit.route.tag} failed: ${String(err)}`);
110
+ }
111
+ }
112
+ /** Bind the live host stack (an Adw.NavigationView widget on GTK, a
113
+ * DomStackAdapter on DOM targets). */
114
+ attach(host) {
115
+ this.host = host;
116
+ this.syncFromHost();
117
+ }
118
+ detach() {
119
+ this.host = null;
120
+ }
121
+ subscribe = fn => {
122
+ this.listeners.add(fn);
123
+ return () => this.listeners.delete(fn);
124
+ };
125
+ getSnapshot = () => this.snapshot;
126
+ paramsSnapshot(tag) {
127
+ if (!tag) return EMPTY_PARAMS;
128
+ return this.paramsByTag.get(tag) ?? EMPTY_PARAMS;
129
+ }
130
+ match(href) {
131
+ const str = hrefToString(href);
132
+ const [path = "", query] = str.split("?");
133
+ const parts = path.split("/").filter(Boolean);
134
+ for (const route of this.routes) {
135
+ if (route.segments.length !== parts.length) continue;
136
+ const params = parseQuery(query);
137
+ let ok = true;
138
+ for (let i = 0; i < parts.length; i++) {
139
+ const seg = route.segments[i];
140
+ const part = decodeURIComponent(parts[i]);
141
+ if (seg.literal !== void 0) {
142
+ if (seg.literal !== part) {
143
+ ok = false;
144
+ break;
145
+ }
146
+ } else if (seg.param !== void 0) {
147
+ params[seg.param] = part;
148
+ }
149
+ }
150
+ if (ok) return {
151
+ route,
152
+ pathname: path === "" ? "/" : `/${parts.join("/")}`,
153
+ params
154
+ };
155
+ }
156
+ return null;
157
+ }
158
+ push = href => {
159
+ void this.navigate(href, "push");
160
+ };
161
+ replace = href => {
162
+ void this.navigate(href, "replace");
163
+ };
164
+ /** Shared push/replace flow, incl. the loader bridge. When the target
165
+ * route has no loader the whole body runs SYNCHRONOUSLY (an async
166
+ * function only yields at its first await), preserving the original
167
+ * timing. With a loader, the host action waits for the loader to resolve
168
+ * — same contract as One on web, where client navigation completes only
169
+ * after the route's loader data arrived — so the page's first paint has
170
+ * its data (and the lazily-mounted content mounts with it). */
171
+ async navigate(href, mode) {
172
+ const hit = this.match(href);
173
+ if (!hit) {
174
+ console.log(`[stack nav] ${mode} ${hrefToString(href)} \u2014 no page in the route manifest, ignored`);
175
+ return;
176
+ }
177
+ if (!this.host) {
178
+ console.log(`[stack nav] ${mode} ${hrefToString(href)} \u2014 no stack host attached, ignored`);
179
+ return;
180
+ }
181
+ const {
182
+ route,
183
+ pathname,
184
+ params
185
+ } = hit;
186
+ const seq = ++this.navSeq;
187
+ if (route.loader) {
188
+ try {
189
+ const data = await route.loader({
190
+ path: pathname,
191
+ params
192
+ });
193
+ if (seq !== this.navSeq) return;
194
+ this.loaderDataByTag.set(route.tag, data);
195
+ } catch (err) {
196
+ if (seq !== this.navSeq) return;
197
+ console.error(`[stack nav] loader for ${route.tag} failed: ${String(err)}`);
198
+ }
199
+ }
200
+ this.visitedTags.add(route.tag);
201
+ this.setRouteState(route.tag, pathname, params);
202
+ if (mode === "replace") {
203
+ const top = this.stackTags[this.stackTags.length - 1];
204
+ if (top === route.tag) return;
205
+ const tags = [...this.stackTags.slice(0, -1), route.tag];
206
+ this.host.replace_with_tags(tags);
207
+ return;
208
+ }
209
+ const idx = this.stackTags.indexOf(route.tag);
210
+ if (idx === -1) {
211
+ this.host.push_by_tag(route.tag);
212
+ } else if (idx < this.stackTags.length - 1) {
213
+ this.host.pop_to_tag(route.tag);
214
+ }
215
+ }
216
+ back = () => {
217
+ if (!this.host) {
218
+ console.log("[stack nav] back \u2014 no stack host attached, ignored");
219
+ return;
220
+ }
221
+ this.navSeq++;
222
+ this.host.pop();
223
+ };
224
+ setParams = params => {
225
+ const top = this.stackTags[this.stackTags.length - 1];
226
+ if (!top) return;
227
+ const prev = this.paramsByTag.get(top) ?? {};
228
+ this.paramsByTag.set(top, {
229
+ ...prev,
230
+ ...params
231
+ });
232
+ this.rebuildSnapshot();
233
+ };
234
+ /** Re-read the host navigation stack (called from pushed/popped/replaced
235
+ * signal handlers and attach). The host is the source of truth. */
236
+ syncFromHost = () => {
237
+ if (!this.host) return;
238
+ this.navSeq++;
239
+ const model = this.host.get_navigation_stack();
240
+ const tags = [];
241
+ const count = model.get_n_items();
242
+ for (let i = 0; i < count; i++) {
243
+ const tag = model.get_item(i)?.get_tag();
244
+ if (tag) tags.push(tag);
245
+ }
246
+ if (tags.length > 0) this.stackTags = tags;
247
+ for (const tag of this.stackTags) this.visitedTags.add(tag);
248
+ this.rebuildSnapshot();
249
+ };
250
+ setRouteState(tag, pathname, params) {
251
+ this.paramsByTag.set(tag, params);
252
+ this.pathnameByTag.set(tag, pathname);
253
+ this.rebuildSnapshot();
254
+ }
255
+ rebuildSnapshot() {
256
+ const tag = this.stackTags[this.stackTags.length - 1] ?? "";
257
+ const route = this.routes.find(r => r.tag === tag);
258
+ this.generation++;
259
+ this.snapshot = {
260
+ pathname: this.pathnameByTag.get(tag) ?? route?.pattern ?? "/",
261
+ tag,
262
+ depth: this.stackTags.length,
263
+ canGoBack: this.stackTags.length > 1,
264
+ generation: this.generation
265
+ };
266
+ for (const fn of this.listeners) fn();
267
+ }
268
+ }
269
+ const stackNavigator = new StackNavigator();
270
+ const RouteTagContext = createContext(null);
271
+ function useNavState() {
272
+ return useSyncExternalStore(stackNavigator.subscribe, stackNavigator.getSnapshot);
273
+ }
274
+ function useRouteParams() {
275
+ const tag = useContext(RouteTagContext);
276
+ return useSyncExternalStore(stackNavigator.subscribe, () => stackNavigator.paramsSnapshot(tag));
277
+ }
278
+ export { RouteTagContext, StackNavigator, hrefToString, stackNavigator, useNavState, useRouteParams };
279
+ //# sourceMappingURL=navigator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","useContext","useSyncExternalStore","compileRoute","def","segments","pattern","split","filter","Boolean","map","seg","m","match","param","literal","parseQuery","query","params","pair","eq","indexOf","key","decodeURIComponent","slice","value","prev","Array","isArray","push","hrefToString","href","path","pathname","leftover","raw","Object","entries","String","token","includes","replace","encodeURIComponent","length","join","EMPTY_PARAMS","freeze","StackNavigator","routes","host","listeners","Set","stackTags","paramsByTag","Map","pathnameByTag","visitedTags","loaderDataByTag","navSeq","generation","snapshot","tag","depth","canGoBack","isConfigured","configure","defs","root","add","set","rebuildSnapshot","isVisited","has","loaderSnapshot","get","preload","hit","route","loader","data","err","console","error","attach","syncFromHost","detach","subscribe","fn","delete","getSnapshot","paramsSnapshot","str","parts","ok","i","part","navigate","mode","log","seq","setRouteState","top","tags","replace_with_tags","idx","push_by_tag","pop_to_tag","back","pop","setParams","model","get_navigation_stack","count","get_n_items","get_item","get_tag","find","r","stackNavigator","RouteTagContext","useNavState","useRouteParams"],"sources":["../../../src/seam/navigator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}