effect-start 0.18.0 → 0.20.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 (203) hide show
  1. package/README.md +3 -3
  2. package/dist/Development.d.ts +8 -3
  3. package/dist/Development.js +14 -7
  4. package/dist/Effectify.d.ts +212 -0
  5. package/dist/Effectify.js +19 -0
  6. package/dist/FilePathPattern.d.ts +29 -0
  7. package/dist/FilePathPattern.js +86 -0
  8. package/dist/FileRouter.d.ts +39 -41
  9. package/dist/FileRouter.js +104 -158
  10. package/dist/FileRouterCodegen.d.ts +7 -8
  11. package/dist/FileRouterCodegen.js +97 -66
  12. package/dist/PlatformError.d.ts +46 -0
  13. package/dist/PlatformError.js +43 -0
  14. package/dist/PlatformRuntime.d.ts +27 -0
  15. package/dist/PlatformRuntime.js +51 -0
  16. package/dist/Route.d.ts +6 -2
  17. package/dist/Route.js +22 -0
  18. package/dist/RouteBody.d.ts +1 -1
  19. package/dist/RouteHttp.d.ts +1 -1
  20. package/dist/RouteHttp.js +12 -19
  21. package/dist/RouteMount.d.ts +2 -1
  22. package/dist/Start.d.ts +33 -6
  23. package/dist/Start.js +31 -13
  24. package/dist/Unique.d.ts +50 -0
  25. package/dist/Unique.js +187 -0
  26. package/dist/bun/BunHttpServer.js +5 -6
  27. package/dist/bun/BunPlatformHttpServer.d.ts +10 -0
  28. package/dist/bun/BunPlatformHttpServer.js +53 -0
  29. package/dist/bun/BunRoute.d.ts +4 -6
  30. package/dist/bun/BunRoute.js +10 -18
  31. package/dist/bun/BunRuntime.d.ts +2 -1
  32. package/dist/bun/BunRuntime.js +10 -5
  33. package/dist/bun/BunServer.d.ts +33 -0
  34. package/dist/bun/BunServer.js +133 -0
  35. package/dist/bun/BunServerRequest.d.ts +60 -0
  36. package/dist/bun/BunServerRequest.js +252 -0
  37. package/dist/bun/index.d.ts +1 -1
  38. package/dist/bun/index.js +1 -1
  39. package/dist/datastar/actions/fetch.d.ts +30 -0
  40. package/dist/datastar/actions/fetch.js +411 -0
  41. package/dist/datastar/actions/peek.d.ts +1 -0
  42. package/dist/datastar/actions/peek.js +14 -0
  43. package/dist/datastar/actions/setAll.d.ts +1 -0
  44. package/dist/datastar/actions/setAll.js +13 -0
  45. package/dist/datastar/actions/toggleAll.d.ts +1 -0
  46. package/dist/datastar/actions/toggleAll.js +13 -0
  47. package/dist/datastar/attributes/attr.d.ts +1 -0
  48. package/dist/datastar/attributes/attr.js +49 -0
  49. package/dist/datastar/attributes/bind.d.ts +1 -0
  50. package/dist/datastar/attributes/bind.js +183 -0
  51. package/dist/datastar/attributes/class.d.ts +1 -0
  52. package/dist/datastar/attributes/class.js +50 -0
  53. package/dist/datastar/attributes/computed.d.ts +1 -0
  54. package/dist/datastar/attributes/computed.js +27 -0
  55. package/dist/datastar/attributes/effect.d.ts +1 -0
  56. package/dist/datastar/attributes/effect.js +10 -0
  57. package/dist/datastar/attributes/indicator.d.ts +1 -0
  58. package/dist/datastar/attributes/indicator.js +32 -0
  59. package/dist/datastar/attributes/init.d.ts +1 -0
  60. package/dist/datastar/attributes/init.js +27 -0
  61. package/dist/datastar/attributes/jsonSignals.d.ts +1 -0
  62. package/dist/datastar/attributes/jsonSignals.js +31 -0
  63. package/dist/datastar/attributes/on.d.ts +1 -0
  64. package/dist/datastar/attributes/on.js +59 -0
  65. package/dist/datastar/attributes/onIntersect.d.ts +1 -0
  66. package/dist/datastar/attributes/onIntersect.js +54 -0
  67. package/dist/datastar/attributes/onInterval.d.ts +1 -0
  68. package/dist/datastar/attributes/onInterval.js +31 -0
  69. package/dist/datastar/attributes/onSignalPatch.d.ts +1 -0
  70. package/dist/datastar/attributes/onSignalPatch.js +44 -0
  71. package/dist/datastar/attributes/ref.d.ts +1 -0
  72. package/dist/datastar/attributes/ref.js +11 -0
  73. package/dist/datastar/attributes/show.d.ts +1 -0
  74. package/dist/datastar/attributes/show.js +32 -0
  75. package/dist/datastar/attributes/signals.d.ts +1 -0
  76. package/dist/datastar/attributes/signals.js +18 -0
  77. package/dist/datastar/attributes/style.d.ts +1 -0
  78. package/dist/datastar/attributes/style.js +56 -0
  79. package/dist/datastar/attributes/text.d.ts +1 -0
  80. package/dist/datastar/attributes/text.js +27 -0
  81. package/dist/datastar/engine.d.ts +156 -0
  82. package/dist/datastar/engine.js +971 -0
  83. package/dist/datastar/index.d.ts +24 -0
  84. package/dist/datastar/index.js +24 -0
  85. package/dist/datastar/load.d.ts +24 -0
  86. package/dist/datastar/load.js +24 -0
  87. package/dist/datastar/utils.d.ts +51 -0
  88. package/dist/datastar/utils.js +205 -0
  89. package/dist/datastar/watchers/patchElements.d.ts +1 -0
  90. package/dist/datastar/watchers/patchElements.js +420 -0
  91. package/dist/datastar/watchers/patchSignals.d.ts +1 -0
  92. package/dist/datastar/watchers/patchSignals.js +15 -0
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.js +1 -0
  95. package/dist/node/Effectify.d.ts +209 -0
  96. package/dist/node/Effectify.js +19 -0
  97. package/dist/node/FileSystem.d.ts +3 -5
  98. package/dist/node/FileSystem.js +42 -62
  99. package/dist/node/NodeFileSystem.d.ts +7 -0
  100. package/dist/node/NodeFileSystem.js +420 -0
  101. package/dist/node/NodeUtils.d.ts +2 -0
  102. package/dist/node/NodeUtils.js +20 -0
  103. package/dist/node/PlatformError.d.ts +46 -0
  104. package/dist/node/PlatformError.js +43 -0
  105. package/dist/testing/TestLogger.js +1 -1
  106. package/dist/x/tailwind/plugin.js +1 -1
  107. package/package.json +18 -7
  108. package/src/Development.ts +36 -40
  109. package/src/Effectify.ts +269 -0
  110. package/src/FilePathPattern.ts +115 -0
  111. package/src/FileRouter.ts +178 -255
  112. package/src/FileRouterCodegen.ts +135 -92
  113. package/src/PlatformError.ts +117 -0
  114. package/src/PlatformRuntime.ts +108 -0
  115. package/src/Route.ts +31 -2
  116. package/src/RouteBody.ts +1 -1
  117. package/src/RouteHttp.ts +15 -29
  118. package/src/RouteMount.ts +1 -1
  119. package/src/Start.ts +61 -27
  120. package/src/Unique.ts +232 -0
  121. package/src/bun/BunPlatformHttpServer.ts +88 -0
  122. package/src/bun/BunRoute.ts +14 -24
  123. package/src/bun/BunRuntime.ts +21 -5
  124. package/src/bun/BunServer.ts +228 -0
  125. package/src/bun/index.ts +1 -1
  126. package/src/datastar/README.md +18 -0
  127. package/src/datastar/actions/fetch.ts +609 -0
  128. package/src/datastar/actions/peek.ts +17 -0
  129. package/src/datastar/actions/setAll.ts +20 -0
  130. package/src/datastar/actions/toggleAll.ts +20 -0
  131. package/src/datastar/attributes/attr.ts +50 -0
  132. package/src/datastar/attributes/bind.ts +220 -0
  133. package/src/datastar/attributes/class.ts +57 -0
  134. package/src/datastar/attributes/computed.ts +33 -0
  135. package/src/datastar/attributes/effect.ts +11 -0
  136. package/src/datastar/attributes/indicator.ts +39 -0
  137. package/src/datastar/attributes/init.ts +35 -0
  138. package/src/datastar/attributes/jsonSignals.ts +38 -0
  139. package/src/datastar/attributes/on.ts +71 -0
  140. package/src/datastar/attributes/onIntersect.ts +65 -0
  141. package/src/datastar/attributes/onInterval.ts +39 -0
  142. package/src/datastar/attributes/onSignalPatch.ts +63 -0
  143. package/src/datastar/attributes/ref.ts +12 -0
  144. package/src/datastar/attributes/show.ts +33 -0
  145. package/src/datastar/attributes/signals.ts +22 -0
  146. package/src/datastar/attributes/style.ts +63 -0
  147. package/src/datastar/attributes/text.ts +30 -0
  148. package/src/datastar/engine.ts +1341 -0
  149. package/src/datastar/index.ts +25 -0
  150. package/src/datastar/utils.ts +286 -0
  151. package/src/datastar/watchers/patchElements.ts +554 -0
  152. package/src/datastar/watchers/patchSignals.ts +15 -0
  153. package/src/index.ts +1 -0
  154. package/src/node/{FileSystem.ts → NodeFileSystem.ts} +59 -97
  155. package/src/node/{Utils.ts → NodeUtils.ts} +2 -0
  156. package/src/testing/TestLogger.ts +1 -1
  157. package/src/x/tailwind/plugin.ts +1 -1
  158. package/dist/Random.d.ts +0 -5
  159. package/dist/Random.js +0 -49
  160. package/src/Commander.test.ts +0 -1639
  161. package/src/ContentNegotiation.test.ts +0 -603
  162. package/src/Development.test.ts +0 -119
  163. package/src/Entity.test.ts +0 -592
  164. package/src/FileRouterCodegen.todo.ts +0 -1133
  165. package/src/FileRouterPattern.test.ts +0 -147
  166. package/src/FileRouterPattern.ts +0 -59
  167. package/src/FileRouter_files.test.ts +0 -64
  168. package/src/FileRouter_path.test.ts +0 -145
  169. package/src/FileRouter_tree.test.ts +0 -132
  170. package/src/Http.test.ts +0 -319
  171. package/src/HttpAppExtra.test.ts +0 -103
  172. package/src/HttpUtils.test.ts +0 -85
  173. package/src/PathPattern.test.ts +0 -648
  174. package/src/Random.ts +0 -59
  175. package/src/RouteBody.test.ts +0 -232
  176. package/src/RouteHook.test.ts +0 -40
  177. package/src/RouteHttp.test.ts +0 -2909
  178. package/src/RouteMount.test.ts +0 -481
  179. package/src/RouteSchema.test.ts +0 -427
  180. package/src/RouteSse.test.ts +0 -249
  181. package/src/RouteTree.test.ts +0 -494
  182. package/src/RouteTrie.test.ts +0 -322
  183. package/src/RouterPattern.test.ts +0 -676
  184. package/src/RouterPattern.ts +0 -416
  185. package/src/StartApp.ts +0 -47
  186. package/src/Values.test.ts +0 -263
  187. package/src/bun/BunBundle.test.ts +0 -268
  188. package/src/bun/BunBundle_imports.test.ts +0 -48
  189. package/src/bun/BunHttpServer.test.ts +0 -251
  190. package/src/bun/BunHttpServer.ts +0 -306
  191. package/src/bun/BunImportTrackerPlugin.test.ts +0 -77
  192. package/src/bun/BunRoute.test.ts +0 -162
  193. package/src/bundler/BundleHttp.test.ts +0 -132
  194. package/src/effect/HttpRouter.test.ts +0 -548
  195. package/src/experimental/EncryptedCookies.test.ts +0 -488
  196. package/src/hyper/HyperHtml.test.ts +0 -209
  197. package/src/hyper/HyperRoute.test.tsx +0 -197
  198. package/src/middlewares/BasicAuthMiddleware.test.ts +0 -84
  199. package/src/testing/TestHttpClient.test.ts +0 -83
  200. package/src/testing/TestLogger.test.ts +0 -51
  201. package/src/x/datastar/Datastar.test.ts +0 -266
  202. package/src/x/tailwind/TailwindPlugin.test.ts +0 -333
  203. /package/src/bun/{BunHttpServer_web.ts → BunServerRequest.ts} +0 -0
@@ -1,322 +0,0 @@
1
- import * as test from "bun:test"
2
- import * as Route from "./Route.ts"
3
- import * as RouteMount from "./RouteMount.ts"
4
- import * as RouteTrie from "./RouteTrie.ts"
5
-
6
- test.describe(RouteTrie.make, () => {
7
- test.it("creates trie from route set", () => {
8
- const routes = Route
9
- .add("/about", Route.get(Route.text("About")))
10
-
11
- const trie = RouteTrie.make(routes)
12
-
13
- test
14
- .expect(trie.methods["GET"])
15
- .toBeDefined()
16
- })
17
- })
18
-
19
- test.describe(RouteTrie.lookup, () => {
20
- test.it("matches exact static path", () => {
21
- const routes = Route
22
- .add("/about", Route.get(Route.text("About")))
23
- const trie = RouteTrie.make(routes)
24
-
25
- const results = RouteTrie.lookup(trie, "GET", "/about")
26
-
27
- test
28
- .expect(results.length)
29
- .toBe(1)
30
- test
31
- .expect(results[0].params)
32
- .toEqual({})
33
- })
34
-
35
- test.it("returns empty for non-matching path", () => {
36
- const routes = Route
37
- .add("/about", Route.get(Route.text("About")))
38
- const trie = RouteTrie.make(routes)
39
-
40
- const results = RouteTrie.lookup(trie, "GET", "/contact")
41
-
42
- test
43
- .expect(results.length)
44
- .toBe(0)
45
- })
46
-
47
- test.it("matches path with single param", () => {
48
- const routes = Route
49
- .add("/users/:id", Route.get(Route.text("User")))
50
- const trie = RouteTrie.make(routes)
51
-
52
- const results = RouteTrie.lookup(trie, "GET", "/users/123")
53
-
54
- test
55
- .expect(results.length)
56
- .toBe(1)
57
- test
58
- .expect(results[0].params)
59
- .toEqual({ id: "123" })
60
- })
61
-
62
- test.it("matches path with multiple params", () => {
63
- const routes = Route
64
- .add("/users/:userId/posts/:postId", Route.get(Route.text("Post")))
65
- const trie = RouteTrie.make(routes)
66
-
67
- const results = RouteTrie.lookup(trie, "GET", "/users/42/posts/7")
68
-
69
- test
70
- .expect(results.length)
71
- .toBe(1)
72
- test
73
- .expect(results[0].params)
74
- .toEqual({
75
- userId: "42",
76
- postId: "7",
77
- })
78
- })
79
-
80
- test.it("matches path with optional param present", () => {
81
- const routes = Route
82
- .add("/files/:name?", Route.get(Route.text("File")))
83
- const trie = RouteTrie.make(routes)
84
-
85
- const results = RouteTrie.lookup(trie, "GET", "/files/readme")
86
-
87
- test
88
- .expect(results.length)
89
- .toBe(1)
90
- test
91
- .expect(results[0].params)
92
- .toEqual({ name: "readme" })
93
- })
94
-
95
- test.it("matches path with optional param absent", () => {
96
- const routes = Route
97
- .add("/files/:name?", Route.get(Route.text("File")))
98
- const trie = RouteTrie.make(routes)
99
-
100
- const results = RouteTrie.lookup(trie, "GET", "/files")
101
-
102
- test
103
- .expect(results.length)
104
- .toBe(1)
105
- test
106
- .expect(results[0].params)
107
- .toEqual({})
108
- })
109
-
110
- test.it("matches path with optional wildcard param", () => {
111
- const routes = Route
112
- .add("/docs/:path*", Route.get(Route.text("Docs")))
113
- const trie = RouteTrie.make(routes)
114
-
115
- const results = RouteTrie.lookup(trie, "GET", "/docs/api/users/create")
116
-
117
- test
118
- .expect(results.length)
119
- .toBe(1)
120
- test
121
- .expect(results[0].params)
122
- .toEqual({
123
- path: "api/users/create",
124
- })
125
- })
126
-
127
- test.it("matches path with optional wildcard when empty", () => {
128
- const routes = Route
129
- .add("/docs/:path*", Route.get(Route.text("Docs")))
130
- const trie = RouteTrie.make(routes)
131
-
132
- const results = RouteTrie.lookup(trie, "GET", "/docs")
133
-
134
- test
135
- .expect(results.length)
136
- .toBe(1)
137
- test
138
- .expect(results[0].params)
139
- .toEqual({})
140
- })
141
-
142
- test.it("matches path with required wildcard param", () => {
143
- const routes = Route
144
- .add("/docs/:path+", Route.get(Route.text("Docs")))
145
- const trie = RouteTrie.make(routes)
146
-
147
- const results = RouteTrie.lookup(trie, "GET", "/docs/api/users/create")
148
-
149
- test
150
- .expect(results.length)
151
- .toBe(1)
152
- test
153
- .expect(results[0].params)
154
- .toEqual({
155
- path: "api/users/create",
156
- })
157
- })
158
-
159
- test.it("does not match required wildcard when empty", () => {
160
- const routes = Route
161
- .add("/docs/:path+", Route.get(Route.text("Docs")))
162
- const trie = RouteTrie.make(routes)
163
-
164
- const results = RouteTrie.lookup(trie, "GET", "/docs")
165
-
166
- test
167
- .expect(results.length)
168
- .toBe(0)
169
- })
170
-
171
- test.it("required wildcard beats optional wildcard in priority", () => {
172
- const routes = Route
173
- .add("/files/:path*", Route.get(Route.text("Optional")))
174
- .add("/files/:path+", Route.get(Route.text("Required")))
175
- const trie = RouteTrie.make(routes)
176
-
177
- const multiResults = RouteTrie.lookup(trie, "GET", "/files/a/b/c")
178
-
179
- test
180
- .expect(multiResults.length)
181
- .toBe(2)
182
- test
183
- .expect(multiResults[0].params)
184
- .toEqual({ path: "a/b/c" })
185
- test
186
- .expect(multiResults[1].params)
187
- .toEqual({ path: "a/b/c" })
188
- })
189
-
190
- test.it("optional wildcard matches when required cannot", () => {
191
- const routes = Route
192
- .add("/files/:path*", Route.get(Route.text("Optional")))
193
- .add("/files/:path+", Route.get(Route.text("Required")))
194
- const trie = RouteTrie.make(routes)
195
-
196
- const emptyResults = RouteTrie.lookup(trie, "GET", "/files")
197
-
198
- test
199
- .expect(emptyResults.length)
200
- .toBe(1)
201
- test
202
- .expect(emptyResults[0].params)
203
- .toEqual({})
204
- })
205
-
206
- test.it("prioritizes static over param routes", () => {
207
- const routes = Route
208
- .add("/users/:id", Route.get(Route.text("User by ID")))
209
- .add("/users/me", Route.get(Route.text("Current user")))
210
- const trie = RouteTrie.make(routes)
211
-
212
- const results = RouteTrie.lookup(trie, "GET", "/users/me")
213
-
214
- test
215
- .expect(results.length)
216
- .toBe(2)
217
- test
218
- .expect(results[0].params)
219
- .toEqual({})
220
- test
221
- .expect(results[1].params)
222
- .toEqual({ id: "me" })
223
- })
224
-
225
- test.it("matches nested mounted routes", () => {
226
- const routes = Route
227
- .add(
228
- "/admin",
229
- Route
230
- .add("/users", Route.get(Route.text("Admin users")))
231
- .add("/settings", Route.get(Route.text("Admin settings"))),
232
- )
233
- const trie = RouteTrie.make(routes)
234
-
235
- const results = RouteTrie.lookup(trie, "GET", "/admin/users")
236
-
237
- test
238
- .expect(results.length)
239
- .toBe(1)
240
- })
241
-
242
- test.it("normalizes paths with trailing slashes", () => {
243
- const routes = Route
244
- .add("/about", Route.get(Route.text("About")))
245
- const trie = RouteTrie.make(routes)
246
-
247
- const results = RouteTrie.lookup(trie, "GET", "/about/")
248
-
249
- test
250
- .expect(results.length)
251
- .toBe(1)
252
- test
253
- .expect(results[0].params)
254
- .toEqual({})
255
- })
256
-
257
- test.it("matches root path", () => {
258
- const routes = Route
259
- .add("/", Route.get(Route.text("Home")))
260
- const trie = RouteTrie.make(routes)
261
-
262
- const results = RouteTrie.lookup(trie, "GET", "/")
263
-
264
- test
265
- .expect(results.length)
266
- .toBe(1)
267
- test
268
- .expect(results[0].params)
269
- .toEqual({})
270
- })
271
-
272
- test.it("matches method-specific routes", () => {
273
- const routes = Route
274
- .add("/users", Route.get(Route.text("List users")))
275
- .add("/users", Route.post(Route.text("Create user")))
276
- const trie = RouteTrie.make(routes)
277
-
278
- const getResults = RouteTrie.lookup(trie, "GET", "/users")
279
- const postResults = RouteTrie.lookup(trie, "POST", "/users")
280
-
281
- test
282
- .expect(getResults.length)
283
- .toBe(1)
284
- test
285
- .expect(postResults.length)
286
- .toBe(1)
287
- })
288
-
289
- test.it("matches wildcard method routes", () => {
290
- const routes = Route
291
- .add("/health", Route.use(Route.text("OK")))
292
- const trie = RouteTrie.make(routes)
293
-
294
- const getResults = RouteTrie.lookup(trie, "GET", "/health")
295
- const postResults = RouteTrie.lookup(trie, "POST", "/health")
296
-
297
- test
298
- .expect(getResults.length)
299
- .toBe(1)
300
- test
301
- .expect(postResults.length)
302
- .toBe(1)
303
- })
304
-
305
- test.it("returns multiple matches for content negotiation", () => {
306
- const routes = Route
307
- .add(
308
- "/page",
309
- Route.get(
310
- Route.text("Plain text"),
311
- Route.html("<p>HTML</p>"),
312
- ),
313
- )
314
- const trie = RouteTrie.make(routes)
315
-
316
- const results = RouteTrie.lookup(trie, "GET", "/page")
317
-
318
- test
319
- .expect(results.length)
320
- .toBe(2)
321
- })
322
- })