effect-start 0.34.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 (127) hide show
  1. package/README.md +303 -36
  2. package/dist/Fetch.d.ts +1 -1
  3. package/dist/FileRouter.d.ts +1 -1
  4. package/dist/FileRouterCodegen.d.ts.map +1 -1
  5. package/dist/FileRouterCodegen.js +8 -2
  6. package/dist/FileRouterCodegen.js.map +1 -1
  7. package/dist/Job.d.ts +94 -0
  8. package/dist/Job.d.ts.map +1 -0
  9. package/dist/Job.js +157 -0
  10. package/dist/Job.js.map +1 -0
  11. package/dist/Password.d.ts +1 -1
  12. package/dist/Route.d.ts +20 -15
  13. package/dist/Route.d.ts.map +1 -1
  14. package/dist/Route.js +12 -0
  15. package/dist/Route.js.map +1 -1
  16. package/dist/RouteBody.d.ts +7 -7
  17. package/dist/RouteBody.d.ts.map +1 -1
  18. package/dist/RouteBody.js.map +1 -1
  19. package/dist/RouteHook.d.ts +1 -1
  20. package/dist/RouteHook.d.ts.map +1 -1
  21. package/dist/RouteHook.js.map +1 -1
  22. package/dist/RouteHttp.d.ts.map +1 -1
  23. package/dist/RouteHttp.js +10 -4
  24. package/dist/RouteHttp.js.map +1 -1
  25. package/dist/RouteLink.d.ts +16 -0
  26. package/dist/RouteLink.d.ts.map +1 -0
  27. package/dist/RouteLink.js +23 -0
  28. package/dist/RouteLink.js.map +1 -0
  29. package/dist/RouteMount.d.ts +29 -32
  30. package/dist/RouteMount.d.ts.map +1 -1
  31. package/dist/RouteMount.js.map +1 -1
  32. package/dist/RouteSchema.d.ts +81 -28
  33. package/dist/RouteSchema.d.ts.map +1 -1
  34. package/dist/RouteSchema.js +56 -101
  35. package/dist/RouteSchema.js.map +1 -1
  36. package/dist/RouteSse.d.ts +1 -1
  37. package/dist/RouteSse.d.ts.map +1 -1
  38. package/dist/RouteSse.js.map +1 -1
  39. package/dist/Socket.d.ts +1 -1
  40. package/dist/Start.js +1 -1
  41. package/dist/Start.js.map +1 -1
  42. package/dist/StaticFiles.d.ts +4 -10
  43. package/dist/StaticFiles.d.ts.map +1 -1
  44. package/dist/StaticFiles.js +3 -10
  45. package/dist/StaticFiles.js.map +1 -1
  46. package/dist/System.d.ts +1 -1
  47. package/dist/_Docker.d.ts +1 -1
  48. package/dist/_HtmlScanner.d.ts +42 -0
  49. package/dist/_HtmlScanner.d.ts.map +1 -0
  50. package/dist/_HtmlScanner.js +385 -0
  51. package/dist/_HtmlScanner.js.map +1 -0
  52. package/dist/_RouteLink.d.ts +16 -0
  53. package/dist/_RouteLink.d.ts.map +1 -0
  54. package/dist/_RouteLink.js +22 -0
  55. package/dist/_RouteLink.js.map +1 -0
  56. package/dist/bun/BunRoute.d.ts +4 -6
  57. package/dist/bun/BunRoute.d.ts.map +1 -1
  58. package/dist/bun/BunRoute.js +1 -1
  59. package/dist/bun/BunRoute.js.map +1 -1
  60. package/dist/bundler/Bundle.d.ts +1 -1
  61. package/dist/bundler/BundleRoute.d.ts +5 -6
  62. package/dist/bundler/BundleRoute.d.ts.map +1 -1
  63. package/dist/bundler/BundleRoute.js +5 -11
  64. package/dist/bundler/BundleRoute.js.map +1 -1
  65. package/dist/datastar/watchers/patchElements.js +1 -1
  66. package/dist/datastar/watchers/patchElements.js.map +1 -1
  67. package/dist/experimental/CsrfProtection.d.ts +67 -0
  68. package/dist/experimental/CsrfProtection.d.ts.map +1 -0
  69. package/dist/experimental/CsrfProtection.js +100 -0
  70. package/dist/experimental/CsrfProtection.js.map +1 -0
  71. package/dist/experimental/EncryptedCookies.d.ts +1 -1
  72. package/dist/experimental/KeyValueStore.d.ts +1 -1
  73. package/dist/lint/plugin.js +4 -0
  74. package/dist/lint/plugin.js.map +1 -1
  75. package/dist/sql/SqlClient.d.ts +1 -1
  76. package/dist/studio/Studio.d.ts +1 -1
  77. package/dist/studio/Studio.d.ts.map +1 -1
  78. package/dist/studio/Studio.js +4 -10
  79. package/dist/studio/Studio.js.map +1 -1
  80. package/dist/studio/routes/errors/route.d.ts +3 -3
  81. package/dist/studio/routes/errors/route.d.ts.map +1 -1
  82. package/dist/studio/routes/errors/route.js +3 -2
  83. package/dist/studio/routes/errors/route.js.map +1 -1
  84. package/dist/studio/routes/fiberDetail.d.ts +3 -7
  85. package/dist/studio/routes/fiberDetail.d.ts.map +1 -1
  86. package/dist/studio/routes/fibers/route.d.ts +3 -3
  87. package/dist/studio/routes/layout.d.ts +3 -3
  88. package/dist/studio/routes/logs/route.d.ts +3 -3
  89. package/dist/studio/routes/logs/route.d.ts.map +1 -1
  90. package/dist/studio/routes/logs/route.js +3 -2
  91. package/dist/studio/routes/logs/route.js.map +1 -1
  92. package/dist/studio/routes/metrics/route.d.ts +3 -3
  93. package/dist/studio/routes/route.d.ts +2 -2
  94. package/dist/studio/routes/routes/route.d.ts +2 -2
  95. package/dist/studio/routes/services/route.d.ts +2 -2
  96. package/dist/studio/routes/system/route.d.ts +3 -3
  97. package/dist/studio/routes/traceDetail.d.ts +3 -7
  98. package/dist/studio/routes/traceDetail.d.ts.map +1 -1
  99. package/dist/studio/routes/traces/route.d.ts +3 -3
  100. package/dist/studio/routes/traces/route.d.ts.map +1 -1
  101. package/dist/studio/routes/traces/route.js +3 -2
  102. package/dist/studio/routes/traces/route.js.map +1 -1
  103. package/dist/studio/routes/tree.d.ts +43 -51
  104. package/dist/studio/routes/tree.d.ts.map +1 -1
  105. package/package.json +4 -3
  106. package/src/FileRouterCodegen.ts +8 -2
  107. package/src/Route.ts +55 -34
  108. package/src/RouteBody.ts +15 -15
  109. package/src/RouteHook.ts +3 -3
  110. package/src/RouteHttp.ts +10 -4
  111. package/src/RouteLink.ts +56 -0
  112. package/src/RouteMount.ts +43 -48
  113. package/src/RouteSchema.ts +299 -166
  114. package/src/RouteSse.ts +3 -3
  115. package/src/Start.ts +1 -1
  116. package/src/StaticFiles.ts +10 -24
  117. package/src/_HtmlScanner.ts +415 -0
  118. package/src/bun/BunRoute.ts +11 -11
  119. package/src/bundler/BundleRoute.ts +8 -19
  120. package/src/datastar/watchers/patchElements.ts +1 -1
  121. package/src/dev.d.ts +3 -0
  122. package/src/experimental/CsrfProtection.ts +153 -0
  123. package/src/lint/plugin.js +2 -0
  124. package/src/studio/Studio.ts +4 -14
  125. package/src/studio/routes/errors/route.tsx +3 -2
  126. package/src/studio/routes/logs/route.tsx +3 -2
  127. package/src/studio/routes/traces/route.tsx +3 -2
package/README.md CHANGED
@@ -1,26 +1,23 @@
1
1
  # Effect Start
2
2
 
3
- Build declarative full-stack apps with Effect.
3
+ A full-stack web framework built on [Effect](https://effect.website). Server-rendered JSX, file-based routing, typed schemas, streaming responses -- all composed through Effect layers. No client-side framework required.
4
4
 
5
- This project is in its early stage. However, the code is well documented so you should be able to figure out how to use it
6
- by checking out `examples/` directory.
5
+ Still early. The code is well documented. Check out `examples/` to see what's possible.
7
6
 
8
- ## Development
7
+ ## Quick Start
9
8
 
10
- ### Configuration
11
-
12
- `server.ts` is a main entrypoint for all environments. No more divergence between dev and prod!
9
+ ```sh
10
+ bun add effect-start effect
11
+ ```
13
12
 
14
- It exports a layer that applies configuration and changes the behavior of the server:
13
+ Your entire app starts from one file. Same code runs in dev and prod.
15
14
 
16
15
  ```typescript
16
+ // server.ts
17
17
  import { FileRouter, Start } from "effect-start"
18
18
 
19
- export default Start.layer(
20
- FileRouter.layer({
21
- load: () => import("./routes/routes.gen.ts"),
22
- path: import.meta.resolve("./routes/routes.gen.ts"),
23
- }),
19
+ export default Start.pack(
20
+ FileRouter.layer(() => import("./routes/.server.ts")),
24
21
  )
25
22
 
26
23
  if (import.meta.main) {
@@ -28,45 +25,315 @@ if (import.meta.main) {
28
25
  }
29
26
  ```
30
27
 
31
- ### File-based Routing
28
+ ```sh
29
+ bun run server.ts
30
+ ```
31
+
32
+ That's it. You have a server.
33
+
34
+ ## Routing
35
+
36
+ Routes live in the filesystem. The directory structure _is_ your URL structure.
37
+
38
+ ```
39
+ src/routes/
40
+ route.tsx -> /
41
+ layer.tsx -> wraps all routes below
42
+ users/
43
+ route.tsx -> /users
44
+ [userId]/
45
+ route.tsx -> /users/:userId
46
+ search/
47
+ route.tsx -> /search
48
+ data.json/
49
+ route.ts -> /data.json
50
+ [[...catchAll]]/
51
+ route.tsx -> catch-all fallback
52
+ ```
53
+
54
+ `[param]` for dynamic segments. `[...rest]` for catch-all. `(group)` for non-URL grouping. Straightforward.
55
+
56
+ ## Handlers
57
+
58
+ Every handler is a generator function. Yield effects, return HTML. No async/await ceremony.
59
+
60
+ ```tsx
61
+ import { Route } from "effect-start"
62
+
63
+ export default Route.get(
64
+ Route.html(function* () {
65
+ return (
66
+ <div>
67
+ <h1>hello world</h1>
68
+ </div>
69
+ )
70
+ }),
71
+ )
72
+ ```
73
+
74
+ Need data? Yield it.
75
+
76
+ ```tsx
77
+ import { Effect, Schema } from "effect"
78
+ import { Route } from "effect-start"
79
+
80
+ export default Route.get(
81
+ Route.schemaPathParams({ owner: Schema.String, repo: Schema.String }),
82
+ Route.html(function* (ctx) {
83
+ const { owner, repo } = ctx.pathParams
84
+
85
+ const [repoInfo, readme, languages] = yield* Effect.all([
86
+ getRepo(owner, repo),
87
+ getRepoReadme(owner, repo),
88
+ getRepoLanguages(owner, repo),
89
+ ])
90
+
91
+ return (
92
+ <Layout>
93
+ <h1>{owner}/{repo}</h1>
94
+ <p>{repoInfo.description}</p>
95
+ <div dangerouslySetInnerHTML={{ __html: readme }} />
96
+ </Layout>
97
+ )
98
+ }),
99
+ )
100
+ ```
101
+
102
+ `Effect.all` runs those three calls concurrently. The schema validates path params and gives you typed access. If validation fails, the framework returns a 400 automatically.
103
+
104
+ ## Response Types
105
+
106
+ ```tsx
107
+ // html
108
+ Route.html(function* () {
109
+ return <h1>hey</h1>
110
+ })
111
+
112
+ // json
113
+ Route.json(function* () {
114
+ return { status: "ok", timestamp: Date.now() }
115
+ })
32
116
 
33
- Effect Start provides automatic file-based routing with support for frontend pages, backend endpoints, and stackable middlewares called Route Layers.
117
+ // plain text
118
+ Route.text(function* () {
119
+ return "pong"
120
+ })
34
121
 
122
+ // redirect
123
+ Route.redirect("/somewhere-else")
124
+
125
+ // server-sent events
126
+ Route.sse(
127
+ Stream.fromPubSub(events).pipe(
128
+ Stream.map((msg) => ({ data: JSON.stringify(msg) }))
129
+ )
130
+ )
35
131
  ```
36
- $ tree src/routes
37
- src/routes
38
- ├── [[...frontend]]
39
- │   └── route.ts
40
- ├── admin
41
- │   ├── data.json
42
- │   │   └── route.tsx
43
- │   ├── layer.tsx
44
- │   └── route.tsx
45
- ├── layer.tsx
46
- ├── routes.gen.ts
47
- └── route.tsx
132
+
133
+ ## Schema Validation
134
+
135
+ Built on Effect's Schema. Validate path params, search params, headers, cookies, JSON bodies, multipart uploads -- all type-safe, all composable.
136
+
137
+ ```tsx
138
+ import { Schema } from "effect"
139
+ import { Route } from "effect-start"
140
+
141
+ export default Route.get(
142
+ Route.schemaPathParams({ owner: Schema.String, repo: Schema.String }),
143
+ Route.schemaSearchParams({ state: Schema.String }),
144
+ Route.html(function* (ctx) {
145
+ // ctx.pathParams -> { owner: string, repo: string }
146
+ // ctx.searchParams -> { state: string }
147
+ // fully typed, validated before your handler runs
148
+ }),
149
+ )
150
+ ```
151
+
152
+ For POST endpoints:
153
+
154
+ ```tsx
155
+ Route.post(
156
+ Route.schemaBodyJson({
157
+ email: Schema.String,
158
+ password: Schema.String,
159
+ }),
160
+ Route.json(function* (ctx) {
161
+ const { email, password } = ctx.body
162
+ // ...
163
+ }),
164
+ )
48
165
  ```
49
166
 
50
- ### Tailwind CSS Support
167
+ ## Middleware (Layers)
168
+
169
+ Drop a `layer.tsx` in any directory. It wraps every route beneath it.
51
170
 
52
- Effect Start comes with Tailwind plugin that is lightweight and
53
- works with minimal configuration.
171
+ ```tsx
172
+ // routes/layer.tsx
173
+ import { Route, Bundle } from "effect-start"
54
174
 
55
- First, install official Tailwind package:
175
+ export default Route.use(
176
+ Route.html(function* (ctx, next) {
177
+ return (
178
+ <html>
179
+ <title>My App</title>
180
+ <link rel="stylesheet" href={Bundle.resolve("../app.html")} />
181
+ <body>
182
+ {yield* next().text}
183
+ </body>
184
+ </html>
185
+ )
186
+ }),
187
+ )
188
+ ```
189
+
190
+ Layers compose naturally through the filesystem. A `layer.tsx` in `routes/admin/` only applies to admin routes. The root `layer.tsx` wraps everything.
191
+
192
+ ## Streaming with SSE
193
+
194
+ Real-time updates without WebSocket complexity. Server-Sent Events backed by Effect's `Stream` and `PubSub`.
195
+
196
+ ```tsx
197
+ // routes/chat/stream/route.tsx
198
+ import { Stream } from "effect"
199
+ import { Route } from "effect-start"
200
+ import * as Html from "effect-start/Html"
201
+
202
+ export default Route.get(
203
+ Route.sse(
204
+ Stream.fromPubSub(chatPubSub).pipe(
205
+ Stream.map((msg) => ({
206
+ data: Html.renderToString(<Message msg={msg} />),
207
+ }))
208
+ )
209
+ ),
210
+ )
211
+ ```
212
+
213
+ And the handler that publishes:
214
+
215
+ ```tsx
216
+ // routes/chat/send/route.tsx
217
+ import { Effect, PubSub, Ref } from "effect"
218
+ import { Route } from "effect-start"
219
+
220
+ export default Route.post(
221
+ Route.text(function* () {
222
+ const request = yield* Route.Request
223
+ const body = yield* Effect.tryPromise(() => request.json())
224
+
225
+ yield* Ref.update(messagesRef, (msgs) => [...msgs, message])
226
+ yield* PubSub.publish(chatPubSub, message)
227
+
228
+ return ""
229
+ }),
230
+ )
231
+ ```
232
+
233
+ ## Fetch Client
234
+
235
+ Composable HTTP client with middleware. Build API wrappers that handle auth, validation, and error mapping in a clean pipeline.
236
+
237
+ ```typescript
238
+ import { Config, Effect, Schema } from "effect"
239
+ import * as Fetch from "effect-start/Fetch"
240
+
241
+ const client = Fetch.use((request, next) =>
242
+ Effect.gen(function* () {
243
+ const token = yield* Config.string("API_TOKEN")
244
+ return yield* next(
245
+ new Request(request, {
246
+ headers: { Authorization: `Bearer ${token}` },
247
+ }),
248
+ )
249
+ }),
250
+ ).use(Fetch.filterStatusOk())
251
+
252
+ const getUser = (id: string) =>
253
+ Effect.flatMap(
254
+ Effect.flatMap(client.get(`/users/${id}`), (entity) => entity.json),
255
+ Schema.decodeUnknown(UserSchema),
256
+ )
257
+ ```
258
+
259
+ ## Type-Safe Links
260
+
261
+ ```tsx
262
+ <a href={Route.link("/:owner/:repo", { owner: "torvalds", repo: "linux" })}>
263
+ torvalds/linux
264
+ </a>
265
+ ```
266
+
267
+ Typo in the path pattern? TypeScript catches it.
268
+
269
+ ## Layer Composition
270
+
271
+ `Start.pack` composes your application from Effect layers. Order matters -- dependents come first.
272
+
273
+ ```typescript
274
+ import { Development, FileRouter, Start } from "effect-start"
275
+ import { Studio } from "effect-start/studio"
276
+
277
+ export default Start.pack(
278
+ Studio.layer(),
279
+ Development.layer(),
280
+ FileRouter.layer(() => import("./routes/.server.ts")),
281
+ )
282
+ ```
283
+
284
+ This is just Effect's layer system. You can add database connections, auth providers, logging -- anything that can be expressed as a Layer plugs right in.
285
+
286
+ ## Tailwind CSS
287
+
288
+ Install and configure in under a minute.
56
289
 
57
290
  ```sh
58
291
  bun add -D tailwindcss
59
292
  ```
60
293
 
61
- Then, register a plugin in `bunfig.toml`:
62
-
63
294
  ```toml
295
+ # bunfig.toml
64
296
  [serve.static]
65
297
  plugins = ["effect-start/tailwind"]
66
298
  ```
67
299
 
68
- Finally, include it in your `src/app.css`:
69
-
70
- ```html
300
+ ```css
301
+ /* src/app.css */
71
302
  @import "tailwindcss";
72
303
  ```
304
+
305
+ Done.
306
+
307
+ ## Project Structure
308
+
309
+ ```
310
+ my-app/
311
+ src/
312
+ routes/
313
+ .server.ts # auto-generated route manifest
314
+ layer.tsx # root layout
315
+ route.tsx # home page
316
+ api/
317
+ users/
318
+ route.ts # GET /api/users
319
+ [id]/
320
+ route.ts # GET /api/users/:id
321
+ admin/
322
+ layer.tsx # admin-only layout/auth
323
+ route.tsx # GET /admin
324
+ server.ts # entry point
325
+ app.css # styles
326
+ bunfig.toml
327
+ tsconfig.json
328
+ package.json
329
+ ```
330
+
331
+ ## Examples
332
+
333
+ **`examples/gh1`** -- A GitHub explorer. Fetches repos, users, issues, PRs, and commits from the GitHub API. Shows file-based routing with nested dynamic segments, parallel data fetching, schema-validated API responses, and Tailwind-styled server-rendered UI.
334
+
335
+ **`examples/chat`** -- Real-time chat. Demonstrates SSE streaming, PubSub for message broadcasting, reactive state with Effect Ref, and form handling. No client-side framework -- just server-rendered HTML and data attributes.
336
+
337
+ ## License
338
+
339
+ MIT
package/dist/Fetch.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as Stream from "effect/Stream";
4
4
  import * as Entity from "./Entity.ts";
5
5
  declare const TypeId: "~effect-start/FetchClient";
6
6
  export type FetchEntity = Entity.Entity<Stream.Stream<Uint8Array, FetchError, never>, FetchError>;
7
- declare const FetchError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
7
+ declare const FetchError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
8
8
  readonly _tag: "FetchError";
9
9
  } & Readonly<A>;
10
10
  export declare class FetchError extends FetchError_base<{
@@ -5,7 +5,7 @@ import * as PathPattern from "./_PathPattern.ts";
5
5
  import type * as System from "./System.ts";
6
6
  import * as Route from "./Route.ts";
7
7
  import * as RouteTree from "./RouteTree.ts";
8
- declare const FileRouterError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
8
+ declare const FileRouterError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
9
9
  readonly _tag: "FileRouterError";
10
10
  } & Readonly<A>;
11
11
  export declare class FileRouterError extends FileRouterError_base<{
@@ -1 +1 @@
1
- {"version":3,"file":"FileRouterCodegen.d.ts","sourceRoot":"","sources":["../src/FileRouterCodegen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAGhD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,UAAU,CAAC,WAAW,CAWrF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAYjG;AAED;;GAEG;AAEH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,CAAC,iBAAiB,GACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,CAAC,CA6CxE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,iBAAiB,GAAG,MAAM,GAAG,IAAI,CA+EpF;AAED;;;GAGG;AACH,wBAAgB,MAAM,CACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,SAAe,GACtB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,CAAC,CAkExE;AAED,wBAAgB,IAAI,CAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,SAAe,GACtB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,CAAC,CAyCxE"}
1
+ {"version":3,"file":"FileRouterCodegen.d.ts","sourceRoot":"","sources":["../src/FileRouterCodegen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAGhD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,UAAU,CAAC,WAAW,CAWrF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAYjG;AAED;;GAEG;AAEH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,CAAC,iBAAiB,GACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,CAAC,CA6CxE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAqFpF;AAED;;;GAGG;AACH,wBAAgB,MAAM,CACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,SAAe,GACtB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,CAAC,CAkExE;AAED,wBAAgB,IAAI,CAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,SAAe,GACtB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,CAAC,CAyCxE"}
@@ -128,12 +128,18 @@ export function generateCode(fileRoutes) {
128
128
  })
129
129
  .join(",\n");
130
130
  return `/**
131
- * Auto-generated by effect-start on startup and changes. Do not edit manually.
131
+ * Generated by effect-start. DO NOT EDIT.
132
132
  */
133
133
 
134
- export default {
134
+ const routes = {
135
135
  ${routeEntries},
136
136
  } satisfies import("effect-start/FileRouter").FileRoutes
137
+
138
+ export default routes
139
+
140
+ declare module "effect-start/dev" {
141
+ export interface Routes extends Omit<typeof import("./.server.ts").default, never> {}
142
+ }
137
143
  `;
138
144
  }
139
145
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"FileRouterCodegen.js","sourceRoot":"","sources":["../src/FileRouterCodegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileRouterCodegen.js","sourceRoot":"","sources":["../src/FileRouterCodegen.ts"],"names":[],"mappings":"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"}
package/dist/Job.d.ts ADDED
@@ -0,0 +1,94 @@
1
+ import * as Context from "effect/Context";
2
+ import type * as Duration from "effect/Duration";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import * as Schema from "effect/Schema";
6
+ import type * as Schedule from "effect/Schedule";
7
+ declare const JobError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
8
+ readonly _tag: "JobError";
9
+ } & Readonly<A>;
10
+ export declare class JobError extends JobError_base<{
11
+ readonly reason: "Enqueue" | "Claim" | "Execute" | "Serialize" | "Deserialize" | "NotFound";
12
+ readonly message: string;
13
+ readonly cause?: unknown;
14
+ }> {
15
+ }
16
+ export declare const SerializedJob: Schema.Struct<{
17
+ id: typeof Schema.String;
18
+ name: typeof Schema.String;
19
+ payload: typeof Schema.Unknown;
20
+ queue: typeof Schema.String;
21
+ priority: Schema.optionalWith<typeof Schema.Number, {
22
+ default: () => number;
23
+ }>;
24
+ executions: Schema.optionalWith<typeof Schema.Number, {
25
+ default: () => number;
26
+ }>;
27
+ scheduledAt: Schema.NullOr<typeof Schema.Number>;
28
+ enqueuedAt: typeof Schema.Number;
29
+ maxAttempts: Schema.optionalWith<typeof Schema.Number, {
30
+ default: () => number;
31
+ }>;
32
+ }>;
33
+ export type SerializedJob = typeof SerializedJob.Type;
34
+ export interface JobQueue {
35
+ readonly enqueue: (job: SerializedJob) => Effect.Effect<void, JobError>;
36
+ readonly claim: (options: {
37
+ readonly queues: ReadonlyArray<string>;
38
+ readonly limit: number;
39
+ }) => Effect.Effect<ReadonlyArray<SerializedJob>, JobError>;
40
+ readonly complete: (jobId: string) => Effect.Effect<void, JobError>;
41
+ readonly fail: (jobId: string, error: string) => Effect.Effect<void, JobError>;
42
+ readonly release: (jobId: string, runAt?: number) => Effect.Effect<void, JobError>;
43
+ readonly size: Effect.Effect<number, JobError>;
44
+ }
45
+ export declare const JobQueue: Context.Tag<JobQueue, JobQueue>;
46
+ export interface AnyJob {
47
+ _name: string | undefined;
48
+ readonly payload: Schema.Schema<any, any>;
49
+ readonly execute: (payload: any) => Effect.Effect<void, any, any>;
50
+ readonly queue: string;
51
+ readonly priority: number;
52
+ readonly retryPolicy: unknown;
53
+ readonly discardWhen: unknown;
54
+ readonly enqueue: (payload: any, options?: {
55
+ readonly scheduledAt?: Date;
56
+ }) => Effect.Effect<void, JobError, JobQueue>;
57
+ }
58
+ export interface JobMap {
59
+ readonly get: (name: string) => AnyJob | undefined;
60
+ }
61
+ export declare const JobMap: Context.Tag<JobMap, JobMap>;
62
+ export interface Job<A, I = A, E = never, R = never> {
63
+ _name: string | undefined;
64
+ readonly payload: Schema.Schema<A, I>;
65
+ readonly execute: (payload: A) => Effect.Effect<void, E, R>;
66
+ readonly queue: string;
67
+ readonly priority: number;
68
+ readonly retryPolicy: Schedule.Schedule<unknown, E> | undefined;
69
+ readonly discardWhen: ((error: NoInfer<E>) => boolean) | undefined;
70
+ readonly enqueue: (payload: A, options?: {
71
+ readonly scheduledAt?: Date;
72
+ }) => Effect.Effect<void, JobError, JobQueue>;
73
+ }
74
+ export declare function make<A, I, E, R>(options: {
75
+ readonly payload: Schema.Schema<A, I>;
76
+ readonly execute: (payload: A) => Effect.Effect<void, E, R>;
77
+ readonly queue?: string;
78
+ readonly priority?: number;
79
+ readonly retryPolicy?: Schedule.Schedule<unknown, NoInfer<E>>;
80
+ readonly discardWhen?: (error: NoInfer<E>) => boolean;
81
+ }): Job<A, I, E, R>;
82
+ export declare function jobMap(jobs: Record<string, Promise<{
83
+ default: AnyJob;
84
+ }>>): Effect.Effect<JobMap, JobError>;
85
+ export declare function execute(serialized: SerializedJob): Effect.Effect<void, JobError, JobMap>;
86
+ export declare function worker(options?: {
87
+ readonly queues?: ReadonlyArray<string>;
88
+ readonly concurrency?: number;
89
+ readonly pollInterval?: Duration.DurationInput;
90
+ }): Effect.Effect<never, JobError, JobQueue | JobMap>;
91
+ export declare const layerMemory: Layer.Layer<JobQueue>;
92
+ export declare const layerTest: Layer.Layer<JobQueue>;
93
+ export {};
94
+ //# sourceMappingURL=Job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Job.d.ts","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":"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"}