one 1.2.75 → 1.2.76

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 (143) hide show
  1. package/dist/cjs/cli/build.cjs +22 -6
  2. package/dist/cjs/cli/build.js +20 -3
  3. package/dist/cjs/cli/build.js.map +1 -1
  4. package/dist/cjs/cli/build.native.js +144 -93
  5. package/dist/cjs/cli/build.native.js.map +1 -1
  6. package/dist/cjs/cli/buildPage.cjs +43 -11
  7. package/dist/cjs/cli/buildPage.js +37 -5
  8. package/dist/cjs/cli/buildPage.js.map +1 -1
  9. package/dist/cjs/cli/buildPage.native.js +64 -14
  10. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  11. package/dist/cjs/createApp.cjs +8 -4
  12. package/dist/cjs/createApp.js +8 -4
  13. package/dist/cjs/createApp.js.map +1 -1
  14. package/dist/cjs/index.cjs +6 -0
  15. package/dist/cjs/index.js +6 -1
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/index.native.js +6 -0
  18. package/dist/cjs/index.native.js.map +1 -1
  19. package/dist/cjs/router/Route.js.map +1 -1
  20. package/dist/cjs/router/Route.native.js.map +1 -1
  21. package/dist/cjs/router/router.cjs +29 -4
  22. package/dist/cjs/router/router.js +19 -2
  23. package/dist/cjs/router/router.js.map +1 -1
  24. package/dist/cjs/router/router.native.js +8 -1
  25. package/dist/cjs/router/router.native.js.map +1 -1
  26. package/dist/cjs/server/oneServe.cjs +47 -8
  27. package/dist/cjs/server/oneServe.js +46 -9
  28. package/dist/cjs/server/oneServe.js.map +1 -1
  29. package/dist/cjs/server/oneServe.native.js +57 -10
  30. package/dist/cjs/server/oneServe.native.js.map +1 -1
  31. package/dist/cjs/useMatches.cjs +55 -0
  32. package/dist/cjs/useMatches.js +53 -0
  33. package/dist/cjs/useMatches.js.map +6 -0
  34. package/dist/cjs/useMatches.native.js +87 -0
  35. package/dist/cjs/useMatches.native.js.map +1 -0
  36. package/dist/cjs/useMatches.test.cjs +287 -0
  37. package/dist/cjs/useMatches.test.js +208 -0
  38. package/dist/cjs/useMatches.test.js.map +6 -0
  39. package/dist/cjs/useMatches.test.native.js +313 -0
  40. package/dist/cjs/useMatches.test.native.js.map +1 -0
  41. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.cjs +51 -10
  42. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js +39 -12
  43. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
  44. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +95 -52
  45. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  46. package/dist/esm/cli/build.js +20 -3
  47. package/dist/esm/cli/build.js.map +1 -1
  48. package/dist/esm/cli/build.mjs +22 -6
  49. package/dist/esm/cli/build.mjs.map +1 -1
  50. package/dist/esm/cli/build.native.js +144 -93
  51. package/dist/esm/cli/build.native.js.map +1 -1
  52. package/dist/esm/cli/buildPage.js +37 -5
  53. package/dist/esm/cli/buildPage.js.map +1 -1
  54. package/dist/esm/cli/buildPage.mjs +43 -11
  55. package/dist/esm/cli/buildPage.mjs.map +1 -1
  56. package/dist/esm/cli/buildPage.native.js +64 -14
  57. package/dist/esm/cli/buildPage.native.js.map +1 -1
  58. package/dist/esm/createApp.js +8 -3
  59. package/dist/esm/createApp.js.map +1 -1
  60. package/dist/esm/createApp.mjs +8 -4
  61. package/dist/esm/createApp.mjs.map +1 -1
  62. package/dist/esm/index.js +12 -1
  63. package/dist/esm/index.js.map +1 -1
  64. package/dist/esm/index.mjs +3 -2
  65. package/dist/esm/index.mjs.map +1 -1
  66. package/dist/esm/index.native.js +3 -2
  67. package/dist/esm/index.native.js.map +1 -1
  68. package/dist/esm/router/Route.js.map +1 -1
  69. package/dist/esm/router/Route.mjs.map +1 -1
  70. package/dist/esm/router/Route.native.js.map +1 -1
  71. package/dist/esm/router/router.js +19 -1
  72. package/dist/esm/router/router.js.map +1 -1
  73. package/dist/esm/router/router.mjs +28 -4
  74. package/dist/esm/router/router.mjs.map +1 -1
  75. package/dist/esm/router/router.native.js +7 -1
  76. package/dist/esm/router/router.native.js.map +1 -1
  77. package/dist/esm/server/oneServe.js +46 -9
  78. package/dist/esm/server/oneServe.js.map +1 -1
  79. package/dist/esm/server/oneServe.mjs +47 -8
  80. package/dist/esm/server/oneServe.mjs.map +1 -1
  81. package/dist/esm/server/oneServe.native.js +57 -10
  82. package/dist/esm/server/oneServe.native.js.map +1 -1
  83. package/dist/esm/useMatches.js +38 -0
  84. package/dist/esm/useMatches.js.map +6 -0
  85. package/dist/esm/useMatches.mjs +29 -0
  86. package/dist/esm/useMatches.mjs.map +1 -0
  87. package/dist/esm/useMatches.native.js +58 -0
  88. package/dist/esm/useMatches.native.js.map +1 -0
  89. package/dist/esm/useMatches.test.js +209 -0
  90. package/dist/esm/useMatches.test.js.map +6 -0
  91. package/dist/esm/useMatches.test.mjs +288 -0
  92. package/dist/esm/useMatches.test.mjs.map +1 -0
  93. package/dist/esm/useMatches.test.native.js +311 -0
  94. package/dist/esm/useMatches.test.native.js.map +1 -0
  95. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js +39 -12
  96. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
  97. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs +51 -10
  98. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
  99. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js +95 -52
  100. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  101. package/package.json +9 -9
  102. package/src/cli/build.ts +36 -2
  103. package/src/cli/buildPage.ts +52 -2
  104. package/src/createApp.tsx +8 -0
  105. package/src/index.ts +8 -1
  106. package/src/router/Route.tsx +2 -0
  107. package/src/router/router.ts +57 -0
  108. package/src/server/oneServe.ts +89 -9
  109. package/src/types.ts +5 -0
  110. package/src/useMatches.test.ts +317 -0
  111. package/src/useMatches.ts +125 -0
  112. package/src/vite/plugins/fileSystemRouterPlugin.tsx +75 -19
  113. package/src/vite/types.ts +20 -0
  114. package/types/cli/build.d.ts.map +1 -1
  115. package/types/cli/buildPage.d.ts.map +1 -1
  116. package/types/createApp.d.ts.map +1 -1
  117. package/types/index.d.ts +2 -1
  118. package/types/index.d.ts.map +1 -1
  119. package/types/router/Route.d.ts +2 -0
  120. package/types/router/Route.d.ts.map +1 -1
  121. package/types/router/router.d.ts +6 -0
  122. package/types/router/router.d.ts.map +1 -1
  123. package/types/server/oneServe.d.ts.map +1 -1
  124. package/types/types.d.ts +5 -0
  125. package/types/types.d.ts.map +1 -1
  126. package/types/useMatches.d.ts +75 -0
  127. package/types/useMatches.d.ts.map +1 -0
  128. package/types/useMatches.test.d.ts +2 -0
  129. package/types/useMatches.test.d.ts.map +1 -0
  130. package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
  131. package/types/vite/types.d.ts +19 -0
  132. package/types/vite/types.d.ts.map +1 -1
  133. package/dist/cjs/createRouteConfig.cjs +0 -28
  134. package/dist/cjs/createRouteConfig.js +0 -23
  135. package/dist/cjs/createRouteConfig.js.map +0 -6
  136. package/dist/cjs/createRouteConfig.native.js +0 -31
  137. package/dist/cjs/createRouteConfig.native.js.map +0 -1
  138. package/dist/esm/createRouteConfig.js +0 -7
  139. package/dist/esm/createRouteConfig.js.map +0 -6
  140. package/dist/esm/createRouteConfig.mjs +0 -5
  141. package/dist/esm/createRouteConfig.mjs.map +0 -1
  142. package/dist/esm/createRouteConfig.native.js +0 -5
  143. package/dist/esm/createRouteConfig.native.js.map +0 -1
@@ -0,0 +1,209 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { setClientMatches } from "./useMatches";
3
+ describe("useMatches", () => {
4
+ describe("setClientMatches", () => {
5
+ it("should update client matches without errors", () => {
6
+ const matches = [
7
+ {
8
+ routeId: "/_layout",
9
+ pathname: "/",
10
+ params: {},
11
+ loaderData: { title: "Root" }
12
+ },
13
+ {
14
+ routeId: "/page",
15
+ pathname: "/page",
16
+ params: {},
17
+ loaderData: { content: "Page content" }
18
+ }
19
+ ];
20
+ expect(() => setClientMatches(matches)).not.toThrow();
21
+ }), it("should accept empty matches array", () => {
22
+ expect(() => setClientMatches([])).not.toThrow();
23
+ });
24
+ }), describe("type safety", () => {
25
+ it("should have correct RouteMatch type", () => {
26
+ const match = {
27
+ routeId: "test",
28
+ pathname: "/test",
29
+ params: { id: "123" },
30
+ loaderData: { foo: "bar" }
31
+ };
32
+ expect(match.routeId).toBe("test"), expect(match.pathname).toBe("/test"), expect(match.params.id).toBe("123"), expect(match.loaderData).toEqual({ foo: "bar" });
33
+ }), it("should allow string[] params", () => {
34
+ expect({
35
+ routeId: "test",
36
+ pathname: "/test",
37
+ params: { slugs: ["a", "b", "c"] },
38
+ loaderData: null
39
+ }.params.slugs).toEqual(["a", "b", "c"]);
40
+ }), it("should allow undefined loaderData", () => {
41
+ expect({
42
+ routeId: "test",
43
+ pathname: "/test",
44
+ params: {},
45
+ loaderData: void 0
46
+ }.loaderData).toBeUndefined();
47
+ });
48
+ });
49
+ });
50
+ describe("RouteMatch ordering", () => {
51
+ it("matches should be ordered parent to child (root layout first)", () => {
52
+ const matches = [
53
+ { routeId: "/_layout", pathname: "/", params: {}, loaderData: { level: "root" } },
54
+ {
55
+ routeId: "/docs/_layout",
56
+ pathname: "/docs",
57
+ params: {},
58
+ loaderData: { level: "docs" }
59
+ },
60
+ {
61
+ routeId: "/docs/intro",
62
+ pathname: "/docs/intro",
63
+ params: {},
64
+ loaderData: { level: "page" }
65
+ }
66
+ ];
67
+ expect(matches[0].routeId).toBe("/_layout"), expect(matches[0].loaderData.level).toBe("root"), expect(matches[1].routeId).toBe("/docs/_layout"), expect(matches[1].loaderData.level).toBe("docs"), expect(matches[2].routeId).toBe("/docs/intro"), expect(matches[2].loaderData.level).toBe("page");
68
+ }), it("last match should be the current page", () => {
69
+ const matches = [
70
+ { routeId: "/_layout", pathname: "/", params: {}, loaderData: {} },
71
+ {
72
+ routeId: "/page",
73
+ pathname: "/page",
74
+ params: { id: "123" },
75
+ loaderData: { title: "Page" }
76
+ }
77
+ ], pageMatch = matches[matches.length - 1];
78
+ expect(pageMatch.routeId).toBe("/page"), expect(pageMatch.loaderData.title).toBe("Page");
79
+ });
80
+ });
81
+ describe("setClientMatches reactivity", () => {
82
+ it("should notify listeners when matches change", () => {
83
+ let notifyCount = 0;
84
+ const listener = () => {
85
+ notifyCount++;
86
+ }, matches1 = [
87
+ { routeId: "/page1", pathname: "/page1", params: {}, loaderData: {} }
88
+ ], matches2 = [
89
+ { routeId: "/page2", pathname: "/page2", params: {}, loaderData: {} }
90
+ ];
91
+ setClientMatches(matches1), setClientMatches(matches2), expect(notifyCount).toBe(0);
92
+ }), it("should handle multiple sequential updates", () => {
93
+ const matches1 = [
94
+ { routeId: "/a", pathname: "/a", params: {}, loaderData: { n: 1 } }
95
+ ], matches2 = [
96
+ { routeId: "/b", pathname: "/b", params: {}, loaderData: { n: 2 } }
97
+ ], matches3 = [
98
+ { routeId: "/c", pathname: "/c", params: {}, loaderData: { n: 3 } }
99
+ ];
100
+ expect(() => {
101
+ setClientMatches(matches1), setClientMatches(matches2), setClientMatches(matches3);
102
+ }).not.toThrow();
103
+ });
104
+ });
105
+ describe("RouteMatch with dynamic params", () => {
106
+ it("should handle single dynamic param", () => {
107
+ expect({
108
+ routeId: "/users/[id]",
109
+ pathname: "/users/123",
110
+ params: { id: "123" },
111
+ loaderData: { user: { name: "John" } }
112
+ }.params.id).toBe("123");
113
+ }), it("should handle multiple dynamic params", () => {
114
+ const match = {
115
+ routeId: "/users/[userId]/posts/[postId]",
116
+ pathname: "/users/123/posts/456",
117
+ params: { userId: "123", postId: "456" },
118
+ loaderData: { post: { title: "Hello" } }
119
+ };
120
+ expect(match.params.userId).toBe("123"), expect(match.params.postId).toBe("456");
121
+ }), it("should handle catch-all params", () => {
122
+ expect({
123
+ routeId: "/docs/[...slug]",
124
+ pathname: "/docs/getting-started/intro",
125
+ params: { slug: ["getting-started", "intro"] },
126
+ loaderData: { doc: { content: "Hello" } }
127
+ }.params.slug).toEqual(["getting-started", "intro"]);
128
+ });
129
+ });
130
+ describe("RouteMatch loaderData scenarios", () => {
131
+ it("should handle complex nested loaderData", () => {
132
+ const data = {
133
+ routeId: "/dashboard",
134
+ pathname: "/dashboard",
135
+ params: {},
136
+ loaderData: {
137
+ user: {
138
+ id: 1,
139
+ profile: {
140
+ name: "John",
141
+ settings: {
142
+ theme: "dark",
143
+ notifications: !0
144
+ }
145
+ }
146
+ },
147
+ posts: [
148
+ { id: 1, title: "Post 1" },
149
+ { id: 2, title: "Post 2" }
150
+ ]
151
+ }
152
+ }.loaderData;
153
+ expect(data.user.profile.settings.theme).toBe("dark"), expect(data.posts).toHaveLength(2);
154
+ }), it("should handle null loaderData", () => {
155
+ expect({
156
+ routeId: "/empty",
157
+ pathname: "/empty",
158
+ params: {},
159
+ loaderData: null
160
+ }.loaderData).toBeNull();
161
+ }), it("should handle array loaderData", () => {
162
+ expect({
163
+ routeId: "/list",
164
+ pathname: "/list",
165
+ params: {},
166
+ loaderData: [1, 2, 3, 4, 5]
167
+ }.loaderData).toEqual([1, 2, 3, 4, 5]);
168
+ }), it("should handle primitive loaderData", () => {
169
+ expect({
170
+ routeId: "/count",
171
+ pathname: "/count",
172
+ params: {},
173
+ loaderData: 42
174
+ }.loaderData).toBe(42);
175
+ });
176
+ });
177
+ describe("finding matches", () => {
178
+ const createMatches = () => [
179
+ { routeId: "/_layout", pathname: "/", params: {}, loaderData: { root: !0 } },
180
+ {
181
+ routeId: "/docs/_layout",
182
+ pathname: "/docs",
183
+ params: {},
184
+ loaderData: { navItems: ["intro", "guide"] }
185
+ },
186
+ {
187
+ routeId: "/docs/[slug]",
188
+ pathname: "/docs/intro",
189
+ params: { slug: "intro" },
190
+ loaderData: { title: "Introduction", headings: ["h1", "h2"] }
191
+ }
192
+ ];
193
+ it("should find match by exact routeId", () => {
194
+ const found = createMatches().find((m) => m.routeId === "/docs/_layout");
195
+ expect(found).toBeDefined(), expect(found.loaderData.navItems).toEqual(["intro", "guide"]);
196
+ }), it("should find match by routeId pattern", () => {
197
+ const found = createMatches().find((m) => m.routeId.includes("_layout"));
198
+ expect(found).toBeDefined(), expect(found.routeId).toBe("/_layout");
199
+ }), it("should get page match (last in array)", () => {
200
+ const matches = createMatches(), pageMatch = matches[matches.length - 1];
201
+ expect(pageMatch.routeId).toBe("/docs/[slug]"), expect(pageMatch.loaderData.title).toBe("Introduction");
202
+ }), it("should get layout match for a page", () => {
203
+ const layoutMatch = createMatches().find(
204
+ (m) => m.routeId.includes("/docs/") && m.routeId.includes("_layout")
205
+ );
206
+ expect(layoutMatch).toBeDefined(), expect(layoutMatch.loaderData.navItems).toBeDefined();
207
+ });
208
+ });
209
+ //# sourceMappingURL=useMatches.test.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useMatches.test.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,288 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { setClientMatches } from "./useMatches.mjs";
3
+ describe("useMatches", () => {
4
+ describe("setClientMatches", () => {
5
+ it("should update client matches without errors", () => {
6
+ const matches = [{
7
+ routeId: "/_layout",
8
+ pathname: "/",
9
+ params: {},
10
+ loaderData: {
11
+ title: "Root"
12
+ }
13
+ }, {
14
+ routeId: "/page",
15
+ pathname: "/page",
16
+ params: {},
17
+ loaderData: {
18
+ content: "Page content"
19
+ }
20
+ }];
21
+ expect(() => setClientMatches(matches)).not.toThrow();
22
+ }), it("should accept empty matches array", () => {
23
+ expect(() => setClientMatches([])).not.toThrow();
24
+ });
25
+ }), describe("type safety", () => {
26
+ it("should have correct RouteMatch type", () => {
27
+ const match = {
28
+ routeId: "test",
29
+ pathname: "/test",
30
+ params: {
31
+ id: "123"
32
+ },
33
+ loaderData: {
34
+ foo: "bar"
35
+ }
36
+ };
37
+ expect(match.routeId).toBe("test"), expect(match.pathname).toBe("/test"), expect(match.params.id).toBe("123"), expect(match.loaderData).toEqual({
38
+ foo: "bar"
39
+ });
40
+ }), it("should allow string[] params", () => {
41
+ expect({
42
+ routeId: "test",
43
+ pathname: "/test",
44
+ params: {
45
+ slugs: ["a", "b", "c"]
46
+ },
47
+ loaderData: null
48
+ }.params.slugs).toEqual(["a", "b", "c"]);
49
+ }), it("should allow undefined loaderData", () => {
50
+ expect({
51
+ routeId: "test",
52
+ pathname: "/test",
53
+ params: {},
54
+ loaderData: void 0
55
+ }.loaderData).toBeUndefined();
56
+ });
57
+ });
58
+ });
59
+ describe("RouteMatch ordering", () => {
60
+ it("matches should be ordered parent to child (root layout first)", () => {
61
+ const matches = [{
62
+ routeId: "/_layout",
63
+ pathname: "/",
64
+ params: {},
65
+ loaderData: {
66
+ level: "root"
67
+ }
68
+ }, {
69
+ routeId: "/docs/_layout",
70
+ pathname: "/docs",
71
+ params: {},
72
+ loaderData: {
73
+ level: "docs"
74
+ }
75
+ }, {
76
+ routeId: "/docs/intro",
77
+ pathname: "/docs/intro",
78
+ params: {},
79
+ loaderData: {
80
+ level: "page"
81
+ }
82
+ }];
83
+ expect(matches[0].routeId).toBe("/_layout"), expect(matches[0].loaderData.level).toBe("root"), expect(matches[1].routeId).toBe("/docs/_layout"), expect(matches[1].loaderData.level).toBe("docs"), expect(matches[2].routeId).toBe("/docs/intro"), expect(matches[2].loaderData.level).toBe("page");
84
+ }), it("last match should be the current page", () => {
85
+ const matches = [{
86
+ routeId: "/_layout",
87
+ pathname: "/",
88
+ params: {},
89
+ loaderData: {}
90
+ }, {
91
+ routeId: "/page",
92
+ pathname: "/page",
93
+ params: {
94
+ id: "123"
95
+ },
96
+ loaderData: {
97
+ title: "Page"
98
+ }
99
+ }],
100
+ pageMatch = matches[matches.length - 1];
101
+ expect(pageMatch.routeId).toBe("/page"), expect(pageMatch.loaderData.title).toBe("Page");
102
+ });
103
+ });
104
+ describe("setClientMatches reactivity", () => {
105
+ it("should notify listeners when matches change", () => {
106
+ let notifyCount = 0;
107
+ const listener = () => {
108
+ notifyCount++;
109
+ },
110
+ matches1 = [{
111
+ routeId: "/page1",
112
+ pathname: "/page1",
113
+ params: {},
114
+ loaderData: {}
115
+ }],
116
+ matches2 = [{
117
+ routeId: "/page2",
118
+ pathname: "/page2",
119
+ params: {},
120
+ loaderData: {}
121
+ }];
122
+ setClientMatches(matches1), setClientMatches(matches2), expect(notifyCount).toBe(0);
123
+ }), it("should handle multiple sequential updates", () => {
124
+ const matches1 = [{
125
+ routeId: "/a",
126
+ pathname: "/a",
127
+ params: {},
128
+ loaderData: {
129
+ n: 1
130
+ }
131
+ }],
132
+ matches2 = [{
133
+ routeId: "/b",
134
+ pathname: "/b",
135
+ params: {},
136
+ loaderData: {
137
+ n: 2
138
+ }
139
+ }],
140
+ matches3 = [{
141
+ routeId: "/c",
142
+ pathname: "/c",
143
+ params: {},
144
+ loaderData: {
145
+ n: 3
146
+ }
147
+ }];
148
+ expect(() => {
149
+ setClientMatches(matches1), setClientMatches(matches2), setClientMatches(matches3);
150
+ }).not.toThrow();
151
+ });
152
+ });
153
+ describe("RouteMatch with dynamic params", () => {
154
+ it("should handle single dynamic param", () => {
155
+ expect({
156
+ routeId: "/users/[id]",
157
+ pathname: "/users/123",
158
+ params: {
159
+ id: "123"
160
+ },
161
+ loaderData: {
162
+ user: {
163
+ name: "John"
164
+ }
165
+ }
166
+ }.params.id).toBe("123");
167
+ }), it("should handle multiple dynamic params", () => {
168
+ const match = {
169
+ routeId: "/users/[userId]/posts/[postId]",
170
+ pathname: "/users/123/posts/456",
171
+ params: {
172
+ userId: "123",
173
+ postId: "456"
174
+ },
175
+ loaderData: {
176
+ post: {
177
+ title: "Hello"
178
+ }
179
+ }
180
+ };
181
+ expect(match.params.userId).toBe("123"), expect(match.params.postId).toBe("456");
182
+ }), it("should handle catch-all params", () => {
183
+ expect({
184
+ routeId: "/docs/[...slug]",
185
+ pathname: "/docs/getting-started/intro",
186
+ params: {
187
+ slug: ["getting-started", "intro"]
188
+ },
189
+ loaderData: {
190
+ doc: {
191
+ content: "Hello"
192
+ }
193
+ }
194
+ }.params.slug).toEqual(["getting-started", "intro"]);
195
+ });
196
+ });
197
+ describe("RouteMatch loaderData scenarios", () => {
198
+ it("should handle complex nested loaderData", () => {
199
+ const data = {
200
+ routeId: "/dashboard",
201
+ pathname: "/dashboard",
202
+ params: {},
203
+ loaderData: {
204
+ user: {
205
+ id: 1,
206
+ profile: {
207
+ name: "John",
208
+ settings: {
209
+ theme: "dark",
210
+ notifications: !0
211
+ }
212
+ }
213
+ },
214
+ posts: [{
215
+ id: 1,
216
+ title: "Post 1"
217
+ }, {
218
+ id: 2,
219
+ title: "Post 2"
220
+ }]
221
+ }
222
+ }.loaderData;
223
+ expect(data.user.profile.settings.theme).toBe("dark"), expect(data.posts).toHaveLength(2);
224
+ }), it("should handle null loaderData", () => {
225
+ expect({
226
+ routeId: "/empty",
227
+ pathname: "/empty",
228
+ params: {},
229
+ loaderData: null
230
+ }.loaderData).toBeNull();
231
+ }), it("should handle array loaderData", () => {
232
+ expect({
233
+ routeId: "/list",
234
+ pathname: "/list",
235
+ params: {},
236
+ loaderData: [1, 2, 3, 4, 5]
237
+ }.loaderData).toEqual([1, 2, 3, 4, 5]);
238
+ }), it("should handle primitive loaderData", () => {
239
+ expect({
240
+ routeId: "/count",
241
+ pathname: "/count",
242
+ params: {},
243
+ loaderData: 42
244
+ }.loaderData).toBe(42);
245
+ });
246
+ });
247
+ describe("finding matches", () => {
248
+ const createMatches = () => [{
249
+ routeId: "/_layout",
250
+ pathname: "/",
251
+ params: {},
252
+ loaderData: {
253
+ root: !0
254
+ }
255
+ }, {
256
+ routeId: "/docs/_layout",
257
+ pathname: "/docs",
258
+ params: {},
259
+ loaderData: {
260
+ navItems: ["intro", "guide"]
261
+ }
262
+ }, {
263
+ routeId: "/docs/[slug]",
264
+ pathname: "/docs/intro",
265
+ params: {
266
+ slug: "intro"
267
+ },
268
+ loaderData: {
269
+ title: "Introduction",
270
+ headings: ["h1", "h2"]
271
+ }
272
+ }];
273
+ it("should find match by exact routeId", () => {
274
+ const found = createMatches().find(m => m.routeId === "/docs/_layout");
275
+ expect(found).toBeDefined(), expect(found.loaderData.navItems).toEqual(["intro", "guide"]);
276
+ }), it("should find match by routeId pattern", () => {
277
+ const found = createMatches().find(m => m.routeId.includes("_layout"));
278
+ expect(found).toBeDefined(), expect(found.routeId).toBe("/_layout");
279
+ }), it("should get page match (last in array)", () => {
280
+ const matches = createMatches(),
281
+ pageMatch = matches[matches.length - 1];
282
+ expect(pageMatch.routeId).toBe("/docs/[slug]"), expect(pageMatch.loaderData.title).toBe("Introduction");
283
+ }), it("should get layout match for a page", () => {
284
+ const layoutMatch = createMatches().find(m => m.routeId.includes("/docs/") && m.routeId.includes("_layout"));
285
+ expect(layoutMatch).toBeDefined(), expect(layoutMatch.loaderData.navItems).toBeDefined();
286
+ });
287
+ });
288
+ //# sourceMappingURL=useMatches.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","setClientMatches","matches","routeId","pathname","params","loaderData","title","content","not","toThrow","match","id","foo","toBe","toEqual","slugs","toBeUndefined","level","pageMatch","length","notifyCount","listener","matches1","matches2","n","matches3","user","name","userId","postId","post","slug","doc","data","profile","settings","theme","notifications","posts","toHaveLength","toBeNull","createMatches","root","navItems","headings","found","find","m","toBeDefined","includes","layoutMatch"],"sources":["../../src/useMatches.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}