effect 4.0.0-beta.34 → 4.0.0-beta.36
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/dist/Channel.d.ts +10 -1
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +14 -8
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +4 -0
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js.map +1 -1
- package/dist/Cron.d.ts +7 -0
- package/dist/Cron.d.ts.map +1 -1
- package/dist/Cron.js +109 -45
- package/dist/Cron.js.map +1 -1
- package/dist/Effect.d.ts +2 -2
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js.map +1 -1
- package/dist/Equivalence.d.ts +52 -0
- package/dist/Equivalence.d.ts.map +1 -1
- package/dist/Equivalence.js +52 -0
- package/dist/Equivalence.js.map +1 -1
- package/dist/Layer.d.ts +5 -2
- package/dist/Layer.d.ts.map +1 -1
- package/dist/Layer.js +14 -1
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMap.d.ts +5 -4
- package/dist/LayerMap.d.ts.map +1 -1
- package/dist/LayerMap.js.map +1 -1
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +9 -3
- package/dist/PubSub.js.map +1 -1
- package/dist/Schema.d.ts +50 -5
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +40 -0
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaParser.d.ts +29 -0
- package/dist/SchemaParser.d.ts.map +1 -1
- package/dist/SchemaParser.js +38 -0
- package/dist/SchemaParser.js.map +1 -1
- package/dist/Stream.d.ts +10 -1
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +5 -1
- package/dist/Stream.js.map +1 -1
- package/dist/internal/dateTime.js +8 -1
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +4 -3
- package/dist/internal/effect.js.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +1 -0
- package/dist/unstable/ai/AiError.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.js +7 -3
- package/dist/unstable/ai/AiError.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/LanguageModel.js +49 -21
- package/dist/unstable/ai/LanguageModel.js.map +1 -1
- package/dist/unstable/cli/CliOutput.js +4 -3
- package/dist/unstable/cli/CliOutput.js.map +1 -1
- package/dist/unstable/cli/Prompt.js +146 -13
- package/dist/unstable/cli/Prompt.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.js +2 -2
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +15 -13
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.js +5 -3
- package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
- package/dist/unstable/rpc/RpcSerialization.js +1 -1
- package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
- package/package.json +1 -1
- package/src/Channel.ts +23 -11
- package/src/Config.ts +5 -0
- package/src/Cron.ts +142 -45
- package/src/Effect.ts +3 -3
- package/src/Equivalence.ts +56 -0
- package/src/Layer.ts +27 -9
- package/src/LayerMap.ts +7 -5
- package/src/PubSub.ts +13 -5
- package/src/Schema.ts +62 -8
- package/src/SchemaParser.ts +53 -0
- package/src/Stream.ts +11 -1
- package/src/internal/dateTime.ts +8 -1
- package/src/internal/effect.ts +16 -13
- package/src/unstable/ai/AiError.ts +4 -2
- package/src/unstable/ai/LanguageModel.ts +59 -40
- package/src/unstable/cli/CliOutput.ts +5 -4
- package/src/unstable/cli/Prompt.ts +147 -14
- package/src/unstable/httpapi/HttpApiEndpoint.ts +2 -2
- package/src/unstable/httpapi/HttpApiMiddleware.ts +36 -20
- package/src/unstable/rpc/RpcSerialization.ts +1 -1
|
@@ -27,17 +27,23 @@ const SecurityTypeId = "~effect/httpapi/HttpApiMiddleware/Security"
|
|
|
27
27
|
*/
|
|
28
28
|
export const isSecurity = (u: AnyService): u is AnyServiceSecurity => hasProperty(u, SecurityTypeId)
|
|
29
29
|
|
|
30
|
+
type ErrorConstraint = Schema.Top | ReadonlyArray<Schema.Top>
|
|
31
|
+
|
|
32
|
+
type ErrorSchemaFromConstraint<E> = E extends ReadonlyArray<Schema.Top> ? E[number]
|
|
33
|
+
: E extends Schema.Top ? E
|
|
34
|
+
: never
|
|
35
|
+
|
|
30
36
|
/**
|
|
31
37
|
* @since 4.0.0
|
|
32
38
|
* @category models
|
|
33
39
|
*/
|
|
34
|
-
export type HttpApiMiddleware<Provides, E extends
|
|
40
|
+
export type HttpApiMiddleware<Provides, E extends ErrorConstraint, Requires> = (
|
|
35
41
|
httpEffect: Effect.Effect<HttpServerResponse, unhandled, Provides>,
|
|
36
42
|
options: {
|
|
37
43
|
readonly endpoint: HttpApiEndpoint.AnyWithProps
|
|
38
44
|
readonly group: HttpApiGroup.AnyWithProps
|
|
39
45
|
}
|
|
40
|
-
) => Effect.Effect<HttpServerResponse, unhandled | E["Type"], Requires | HttpRouter.Provided>
|
|
46
|
+
) => Effect.Effect<HttpServerResponse, unhandled | ErrorSchemaFromConstraint<E>["Type"], Requires | HttpRouter.Provided>
|
|
41
47
|
|
|
42
48
|
/**
|
|
43
49
|
* @since 4.0.0
|
|
@@ -46,7 +52,7 @@ export type HttpApiMiddleware<Provides, E extends Schema.Top, Requires> = (
|
|
|
46
52
|
export type HttpApiMiddlewareSecurity<
|
|
47
53
|
Security extends Record<string, HttpApiSecurity.HttpApiSecurity>,
|
|
48
54
|
Provides,
|
|
49
|
-
E extends
|
|
55
|
+
E extends ErrorConstraint,
|
|
50
56
|
Requires
|
|
51
57
|
> = {
|
|
52
58
|
readonly [K in keyof Security]: (
|
|
@@ -56,7 +62,11 @@ export type HttpApiMiddlewareSecurity<
|
|
|
56
62
|
readonly endpoint: HttpApiEndpoint.AnyWithProps
|
|
57
63
|
readonly group: HttpApiGroup.AnyWithProps
|
|
58
64
|
}
|
|
59
|
-
) => Effect.Effect<
|
|
65
|
+
) => Effect.Effect<
|
|
66
|
+
HttpServerResponse,
|
|
67
|
+
unhandled | ErrorSchemaFromConstraint<E>["Type"],
|
|
68
|
+
Requires | HttpRouter.Provided
|
|
69
|
+
>
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
/**
|
|
@@ -90,7 +100,7 @@ export interface ForClient<Id> {
|
|
|
90
100
|
export interface AnyService extends ServiceMap.Key<any, any> {
|
|
91
101
|
readonly [TypeId]: typeof TypeId
|
|
92
102
|
readonly provides: any
|
|
93
|
-
readonly error: Schema.Top
|
|
103
|
+
readonly error: ReadonlySet<Schema.Top>
|
|
94
104
|
readonly requiredForClient: boolean
|
|
95
105
|
readonly "~ClientError": any
|
|
96
106
|
}
|
|
@@ -112,7 +122,7 @@ export interface AnyId {
|
|
|
112
122
|
readonly [TypeId]: {
|
|
113
123
|
readonly provides: any
|
|
114
124
|
readonly requires: any
|
|
115
|
-
readonly error:
|
|
125
|
+
readonly error: ErrorConstraint
|
|
116
126
|
readonly clientError: any
|
|
117
127
|
readonly requiredForClient: boolean
|
|
118
128
|
}
|
|
@@ -140,8 +150,7 @@ export type ApplyServices<A extends AnyId, R> = Exclude<R, Provides<A>> | Requir
|
|
|
140
150
|
* @since 4.0.0
|
|
141
151
|
* @category models
|
|
142
152
|
*/
|
|
143
|
-
export type ErrorSchema<A> = A extends { readonly [TypeId]: { readonly error: infer E } }
|
|
144
|
-
? E extends Schema.Top ? E : never
|
|
153
|
+
export type ErrorSchema<A> = A extends { readonly [TypeId]: { readonly error: infer E } } ? ErrorSchemaFromConstraint<E>
|
|
145
154
|
: never
|
|
146
155
|
|
|
147
156
|
/**
|
|
@@ -195,7 +204,7 @@ export type ServiceClass<
|
|
|
195
204
|
Config extends {
|
|
196
205
|
requires: any
|
|
197
206
|
provides: any
|
|
198
|
-
error:
|
|
207
|
+
error: ErrorConstraint
|
|
199
208
|
clientError: any
|
|
200
209
|
requiredForClient: boolean
|
|
201
210
|
security: Record<string, HttpApiSecurity.HttpApiSecurity>
|
|
@@ -216,7 +225,7 @@ export type ServiceClass<
|
|
|
216
225
|
}
|
|
217
226
|
}
|
|
218
227
|
readonly [TypeId]: typeof TypeId
|
|
219
|
-
readonly error:
|
|
228
|
+
readonly error: ReadonlySet<Schema.Top>
|
|
220
229
|
readonly requiredForClient: Config["requiredForClient"]
|
|
221
230
|
readonly "~ClientError": Config["clientError"]
|
|
222
231
|
}
|
|
@@ -238,7 +247,7 @@ export const Service = <
|
|
|
238
247
|
} = { requires: never; provides: never; clientError: never }
|
|
239
248
|
>(): <
|
|
240
249
|
const Id extends string,
|
|
241
|
-
Error extends
|
|
250
|
+
const Error extends ErrorConstraint = never,
|
|
242
251
|
const Security extends Record<string, HttpApiSecurity.HttpApiSecurity> = never,
|
|
243
252
|
RequiredForClient extends boolean = false
|
|
244
253
|
>(
|
|
@@ -260,7 +269,7 @@ export const Service = <
|
|
|
260
269
|
id: string,
|
|
261
270
|
options?: {
|
|
262
271
|
readonly security?: Record<string, HttpApiSecurity.HttpApiSecurity> | undefined
|
|
263
|
-
readonly error?:
|
|
272
|
+
readonly error?: ErrorConstraint | undefined
|
|
264
273
|
readonly requiredForClient?: boolean | undefined
|
|
265
274
|
} | undefined
|
|
266
275
|
) => {
|
|
@@ -278,10 +287,8 @@ export const Service = <
|
|
|
278
287
|
}
|
|
279
288
|
})
|
|
280
289
|
self[TypeId] = TypeId
|
|
290
|
+
self.error = getError(options?.error)
|
|
281
291
|
self.requiredForClient = options?.requiredForClient ?? false
|
|
282
|
-
if (options?.error !== undefined) {
|
|
283
|
-
self.error = options.error
|
|
284
|
-
}
|
|
285
292
|
if (options?.security !== undefined) {
|
|
286
293
|
if (Object.keys(options.security).length === 0) {
|
|
287
294
|
throw new Error("HttpApiMiddleware.Service: security object must not be empty")
|
|
@@ -292,6 +299,11 @@ export const Service = <
|
|
|
292
299
|
return self
|
|
293
300
|
}
|
|
294
301
|
|
|
302
|
+
function getError(error: ErrorConstraint | undefined): ReadonlySet<Schema.Top> {
|
|
303
|
+
if (error === undefined) return new Set()
|
|
304
|
+
return new Set(Array.isArray(error) ? error : [error])
|
|
305
|
+
}
|
|
306
|
+
|
|
295
307
|
/**
|
|
296
308
|
* Implement a middleware Layer that transforms `SchemaError`'s.
|
|
297
309
|
*
|
|
@@ -317,12 +329,16 @@ export const Service = <
|
|
|
317
329
|
* @since 4.0.0
|
|
318
330
|
* @category SchemaError transform
|
|
319
331
|
*/
|
|
320
|
-
export const layerSchemaErrorTransform = <Id, E extends
|
|
332
|
+
export const layerSchemaErrorTransform = <Id, E extends ErrorConstraint, Requires>(
|
|
321
333
|
service: ServiceMap.Service<Id, HttpApiMiddleware<never, E, Requires>>,
|
|
322
334
|
transform: (
|
|
323
335
|
error: Schema.SchemaError,
|
|
324
336
|
context: { readonly endpoint: HttpApiEndpoint.AnyWithProps; readonly group: HttpApiGroup.AnyWithProps }
|
|
325
|
-
) => Effect.Effect<
|
|
337
|
+
) => Effect.Effect<
|
|
338
|
+
HttpServerResponse,
|
|
339
|
+
ErrorSchemaFromConstraint<E>["Type"] | Schema.SchemaError,
|
|
340
|
+
Requires | HttpRouter.Provided
|
|
341
|
+
>
|
|
326
342
|
): Layer.Layer<Id> =>
|
|
327
343
|
Layer.succeed(
|
|
328
344
|
service,
|
|
@@ -331,7 +347,7 @@ export const layerSchemaErrorTransform = <Id, E extends Schema.Top, Requires>(
|
|
|
331
347
|
httpEffect,
|
|
332
348
|
(e): Effect.Effect<
|
|
333
349
|
HttpServerResponse,
|
|
334
|
-
unhandled | Schema.SchemaError | E["Type"],
|
|
350
|
+
unhandled | Schema.SchemaError | ErrorSchemaFromConstraint<E>["Type"],
|
|
335
351
|
Requires | HttpRouter.Provided
|
|
336
352
|
> => Schema.isSchemaError(e) ? transform(e, options) : Effect.fail(e)
|
|
337
353
|
)
|
|
@@ -344,9 +360,9 @@ export const layerSchemaErrorTransform = <Id, E extends Schema.Top, Requires>(
|
|
|
344
360
|
export const layerClient = <Id extends AnyId, S, R, EX = never, RX = never>(
|
|
345
361
|
tag: ServiceMap.Key<Id, S>,
|
|
346
362
|
service:
|
|
347
|
-
| HttpApiMiddlewareClient<Id
|
|
363
|
+
| HttpApiMiddlewareClient<Error<Id>, Id[typeof TypeId]["clientError"], R>
|
|
348
364
|
| Effect.Effect<
|
|
349
|
-
HttpApiMiddlewareClient<Id
|
|
365
|
+
HttpApiMiddlewareClient<Error<Id>, Id[typeof TypeId]["clientError"], R>,
|
|
350
366
|
EX,
|
|
351
367
|
RX
|
|
352
368
|
>
|
|
@@ -175,7 +175,7 @@ function decodeJsonRpcRaw(
|
|
|
175
175
|
}
|
|
176
176
|
return messages
|
|
177
177
|
}
|
|
178
|
-
return
|
|
178
|
+
return [decodeJsonRpcMessage(decoded)]
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
function decodeJsonRpcMessage(decoded: JsonRpcMessage): RpcMessage.FromClientEncoded | RpcMessage.FromServerEncoded {
|