effect-start 0.33.0 → 0.35.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 (134) hide show
  1. package/README.md +303 -36
  2. package/dist/Entity.d.ts +3 -1
  3. package/dist/Entity.d.ts.map +1 -1
  4. package/dist/Entity.js +23 -0
  5. package/dist/Entity.js.map +1 -1
  6. package/dist/Fetch.d.ts +1 -1
  7. package/dist/Fetch.js.map +1 -1
  8. package/dist/FileRouter.d.ts +1 -1
  9. package/dist/FileRouterCodegen.d.ts.map +1 -1
  10. package/dist/FileRouterCodegen.js +10 -4
  11. package/dist/FileRouterCodegen.js.map +1 -1
  12. package/dist/Job.d.ts +94 -0
  13. package/dist/Job.d.ts.map +1 -0
  14. package/dist/Job.js +157 -0
  15. package/dist/Job.js.map +1 -0
  16. package/dist/Password.d.ts +1 -1
  17. package/dist/Route.d.ts +20 -15
  18. package/dist/Route.d.ts.map +1 -1
  19. package/dist/Route.js +12 -0
  20. package/dist/Route.js.map +1 -1
  21. package/dist/RouteBody.d.ts +7 -7
  22. package/dist/RouteBody.d.ts.map +1 -1
  23. package/dist/RouteBody.js.map +1 -1
  24. package/dist/RouteHook.d.ts +1 -1
  25. package/dist/RouteHook.d.ts.map +1 -1
  26. package/dist/RouteHook.js.map +1 -1
  27. package/dist/RouteHttp.d.ts.map +1 -1
  28. package/dist/RouteHttp.js +55 -39
  29. package/dist/RouteHttp.js.map +1 -1
  30. package/dist/RouteLink.d.ts +16 -0
  31. package/dist/RouteLink.d.ts.map +1 -0
  32. package/dist/RouteLink.js +23 -0
  33. package/dist/RouteLink.js.map +1 -0
  34. package/dist/RouteMount.d.ts +37 -31
  35. package/dist/RouteMount.d.ts.map +1 -1
  36. package/dist/RouteMount.js.map +1 -1
  37. package/dist/RouteSchema.d.ts +81 -28
  38. package/dist/RouteSchema.d.ts.map +1 -1
  39. package/dist/RouteSchema.js +56 -101
  40. package/dist/RouteSchema.js.map +1 -1
  41. package/dist/RouteSse.d.ts +1 -1
  42. package/dist/RouteSse.d.ts.map +1 -1
  43. package/dist/RouteSse.js.map +1 -1
  44. package/dist/Socket.d.ts +1 -1
  45. package/dist/Start.js +1 -1
  46. package/dist/Start.js.map +1 -1
  47. package/dist/StaticFiles.d.ts +4 -10
  48. package/dist/StaticFiles.d.ts.map +1 -1
  49. package/dist/StaticFiles.js +10 -18
  50. package/dist/StaticFiles.js.map +1 -1
  51. package/dist/System.d.ts +1 -1
  52. package/dist/_Docker.d.ts +1 -1
  53. package/dist/_HtmlScanner.d.ts +42 -0
  54. package/dist/_HtmlScanner.d.ts.map +1 -0
  55. package/dist/_HtmlScanner.js +385 -0
  56. package/dist/_HtmlScanner.js.map +1 -0
  57. package/dist/_RouteLink.d.ts +16 -0
  58. package/dist/_RouteLink.d.ts.map +1 -0
  59. package/dist/_RouteLink.js +22 -0
  60. package/dist/_RouteLink.js.map +1 -0
  61. package/dist/bun/BunRoute.d.ts +4 -6
  62. package/dist/bun/BunRoute.d.ts.map +1 -1
  63. package/dist/bun/BunRoute.js +1 -1
  64. package/dist/bun/BunRoute.js.map +1 -1
  65. package/dist/bundler/Bundle.d.ts +1 -1
  66. package/dist/bundler/BundleRoute.d.ts +3 -4
  67. package/dist/bundler/BundleRoute.d.ts.map +1 -1
  68. package/dist/bundler/BundleRoute.js +5 -11
  69. package/dist/bundler/BundleRoute.js.map +1 -1
  70. package/dist/datastar/watchers/patchElements.js +1 -1
  71. package/dist/datastar/watchers/patchElements.js.map +1 -1
  72. package/dist/experimental/CsrfProtection.d.ts +67 -0
  73. package/dist/experimental/CsrfProtection.d.ts.map +1 -0
  74. package/dist/experimental/CsrfProtection.js +100 -0
  75. package/dist/experimental/CsrfProtection.js.map +1 -0
  76. package/dist/experimental/EncryptedCookies.d.ts +1 -1
  77. package/dist/experimental/KeyValueStore.d.ts +1 -1
  78. package/dist/lint/plugin.js +4 -0
  79. package/dist/lint/plugin.js.map +1 -1
  80. package/dist/sql/SqlClient.d.ts +1 -1
  81. package/dist/studio/Studio.d.ts +1 -1
  82. package/dist/studio/Studio.d.ts.map +1 -1
  83. package/dist/studio/Studio.js +4 -10
  84. package/dist/studio/Studio.js.map +1 -1
  85. package/dist/studio/routes/errors/route.d.ts +2 -2
  86. package/dist/studio/routes/errors/route.d.ts.map +1 -1
  87. package/dist/studio/routes/errors/route.js +3 -2
  88. package/dist/studio/routes/errors/route.js.map +1 -1
  89. package/dist/studio/routes/fiberDetail.d.ts +3 -7
  90. package/dist/studio/routes/fiberDetail.d.ts.map +1 -1
  91. package/dist/studio/routes/fibers/route.d.ts +2 -2
  92. package/dist/studio/routes/layout.d.ts +3 -3
  93. package/dist/studio/routes/logs/route.d.ts +2 -2
  94. package/dist/studio/routes/logs/route.d.ts.map +1 -1
  95. package/dist/studio/routes/logs/route.js +3 -2
  96. package/dist/studio/routes/logs/route.js.map +1 -1
  97. package/dist/studio/routes/metrics/route.d.ts +2 -2
  98. package/dist/studio/routes/route.d.ts +1 -1
  99. package/dist/studio/routes/routes/route.d.ts +1 -1
  100. package/dist/studio/routes/services/route.d.ts +1 -1
  101. package/dist/studio/routes/system/route.d.ts +2 -2
  102. package/dist/studio/routes/traceDetail.d.ts +3 -7
  103. package/dist/studio/routes/traceDetail.d.ts.map +1 -1
  104. package/dist/studio/routes/traces/route.d.ts +2 -2
  105. package/dist/studio/routes/traces/route.d.ts.map +1 -1
  106. package/dist/studio/routes/traces/route.js +3 -2
  107. package/dist/studio/routes/traces/route.js.map +1 -1
  108. package/dist/studio/routes/tree.d.ts +43 -51
  109. package/dist/studio/routes/tree.d.ts.map +1 -1
  110. package/package.json +4 -3
  111. package/src/Entity.ts +34 -5
  112. package/src/Fetch.ts +1 -1
  113. package/src/FileRouterCodegen.ts +10 -4
  114. package/src/Route.ts +55 -34
  115. package/src/RouteBody.ts +15 -15
  116. package/src/RouteHook.ts +3 -3
  117. package/src/RouteHttp.ts +55 -51
  118. package/src/RouteLink.ts +56 -0
  119. package/src/RouteMount.ts +44 -37
  120. package/src/RouteSchema.ts +299 -166
  121. package/src/RouteSse.ts +3 -3
  122. package/src/Start.ts +1 -1
  123. package/src/StaticFiles.ts +17 -34
  124. package/src/_HtmlScanner.ts +415 -0
  125. package/src/bun/BunRoute.ts +11 -11
  126. package/src/bundler/BundleRoute.ts +8 -19
  127. package/src/datastar/watchers/patchElements.ts +1 -1
  128. package/src/dev.d.ts +3 -0
  129. package/src/experimental/CsrfProtection.ts +153 -0
  130. package/src/lint/plugin.js +2 -0
  131. package/src/studio/Studio.ts +4 -14
  132. package/src/studio/routes/errors/route.tsx +3 -2
  133. package/src/studio/routes/logs/route.tsx +3 -2
  134. package/src/studio/routes/traces/route.tsx +3 -2
package/src/RouteMount.ts CHANGED
@@ -7,10 +7,7 @@ import type * as RouteBody from "./RouteBody.ts"
7
7
 
8
8
  const RouteSetTypeId = "~effect-start/RouteSet" as const
9
9
 
10
- // oxlint-disable-next-line import/first, typescript/consistent-type-imports -- typeof import() is not an import statement
11
- type Module = typeof import("./RouteMount.ts")
12
-
13
- export type Self = RouteMount.Builder | Module
10
+ export type Self = RouteMount.Builder<any, any> | typeof import("./RouteMount.ts")
14
11
 
15
12
  export const use = makeMethodDescriber("*")
16
13
  export const get = makeMethodDescriber("GET")
@@ -65,7 +62,7 @@ function makeMethodDescriber<M extends RouteMount.Method>(method: M): RouteMount
65
62
  const itemDescriptor = Route.descriptor(item)
66
63
  const newDescriptor = { method, ...itemDescriptor }
67
64
  return Route.make(
68
- (item as Route.Route.Route).handler as Route.Route.Handler<any, any, any, any>,
65
+ (item as Route.Route).handler as Route.Route.Handler<any, any, any, any>,
69
66
  newDescriptor,
70
67
  )
71
68
  })
@@ -75,7 +72,7 @@ function makeMethodDescriber<M extends RouteMount.Method>(method: M): RouteMount
75
72
  return describeMethod as RouteMount.Describer<M>
76
73
  }
77
74
 
78
- export type MountedRoute = Route.Route.Route<
75
+ export type MountedRoute = Route.Route<
79
76
  {
80
77
  method: RouteMount.Method
81
78
  path: PathPattern.PathPattern
@@ -90,22 +87,43 @@ export type MountedRoute = Route.Route.Route<
90
87
  export namespace RouteMount {
91
88
  export type Method = "*" | Http.Method
92
89
 
93
- export type MountSet = Route.RouteSet.RouteSet<{ method: Method }, {}, Route.Route.Tuple>
90
+ export type MountSet = Route.RouteSet<{ method: Method }, {}, Route.Route.Tuple>
91
+
92
+ export type Builder<D extends {} = {}, I extends Route.Route.Tuple = []> = Route.RouteSet<
93
+ D,
94
+ {},
95
+ I
96
+ > &
97
+ (HasMethod<I> extends true ? {} : { use: Describer<"*"> }) & {
98
+ get: Describer<"GET">
99
+ post: Describer<"POST">
100
+ put: Describer<"PUT">
101
+ del: Describer<"DELETE">
102
+ patch: Describer<"PATCH">
103
+ head: Describer<"HEAD">
104
+ options: Describer<"OPTIONS">
105
+ }
94
106
 
95
- export interface Builder<D extends {} = {}, I extends Route.Route.Tuple = []>
96
- extends Route.RouteSet.RouteSet<D, {}, I>, Module {}
107
+ type HasMethod<I extends Route.Route.Tuple> = I extends [
108
+ infer Head,
109
+ ...infer Tail extends Route.Route.Tuple,
110
+ ]
111
+ ? Head extends Route.Route<{ method: infer M }, any, any, any, any>
112
+ ? M extends Http.Method
113
+ ? true
114
+ : HasMethod<Tail>
115
+ : HasMethod<Tail>
116
+ : false
97
117
 
98
- export type EmptySet<M extends Method, B = {}> = Route.RouteSet.RouteSet<{ method: M }, B, []>
118
+ export type EmptySet<M extends Method, B = {}> = Route.RouteSet<{ method: M }, B, []>
99
119
 
100
120
  export type Items<S> = S extends Builder<any, infer I> ? I : []
101
121
 
102
122
  export type BuilderBindings<S> =
103
- S extends Builder<any, infer I>
104
- ? Types.Simplify<WildcardBindings<I>> & { request: Request }
105
- : { request: Request }
123
+ S extends Builder<any, infer I> ? Types.Simplify<WildcardBindings<I>> : {}
106
124
 
107
125
  type WildcardBindingsItem<T> =
108
- T extends Route.Route.Route<{ method: "*" }, infer B, any, any, any> ? B : {}
126
+ T extends Route.Route<{ method: "*" }, infer B, any, any, any> ? B : {}
109
127
 
110
128
  type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
111
129
  k: infer I,
@@ -119,35 +137,24 @@ export namespace RouteMount {
119
137
  }[number]
120
138
  >
121
139
 
122
- // Flatten items: merge method into descriptor and accumulate bindings through the chain
123
- // `request` is omitted from bindings since it's implicit (always available)
124
- export type FlattenItems<M extends Method, B, I extends Route.Route.Tuple> = I extends [
125
- Route.Route.Route<infer D, infer RB, infer A, infer E, infer R>,
140
+ export type FlattenItems<M extends Method, I extends Route.Route.Tuple> = I extends [
141
+ Route.Route<infer D, infer RB, infer A, infer E, infer R>,
126
142
  ...infer Tail extends Route.Route.Tuple,
127
143
  ]
128
- ? [
129
- Route.Route.Route<
130
- Types.Simplify<{ method: M } & D> & {},
131
- Types.Simplify<Omit<B & RB, "request">>,
132
- A,
133
- E,
134
- R
135
- >,
136
- ...FlattenItems<M, Types.Simplify<B & RB>, Tail>,
137
- ]
144
+ ? [Route.Route<Types.Simplify<{ method: M } & D> & {}, RB, A, E, R>, ...FlattenItems<M, Tail>]
138
145
  : []
139
146
 
140
147
  export interface Describer<M extends Method> {
141
148
  <S extends Self, A extends Route.RouteSet.Any>(
142
149
  this: S,
143
150
  ab: (a: EmptySet<M, BuilderBindings<S>>) => A,
144
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<A>>]>
151
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<A>>]>
145
152
 
146
153
  <S extends Self, A extends Route.RouteSet.Any, B extends Route.RouteSet.Any>(
147
154
  this: S,
148
155
  ab: (a: EmptySet<M, BuilderBindings<S>>) => A,
149
156
  bc: (b: A) => B,
150
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<B>>]>
157
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<B>>]>
151
158
 
152
159
  <
153
160
  S extends Self,
@@ -159,7 +166,7 @@ export namespace RouteMount {
159
166
  ab: (a: EmptySet<M, BuilderBindings<S>>) => A,
160
167
  bc: (b: A) => B,
161
168
  cd: (c: B) => C,
162
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<C>>]>
169
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<C>>]>
163
170
 
164
171
  <
165
172
  S extends Self,
@@ -173,7 +180,7 @@ export namespace RouteMount {
173
180
  bc: (b: A) => B,
174
181
  cd: (c: B) => C,
175
182
  de: (d: C) => D,
176
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<D>>]>
183
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<D>>]>
177
184
 
178
185
  <
179
186
  S extends Self,
@@ -189,7 +196,7 @@ export namespace RouteMount {
189
196
  cd: (c: B) => C,
190
197
  de: (d: C) => D,
191
198
  ef: (e: D) => E,
192
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<E>>]>
199
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<E>>]>
193
200
 
194
201
  <
195
202
  S extends Self,
@@ -207,7 +214,7 @@ export namespace RouteMount {
207
214
  de: (d: C) => D,
208
215
  ef: (e: D) => E,
209
216
  fg: (f: E) => F,
210
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<F>>]>
217
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<F>>]>
211
218
 
212
219
  <
213
220
  S extends Self,
@@ -227,7 +234,7 @@ export namespace RouteMount {
227
234
  ef: (e: D) => E,
228
235
  fg: (f: E) => F,
229
236
  gh: (g: F) => G,
230
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<G>>]>
237
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<G>>]>
231
238
 
232
239
  <
233
240
  S extends Self,
@@ -249,7 +256,7 @@ export namespace RouteMount {
249
256
  fg: (f: E) => F,
250
257
  gh: (g: F) => G,
251
258
  hi: (h: G) => H,
252
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<H>>]>
259
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<H>>]>
253
260
 
254
261
  <
255
262
  S extends Self,
@@ -273,6 +280,6 @@ export namespace RouteMount {
273
280
  gh: (g: F) => G,
274
281
  hi: (h: G) => H,
275
282
  ij: (i: H) => I,
276
- ): Builder<{}, [...Items<S>, ...FlattenItems<M, BuilderBindings<S>, Route.RouteSet.Items<I>>]>
283
+ ): Builder<{}, [...Items<S>, ...FlattenItems<M, Route.RouteSet.Items<I>>]>
277
284
  }
278
285
  }