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,333 +0,0 @@
1
- import * as test from "bun:test"
2
- import { extractClassNames } from "./TailwindPlugin.ts"
3
-
4
- // Keep the old broad implementation for comparison tests
5
- function extractClassNamesBroad(source: string): Set<string> {
6
- // Old broad implementation
7
- const CLASS_NAME_REGEX = /^[^"'`\s]+$/
8
- const classTokenRegex =
9
- /\b[a-zA-Z][a-zA-Z0-9_:-]*(?:\[[^\]]*\])?(?:\/[0-9]+)?/g
10
-
11
- return new Set(
12
- Array
13
- .from(source.matchAll(classTokenRegex))
14
- .map(match => match[0])
15
- .filter(token => CLASS_NAME_REGEX.test(token)),
16
- )
17
- }
18
-
19
- test.describe(`${extractClassNames.name}`, () => {
20
- test.it("Basic HTML class attributes", () => {
21
- const source = `<div class="bg-red-500 text-white">Hello</div>`
22
- const result = extractClassNames(source)
23
-
24
- test
25
- .expect([...result].sort())
26
- .toEqual(["bg-red-500", "text-white"])
27
- })
28
-
29
- test.it("Basic JSX className attributes", () => {
30
- const source =
31
- `<div className="flex items-center justify-between">Content</div>`
32
- const result = extractClassNames(source)
33
-
34
- test
35
- .expect([...result].sort())
36
- .toEqual(["flex", "items-center", "justify-between"])
37
- })
38
-
39
- test.it("Single quotes", () => {
40
- const source = `<div class='bg-blue-500 hover:bg-blue-600'>Button</div>`
41
- const result = extractClassNames(source)
42
-
43
- test
44
- .expect([...result].sort())
45
- .toEqual(["bg-blue-500", "hover:bg-blue-600"])
46
- })
47
-
48
- test.it("Template literals in JSX", () => {
49
- const source = `<div className={\`bg-\${color} text-lg\`}>Dynamic</div>`
50
- const result = extractClassNames(source)
51
-
52
- // Should extract valid static class names from template literals
53
- test
54
- .expect([...result].sort())
55
- .toEqual(["text-lg"])
56
- })
57
-
58
- test.it("JSX with quoted strings", () => {
59
- const source = `<div className={"p-4 m-2"}>Static in braces</div>`
60
- const result = extractClassNames(source)
61
-
62
- test
63
- .expect([...result].sort())
64
- .toEqual(["m-2", "p-4"])
65
- })
66
-
67
- test.it("Multi-line attributes", () => {
68
- const source = `<div
69
- className="
70
- grid
71
- grid-cols-3
72
- gap-4
73
- "
74
- >Grid</div>`
75
- const result = extractClassNames(source)
76
-
77
- test
78
- .expect([...result].sort())
79
- .toEqual(["gap-4", "grid", "grid-cols-3"])
80
- })
81
-
82
- test.it("Whitespace variations around equals", () => {
83
- const cases = [
84
- `<div class="text-sm">Normal</div>`,
85
- `<div class ="text-md">Space before</div>`,
86
- `<div class= "text-lg">Space after</div>`,
87
- `<div class = "text-xl">Spaces both</div>`,
88
- ]
89
-
90
- for (const source of cases) {
91
- const result = extractClassNames(source)
92
-
93
- test
94
- .expect(result.size)
95
- .toBe(1)
96
- }
97
- })
98
-
99
- test.it("Arbitrary value classes", () => {
100
- const source =
101
- `<div className="w-[32px] bg-[#ff0000] text-[1.5rem]">Arbitrary</div>`
102
- const result = extractClassNames(source)
103
-
104
- test
105
- .expect([...result].sort())
106
- .toEqual(["bg-[#ff0000]", "text-[1.5rem]", "w-[32px]"])
107
- })
108
-
109
- test.it("Fraction classes", () => {
110
- const source = `<div className="w-1/2 h-3/4">Fractions</div>`
111
- const result = extractClassNames(source)
112
-
113
- test
114
- .expect([...result].sort())
115
- .toEqual(["h-3/4", "w-1/2"])
116
- })
117
-
118
- test.it("Complex Tailwind classes", () => {
119
- const source =
120
- `<div className="sm:w-1/2 md:w-1/3 lg:w-1/4 hover:bg-gray-100 focus:ring-2">Responsive</div>`
121
- const result = extractClassNames(source)
122
-
123
- test
124
- .expect([...result].sort())
125
- .toEqual([
126
- "focus:ring-2",
127
- "hover:bg-gray-100",
128
- "lg:w-1/4",
129
- "md:w-1/3",
130
- "sm:w-1/2",
131
- ])
132
- })
133
-
134
- test.it("Should ignore similar attribute names", () => {
135
- const source =
136
- `<div data-class="should-ignore" myclass="also-ignore" class="keep-this">Test</div>`
137
- const result = extractClassNames(source)
138
-
139
- test
140
- .expect([...result])
141
- .toEqual(["keep-this"])
142
- })
143
-
144
- test.it("Should handle case sensitivity", () => {
145
- const source =
146
- `<div Class="uppercase-class" class="lowercase-class">Mixed case</div>`
147
- const result = extractClassNames(source)
148
-
149
- // Our current implementation only matches lowercase 'class'
150
- test
151
- .expect([...result])
152
- .toEqual(["lowercase-class"])
153
- })
154
-
155
- test.it("Empty class attributes", () => {
156
- const source = `<div class="" className=''>Empty</div>`
157
- const result = extractClassNames(source)
158
-
159
- test
160
- .expect(result.size)
161
- .toBe(0)
162
- })
163
-
164
- test.it("Classes with special characters", () => {
165
- const source =
166
- `<div className="group-hover:text-blue-500 peer-focus:ring-2">Special chars</div>`
167
- const result = extractClassNames(source)
168
-
169
- test
170
- .expect([...result].sort())
171
- .toEqual(["group-hover:text-blue-500", "peer-focus:ring-2"])
172
- })
173
-
174
- test.it("Should not match classes in comments", () => {
175
- const source = `
176
- <!-- <div class="commented-out">Should not match</div> -->
177
- <div class="real-class">Should match</div>
178
- `
179
- const result = extractClassNames(source)
180
-
181
- test
182
- .expect([...result])
183
- .toEqual(["real-class"])
184
- })
185
-
186
- test.it("Should not match classes in strings", () => {
187
- const source = `
188
- const message = "This class='fake-class' should not match";
189
- <div class="real-class">Real element</div>
190
- `
191
- const result = extractClassNames(source)
192
-
193
- test
194
- .expect([...result])
195
- .toEqual(["real-class"])
196
- })
197
-
198
- test.it("Complex JSX expressions should be ignored", () => {
199
- const source = `
200
- <div className={condition ? "conditional-class" : "other-class"}>Conditional</div>
201
- <div className={\`template-\${variable}\`}>Template</div>
202
- <div className={getClasses()}>Function call</div>
203
- <div className="static-class">Static</div>
204
- `
205
- const result = extractClassNames(source)
206
-
207
- // Only the static class should match with our strict implementation
208
- test
209
- .expect([...result])
210
- .toEqual(["static-class"])
211
- })
212
-
213
- test.it("Vue.js class bindings should be ignored", () => {
214
- const source = `
215
- <div :class="{ 'active': isActive }">Vue object</div>
216
- <div :class="['base', condition && 'active']">Vue array</div>
217
- <div class="static-vue-class">Static Vue</div>
218
- `
219
- const result = extractClassNames(source)
220
-
221
- // Only static class should match
222
- test
223
- .expect([...result])
224
- .toEqual(["static-vue-class"])
225
- })
226
-
227
- test.it("Svelte class directives should be ignored", () => {
228
- const source = `
229
- <div class:active={condition}>Svelte directive</div>
230
- <div class="static-svelte-class">Static Svelte</div>
231
- `
232
- const result = extractClassNames(source)
233
-
234
- test
235
- .expect([...result])
236
- .toEqual(["static-svelte-class"])
237
- })
238
-
239
- test.it("Escaped quotes should be handled", () => {
240
- const source =
241
- `<div class="text-sm before:content-['Hello']">Escaped quotes</div>`
242
- const result = extractClassNames(source)
243
-
244
- test
245
- .expect([...result].sort())
246
- .toEqual(["before:content-['Hello']", "text-sm"])
247
- })
248
-
249
- test.it("Current broad implementation comparison", () => {
250
- const source = `
251
- <div class="bg-red-500 text-white">Element</div>
252
- <p>Some random-text-with-hyphens in content</p>
253
- const variable = "some-string";
254
- `
255
-
256
- const broadResult = extractClassNamesBroad(source)
257
- const strictResult = extractClassNames(source)
258
-
259
- // Broad should pick up more tokens
260
- test
261
- .expect(broadResult.size)
262
- .toBeGreaterThan(strictResult.size)
263
- // Strict should only have the actual class names
264
- test
265
- .expect([...strictResult].sort())
266
- .toEqual(["bg-red-500", "text-white"])
267
- })
268
-
269
- test.it("Component names with dots", () => {
270
- const source =
271
- `<Toast.Toast class="toast toast-top toast-center fixed top-8 z-10">Content</Toast.Toast>`
272
- const result = extractClassNames(source)
273
-
274
- test
275
- .expect([...result].sort())
276
- .toEqual(["fixed", "toast", "toast-center", "toast-top", "top-8", "z-10"])
277
- })
278
-
279
- test.it("Complex component names and attributes", () => {
280
- const source = `
281
- <My.Component.Name className="flex items-center">Content</My.Component.Name>
282
- <Component-with-dashes class="bg-red-500">Content</Component-with-dashes>
283
- <Component123 className="text-lg">Content</Component123>
284
- <namespace:element class="border-2">XML style</namespace:element>
285
- `
286
- const result = extractClassNames(source)
287
-
288
- test
289
- .expect([...result].sort())
290
- .toEqual([
291
- "bg-red-500",
292
- "border-2",
293
- "flex",
294
- "items-center",
295
- "text-lg",
296
- ])
297
- })
298
-
299
- test.it("Conditional JSX with Toast component", () => {
300
- const source = `{toastParam !== undefined && (
301
- <Toast.Toast class="toast toast-top toast-center fixed top-8 z-10">
302
- <div class="alert alert-success">
303
- <span>
304
- {toastParam}
305
- </span>
306
- </div>
307
- </Toast.Toast>
308
- )}`
309
- const result = extractClassNames(source)
310
-
311
- test
312
- .expect([...result].sort())
313
- .toEqual([
314
- "alert",
315
- "alert-success",
316
- "fixed",
317
- "toast",
318
- "toast-center",
319
- "toast-top",
320
- "top-8",
321
- "z-10",
322
- ])
323
- })
324
-
325
- test.it("Template literals with expressions", () => {
326
- const source = `<div class={\`toast \${props.class ?? ""}\`}>Content</div>`
327
- const result = extractClassNames(source)
328
-
329
- test
330
- .expect([...result].sort())
331
- .toEqual(["toast"])
332
- })
333
- })