@buzola/router 0.0.3 → 0.0.4

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 (95) hide show
  1. package/dist/define/create-page.d.ts +17 -5
  2. package/dist/define/create-page.d.ts.map +1 -1
  3. package/dist/define/create-page.js +78 -38
  4. package/dist/define/create-page.js.map +1 -1
  5. package/dist/engine/loader-cache.d.ts +18 -0
  6. package/dist/engine/loader-cache.d.ts.map +1 -0
  7. package/dist/engine/loader-cache.js +48 -0
  8. package/dist/engine/loader-cache.js.map +1 -0
  9. package/dist/engine/matcher.d.ts +1 -1
  10. package/dist/engine/matcher.d.ts.map +1 -1
  11. package/dist/engine/navigation-adapter.d.ts +1 -1
  12. package/dist/engine/navigation-adapter.d.ts.map +1 -1
  13. package/dist/engine/route-tree.d.ts +1 -2
  14. package/dist/engine/route-tree.d.ts.map +1 -1
  15. package/dist/engine/route-tree.js +5 -4
  16. package/dist/engine/route-tree.js.map +1 -1
  17. package/dist/engine/router.d.ts +7 -10
  18. package/dist/engine/router.d.ts.map +1 -1
  19. package/dist/engine/router.js +23 -67
  20. package/dist/engine/router.js.map +1 -1
  21. package/dist/engine/schema.d.ts +5 -1
  22. package/dist/engine/schema.d.ts.map +1 -1
  23. package/dist/engine/schema.js +11 -1
  24. package/dist/engine/schema.js.map +1 -1
  25. package/dist/engine/types.d.ts +2 -15
  26. package/dist/engine/types.d.ts.map +1 -1
  27. package/dist/engine/utils.d.ts +8 -0
  28. package/dist/engine/utils.d.ts.map +1 -1
  29. package/dist/engine/utils.js +10 -3
  30. package/dist/engine/utils.js.map +1 -1
  31. package/dist/index.d.ts +14 -13
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +8 -7
  34. package/dist/index.js.map +1 -1
  35. package/dist/react/context.d.ts +2 -2
  36. package/dist/react/context.d.ts.map +1 -1
  37. package/dist/react/hooks.d.ts +3 -3
  38. package/dist/react/hooks.d.ts.map +1 -1
  39. package/dist/react/hooks.js +11 -9
  40. package/dist/react/hooks.js.map +1 -1
  41. package/dist/react/index.d.ts +11 -11
  42. package/dist/react/index.d.ts.map +1 -1
  43. package/dist/react/index.js +6 -6
  44. package/dist/react/index.js.map +1 -1
  45. package/dist/react/link.d.ts +5 -0
  46. package/dist/react/link.d.ts.map +1 -1
  47. package/dist/react/link.js +10 -1
  48. package/dist/react/link.js.map +1 -1
  49. package/dist/react/outlet.d.ts +3 -1
  50. package/dist/react/outlet.d.ts.map +1 -1
  51. package/dist/react/outlet.js +25 -1
  52. package/dist/react/outlet.js.map +1 -1
  53. package/dist/react/provider.d.ts +15 -2
  54. package/dist/react/provider.d.ts.map +1 -1
  55. package/dist/react/provider.js +15 -4
  56. package/dist/react/provider.js.map +1 -1
  57. package/package.json +6 -3
  58. package/src/__tests__/create-page.test.ts +42 -6
  59. package/src/__tests__/loader-cache.test.ts +115 -0
  60. package/src/__tests__/matcher.test.ts +3 -3
  61. package/src/__tests__/react.test.tsx +1020 -0
  62. package/src/__tests__/router.test.ts +4 -214
  63. package/src/__tests__/setup-dom.ts +21 -0
  64. package/src/define/create-page.tsx +94 -46
  65. package/src/engine/loader-cache.ts +55 -0
  66. package/src/engine/matcher.ts +1 -1
  67. package/src/engine/navigation-adapter.ts +1 -1
  68. package/src/engine/route-tree.ts +4 -6
  69. package/src/engine/router.ts +27 -73
  70. package/src/engine/schema.ts +13 -2
  71. package/src/engine/types.ts +2 -18
  72. package/src/engine/utils.ts +11 -3
  73. package/src/index.ts +15 -17
  74. package/src/react/context.ts +2 -2
  75. package/src/react/hooks.ts +14 -13
  76. package/src/react/index.ts +21 -11
  77. package/src/react/link.tsx +16 -0
  78. package/src/react/outlet.tsx +32 -1
  79. package/src/react/provider.tsx +33 -5
  80. package/dist/__tests__/create-page.test.d.ts +0 -2
  81. package/dist/__tests__/create-page.test.d.ts.map +0 -1
  82. package/dist/__tests__/create-page.test.js +0 -457
  83. package/dist/__tests__/create-page.test.js.map +0 -1
  84. package/dist/__tests__/matcher.test.d.ts +0 -2
  85. package/dist/__tests__/matcher.test.d.ts.map +0 -1
  86. package/dist/__tests__/matcher.test.js +0 -108
  87. package/dist/__tests__/matcher.test.js.map +0 -1
  88. package/dist/__tests__/router.test.d.ts +0 -2
  89. package/dist/__tests__/router.test.d.ts.map +0 -1
  90. package/dist/__tests__/router.test.js +0 -327
  91. package/dist/__tests__/router.test.js.map +0 -1
  92. package/dist/__tests__/type-safety.test.d.ts +0 -15
  93. package/dist/__tests__/type-safety.test.d.ts.map +0 -1
  94. package/dist/__tests__/type-safety.test.js +0 -163
  95. package/dist/__tests__/type-safety.test.js.map +0 -1
@@ -1,457 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import { createElement } from 'react';
3
- import { createPage } from '../define/create-page';
4
- import { createMemoryNavigationAdapter } from '../engine/navigation-adapter';
5
- import { buildRouteTree } from '../engine/route-tree';
6
- import { Router } from '../engine/router';
7
- import { s } from '../engine/schema';
8
- // ─── Helpers ─────────────────────────────────────────────────────────────────
9
- function dummyComponent() {
10
- return null;
11
- }
12
- function createRouter(configs, initialURL = 'http://localhost/', options) {
13
- const routes = buildRouteTree(configs);
14
- const adapter = createMemoryNavigationAdapter({ initialURL });
15
- const router = new Router({ routes, adapter, ...options });
16
- router.start();
17
- return { router, adapter };
18
- }
19
- /** Minimal Standard Schema implementation for testing. */
20
- function createSchema(validate) {
21
- return {
22
- '~standard': {
23
- version: 1,
24
- vendor: 'test',
25
- validate,
26
- },
27
- };
28
- }
29
- // ─── Tests ───────────────────────────────────────────────────────────────────
30
- describe('createPage', () => {
31
- it('returns a PageDefinition with __buzolaPage marker', () => {
32
- const page = createPage().render(({ params }) => null);
33
- expect(page.__buzolaPage).toBe(true);
34
- expect(typeof page.component).toBe('function');
35
- });
36
- it('returns a PageDefinition with paramsSchema when schema provided', () => {
37
- const schema = createSchema((v) => ({ value: v }));
38
- const page = createPage()
39
- .params(schema)
40
- .render(({ params }) => null);
41
- expect(page.__buzolaPage).toBe(true);
42
- expect(page.paramsSchema).toBe(schema);
43
- });
44
- it('paramsSchema is undefined when no schema provided', () => {
45
- const page = createPage().render(({ params }) => null);
46
- expect(page.paramsSchema).toBeUndefined();
47
- });
48
- it('stores route pattern when .route() is called', () => {
49
- const page = createPage()
50
- .route('/about')
51
- .render(({ params }) => null);
52
- expect(page.route).toBe('/about');
53
- });
54
- it('stores route pattern with params when schema matches', () => {
55
- const schema = createSchema((v) => ({ value: v }));
56
- const page = createPage()
57
- .params(schema)
58
- .route('/users/:id')
59
- .render(({ params }) => null);
60
- expect(page.route).toBe('/users/:id');
61
- });
62
- it('route is undefined when .route() is not called', () => {
63
- const page = createPage().render(({ params }) => null);
64
- expect(page.route).toBeUndefined();
65
- });
66
- it('supports full chain: .params().route().render()', () => {
67
- const schema = createSchema((v) => ({ value: v }));
68
- const page = createPage()
69
- .params(schema)
70
- .route('/project/:id')
71
- .render(({ params }) => null);
72
- expect(page.__buzolaPage).toBe(true);
73
- expect(page.paramsSchema).toBe(schema);
74
- expect(page.route).toBe('/project/:id');
75
- expect(typeof page.component).toBe('function');
76
- });
77
- it('populates paramsMeta from shape object', () => {
78
- const page = createPage()
79
- .params({ userId: s.string(), tab: s.optional(s.string()) })
80
- .route('/users/:userId')
81
- .render(({ params }) => null);
82
- expect(page.paramsMeta).toEqual([
83
- { name: 'userId', optional: false, array: false },
84
- { name: 'tab', optional: true, array: false },
85
- ]);
86
- });
87
- it('populates paramsMeta from s.object schema', () => {
88
- const page = createPage()
89
- .params(s.object({ userId: s.string(), tab: s.optional(s.string()) }))
90
- .route('/users/:userId')
91
- .render(({ params }) => null);
92
- expect(page.paramsMeta).toEqual([
93
- { name: 'userId', optional: false, array: false },
94
- { name: 'tab', optional: true, array: false },
95
- ]);
96
- });
97
- it('populates paramsMeta from string literals', () => {
98
- const page = createPage()
99
- .params({ id: 'uuid', order: 'number', text: '?string', tags: '?string[]' })
100
- .render(({ params }) => null);
101
- expect(page.paramsMeta).toEqual([
102
- { name: 'id', optional: false, array: false },
103
- { name: 'order', optional: false, array: false },
104
- { name: 'text', optional: true, array: false },
105
- { name: 'tags', optional: true, array: true },
106
- ]);
107
- });
108
- it('validates and coerces literal number params', () => {
109
- const page = createPage()
110
- .params({ order: 'number' })
111
- .render(({ params }) => null);
112
- const schema = page.paramsSchema;
113
- expect(schema['~standard'].validate({ order: '42' })).toEqual({ value: { order: 42 } });
114
- expect(schema['~standard'].validate({ order: 'abc' })).toHaveProperty('issues');
115
- });
116
- it('validates literal uuid params', () => {
117
- const page = createPage()
118
- .params({ id: 'uuid' })
119
- .render(({ params }) => null);
120
- const schema = page.paramsSchema;
121
- expect(schema['~standard'].validate({ id: '550e8400-e29b-41d4-a716-446655440000' }))
122
- .toEqual({ value: { id: '550e8400-e29b-41d4-a716-446655440000' } });
123
- expect(schema['~standard'].validate({ id: 'not-a-uuid' })).toHaveProperty('issues');
124
- });
125
- it('validates literal array params', () => {
126
- const page = createPage()
127
- .params({ tags: 'string[]' })
128
- .render(({ params }) => null);
129
- const schema = page.paramsSchema;
130
- expect(schema['~standard'].validate({ tags: ['a', 'b'] })).toEqual({ value: { tags: ['a', 'b'] } });
131
- expect(schema['~standard'].validate({ tags: 'not-array' })).toHaveProperty('issues');
132
- });
133
- it('coerces literal number[] params', () => {
134
- const page = createPage()
135
- .params({ ids: 'number[]' })
136
- .render(({ params }) => null);
137
- const schema = page.paramsSchema;
138
- expect(schema['~standard'].validate({ ids: ['1', '2', '3'] })).toEqual({ value: { ids: [1, 2, 3] } });
139
- });
140
- it('validates optional array as undefined when empty', () => {
141
- const page = createPage()
142
- .params({ tags: '?string[]' })
143
- .render(({ params }) => null);
144
- const schema = page.paramsSchema;
145
- expect(schema['~standard'].validate({ tags: undefined })).toEqual({ value: { tags: undefined } });
146
- expect(schema['~standard'].validate({ tags: [] })).toEqual({ value: { tags: undefined } });
147
- expect(schema['~standard'].validate({ tags: ['a'] })).toEqual({ value: { tags: ['a'] } });
148
- });
149
- it('paramsMeta is empty when no schema provided', () => {
150
- const page = createPage().render(({ params }) => null);
151
- expect(page.paramsMeta).toEqual([]);
152
- });
153
- it('component is usable as RouteConfig component', () => {
154
- const page = createPage().render(({ params }) => null);
155
- const config = {
156
- path: '/test',
157
- component: page.component,
158
- };
159
- expect(config.component).toBe(page.component);
160
- });
161
- it('stores loader function in PageDefinition', () => {
162
- const loader = async ({ params }) => ({ name: 'Alice' });
163
- const page = createPage()
164
- .params({ id: 'string' })
165
- .loader(loader)
166
- .render(({ params, data }) => null);
167
- expect(page.loader).toBe(loader);
168
- });
169
- it('loader is undefined when not provided', () => {
170
- const page = createPage().render(({ params }) => null);
171
- expect(page.loader).toBeUndefined();
172
- });
173
- it('supports .params().loader().route().render() chain', () => {
174
- const page = createPage()
175
- .params({ id: 'uuid' })
176
- .loader(async ({ params }) => ({ name: `User ${params.id}` }))
177
- .route('/users/:id')
178
- .render(({ params, data }) => null);
179
- expect(page.__buzolaPage).toBe(true);
180
- expect(page.route).toBe('/users/:id');
181
- expect(page.loader).toBeDefined();
182
- expect(typeof page.component).toBe('function');
183
- });
184
- it('supports .loader() without params', () => {
185
- const page = createPage()
186
- .loader(async () => ({ stats: 42 }))
187
- .route('/dashboard')
188
- .render(({ data }) => null);
189
- expect(page.loader).toBeDefined();
190
- expect(page.route).toBe('/dashboard');
191
- });
192
- it('supports .params().loader().render() without route', () => {
193
- const page = createPage()
194
- .params({ id: 'string' })
195
- .loader(async ({ params }) => ({ name: 'test' }))
196
- .render(({ params, data }) => null);
197
- expect(page.loader).toBeDefined();
198
- expect(page.route).toBeUndefined();
199
- });
200
- it('supports multiple loaders that merge results', () => {
201
- const page = createPage()
202
- .params({ id: 'string' })
203
- .loader(async ({ params }) => ({ user: { name: 'Alice' } }))
204
- .loader(async ({ params }) => ({ posts: [1, 2, 3] }))
205
- .route('/users/:id')
206
- .render(({ params, data }) => {
207
- // Type-safe access to both loader results
208
- const _user = data.user;
209
- const _posts = data.posts;
210
- return null;
211
- });
212
- expect(page.loader).toBeDefined();
213
- });
214
- it('multiple loaders run in parallel and merge', async () => {
215
- const order = [];
216
- const page = createPage()
217
- .params({ id: 'string' })
218
- .loader(async () => {
219
- order.push('loader1-start');
220
- await new Promise(r => setTimeout(r, 10));
221
- order.push('loader1-end');
222
- return { a: 1 };
223
- })
224
- .loader(async () => {
225
- order.push('loader2-start');
226
- await new Promise(r => setTimeout(r, 10));
227
- order.push('loader2-end');
228
- return { b: 2 };
229
- })
230
- .render(({ data }) => null);
231
- const result = await page.loader({ params: { id: '1' } });
232
- expect(result).toEqual({ a: 1, b: 2 });
233
- // Both loaders started before either finished (parallel)
234
- expect(order[0]).toBe('loader1-start');
235
- expect(order[1]).toBe('loader2-start');
236
- });
237
- it('single loader is stored directly (not wrapped)', () => {
238
- const loader = async () => ({ x: 1 });
239
- const page = createPage()
240
- .loader(loader)
241
- .render(({ data }) => null);
242
- expect(page.loader).toBe(loader);
243
- });
244
- it('.catch() with static ReactNode returns valid PageDefinition', () => {
245
- const page = createPage()
246
- .catch(createElement('div', null, 'Error occurred'))
247
- .render(({ params }) => null);
248
- expect(page.__buzolaPage).toBe(true);
249
- expect(typeof page.component).toBe('function');
250
- });
251
- it('.params().loader().catch().render() full chain', () => {
252
- const page = createPage()
253
- .params({ id: 'string' })
254
- .loader(async ({ params }) => ({ name: `User ${params.id}` }))
255
- .catch(({ error, retry }) => createElement('div', null, 'Failed'))
256
- .render(({ params, data }) => null);
257
- expect(page.__buzolaPage).toBe(true);
258
- expect(page.loader).toBeDefined();
259
- expect(typeof page.component).toBe('function');
260
- });
261
- it('.catch().route().render() chain', () => {
262
- const page = createPage()
263
- .catch(({ error }) => createElement('div', null, error.message))
264
- .route('/about')
265
- .render(({ params }) => null);
266
- expect(page.__buzolaPage).toBe(true);
267
- expect(page.route).toBe('/about');
268
- });
269
- it('.route().catch().render() chain', () => {
270
- const page = createPage()
271
- .route('/about')
272
- .catch(({ error }) => createElement('div', null, error.message))
273
- .render(({ params }) => null);
274
- expect(page.__buzolaPage).toBe(true);
275
- expect(page.route).toBe('/about');
276
- });
277
- it('invalidate is available in render props with loader', () => {
278
- const page = createPage()
279
- .loader(async () => ({ value: 1 }))
280
- .render(({ data, invalidate }) => {
281
- // invalidate should be a function
282
- const _fn = invalidate;
283
- return null;
284
- });
285
- expect(page.loader).toBeDefined();
286
- });
287
- });
288
- describe('Router invalidation', () => {
289
- it('invalidateAll calls all registered listeners', () => {
290
- const { router } = createRouter([
291
- { path: '/', component: dummyComponent, isIndex: true },
292
- ]);
293
- const calls = [];
294
- router.onInvalidate(() => calls.push(1));
295
- router.onInvalidate(() => calls.push(2));
296
- router.invalidateAll();
297
- expect(calls).toEqual([1, 2]);
298
- });
299
- it('onInvalidate returns unsubscribe function', () => {
300
- const { router } = createRouter([
301
- { path: '/', component: dummyComponent, isIndex: true },
302
- ]);
303
- const calls = [];
304
- const unsub = router.onInvalidate(() => calls.push(1));
305
- router.invalidateAll();
306
- expect(calls).toEqual([1]);
307
- unsub();
308
- router.invalidateAll();
309
- expect(calls).toEqual([1]);
310
- });
311
- it('dispose clears invalidation listeners', () => {
312
- const { router } = createRouter([
313
- { path: '/', component: dummyComponent, isIndex: true },
314
- ]);
315
- const calls = [];
316
- router.onInvalidate(() => calls.push(1));
317
- router.dispose();
318
- router.invalidateAll();
319
- expect(calls).toEqual([]);
320
- });
321
- });
322
- describe('Router page registry', () => {
323
- it('navigateToPage navigates using page registry', () => {
324
- const { router } = createRouter([
325
- { path: '/', component: dummyComponent, isIndex: true },
326
- { path: '/users/:userId', component: dummyComponent },
327
- ], 'http://localhost/', {
328
- pageRegistry: {
329
- 'home': '/',
330
- 'users/detail': '/users/:userId',
331
- },
332
- });
333
- router.navigateToPage('users/detail', { userId: '42' });
334
- const state = router.getState();
335
- expect(state.location.pathname).toBe('/users/42');
336
- });
337
- it('buildPagePath builds path from page registry', () => {
338
- const { router } = createRouter([], 'http://localhost/', {
339
- pageRegistry: {
340
- 'users/detail': '/users/:userId',
341
- },
342
- });
343
- const path = router.buildPagePath('users/detail', { userId: '42' });
344
- expect(path).toBe('/users/42');
345
- });
346
- it('buildPagePath appends extra params as query string', () => {
347
- const { router } = createRouter([], 'http://localhost/', {
348
- pageRegistry: {
349
- 'users/detail': '/users/:userId',
350
- },
351
- });
352
- const path = router.buildPagePath('users/detail', { userId: '42', tab: 'posts' });
353
- expect(path).toBe('/users/42?tab=posts');
354
- });
355
- it('buildPagePath throws for unknown page ID', () => {
356
- const { router } = createRouter([], 'http://localhost/', { pageRegistry: {} });
357
- expect(() => router.buildPagePath('nonexistent')).toThrow('Unknown page "nonexistent"');
358
- });
359
- it('navigateToPage with extra params as query string', () => {
360
- const { router } = createRouter([
361
- { path: '/', component: dummyComponent, isIndex: true },
362
- { path: '/users/:userId', component: dummyComponent },
363
- ], 'http://localhost/', {
364
- pageRegistry: {
365
- 'users/detail': '/users/:userId',
366
- },
367
- });
368
- router.navigateToPage('users/detail', { userId: '1', tab: 'posts' });
369
- const state = router.getState();
370
- expect(state.location.pathname).toBe('/users/1');
371
- expect(state.location.searchParams.get('tab')).toBe('posts');
372
- });
373
- it('buildPagePath for static route', () => {
374
- const { router } = createRouter([], 'http://localhost/', {
375
- pageRegistry: {
376
- 'about': '/about',
377
- },
378
- });
379
- const path = router.buildPagePath('about');
380
- expect(path).toBe('/about');
381
- });
382
- });
383
- describe('Router.buildPath with extra params', () => {
384
- it('appends extra params as query string', () => {
385
- const { router } = createRouter([]);
386
- const path = router.buildPath('/users/:userId', {
387
- userId: '42',
388
- tab: 'posts',
389
- });
390
- expect(path).toBe('/users/42?tab=posts');
391
- });
392
- it('does not append query string when all params are path params', () => {
393
- const { router } = createRouter([]);
394
- const path = router.buildPath('/users/:userId', { userId: '42' });
395
- expect(path).toBe('/users/42');
396
- });
397
- it('appends multiple extra params', () => {
398
- const { router } = createRouter([]);
399
- const path = router.buildPath('/users/:userId', {
400
- userId: '42',
401
- tab: 'posts',
402
- sort: 'date',
403
- });
404
- // URLSearchParams preserves insertion order
405
- expect(path).toBe('/users/42?tab=posts&sort=date');
406
- });
407
- it('skips undefined extra params', () => {
408
- const { router } = createRouter([]);
409
- const path = router.buildPath('/users/:userId', {
410
- userId: '42',
411
- tab: undefined,
412
- sort: 'date',
413
- });
414
- expect(path).toBe('/users/42?sort=date');
415
- });
416
- it('handles static path with extra params', () => {
417
- const { router } = createRouter([]);
418
- const path = router.buildPath('/about', { tab: 'team' });
419
- expect(path).toBe('/about?tab=team');
420
- });
421
- });
422
- describe('Router.resolveParams with extra params pass-through', () => {
423
- it('passes through extra explicit params not in pattern', () => {
424
- const { router } = createRouter([
425
- { path: '/users/:userId', component: dummyComponent },
426
- ]);
427
- const result = router.resolveParams('/users/:userId', { userId: '42', tab: 'posts' });
428
- expect(result).toEqual({ userId: '42', tab: 'posts' });
429
- });
430
- it('does not pass through when no explicit params given', () => {
431
- const { router } = createRouter([{ path: '/users/:userId', component: dummyComponent }], 'http://localhost/users/42');
432
- const result = router.resolveParams('/users/:userId');
433
- expect(result).toEqual({ userId: '42' });
434
- });
435
- it('extra params do not override path params from current match', () => {
436
- const { router } = createRouter([{ path: '/users/:userId', component: dummyComponent }], 'http://localhost/users/42');
437
- // userId comes from current match, tab is extra
438
- const result = router.resolveParams('/users/:userId', { tab: 'posts' });
439
- expect(result).toEqual({ userId: '42', tab: 'posts' });
440
- });
441
- });
442
- describe('navigate with extra params (integration)', () => {
443
- it('navigates with extra params as query string', () => {
444
- const { router } = createRouter([
445
- { path: '/', component: dummyComponent, isIndex: true },
446
- { path: '/users/:userId', component: dummyComponent },
447
- ]);
448
- // Simulate what useNavigate does via navigateToPage
449
- const resolved = router.resolveParams('/users/:userId', { userId: '1', tab: 'posts' });
450
- const path = router.buildPath('/users/:userId', resolved);
451
- router.navigate(router.stripBasePath(path));
452
- const state = router.getState();
453
- expect(state.location.pathname).toBe('/users/1');
454
- expect(state.location.searchParams.get('tab')).toBe('posts');
455
- });
456
- });
457
- //# sourceMappingURL=create-page.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-page.test.js","sourceRoot":"","sources":["../../src/__tests__/create-page.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=matcher.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matcher.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/matcher.test.ts"],"names":[],"mappings":""}
@@ -1,108 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import { matchRoutes } from '../engine/matcher';
3
- import { buildRouteTree } from '../engine/route-tree';
4
- function dummyComponent() {
5
- return null;
6
- }
7
- function createTestTree(configs) {
8
- return buildRouteTree(configs);
9
- }
10
- describe('matchRoutes', () => {
11
- it('matches a simple root route', () => {
12
- const tree = createTestTree([
13
- { path: '/', component: dummyComponent, isIndex: true },
14
- ]);
15
- const matches = matchRoutes(tree, new URL('http://localhost/'));
16
- expect(matches).not.toBeNull();
17
- expect(matches).toHaveLength(1);
18
- expect(matches[0].node.fullPath).toBe('/');
19
- });
20
- it('matches a static route', () => {
21
- const tree = createTestTree([
22
- { path: '/about', component: dummyComponent },
23
- ]);
24
- const matches = matchRoutes(tree, new URL('http://localhost/about'));
25
- expect(matches).not.toBeNull();
26
- expect(matches).toHaveLength(1);
27
- expect(matches[0].node.fullPath).toBe('/about');
28
- });
29
- it('matches a dynamic route and extracts params', () => {
30
- const tree = createTestTree([
31
- { path: '/users/:userId', component: dummyComponent },
32
- ]);
33
- const matches = matchRoutes(tree, new URL('http://localhost/users/42'));
34
- expect(matches).not.toBeNull();
35
- expect(matches).toHaveLength(1);
36
- expect(matches[0].params).toEqual({ userId: '42' });
37
- });
38
- it('matches nested routes through layouts', () => {
39
- const tree = createTestTree([
40
- {
41
- path: '/',
42
- component: dummyComponent,
43
- isLayout: true,
44
- children: [
45
- { path: '/', component: dummyComponent, isIndex: true },
46
- { path: '/about', component: dummyComponent },
47
- ],
48
- },
49
- ]);
50
- const indexMatches = matchRoutes(tree, new URL('http://localhost/'));
51
- expect(indexMatches).not.toBeNull();
52
- expect(indexMatches).toHaveLength(2); // layout + index
53
- const aboutMatches = matchRoutes(tree, new URL('http://localhost/about'));
54
- expect(aboutMatches).not.toBeNull();
55
- expect(aboutMatches).toHaveLength(2); // layout + about
56
- });
57
- it('matches deeply nested dynamic routes', () => {
58
- const tree = createTestTree([
59
- {
60
- path: '/users',
61
- component: dummyComponent,
62
- isLayout: true,
63
- children: [
64
- { path: '/', component: dummyComponent, isIndex: true },
65
- { path: '/:userId', component: dummyComponent },
66
- ],
67
- },
68
- ]);
69
- const matches = matchRoutes(tree, new URL('http://localhost/users/99'));
70
- expect(matches).not.toBeNull();
71
- expect(matches).toHaveLength(2); // users layout + :userId
72
- expect(matches[1].params).toEqual({ userId: '99' });
73
- });
74
- it('extracts params from layout routes via prefixPattern', () => {
75
- const tree = createTestTree([
76
- {
77
- path: '/users/:userId',
78
- component: dummyComponent,
79
- isLayout: true,
80
- children: [
81
- { path: '/', component: dummyComponent, isIndex: true },
82
- { path: '/settings', component: dummyComponent },
83
- ],
84
- },
85
- ]);
86
- const matches = matchRoutes(tree, new URL('http://localhost/users/42/settings'));
87
- expect(matches).not.toBeNull();
88
- expect(matches).toHaveLength(2);
89
- // Layout should extract userId param via prefixPattern
90
- expect(matches[0].params).toEqual({ userId: '42' });
91
- expect(matches[0].node.isLayout).toBe(true);
92
- });
93
- it('returns null for unmatched routes', () => {
94
- const tree = createTestTree([
95
- { path: '/about', component: dummyComponent },
96
- ]);
97
- const matches = matchRoutes(tree, new URL('http://localhost/nonexistent'));
98
- expect(matches).toBeNull();
99
- });
100
- it('does not match partial paths', () => {
101
- const tree = createTestTree([
102
- { path: '/about', component: dummyComponent },
103
- ]);
104
- const matches = matchRoutes(tree, new URL('http://localhost/about/extra'));
105
- expect(matches).toBeNull();
106
- });
107
- });
108
- //# sourceMappingURL=matcher.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matcher.test.js","sourceRoot":"","sources":["../../src/__tests__/matcher.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=router.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"router.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/router.test.ts"],"names":[],"mappings":""}