@effect/platform 0.68.6 → 0.69.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/HttpApiMiddleware/package.json +6 -0
- package/README.md +306 -233
- package/dist/cjs/Headers.js +7 -2
- package/dist/cjs/Headers.js.map +1 -1
- package/dist/cjs/HttpApi.js +90 -78
- package/dist/cjs/HttpApi.js.map +1 -1
- package/dist/cjs/HttpApiBuilder.js +243 -255
- package/dist/cjs/HttpApiBuilder.js.map +1 -1
- package/dist/cjs/HttpApiClient.js +64 -59
- package/dist/cjs/HttpApiClient.js.map +1 -1
- package/dist/cjs/HttpApiEndpoint.js +74 -109
- package/dist/cjs/HttpApiEndpoint.js.map +1 -1
- package/dist/cjs/HttpApiError.js +3 -4
- package/dist/cjs/HttpApiError.js.map +1 -1
- package/dist/cjs/HttpApiGroup.js +103 -100
- package/dist/cjs/HttpApiGroup.js.map +1 -1
- package/dist/cjs/HttpApiMiddleware.js +67 -0
- package/dist/cjs/HttpApiMiddleware.js.map +1 -0
- package/dist/cjs/HttpApiSchema.js +33 -7
- package/dist/cjs/HttpApiSchema.js.map +1 -1
- package/dist/cjs/HttpApiSecurity.js +2 -2
- package/dist/cjs/HttpApiSecurity.js.map +1 -1
- package/dist/cjs/HttpApiSwagger.js +3 -1
- package/dist/cjs/HttpApiSwagger.js.map +1 -1
- package/dist/cjs/HttpBody.js.map +1 -1
- package/dist/cjs/HttpIncomingMessage.js +5 -1
- package/dist/cjs/HttpIncomingMessage.js.map +1 -1
- package/dist/cjs/HttpServer.js +12 -1
- package/dist/cjs/HttpServer.js.map +1 -1
- package/dist/cjs/HttpServerRespondable.js +1 -1
- package/dist/cjs/HttpServerRespondable.js.map +1 -1
- package/dist/cjs/OpenApi.js +102 -63
- package/dist/cjs/OpenApi.js.map +1 -1
- package/dist/cjs/OpenApiJsonSchema.js +58 -47
- package/dist/cjs/OpenApiJsonSchema.js.map +1 -1
- package/dist/cjs/Transferable.js +2 -2
- package/dist/cjs/Transferable.js.map +1 -1
- package/dist/cjs/UrlParams.js +5 -1
- package/dist/cjs/UrlParams.js.map +1 -1
- package/dist/cjs/Worker.js.map +1 -1
- package/dist/cjs/WorkerError.js +1 -5
- package/dist/cjs/WorkerError.js.map +1 -1
- package/dist/cjs/WorkerRunner.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/internal/httpBody.js +1 -1
- package/dist/cjs/internal/httpBody.js.map +1 -1
- package/dist/cjs/internal/httpClientRequest.js.map +1 -1
- package/dist/cjs/internal/httpClientResponse.js +1 -1
- package/dist/cjs/internal/httpClientResponse.js.map +1 -1
- package/dist/cjs/internal/httpRouter.js +1 -1
- package/dist/cjs/internal/httpRouter.js.map +1 -1
- package/dist/cjs/internal/httpServer.js +7 -1
- package/dist/cjs/internal/httpServer.js.map +1 -1
- package/dist/cjs/internal/httpServerRequest.js +1 -1
- package/dist/cjs/internal/httpServerRequest.js.map +1 -1
- package/dist/cjs/internal/httpServerResponse.js.map +1 -1
- package/dist/cjs/internal/keyValueStore.js +1 -1
- package/dist/cjs/internal/keyValueStore.js.map +1 -1
- package/dist/cjs/internal/multipart.js +1 -1
- package/dist/cjs/internal/multipart.js.map +1 -1
- package/dist/cjs/internal/worker.js +6 -7
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/cjs/internal/workerRunner.js +3 -4
- package/dist/cjs/internal/workerRunner.js.map +1 -1
- package/dist/dts/Headers.d.ts +4 -6
- package/dist/dts/Headers.d.ts.map +1 -1
- package/dist/dts/HttpApi.d.ts +64 -140
- package/dist/dts/HttpApi.d.ts.map +1 -1
- package/dist/dts/HttpApiBuilder.d.ts +84 -167
- package/dist/dts/HttpApiBuilder.d.ts.map +1 -1
- package/dist/dts/HttpApiClient.d.ts +34 -11
- package/dist/dts/HttpApiClient.d.ts.map +1 -1
- package/dist/dts/HttpApiEndpoint.d.ts +119 -273
- package/dist/dts/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/dts/HttpApiError.d.ts +5 -2
- package/dist/dts/HttpApiError.d.ts.map +1 -1
- package/dist/dts/HttpApiGroup.d.ts +96 -194
- package/dist/dts/HttpApiGroup.d.ts.map +1 -1
- package/dist/dts/HttpApiMiddleware.d.ts +231 -0
- package/dist/dts/HttpApiMiddleware.d.ts.map +1 -0
- package/dist/dts/HttpApiSchema.d.ts +6 -2
- package/dist/dts/HttpApiSchema.d.ts.map +1 -1
- package/dist/dts/HttpApiSecurity.d.ts +1 -1
- package/dist/dts/HttpApiSecurity.d.ts.map +1 -1
- package/dist/dts/HttpApiSwagger.d.ts +2 -2
- package/dist/dts/HttpApiSwagger.d.ts.map +1 -1
- package/dist/dts/HttpBody.d.ts +2 -2
- package/dist/dts/HttpBody.d.ts.map +1 -1
- package/dist/dts/HttpClientRequest.d.ts +2 -2
- package/dist/dts/HttpClientRequest.d.ts.map +1 -1
- package/dist/dts/HttpClientResponse.d.ts +3 -3
- package/dist/dts/HttpClientResponse.d.ts.map +1 -1
- package/dist/dts/HttpIncomingMessage.d.ts +3 -3
- package/dist/dts/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/dts/HttpRouter.d.ts +3 -3
- package/dist/dts/HttpRouter.d.ts.map +1 -1
- package/dist/dts/HttpServer.d.ts +15 -0
- package/dist/dts/HttpServer.d.ts.map +1 -1
- package/dist/dts/HttpServerRequest.d.ts +3 -3
- package/dist/dts/HttpServerRequest.d.ts.map +1 -1
- package/dist/dts/HttpServerRespondable.d.ts.map +1 -1
- package/dist/dts/HttpServerResponse.d.ts +2 -2
- package/dist/dts/HttpServerResponse.d.ts.map +1 -1
- package/dist/dts/KeyValueStore.d.ts +2 -2
- package/dist/dts/KeyValueStore.d.ts.map +1 -1
- package/dist/dts/Multipart.d.ts +3 -3
- package/dist/dts/Multipart.d.ts.map +1 -1
- package/dist/dts/OpenApi.d.ts +17 -39
- package/dist/dts/OpenApi.d.ts.map +1 -1
- package/dist/dts/OpenApiJsonSchema.d.ts +10 -5
- package/dist/dts/OpenApiJsonSchema.d.ts.map +1 -1
- package/dist/dts/Transferable.d.ts +4 -1
- package/dist/dts/Transferable.d.ts.map +1 -1
- package/dist/dts/UrlParams.d.ts +3 -6
- package/dist/dts/UrlParams.d.ts.map +1 -1
- package/dist/dts/Worker.d.ts +7 -8
- package/dist/dts/Worker.d.ts.map +1 -1
- package/dist/dts/WorkerError.d.ts +1 -1
- package/dist/dts/WorkerError.d.ts.map +1 -1
- package/dist/dts/WorkerRunner.d.ts +2 -3
- package/dist/dts/WorkerRunner.d.ts.map +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/httpRouter.d.ts.map +1 -1
- package/dist/esm/Headers.js +7 -2
- package/dist/esm/Headers.js.map +1 -1
- package/dist/esm/HttpApi.js +88 -77
- package/dist/esm/HttpApi.js.map +1 -1
- package/dist/esm/HttpApiBuilder.js +236 -244
- package/dist/esm/HttpApiBuilder.js.map +1 -1
- package/dist/esm/HttpApiClient.js +64 -59
- package/dist/esm/HttpApiClient.js.map +1 -1
- package/dist/esm/HttpApiEndpoint.js +73 -106
- package/dist/esm/HttpApiEndpoint.js.map +1 -1
- package/dist/esm/HttpApiError.js +3 -4
- package/dist/esm/HttpApiError.js.map +1 -1
- package/dist/esm/HttpApiGroup.js +102 -99
- package/dist/esm/HttpApiGroup.js.map +1 -1
- package/dist/esm/HttpApiMiddleware.js +56 -0
- package/dist/esm/HttpApiMiddleware.js.map +1 -0
- package/dist/esm/HttpApiSchema.js +31 -5
- package/dist/esm/HttpApiSchema.js.map +1 -1
- package/dist/esm/HttpApiSecurity.js +1 -1
- package/dist/esm/HttpApiSecurity.js.map +1 -1
- package/dist/esm/HttpApiSwagger.js +4 -2
- package/dist/esm/HttpApiSwagger.js.map +1 -1
- package/dist/esm/HttpBody.js.map +1 -1
- package/dist/esm/HttpIncomingMessage.js +4 -1
- package/dist/esm/HttpIncomingMessage.js.map +1 -1
- package/dist/esm/HttpServer.js +11 -0
- package/dist/esm/HttpServer.js.map +1 -1
- package/dist/esm/HttpServerRespondable.js +1 -1
- package/dist/esm/HttpServerRespondable.js.map +1 -1
- package/dist/esm/OpenApi.js +97 -59
- package/dist/esm/OpenApi.js.map +1 -1
- package/dist/esm/OpenApiJsonSchema.js +56 -46
- package/dist/esm/OpenApiJsonSchema.js.map +1 -1
- package/dist/esm/Transferable.js +2 -2
- package/dist/esm/Transferable.js.map +1 -1
- package/dist/esm/UrlParams.js +4 -1
- package/dist/esm/UrlParams.js.map +1 -1
- package/dist/esm/Worker.js.map +1 -1
- package/dist/esm/WorkerError.js +1 -4
- package/dist/esm/WorkerError.js.map +1 -1
- package/dist/esm/WorkerRunner.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/httpBody.js +1 -1
- package/dist/esm/internal/httpBody.js.map +1 -1
- package/dist/esm/internal/httpClientRequest.js.map +1 -1
- package/dist/esm/internal/httpClientResponse.js +1 -1
- package/dist/esm/internal/httpClientResponse.js.map +1 -1
- package/dist/esm/internal/httpRouter.js +1 -1
- package/dist/esm/internal/httpRouter.js.map +1 -1
- package/dist/esm/internal/httpServer.js +6 -0
- package/dist/esm/internal/httpServer.js.map +1 -1
- package/dist/esm/internal/httpServerRequest.js +1 -1
- package/dist/esm/internal/httpServerRequest.js.map +1 -1
- package/dist/esm/internal/httpServerResponse.js.map +1 -1
- package/dist/esm/internal/keyValueStore.js +1 -1
- package/dist/esm/internal/keyValueStore.js.map +1 -1
- package/dist/esm/internal/multipart.js +1 -1
- package/dist/esm/internal/multipart.js.map +1 -1
- package/dist/esm/internal/worker.js +6 -7
- package/dist/esm/internal/worker.js.map +1 -1
- package/dist/esm/internal/workerRunner.js +3 -4
- package/dist/esm/internal/workerRunner.js.map +1 -1
- package/package.json +10 -3
- package/src/Headers.ts +12 -4
- package/src/HttpApi.ts +183 -258
- package/src/HttpApiBuilder.ts +532 -481
- package/src/HttpApiClient.ts +163 -112
- package/src/HttpApiEndpoint.ts +443 -564
- package/src/HttpApiError.ts +4 -6
- package/src/HttpApiGroup.ts +277 -325
- package/src/HttpApiMiddleware.ts +318 -0
- package/src/HttpApiSchema.ts +39 -2
- package/src/HttpApiSecurity.ts +1 -1
- package/src/HttpApiSwagger.ts +3 -3
- package/src/HttpBody.ts +2 -2
- package/src/HttpClientRequest.ts +2 -2
- package/src/HttpClientResponse.ts +3 -3
- package/src/HttpIncomingMessage.ts +3 -3
- package/src/HttpRouter.ts +3 -3
- package/src/HttpServer.ts +21 -0
- package/src/HttpServerRequest.ts +3 -3
- package/src/HttpServerRespondable.ts +1 -1
- package/src/HttpServerResponse.ts +2 -2
- package/src/KeyValueStore.ts +2 -2
- package/src/Multipart.ts +3 -3
- package/src/OpenApi.ts +113 -104
- package/src/OpenApiJsonSchema.ts +67 -53
- package/src/Transferable.ts +2 -2
- package/src/UrlParams.ts +3 -3
- package/src/Worker.ts +7 -8
- package/src/WorkerError.ts +1 -1
- package/src/WorkerRunner.ts +2 -3
- package/src/index.ts +5 -0
- package/src/internal/httpBody.ts +2 -2
- package/src/internal/httpClientRequest.ts +2 -2
- package/src/internal/httpClientResponse.ts +3 -3
- package/src/internal/httpRouter.ts +2 -2
- package/src/internal/httpServer.ts +13 -0
- package/src/internal/httpServerRequest.ts +3 -3
- package/src/internal/httpServerResponse.ts +2 -2
- package/src/internal/keyValueStore.ts +1 -1
- package/src/internal/multipart.ts +3 -3
- package/src/internal/worker.ts +6 -7
- package/src/internal/workerRunner.ts +3 -4
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Context from "effect/Context"
|
|
5
|
+
import type * as Effect from "effect/Effect"
|
|
6
|
+
import { hasProperty } from "effect/Predicate"
|
|
7
|
+
import * as Schema from "effect/Schema"
|
|
8
|
+
import type { Mutable, Simplify } from "effect/Types"
|
|
9
|
+
import type * as HttpApiSecurity from "./HttpApiSecurity.js"
|
|
10
|
+
import type * as HttpRouter from "./HttpRouter.js"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
* @category type ids
|
|
15
|
+
*/
|
|
16
|
+
export const TypeId: unique symbol = Symbol.for("@effect/platform/HttpApiMiddleware")
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
* @category type ids
|
|
21
|
+
*/
|
|
22
|
+
export type TypeId = typeof TypeId
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
* @category type ids
|
|
27
|
+
*/
|
|
28
|
+
export const SecurityTypeId: unique symbol = Symbol.for("@effect/platform/HttpApiMiddleware/Security")
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @since 1.0.0
|
|
32
|
+
* @category type ids
|
|
33
|
+
*/
|
|
34
|
+
export type SecurityTypeId = typeof SecurityTypeId
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
* @category guards
|
|
39
|
+
*/
|
|
40
|
+
export const isSecurity = (u: TagClassAny): u is TagClassSecurityAny => hasProperty(u, SecurityTypeId)
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @since 1.0.0
|
|
44
|
+
* @category models
|
|
45
|
+
*/
|
|
46
|
+
export interface HttpApiMiddleware<Provides, E> extends Effect.Effect<Provides, E, HttpRouter.HttpRouter.Provided> {}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @since 1.0.0
|
|
50
|
+
* @category models
|
|
51
|
+
*/
|
|
52
|
+
export type HttpApiMiddlewareSecurity<Security extends Record<string, HttpApiSecurity.HttpApiSecurity>, Provides, E> = {
|
|
53
|
+
readonly [K in keyof Security]: (
|
|
54
|
+
_: HttpApiSecurity.HttpApiSecurity.Type<Security[K]>
|
|
55
|
+
) => Effect.Effect<Provides, E, HttpRouter.HttpRouter.Provided>
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @since 1.0.0
|
|
60
|
+
* @category models
|
|
61
|
+
*/
|
|
62
|
+
export declare namespace HttpApiMiddleware {
|
|
63
|
+
/**
|
|
64
|
+
* @since 1.0.0
|
|
65
|
+
* @category models
|
|
66
|
+
*/
|
|
67
|
+
export interface Any {
|
|
68
|
+
readonly [TypeId]: TypeId
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @since 1.0.0
|
|
73
|
+
* @category models
|
|
74
|
+
*/
|
|
75
|
+
export interface AnyId {
|
|
76
|
+
readonly [TypeId]: {
|
|
77
|
+
readonly provides: any
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @since 1.0.0
|
|
83
|
+
* @category models
|
|
84
|
+
*/
|
|
85
|
+
export type Provides<A> = A extends { readonly [TypeId]: { readonly provides: infer P } } ? P : never
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @since 1.0.0
|
|
89
|
+
* @category models
|
|
90
|
+
*/
|
|
91
|
+
export type ExtractProvides<A> = Provides<Only<A>>
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @since 1.0.0
|
|
95
|
+
* @category models
|
|
96
|
+
*/
|
|
97
|
+
export type Error<A> = A extends { readonly [TypeId]: { readonly failure: infer E } } ? E : never
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @since 1.0.0
|
|
101
|
+
* @category models
|
|
102
|
+
*/
|
|
103
|
+
export type ErrorContext<A> = A extends { readonly [TypeId]: { readonly failureContext: infer R } } ? R : never
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @since 1.0.0
|
|
107
|
+
* @category models
|
|
108
|
+
*/
|
|
109
|
+
export type Only<R> = Extract<R, AnyId>
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @since 1.0.0
|
|
113
|
+
* @category models
|
|
114
|
+
*/
|
|
115
|
+
export type Without<R> = Exclude<R, AnyId>
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @since 1.0.0
|
|
120
|
+
* @category models
|
|
121
|
+
*/
|
|
122
|
+
export type TagClass<
|
|
123
|
+
Self,
|
|
124
|
+
Name extends string,
|
|
125
|
+
Options
|
|
126
|
+
> = Options extends { readonly security: Record<string, HttpApiSecurity.HttpApiSecurity> } ?
|
|
127
|
+
& TagClass.Base<
|
|
128
|
+
Self,
|
|
129
|
+
Name,
|
|
130
|
+
Options,
|
|
131
|
+
Simplify<
|
|
132
|
+
HttpApiMiddlewareSecurity<
|
|
133
|
+
Options["security"],
|
|
134
|
+
TagClass.Service<Options>,
|
|
135
|
+
TagClass.FailureService<Options>
|
|
136
|
+
>
|
|
137
|
+
>
|
|
138
|
+
>
|
|
139
|
+
& TagClass.SecurityFields<Options["security"]>
|
|
140
|
+
: TagClass.Base<
|
|
141
|
+
Self,
|
|
142
|
+
Name,
|
|
143
|
+
Options,
|
|
144
|
+
HttpApiMiddleware<
|
|
145
|
+
TagClass.Service<Options>,
|
|
146
|
+
TagClass.FailureService<Options>
|
|
147
|
+
>
|
|
148
|
+
>
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @since 1.0.0
|
|
152
|
+
* @category models
|
|
153
|
+
*/
|
|
154
|
+
export declare namespace TagClass {
|
|
155
|
+
/**
|
|
156
|
+
* @since 1.0.0
|
|
157
|
+
* @category models
|
|
158
|
+
*/
|
|
159
|
+
export type Provides<Options> = Options extends {
|
|
160
|
+
readonly provides: Context.Tag<any, any>
|
|
161
|
+
readonly optional?: false
|
|
162
|
+
} ? Context.Tag.Identifier<Options["provides"]>
|
|
163
|
+
: never
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @since 1.0.0
|
|
167
|
+
* @category models
|
|
168
|
+
*/
|
|
169
|
+
export type Service<Options> = Options extends { readonly provides: Context.Tag<any, any> }
|
|
170
|
+
? Context.Tag.Service<Options["provides"]>
|
|
171
|
+
: void
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* @since 1.0.0
|
|
175
|
+
* @category models
|
|
176
|
+
*/
|
|
177
|
+
export type FailureSchema<Options> = Options extends
|
|
178
|
+
{ readonly failure: Schema.Schema.All; readonly optional?: false } ? Options["failure"]
|
|
179
|
+
: typeof Schema.Never
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* @since 1.0.0
|
|
183
|
+
* @category models
|
|
184
|
+
*/
|
|
185
|
+
export type Failure<Options> = Schema.Schema.Type<FailureSchema<Options>>
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* @since 1.0.0
|
|
189
|
+
* @category models
|
|
190
|
+
*/
|
|
191
|
+
export type FailureContext<Options> = Schema.Schema.Context<FailureSchema<Options>>
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @since 1.0.0
|
|
195
|
+
* @category models
|
|
196
|
+
*/
|
|
197
|
+
export type FailureService<Options> = Optional<Options> extends true ? unknown : Failure<Options>
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* @since 1.0.0
|
|
201
|
+
* @category models
|
|
202
|
+
*/
|
|
203
|
+
export type Optional<Options> = Options extends { readonly optional: true } ? true : false
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* @since 1.0.0
|
|
207
|
+
* @category models
|
|
208
|
+
*/
|
|
209
|
+
export type Base<Self, Name extends string, Options, Service> =
|
|
210
|
+
& BaseConstructor<Self, Name, Options, Service>
|
|
211
|
+
& (Optional<Options> extends true ? {}
|
|
212
|
+
: Options extends { readonly provides: Context.Tag<any, any> } ? { readonly provides: Options["provides"] }
|
|
213
|
+
: {})
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @since 1.0.0
|
|
217
|
+
* @category models
|
|
218
|
+
*/
|
|
219
|
+
export interface BaseConstructor<Self, Name extends string, Options, Service> extends Context.Tag<Self, Service> {
|
|
220
|
+
new(_: never):
|
|
221
|
+
& Context.TagClassShape<Name, Service>
|
|
222
|
+
& {
|
|
223
|
+
readonly [TypeId]: {
|
|
224
|
+
readonly provides: Provides<Options>
|
|
225
|
+
readonly failure: Failure<Options>
|
|
226
|
+
readonly failureContext: FailureContext<Options>
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
readonly [TypeId]: TypeId
|
|
230
|
+
readonly optional: Optional<Options>
|
|
231
|
+
readonly failure: FailureSchema<Options>
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* @since 1.0.0
|
|
236
|
+
* @category models
|
|
237
|
+
*/
|
|
238
|
+
export interface SecurityFields<Security extends Record<string, HttpApiSecurity.HttpApiSecurity>> {
|
|
239
|
+
readonly [SecurityTypeId]: SecurityTypeId
|
|
240
|
+
readonly security: Security
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* @since 1.0.0
|
|
246
|
+
* @category models
|
|
247
|
+
*/
|
|
248
|
+
export interface TagClassAny extends Context.Tag<any, HttpApiMiddleware.Any> {
|
|
249
|
+
readonly [TypeId]: TypeId
|
|
250
|
+
readonly optional: boolean
|
|
251
|
+
readonly provides?: Context.Tag<any, any>
|
|
252
|
+
readonly failure: Schema.Schema.All
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* @since 1.0.0
|
|
257
|
+
* @category models
|
|
258
|
+
*/
|
|
259
|
+
export interface TagClassSecurityAny extends TagClassAny {
|
|
260
|
+
readonly [SecurityTypeId]: SecurityTypeId
|
|
261
|
+
readonly security: Record<string, HttpApiSecurity.HttpApiSecurity>
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* @since 1.0.0
|
|
266
|
+
* @category tags
|
|
267
|
+
*/
|
|
268
|
+
export const Tag = <Self>(): <
|
|
269
|
+
const Name extends string,
|
|
270
|
+
const Options extends {
|
|
271
|
+
readonly optional?: boolean
|
|
272
|
+
readonly failure?: Schema.Schema.All
|
|
273
|
+
readonly provides?: Context.Tag<any, any>
|
|
274
|
+
readonly security?: Record<string, HttpApiSecurity.HttpApiSecurity>
|
|
275
|
+
}
|
|
276
|
+
>(
|
|
277
|
+
id: Name,
|
|
278
|
+
options?: Options | undefined
|
|
279
|
+
) => TagClass<Self, Name, Options> =>
|
|
280
|
+
(
|
|
281
|
+
id: string,
|
|
282
|
+
options?: {
|
|
283
|
+
readonly optional?: boolean
|
|
284
|
+
readonly security?: Record<string, HttpApiSecurity.HttpApiSecurity>
|
|
285
|
+
readonly failure?: Schema.Schema.All
|
|
286
|
+
readonly provides?: Context.Tag<any, any>
|
|
287
|
+
}
|
|
288
|
+
) => {
|
|
289
|
+
const Err = globalThis.Error as any
|
|
290
|
+
const limit = Err.stackTraceLimit
|
|
291
|
+
Err.stackTraceLimit = 2
|
|
292
|
+
const creationError = new Err()
|
|
293
|
+
Err.stackTraceLimit = limit
|
|
294
|
+
|
|
295
|
+
function TagClass() {}
|
|
296
|
+
const TagClass_ = TagClass as any as Mutable<TagClassSecurityAny>
|
|
297
|
+
Object.setPrototypeOf(TagClass, Object.getPrototypeOf(Context.GenericTag<Self, any>(id)))
|
|
298
|
+
TagClass.key = id
|
|
299
|
+
Object.defineProperty(TagClass, "stack", {
|
|
300
|
+
get() {
|
|
301
|
+
return creationError.stack
|
|
302
|
+
}
|
|
303
|
+
})
|
|
304
|
+
TagClass_[TypeId] = TypeId
|
|
305
|
+
TagClass_.failure = options?.optional === true || options?.failure === undefined ? Schema.Never : options.failure
|
|
306
|
+
if (options?.provides) {
|
|
307
|
+
TagClass_.provides = options.provides
|
|
308
|
+
}
|
|
309
|
+
TagClass_.optional = options?.optional ?? false
|
|
310
|
+
if (options?.security) {
|
|
311
|
+
if (Object.keys(options.security).length === 0) {
|
|
312
|
+
throw new Error("HttpApiMiddleware.Tag: security object must not be empty")
|
|
313
|
+
}
|
|
314
|
+
TagClass_[SecurityTypeId] = SecurityTypeId
|
|
315
|
+
TagClass_.security = options.security
|
|
316
|
+
}
|
|
317
|
+
return TagClass as any
|
|
318
|
+
}
|
package/src/HttpApiSchema.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import * as AST from "@effect/schema/AST"
|
|
5
|
-
import * as Schema from "@effect/schema/Schema"
|
|
6
4
|
import type { Brand } from "effect/Brand"
|
|
7
5
|
import type { LazyArg } from "effect/Function"
|
|
8
6
|
import { constVoid, dual } from "effect/Function"
|
|
7
|
+
import { globalValue } from "effect/GlobalValue"
|
|
8
|
+
import * as Schema from "effect/Schema"
|
|
9
|
+
import * as AST from "effect/SchemaAST"
|
|
9
10
|
import * as Struct from "effect/Struct"
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -400,3 +401,39 @@ export const Text = (options?: {
|
|
|
400
401
|
export const Uint8Array = (options?: {
|
|
401
402
|
readonly contentType?: string
|
|
402
403
|
}): typeof Schema.Uint8ArrayFromSelf => withEncoding(Schema.Uint8ArrayFromSelf, { kind: "Uint8Array", ...options })
|
|
404
|
+
|
|
405
|
+
const astCache = globalValue(
|
|
406
|
+
"@effect/platform/HttpApiSchema/astCache",
|
|
407
|
+
() => new WeakMap<AST.AST, Schema.Schema.Any>()
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* @since 1.0.0
|
|
412
|
+
*/
|
|
413
|
+
export const deunionize = (
|
|
414
|
+
schemas: Set<Schema.Schema.Any>,
|
|
415
|
+
schema: Schema.Schema.Any
|
|
416
|
+
): void => {
|
|
417
|
+
if (astCache.has(schema.ast)) {
|
|
418
|
+
schemas.add(astCache.get(schema.ast)!)
|
|
419
|
+
return
|
|
420
|
+
}
|
|
421
|
+
const ast = schema.ast
|
|
422
|
+
if (ast._tag === "Union") {
|
|
423
|
+
for (const astType of ast.types) {
|
|
424
|
+
if (astCache.has(astType)) {
|
|
425
|
+
schemas.add(astCache.get(astType)!)
|
|
426
|
+
continue
|
|
427
|
+
}
|
|
428
|
+
const memberSchema = Schema.make(AST.annotations(astType, {
|
|
429
|
+
...ast.annotations,
|
|
430
|
+
...astType.annotations
|
|
431
|
+
}))
|
|
432
|
+
astCache.set(astType, memberSchema)
|
|
433
|
+
schemas.add(memberSchema)
|
|
434
|
+
}
|
|
435
|
+
} else {
|
|
436
|
+
astCache.set(ast, schema)
|
|
437
|
+
schemas.add(schema)
|
|
438
|
+
}
|
|
439
|
+
}
|
package/src/HttpApiSecurity.ts
CHANGED
package/src/HttpApiSwagger.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import * as Effect from "effect/Effect"
|
|
5
5
|
import type { Layer } from "effect/Layer"
|
|
6
|
-
import {
|
|
6
|
+
import { Api } from "./HttpApi.js"
|
|
7
7
|
import { Router } from "./HttpApiBuilder.js"
|
|
8
8
|
import * as HttpServerResponse from "./HttpServerResponse.js"
|
|
9
9
|
import * as internal from "./internal/apiSwagger.js"
|
|
@@ -15,10 +15,10 @@ import * as OpenApi from "./OpenApi.js"
|
|
|
15
15
|
*/
|
|
16
16
|
export const layer = (options?: {
|
|
17
17
|
readonly path?: `/${string}` | undefined
|
|
18
|
-
}): Layer<never, never,
|
|
18
|
+
}): Layer<never, never, Api> =>
|
|
19
19
|
Router.use((router) =>
|
|
20
20
|
Effect.gen(function*() {
|
|
21
|
-
const api = yield*
|
|
21
|
+
const { api } = yield* Api
|
|
22
22
|
const spec = OpenApi.fromApi(api)
|
|
23
23
|
const response = HttpServerResponse.html(`<!DOCTYPE html>
|
|
24
24
|
<html lang="en">
|
package/src/HttpBody.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type * as ParseResult from "@effect/schema/ParseResult"
|
|
5
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
6
4
|
import type * as Effect from "effect/Effect"
|
|
7
5
|
import type { Inspectable } from "effect/Inspectable"
|
|
6
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
8
7
|
import * as Predicate from "effect/Predicate"
|
|
8
|
+
import type * as Schema from "effect/Schema"
|
|
9
9
|
import type * as Stream_ from "effect/Stream"
|
|
10
10
|
import type * as PlatformError from "./Error.js"
|
|
11
11
|
import type * as FileSystem from "./FileSystem.js"
|
package/src/HttpClientRequest.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { ParseOptions } from "@effect/schema/AST"
|
|
5
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
6
4
|
import type * as Effect from "effect/Effect"
|
|
7
5
|
import type { Inspectable } from "effect/Inspectable"
|
|
8
6
|
import type * as Option from "effect/Option"
|
|
9
7
|
import type { Pipeable } from "effect/Pipeable"
|
|
10
8
|
import type { Redacted } from "effect/Redacted"
|
|
9
|
+
import type * as Schema from "effect/Schema"
|
|
10
|
+
import type { ParseOptions } from "effect/SchemaAST"
|
|
11
11
|
import type * as Stream from "effect/Stream"
|
|
12
12
|
import type * as PlatformError from "./Error.js"
|
|
13
13
|
import type * as FileSystem from "./FileSystem.js"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { ParseOptions } from "@effect/schema/AST"
|
|
5
|
-
import type * as ParseResult from "@effect/schema/ParseResult"
|
|
6
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
7
4
|
import type * as Effect from "effect/Effect"
|
|
5
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
6
|
+
import type * as Schema from "effect/Schema"
|
|
7
|
+
import type { ParseOptions } from "effect/SchemaAST"
|
|
8
8
|
import type * as Scope from "effect/Scope"
|
|
9
9
|
import type * as Stream from "effect/Stream"
|
|
10
10
|
import type { Unify } from "effect/Unify"
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { ParseOptions } from "@effect/schema/AST"
|
|
5
|
-
import type * as ParseResult from "@effect/schema/ParseResult"
|
|
6
|
-
import * as Schema from "@effect/schema/Schema"
|
|
7
4
|
import * as Effect from "effect/Effect"
|
|
8
5
|
import * as FiberRef from "effect/FiberRef"
|
|
9
6
|
import { dual } from "effect/Function"
|
|
10
7
|
import * as Global from "effect/GlobalValue"
|
|
11
8
|
import type { Inspectable } from "effect/Inspectable"
|
|
12
9
|
import * as Option from "effect/Option"
|
|
10
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
11
|
+
import * as Schema from "effect/Schema"
|
|
12
|
+
import type { ParseOptions } from "effect/SchemaAST"
|
|
13
13
|
import type * as Stream from "effect/Stream"
|
|
14
14
|
import * as FileSystem from "./FileSystem.js"
|
|
15
15
|
import type * as Headers from "./Headers.js"
|
package/src/HttpRouter.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { ParseOptions } from "@effect/schema/AST"
|
|
5
|
-
import type * as ParseResult from "@effect/schema/ParseResult"
|
|
6
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
7
4
|
import type * as Cause from "effect/Cause"
|
|
8
5
|
import type * as Chunk from "effect/Chunk"
|
|
9
6
|
import type * as Context from "effect/Context"
|
|
@@ -12,6 +9,9 @@ import type { FiberRef } from "effect/FiberRef"
|
|
|
12
9
|
import type { Inspectable } from "effect/Inspectable"
|
|
13
10
|
import type * as Layer from "effect/Layer"
|
|
14
11
|
import type * as Option from "effect/Option"
|
|
12
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
13
|
+
import type * as Schema from "effect/Schema"
|
|
14
|
+
import type { ParseOptions } from "effect/SchemaAST"
|
|
15
15
|
import type * as Scope from "effect/Scope"
|
|
16
16
|
import type { RouterConfig } from "find-my-way-ts"
|
|
17
17
|
import type * as Etag from "./Etag.js"
|
package/src/HttpServer.ts
CHANGED
|
@@ -5,11 +5,15 @@ import type * as Context from "effect/Context"
|
|
|
5
5
|
import type * as Effect from "effect/Effect"
|
|
6
6
|
import type * as Layer from "effect/Layer"
|
|
7
7
|
import type * as Scope from "effect/Scope"
|
|
8
|
+
import type { Generator } from "./Etag.js"
|
|
9
|
+
import type { FileSystem } from "./FileSystem.js"
|
|
8
10
|
import type * as App from "./HttpApp.js"
|
|
9
11
|
import type * as Client from "./HttpClient.js"
|
|
10
12
|
import type * as Middleware from "./HttpMiddleware.js"
|
|
13
|
+
import type { HttpPlatform } from "./HttpPlatform.js"
|
|
11
14
|
import type * as ServerRequest from "./HttpServerRequest.js"
|
|
12
15
|
import * as internal from "./internal/httpServer.js"
|
|
16
|
+
import type { Path } from "./Path.js"
|
|
13
17
|
|
|
14
18
|
/**
|
|
15
19
|
* @since 1.0.0
|
|
@@ -231,3 +235,20 @@ export const withLogAddress: <A, E, R>(layer: Layer.Layer<A, E, R>) => Layer.Lay
|
|
|
231
235
|
*/
|
|
232
236
|
export const layerTestClient: Layer.Layer<Client.HttpClient, never, Client.HttpClient | HttpServer> =
|
|
233
237
|
internal.layerTestClient
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* A Layer providing the `HttpPlatform`, `FileSystem`, `Etag.Generator`, and `Path`
|
|
241
|
+
* services.
|
|
242
|
+
*
|
|
243
|
+
* The `FileSystem` service is a no-op implementation, so this layer is only
|
|
244
|
+
* useful for platforms that have no file system.
|
|
245
|
+
*
|
|
246
|
+
* @since 1.0.0
|
|
247
|
+
* @category layers
|
|
248
|
+
*/
|
|
249
|
+
export const layerContext: Layer.Layer<
|
|
250
|
+
| HttpPlatform
|
|
251
|
+
| FileSystem
|
|
252
|
+
| Generator
|
|
253
|
+
| Path
|
|
254
|
+
> = internal.layerContext
|
package/src/HttpServerRequest.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { ParseOptions } from "@effect/schema/AST"
|
|
5
|
-
import type * as ParseResult from "@effect/schema/ParseResult"
|
|
6
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
7
4
|
import type { Channel } from "effect/Channel"
|
|
8
5
|
import type { Chunk } from "effect/Chunk"
|
|
9
6
|
import type * as Context from "effect/Context"
|
|
10
7
|
import type * as Effect from "effect/Effect"
|
|
11
8
|
import type { Option } from "effect/Option"
|
|
9
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
12
10
|
import type { ReadonlyRecord } from "effect/Record"
|
|
11
|
+
import type * as Schema from "effect/Schema"
|
|
12
|
+
import type { ParseOptions } from "effect/SchemaAST"
|
|
13
13
|
import type * as Scope from "effect/Scope"
|
|
14
14
|
import type * as Stream from "effect/Stream"
|
|
15
15
|
import type * as FileSystem from "./FileSystem.js"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import * as ParseResult from "@effect/schema/ParseResult"
|
|
5
4
|
import * as Cause from "effect/Cause"
|
|
6
5
|
import * as Effect from "effect/Effect"
|
|
6
|
+
import * as ParseResult from "effect/ParseResult"
|
|
7
7
|
import { hasProperty } from "effect/Predicate"
|
|
8
8
|
import type { HttpServerResponse } from "./HttpServerResponse.js"
|
|
9
9
|
import * as ServerResponse from "./HttpServerResponse.js"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { ParseOptions } from "@effect/schema/AST"
|
|
5
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
6
4
|
import type * as Effect from "effect/Effect"
|
|
7
5
|
import type { Inspectable } from "effect/Inspectable"
|
|
8
6
|
import type * as Runtime from "effect/Runtime"
|
|
7
|
+
import type * as Schema from "effect/Schema"
|
|
8
|
+
import type { ParseOptions } from "effect/SchemaAST"
|
|
9
9
|
import type * as Stream from "effect/Stream"
|
|
10
10
|
import type { Cookie, Cookies, CookiesError } from "./Cookies.js"
|
|
11
11
|
import type * as PlatformError from "./Error.js"
|
package/src/KeyValueStore.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type * as ParseResult from "@effect/schema/ParseResult"
|
|
5
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
6
4
|
import type * as Context from "effect/Context"
|
|
7
5
|
import type * as Effect from "effect/Effect"
|
|
8
6
|
import type { LazyArg } from "effect/Function"
|
|
9
7
|
import type * as Layer from "effect/Layer"
|
|
10
8
|
import type * as Option from "effect/Option"
|
|
9
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
10
|
+
import type * as Schema from "effect/Schema"
|
|
11
11
|
import type * as PlatformError from "./Error.js"
|
|
12
12
|
import type * as FileSystem from "./FileSystem.js"
|
|
13
13
|
import * as internal from "./internal/keyValueStore.js"
|
package/src/Multipart.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { ParseOptions } from "@effect/schema/AST"
|
|
5
|
-
import type * as ParseResult from "@effect/schema/ParseResult"
|
|
6
|
-
import type * as Schema from "@effect/schema/Schema"
|
|
7
4
|
import type { YieldableError } from "effect/Cause"
|
|
8
5
|
import type * as Channel from "effect/Channel"
|
|
9
6
|
import type * as Chunk from "effect/Chunk"
|
|
@@ -11,6 +8,9 @@ import type * as Effect from "effect/Effect"
|
|
|
11
8
|
import type * as FiberRef from "effect/FiberRef"
|
|
12
9
|
import type { Inspectable } from "effect/Inspectable"
|
|
13
10
|
import type * as Option from "effect/Option"
|
|
11
|
+
import type * as ParseResult from "effect/ParseResult"
|
|
12
|
+
import type * as Schema from "effect/Schema"
|
|
13
|
+
import type { ParseOptions } from "effect/SchemaAST"
|
|
14
14
|
import type * as Scope from "effect/Scope"
|
|
15
15
|
import type * as Stream from "effect/Stream"
|
|
16
16
|
import type * as Multipasta from "multipasta"
|