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.
- package/README.md +303 -36
- package/dist/Fetch.d.ts +1 -1
- package/dist/FileRouter.d.ts +1 -1
- package/dist/FileRouterCodegen.d.ts.map +1 -1
- package/dist/FileRouterCodegen.js +8 -2
- package/dist/FileRouterCodegen.js.map +1 -1
- package/dist/Job.d.ts +94 -0
- package/dist/Job.d.ts.map +1 -0
- package/dist/Job.js +157 -0
- package/dist/Job.js.map +1 -0
- package/dist/Password.d.ts +1 -1
- package/dist/Route.d.ts +20 -15
- package/dist/Route.d.ts.map +1 -1
- package/dist/Route.js +12 -0
- package/dist/Route.js.map +1 -1
- package/dist/RouteBody.d.ts +7 -7
- package/dist/RouteBody.d.ts.map +1 -1
- package/dist/RouteBody.js.map +1 -1
- package/dist/RouteHook.d.ts +1 -1
- package/dist/RouteHook.d.ts.map +1 -1
- package/dist/RouteHook.js.map +1 -1
- package/dist/RouteHttp.d.ts.map +1 -1
- package/dist/RouteHttp.js +10 -4
- package/dist/RouteHttp.js.map +1 -1
- package/dist/RouteLink.d.ts +16 -0
- package/dist/RouteLink.d.ts.map +1 -0
- package/dist/RouteLink.js +23 -0
- package/dist/RouteLink.js.map +1 -0
- package/dist/RouteMount.d.ts +29 -32
- package/dist/RouteMount.d.ts.map +1 -1
- package/dist/RouteMount.js.map +1 -1
- package/dist/RouteSchema.d.ts +81 -28
- package/dist/RouteSchema.d.ts.map +1 -1
- package/dist/RouteSchema.js +56 -101
- package/dist/RouteSchema.js.map +1 -1
- package/dist/RouteSse.d.ts +1 -1
- package/dist/RouteSse.d.ts.map +1 -1
- package/dist/RouteSse.js.map +1 -1
- package/dist/Socket.d.ts +1 -1
- package/dist/Start.js +1 -1
- package/dist/Start.js.map +1 -1
- package/dist/StaticFiles.d.ts +4 -10
- package/dist/StaticFiles.d.ts.map +1 -1
- package/dist/StaticFiles.js +3 -10
- package/dist/StaticFiles.js.map +1 -1
- package/dist/System.d.ts +1 -1
- package/dist/_Docker.d.ts +1 -1
- package/dist/_HtmlScanner.d.ts +42 -0
- package/dist/_HtmlScanner.d.ts.map +1 -0
- package/dist/_HtmlScanner.js +385 -0
- package/dist/_HtmlScanner.js.map +1 -0
- package/dist/_RouteLink.d.ts +16 -0
- package/dist/_RouteLink.d.ts.map +1 -0
- package/dist/_RouteLink.js +22 -0
- package/dist/_RouteLink.js.map +1 -0
- package/dist/bun/BunRoute.d.ts +4 -6
- package/dist/bun/BunRoute.d.ts.map +1 -1
- package/dist/bun/BunRoute.js +1 -1
- package/dist/bun/BunRoute.js.map +1 -1
- package/dist/bundler/Bundle.d.ts +1 -1
- package/dist/bundler/BundleRoute.d.ts +5 -6
- package/dist/bundler/BundleRoute.d.ts.map +1 -1
- package/dist/bundler/BundleRoute.js +5 -11
- package/dist/bundler/BundleRoute.js.map +1 -1
- package/dist/datastar/watchers/patchElements.js +1 -1
- package/dist/datastar/watchers/patchElements.js.map +1 -1
- package/dist/experimental/CsrfProtection.d.ts +67 -0
- package/dist/experimental/CsrfProtection.d.ts.map +1 -0
- package/dist/experimental/CsrfProtection.js +100 -0
- package/dist/experimental/CsrfProtection.js.map +1 -0
- package/dist/experimental/EncryptedCookies.d.ts +1 -1
- package/dist/experimental/KeyValueStore.d.ts +1 -1
- package/dist/lint/plugin.js +4 -0
- package/dist/lint/plugin.js.map +1 -1
- package/dist/sql/SqlClient.d.ts +1 -1
- package/dist/studio/Studio.d.ts +1 -1
- package/dist/studio/Studio.d.ts.map +1 -1
- package/dist/studio/Studio.js +4 -10
- package/dist/studio/Studio.js.map +1 -1
- package/dist/studio/routes/errors/route.d.ts +3 -3
- package/dist/studio/routes/errors/route.d.ts.map +1 -1
- package/dist/studio/routes/errors/route.js +3 -2
- package/dist/studio/routes/errors/route.js.map +1 -1
- package/dist/studio/routes/fiberDetail.d.ts +3 -7
- package/dist/studio/routes/fiberDetail.d.ts.map +1 -1
- package/dist/studio/routes/fibers/route.d.ts +3 -3
- package/dist/studio/routes/layout.d.ts +3 -3
- package/dist/studio/routes/logs/route.d.ts +3 -3
- package/dist/studio/routes/logs/route.d.ts.map +1 -1
- package/dist/studio/routes/logs/route.js +3 -2
- package/dist/studio/routes/logs/route.js.map +1 -1
- package/dist/studio/routes/metrics/route.d.ts +3 -3
- package/dist/studio/routes/route.d.ts +2 -2
- package/dist/studio/routes/routes/route.d.ts +2 -2
- package/dist/studio/routes/services/route.d.ts +2 -2
- package/dist/studio/routes/system/route.d.ts +3 -3
- package/dist/studio/routes/traceDetail.d.ts +3 -7
- package/dist/studio/routes/traceDetail.d.ts.map +1 -1
- package/dist/studio/routes/traces/route.d.ts +3 -3
- package/dist/studio/routes/traces/route.d.ts.map +1 -1
- package/dist/studio/routes/traces/route.js +3 -2
- package/dist/studio/routes/traces/route.js.map +1 -1
- package/dist/studio/routes/tree.d.ts +43 -51
- package/dist/studio/routes/tree.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/FileRouterCodegen.ts +8 -2
- package/src/Route.ts +55 -34
- package/src/RouteBody.ts +15 -15
- package/src/RouteHook.ts +3 -3
- package/src/RouteHttp.ts +10 -4
- package/src/RouteLink.ts +56 -0
- package/src/RouteMount.ts +43 -48
- package/src/RouteSchema.ts +299 -166
- package/src/RouteSse.ts +3 -3
- package/src/Start.ts +1 -1
- package/src/StaticFiles.ts +10 -24
- package/src/_HtmlScanner.ts +415 -0
- package/src/bun/BunRoute.ts +11 -11
- package/src/bundler/BundleRoute.ts +8 -19
- package/src/datastar/watchers/patchElements.ts +1 -1
- package/src/dev.d.ts +3 -0
- package/src/experimental/CsrfProtection.ts +153 -0
- package/src/lint/plugin.js +2 -0
- package/src/studio/Studio.ts +4 -14
- package/src/studio/routes/errors/route.tsx +3 -2
- package/src/studio/routes/logs/route.tsx +3 -2
- package/src/studio/routes/traces/route.tsx +3 -2
package/README.md
CHANGED
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
# Effect Start
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
7
|
+
## Quick Start
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
```sh
|
|
10
|
+
bun add effect-start effect
|
|
11
|
+
```
|
|
13
12
|
|
|
14
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
167
|
+
## Middleware (Layers)
|
|
168
|
+
|
|
169
|
+
Drop a `layer.tsx` in any directory. It wraps every route beneath it.
|
|
51
170
|
|
|
52
|
-
|
|
53
|
-
|
|
171
|
+
```tsx
|
|
172
|
+
// routes/layer.tsx
|
|
173
|
+
import { Route, Bundle } from "effect-start"
|
|
54
174
|
|
|
55
|
-
|
|
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
|
-
|
|
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").
|
|
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<{
|
package/dist/FileRouter.d.ts
CHANGED
|
@@ -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").
|
|
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,
|
|
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
|
-
*
|
|
131
|
+
* Generated by effect-start. DO NOT EDIT.
|
|
132
132
|
*/
|
|
133
133
|
|
|
134
|
-
|
|
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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"}
|