@effect/platform 0.66.1 → 0.66.3

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 (162) hide show
  1. package/dist/cjs/Command.js.map +1 -1
  2. package/dist/cjs/Cookies.js.map +1 -1
  3. package/dist/cjs/Effectify.js.map +1 -1
  4. package/dist/cjs/Headers.js.map +1 -1
  5. package/dist/cjs/HttpApi.js.map +1 -1
  6. package/dist/cjs/HttpApiBuilder.js.map +1 -1
  7. package/dist/cjs/HttpApiEndpoint.js.map +1 -1
  8. package/dist/cjs/HttpApiGroup.js.map +1 -1
  9. package/dist/cjs/HttpApiSchema.js.map +1 -1
  10. package/dist/cjs/HttpApiSecurity.js.map +1 -1
  11. package/dist/cjs/HttpApp.js.map +1 -1
  12. package/dist/cjs/HttpClient.js +8 -1
  13. package/dist/cjs/HttpClient.js.map +1 -1
  14. package/dist/cjs/HttpClientError.js +8 -1
  15. package/dist/cjs/HttpClientError.js.map +1 -1
  16. package/dist/cjs/HttpClientRequest.js.map +1 -1
  17. package/dist/cjs/HttpClientResponse.js +11 -1
  18. package/dist/cjs/HttpClientResponse.js.map +1 -1
  19. package/dist/cjs/HttpIncomingMessage.js.map +1 -1
  20. package/dist/cjs/HttpMiddleware.js.map +1 -1
  21. package/dist/cjs/HttpMultiplex.js.map +1 -1
  22. package/dist/cjs/HttpRouter.js.map +1 -1
  23. package/dist/cjs/HttpServer.js.map +1 -1
  24. package/dist/cjs/HttpServerResponse.js.map +1 -1
  25. package/dist/cjs/KeyValueStore.js.map +1 -1
  26. package/dist/cjs/Multipart.js.map +1 -1
  27. package/dist/cjs/OpenApi.js.map +1 -1
  28. package/dist/cjs/OpenApiJsonSchema.js +40 -27
  29. package/dist/cjs/OpenApiJsonSchema.js.map +1 -1
  30. package/dist/cjs/PlatformLogger.js.map +1 -1
  31. package/dist/cjs/Socket.js +4 -1
  32. package/dist/cjs/Socket.js.map +1 -1
  33. package/dist/cjs/Transferable.js.map +1 -1
  34. package/dist/cjs/UrlParams.js.map +1 -1
  35. package/dist/cjs/internal/httpClient.js +12 -14
  36. package/dist/cjs/internal/httpClient.js.map +1 -1
  37. package/dist/cjs/internal/httpClientResponse.js +16 -1
  38. package/dist/cjs/internal/httpClientResponse.js.map +1 -1
  39. package/dist/dts/Command.d.ts +134 -0
  40. package/dist/dts/Command.d.ts.map +1 -1
  41. package/dist/dts/Cookies.d.ts +120 -0
  42. package/dist/dts/Cookies.d.ts.map +1 -1
  43. package/dist/dts/Effectify.d.ts +9 -0
  44. package/dist/dts/Effectify.d.ts.map +1 -1
  45. package/dist/dts/Headers.d.ts +56 -0
  46. package/dist/dts/Headers.d.ts.map +1 -1
  47. package/dist/dts/HttpApi.d.ts +58 -0
  48. package/dist/dts/HttpApi.d.ts.map +1 -1
  49. package/dist/dts/HttpApiBuilder.d.ts +84 -0
  50. package/dist/dts/HttpApiBuilder.d.ts.map +1 -1
  51. package/dist/dts/HttpApiEndpoint.d.ts +118 -0
  52. package/dist/dts/HttpApiEndpoint.d.ts.map +1 -1
  53. package/dist/dts/HttpApiGroup.d.ts +100 -0
  54. package/dist/dts/HttpApiGroup.d.ts.map +1 -1
  55. package/dist/dts/HttpApiSchema.d.ts +16 -0
  56. package/dist/dts/HttpApiSchema.d.ts.map +1 -1
  57. package/dist/dts/HttpApiSecurity.d.ts +16 -0
  58. package/dist/dts/HttpApiSecurity.d.ts.map +1 -1
  59. package/dist/dts/HttpApp.d.ts.map +1 -1
  60. package/dist/dts/HttpClient.d.ts +308 -0
  61. package/dist/dts/HttpClient.d.ts.map +1 -1
  62. package/dist/dts/HttpClientError.d.ts +5 -0
  63. package/dist/dts/HttpClientError.d.ts.map +1 -1
  64. package/dist/dts/HttpClientRequest.d.ts +208 -0
  65. package/dist/dts/HttpClientRequest.d.ts.map +1 -1
  66. package/dist/dts/HttpClientResponse.d.ts +30 -0
  67. package/dist/dts/HttpClientResponse.d.ts.map +1 -1
  68. package/dist/dts/HttpIncomingMessage.d.ts.map +1 -1
  69. package/dist/dts/HttpMiddleware.d.ts +24 -0
  70. package/dist/dts/HttpMiddleware.d.ts.map +1 -1
  71. package/dist/dts/HttpMultiplex.d.ts +72 -0
  72. package/dist/dts/HttpMultiplex.d.ts.map +1 -1
  73. package/dist/dts/HttpRouter.d.ts +184 -0
  74. package/dist/dts/HttpRouter.d.ts.map +1 -1
  75. package/dist/dts/HttpServer.d.ts +32 -0
  76. package/dist/dts/HttpServer.d.ts.map +1 -1
  77. package/dist/dts/HttpServerResponse.d.ts +96 -0
  78. package/dist/dts/HttpServerResponse.d.ts.map +1 -1
  79. package/dist/dts/KeyValueStore.d.ts +8 -0
  80. package/dist/dts/KeyValueStore.d.ts.map +1 -1
  81. package/dist/dts/Multipart.d.ts +32 -0
  82. package/dist/dts/Multipart.d.ts.map +1 -1
  83. package/dist/dts/OpenApi.d.ts +8 -0
  84. package/dist/dts/OpenApi.d.ts.map +1 -1
  85. package/dist/dts/PlatformLogger.d.ts +46 -0
  86. package/dist/dts/PlatformLogger.d.ts.map +1 -1
  87. package/dist/dts/Socket.d.ts +8 -0
  88. package/dist/dts/Socket.d.ts.map +1 -1
  89. package/dist/dts/Transferable.d.ts +8 -0
  90. package/dist/dts/Transferable.d.ts.map +1 -1
  91. package/dist/dts/UrlParams.d.ts +64 -0
  92. package/dist/dts/UrlParams.d.ts.map +1 -1
  93. package/dist/esm/Command.js.map +1 -1
  94. package/dist/esm/Cookies.js.map +1 -1
  95. package/dist/esm/Effectify.js.map +1 -1
  96. package/dist/esm/Headers.js.map +1 -1
  97. package/dist/esm/HttpApi.js.map +1 -1
  98. package/dist/esm/HttpApiBuilder.js.map +1 -1
  99. package/dist/esm/HttpApiEndpoint.js.map +1 -1
  100. package/dist/esm/HttpApiGroup.js.map +1 -1
  101. package/dist/esm/HttpApiSchema.js.map +1 -1
  102. package/dist/esm/HttpApiSecurity.js.map +1 -1
  103. package/dist/esm/HttpApp.js.map +1 -1
  104. package/dist/esm/HttpClient.js +7 -0
  105. package/dist/esm/HttpClient.js.map +1 -1
  106. package/dist/esm/HttpClientError.js +6 -0
  107. package/dist/esm/HttpClientError.js.map +1 -1
  108. package/dist/esm/HttpClientRequest.js.map +1 -1
  109. package/dist/esm/HttpClientResponse.js +10 -0
  110. package/dist/esm/HttpClientResponse.js.map +1 -1
  111. package/dist/esm/HttpIncomingMessage.js.map +1 -1
  112. package/dist/esm/HttpMiddleware.js.map +1 -1
  113. package/dist/esm/HttpMultiplex.js.map +1 -1
  114. package/dist/esm/HttpRouter.js.map +1 -1
  115. package/dist/esm/HttpServer.js.map +1 -1
  116. package/dist/esm/HttpServerResponse.js.map +1 -1
  117. package/dist/esm/KeyValueStore.js.map +1 -1
  118. package/dist/esm/Multipart.js.map +1 -1
  119. package/dist/esm/OpenApi.js.map +1 -1
  120. package/dist/esm/OpenApiJsonSchema.js +40 -27
  121. package/dist/esm/OpenApiJsonSchema.js.map +1 -1
  122. package/dist/esm/PlatformLogger.js.map +1 -1
  123. package/dist/esm/Socket.js +4 -1
  124. package/dist/esm/Socket.js.map +1 -1
  125. package/dist/esm/Transferable.js.map +1 -1
  126. package/dist/esm/UrlParams.js.map +1 -1
  127. package/dist/esm/internal/httpClient.js +11 -13
  128. package/dist/esm/internal/httpClient.js.map +1 -1
  129. package/dist/esm/internal/httpClientResponse.js +14 -0
  130. package/dist/esm/internal/httpClientResponse.js.map +1 -1
  131. package/package.json +3 -3
  132. package/src/Command.ts +134 -0
  133. package/src/Cookies.ts +128 -38
  134. package/src/Effectify.ts +9 -0
  135. package/src/Headers.ts +106 -7
  136. package/src/HttpApi.ts +58 -0
  137. package/src/HttpApiBuilder.ts +85 -3
  138. package/src/HttpApiEndpoint.ts +121 -9
  139. package/src/HttpApiGroup.ts +102 -7
  140. package/src/HttpApiSchema.ts +22 -4
  141. package/src/HttpApiSecurity.ts +16 -0
  142. package/src/HttpApp.ts +8 -0
  143. package/src/HttpClient.ts +315 -11
  144. package/src/HttpClientError.ts +7 -0
  145. package/src/HttpClientRequest.ts +213 -1
  146. package/src/HttpClientResponse.ts +33 -0
  147. package/src/HttpIncomingMessage.ts +8 -0
  148. package/src/HttpMiddleware.ts +24 -0
  149. package/src/HttpMultiplex.ts +72 -0
  150. package/src/HttpRouter.ts +189 -18
  151. package/src/HttpServer.ts +34 -6
  152. package/src/HttpServerResponse.ts +98 -10
  153. package/src/KeyValueStore.ts +8 -0
  154. package/src/Multipart.ts +32 -0
  155. package/src/OpenApi.ts +31 -18
  156. package/src/OpenApiJsonSchema.ts +39 -21
  157. package/src/PlatformLogger.ts +46 -0
  158. package/src/Socket.ts +19 -13
  159. package/src/Transferable.ts +9 -3
  160. package/src/UrlParams.ts +64 -0
  161. package/src/internal/httpClient.ts +41 -26
  162. package/src/internal/httpClientResponse.ts +40 -1
package/src/UrlParams.ts CHANGED
@@ -71,7 +71,15 @@ export const empty: UrlParams = []
71
71
  * @category combinators
72
72
  */
73
73
  export const getAll: {
74
+ /**
75
+ * @since 1.0.0
76
+ * @category combinators
77
+ */
74
78
  (key: string): (self: UrlParams) => ReadonlyArray<string>
79
+ /**
80
+ * @since 1.0.0
81
+ * @category combinators
82
+ */
75
83
  (self: UrlParams, key: string): ReadonlyArray<string>
76
84
  } = dual(
77
85
  2,
@@ -89,7 +97,15 @@ export const getAll: {
89
97
  * @category combinators
90
98
  */
91
99
  export const getFirst: {
100
+ /**
101
+ * @since 1.0.0
102
+ * @category combinators
103
+ */
92
104
  (key: string): (self: UrlParams) => Option.Option<string>
105
+ /**
106
+ * @since 1.0.0
107
+ * @category combinators
108
+ */
93
109
  (self: UrlParams, key: string): Option.Option<string>
94
110
  } = dual(2, (self: UrlParams, key: string): Option.Option<string> =>
95
111
  Option.map(
@@ -102,7 +118,15 @@ export const getFirst: {
102
118
  * @category combinators
103
119
  */
104
120
  export const getLast: {
121
+ /**
122
+ * @since 1.0.0
123
+ * @category combinators
124
+ */
105
125
  (key: string): (self: UrlParams) => Option.Option<string>
126
+ /**
127
+ * @since 1.0.0
128
+ * @category combinators
129
+ */
106
130
  (self: UrlParams, key: string): Option.Option<string>
107
131
  } = dual(2, (self: UrlParams, key: string): Option.Option<string> =>
108
132
  Option.map(
@@ -115,7 +139,15 @@ export const getLast: {
115
139
  * @category combinators
116
140
  */
117
141
  export const set: {
142
+ /**
143
+ * @since 1.0.0
144
+ * @category combinators
145
+ */
118
146
  (key: string, value: Coercible): (self: UrlParams) => UrlParams
147
+ /**
148
+ * @since 1.0.0
149
+ * @category combinators
150
+ */
119
151
  (self: UrlParams, key: string, value: Coercible): UrlParams
120
152
  } = dual(3, (self: UrlParams, key: string, value: Coercible): UrlParams =>
121
153
  Arr.append(
@@ -128,7 +160,15 @@ export const set: {
128
160
  * @category combinators
129
161
  */
130
162
  export const setAll: {
163
+ /**
164
+ * @since 1.0.0
165
+ * @category combinators
166
+ */
131
167
  (input: Input): (self: UrlParams) => UrlParams
168
+ /**
169
+ * @since 1.0.0
170
+ * @category combinators
171
+ */
132
172
  (self: UrlParams, input: Input): UrlParams
133
173
  } = dual(2, (self: UrlParams, input: Input): UrlParams => {
134
174
  const toSet = fromInput(input)
@@ -144,7 +184,15 @@ export const setAll: {
144
184
  * @category combinators
145
185
  */
146
186
  export const append: {
187
+ /**
188
+ * @since 1.0.0
189
+ * @category combinators
190
+ */
147
191
  (key: string, value: Coercible): (self: UrlParams) => UrlParams
192
+ /**
193
+ * @since 1.0.0
194
+ * @category combinators
195
+ */
148
196
  (self: UrlParams, key: string, value: Coercible): UrlParams
149
197
  } = dual(3, (self: UrlParams, key: string, value: Coercible): UrlParams =>
150
198
  Arr.append(
@@ -157,7 +205,15 @@ export const append: {
157
205
  * @category combinators
158
206
  */
159
207
  export const appendAll: {
208
+ /**
209
+ * @since 1.0.0
210
+ * @category combinators
211
+ */
160
212
  (input: Input): (self: UrlParams) => UrlParams
213
+ /**
214
+ * @since 1.0.0
215
+ * @category combinators
216
+ */
161
217
  (self: UrlParams, input: Input): UrlParams
162
218
  } = dual(2, (self: UrlParams, input: Input): UrlParams => Arr.appendAll(self, fromInput(input)))
163
219
 
@@ -166,7 +222,15 @@ export const appendAll: {
166
222
  * @category combinators
167
223
  */
168
224
  export const remove: {
225
+ /**
226
+ * @since 1.0.0
227
+ * @category combinators
228
+ */
169
229
  (key: string): (self: UrlParams) => UrlParams
230
+ /**
231
+ * @since 1.0.0
232
+ * @category combinators
233
+ */
170
234
  (self: UrlParams, key: string): UrlParams
171
235
  } = dual(2, (self: UrlParams, key: string): UrlParams => Arr.filter(self, ([k]) => k !== key))
172
236
 
@@ -12,7 +12,7 @@ import * as Layer from "effect/Layer"
12
12
  import { pipeArguments } from "effect/Pipeable"
13
13
  import * as Predicate from "effect/Predicate"
14
14
  import * as Ref from "effect/Ref"
15
- import type * as Schedule from "effect/Schedule"
15
+ import * as Schedule from "effect/Schedule"
16
16
  import * as Scope from "effect/Scope"
17
17
  import * as Cookies from "../Cookies.js"
18
18
  import * as Headers from "../Headers.js"
@@ -24,6 +24,7 @@ import * as TraceContext from "../HttpTraceContext.js"
24
24
  import * as UrlParams from "../UrlParams.js"
25
25
  import * as internalBody from "./httpBody.js"
26
26
  import * as internalRequest from "./httpClientRequest.js"
27
+ import * as internalResponse from "./httpClientResponse.js"
27
28
 
28
29
  /** @internal */
29
30
  export const TypeId: Client.TypeId = Symbol.for(
@@ -235,36 +236,13 @@ export const filterStatus = dual<
235
236
  self: Client.HttpClient.WithResponse<E, R>,
236
237
  f: (status: number) => boolean
237
238
  ) => Client.HttpClient.WithResponse<E | Error.ResponseError, R>
238
- >(2, (self, f) =>
239
- transform(self, (effect, request) =>
240
- Effect.filterOrFail(
241
- effect,
242
- (response) => f(response.status),
243
- (response) =>
244
- new Error.ResponseError({
245
- request,
246
- response,
247
- reason: "StatusCode",
248
- description: "invalid status code"
249
- })
250
- )))
239
+ >(2, (self, f) => transformResponse(self, Effect.flatMap(internalResponse.filterStatus(f))))
251
240
 
252
241
  /** @internal */
253
242
  export const filterStatusOk = <E, R>(
254
243
  self: Client.HttpClient.WithResponse<E, R>
255
244
  ): Client.HttpClient.WithResponse<E | Error.ResponseError, R> =>
256
- transform(self, (effect, request) =>
257
- Effect.filterOrFail(
258
- effect,
259
- (response) => response.status >= 200 && response.status < 300,
260
- (response) =>
261
- new Error.ResponseError({
262
- request,
263
- response,
264
- reason: "StatusCode",
265
- description: "non 2xx status code"
266
- })
267
- ))
245
+ transformResponse(self, Effect.flatMap(internalResponse.filterStatusOk))
268
246
 
269
247
  /** @internal */
270
248
  export const transformResponse = dual<
@@ -653,6 +631,43 @@ export const retry: {
653
631
  ): Client.HttpClient<A, E, R | R1> => transformResponse(self, Effect.retry(policy))
654
632
  )
655
633
 
634
+ /** @internal */
635
+ export const retryTransient: {
636
+ <B, E, R1 = never>(
637
+ options: {
638
+ readonly schedule?: Schedule.Schedule<B, NoInfer<E>, R1>
639
+ readonly times?: number
640
+ } | Schedule.Schedule<B, NoInfer<E>, R1>
641
+ ): <A, R>(self: Client.HttpClient<A, E, R>) => Client.HttpClient<A, E, R1 | R>
642
+ <A, E, R, B, R1 = never>(
643
+ self: Client.HttpClient<A, E, R>,
644
+ options: {
645
+ readonly schedule?: Schedule.Schedule<B, NoInfer<E>, R1>
646
+ readonly times?: number
647
+ } | Schedule.Schedule<B, NoInfer<E>, R1>
648
+ ): Client.HttpClient<A, E, R1 | R>
649
+ } = dual(
650
+ 2,
651
+ <A, E extends E0, E0, R, B, R1 = never>(
652
+ self: Client.HttpClient<A, E, R>,
653
+ options: {
654
+ readonly schedule?: Schedule.Schedule<B, NoInfer<E>, R1>
655
+ readonly times?: number
656
+ } | Schedule.Schedule<B, NoInfer<E>, R1>
657
+ ): Client.HttpClient<A, E, R | R1> =>
658
+ transformResponse(
659
+ self,
660
+ Effect.retry({
661
+ while: (error) =>
662
+ Error.isHttpClientError(error) &&
663
+ ((error._tag === "RequestError" && error.reason === "Transport") ||
664
+ (error._tag === "ResponseError" && error.response.status >= 429)),
665
+ schedule: Schedule.ScheduleTypeId in options ? options : options.schedule,
666
+ times: Schedule.ScheduleTypeId in options ? undefined : options.times
667
+ })
668
+ )
669
+ )
670
+
656
671
  /** @internal */
657
672
  export const schemaFunction = dual<
658
673
  <SA, SI, SR>(
@@ -29,7 +29,7 @@ class ClientResponseImpl extends Inspectable.Class implements ClientResponse.Htt
29
29
  readonly [TypeId]: ClientResponse.TypeId
30
30
 
31
31
  constructor(
32
- private readonly request: ClientRequest.HttpClientRequest,
32
+ readonly request: ClientRequest.HttpClientRequest,
33
33
  private readonly source: globalThis.Response
34
34
  ) {
35
35
  super()
@@ -240,3 +240,42 @@ export const matchStatus = dual<
240
240
  }
241
241
  return cases.orElse(self)
242
242
  })
243
+
244
+ /** @internal */
245
+ export const filterStatus = dual<
246
+ (
247
+ f: (status: number) => boolean
248
+ ) => (
249
+ self: ClientResponse.HttpClientResponse
250
+ ) => Effect.Effect<ClientResponse.HttpClientResponse, Error.ResponseError>,
251
+ (
252
+ self: ClientResponse.HttpClientResponse,
253
+ f: (status: number) => boolean
254
+ ) => Effect.Effect<ClientResponse.HttpClientResponse, Error.ResponseError>
255
+ >(
256
+ 2,
257
+ (self, f) =>
258
+ Effect.suspend(() =>
259
+ f(self.status) ? Effect.succeed(self) : Effect.fail(
260
+ new Error.ResponseError({
261
+ response: self,
262
+ request: self.request,
263
+ reason: "StatusCode",
264
+ description: "invalid status code"
265
+ })
266
+ )
267
+ )
268
+ )
269
+
270
+ /** @internal */
271
+ export const filterStatusOk = (
272
+ self: ClientResponse.HttpClientResponse
273
+ ): Effect.Effect<ClientResponse.HttpClientResponse, Error.ResponseError> =>
274
+ self.status >= 200 && self.status < 300 ? Effect.succeed(self) : Effect.fail(
275
+ new Error.ResponseError({
276
+ response: self,
277
+ request: self.request,
278
+ reason: "StatusCode",
279
+ description: "non 2xx status code"
280
+ })
281
+ )