effect 4.0.0-beta.97 → 4.0.0-beta.98
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/LayerRef.d.ts +4 -6
- package/dist/LayerRef.d.ts.map +1 -1
- package/dist/LayerRef.js +4 -6
- package/dist/LayerRef.js.map +1 -1
- package/dist/Number.d.ts.map +1 -1
- package/dist/Number.js +28 -10
- package/dist/Number.js.map +1 -1
- package/dist/Schema.d.ts +22 -22
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +36 -33
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +25 -10
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaError.d.ts +53 -0
- package/dist/SchemaError.d.ts.map +1 -0
- package/dist/SchemaError.js +61 -0
- package/dist/SchemaError.js.map +1 -0
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +17 -12
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +186 -224
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/effect.js +26 -8
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/schema/equivalence.js +1 -2
- package/dist/internal/schema/equivalence.js.map +1 -1
- package/dist/internal/schema/representation.js +1 -3
- package/dist/internal/schema/representation.js.map +1 -1
- package/dist/internal/schema/schema.d.ts +0 -13
- package/dist/internal/schema/schema.d.ts.map +1 -1
- package/dist/internal/schema/schema.js +4 -29
- package/dist/internal/schema/schema.js.map +1 -1
- package/dist/unstable/ai/McpSchema.d.ts +128 -128
- package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
- package/dist/unstable/cli/CliError.d.ts +8 -16
- package/dist/unstable/cli/CliError.d.ts.map +1 -1
- package/dist/unstable/cli/CliError.js +8 -16
- package/dist/unstable/cli/CliError.js.map +1 -1
- package/dist/unstable/cli/Command.d.ts +4 -3
- package/dist/unstable/cli/Command.d.ts.map +1 -1
- package/dist/unstable/cli/Command.js +3 -3
- package/dist/unstable/cli/Command.js.map +1 -1
- package/dist/unstable/cli/GlobalFlag.d.ts +6 -8
- package/dist/unstable/cli/GlobalFlag.d.ts.map +1 -1
- package/dist/unstable/cli/GlobalFlag.js +6 -6
- package/dist/unstable/cli/GlobalFlag.js.map +1 -1
- package/dist/unstable/cluster/EntityProxyServer.d.ts +1 -1
- package/dist/unstable/cluster/EntityProxyServer.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityProxyServer.js +2 -4
- package/dist/unstable/cluster/EntityProxyServer.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +15 -12
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/httpapi/HttpApi.d.ts +36 -15
- package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApi.js +19 -20
- package/dist/unstable/httpapi/HttpApi.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts +51 -62
- package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +68 -58
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.d.ts +53 -53
- package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiClient.js +40 -30
- package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +165 -164
- package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiEndpoint.js +31 -19
- package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.d.ts +22 -0
- package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiError.js +31 -0
- package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.d.ts +55 -30
- package/dist/unstable/httpapi/HttpApiGroup.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiGroup.js +22 -29
- package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +8 -8
- package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.d.ts +2 -2
- package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.js +4 -3
- package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.d.ts +8 -0
- package/dist/unstable/httpapi/HttpApiSchema.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiSwagger.d.ts +1 -1
- package/dist/unstable/httpapi/HttpApiSwagger.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiSwagger.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiTest.d.ts +4 -4
- package/dist/unstable/httpapi/HttpApiTest.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiTest.js +9 -8
- package/dist/unstable/httpapi/HttpApiTest.js.map +1 -1
- package/dist/unstable/httpapi/OpenApi.d.ts +1 -1
- package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
- package/dist/unstable/httpapi/OpenApi.js +77 -37
- package/dist/unstable/httpapi/OpenApi.js.map +1 -1
- package/dist/unstable/httpapi/internal/html.js +6 -2
- package/dist/unstable/httpapi/internal/html.js.map +1 -1
- package/dist/unstable/httpapi/internal/mediaType.d.ts +2 -0
- package/dist/unstable/httpapi/internal/mediaType.d.ts.map +1 -0
- package/dist/unstable/httpapi/internal/mediaType.js +7 -0
- package/dist/unstable/httpapi/internal/mediaType.js.map +1 -0
- package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.js +16 -12
- package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
- package/dist/unstable/reactivity/Atom.js +1 -1
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +7 -7
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js +3 -2
- package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts +3 -1
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +6 -3
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.js +1 -1
- package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
- package/dist/unstable/workflow/WorkflowProxyServer.d.ts +1 -1
- package/dist/unstable/workflow/WorkflowProxyServer.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowProxyServer.js +1 -2
- package/dist/unstable/workflow/WorkflowProxyServer.js.map +1 -1
- package/package.json +1 -1
- package/src/LayerRef.ts +4 -6
- package/src/Number.ts +29 -10
- package/src/Schema.ts +42 -34
- package/src/SchemaAST.ts +25 -13
- package/src/SchemaError.ts +64 -0
- package/src/SchemaGetter.ts +22 -16
- package/src/SchemaRepresentation.ts +165 -202
- package/src/index.ts +10 -0
- package/src/internal/effect.ts +39 -22
- package/src/internal/schema/equivalence.ts +1 -2
- package/src/internal/schema/representation.ts +4 -4
- package/src/internal/schema/schema.ts +4 -37
- package/src/unstable/cli/CliError.ts +24 -16
- package/src/unstable/cli/Command.ts +8 -8
- package/src/unstable/cli/GlobalFlag.ts +22 -33
- package/src/unstable/cluster/EntityProxyServer.ts +15 -17
- package/src/unstable/cluster/internal/entityManager.ts +48 -34
- package/src/unstable/httpapi/HttpApi.ts +72 -47
- package/src/unstable/httpapi/HttpApiBuilder.ts +320 -217
- package/src/unstable/httpapi/HttpApiClient.ts +196 -151
- package/src/unstable/httpapi/HttpApiEndpoint.ts +251 -447
- package/src/unstable/httpapi/HttpApiError.ts +33 -0
- package/src/unstable/httpapi/HttpApiGroup.ts +95 -74
- package/src/unstable/httpapi/HttpApiMiddleware.ts +10 -7
- package/src/unstable/httpapi/HttpApiScalar.ts +15 -12
- package/src/unstable/httpapi/HttpApiSchema.ts +8 -0
- package/src/unstable/httpapi/HttpApiSwagger.ts +2 -2
- package/src/unstable/httpapi/HttpApiTest.ts +15 -14
- package/src/unstable/httpapi/OpenApi.ts +74 -36
- package/src/unstable/httpapi/internal/html.ts +9 -2
- package/src/unstable/httpapi/internal/mediaType.ts +6 -0
- package/src/unstable/persistence/PersistedQueue.ts +16 -14
- package/src/unstable/reactivity/Atom.ts +1 -1
- package/src/unstable/reactivity/AtomHttpApi.ts +164 -162
- package/src/unstable/rpc/RpcServer.ts +10 -4
- package/src/unstable/workflow/DurableDeferred.ts +1 -1
- package/src/unstable/workflow/WorkflowProxyServer.ts +11 -12
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { NonEmptyReadonlyArray } from "../../Array.ts"
|
|
12
12
|
import * as Context from "../../Context.ts"
|
|
13
|
+
import * as internalRecord from "../../internal/record.ts"
|
|
13
14
|
import { type Pipeable, pipeArguments } from "../../Pipeable.ts"
|
|
14
15
|
import * as Predicate from "../../Predicate.ts"
|
|
15
16
|
import * as Record from "../../Record.ts"
|
|
16
17
|
import type * as Schema from "../../Schema.ts"
|
|
17
18
|
import type * as SchemaAST from "../../SchemaAST.ts"
|
|
18
|
-
import type { Mutable } from "../../Types.ts"
|
|
19
19
|
import type { PathInput } from "../http/HttpRouter.ts"
|
|
20
20
|
import * as HttpApiEndpoint from "./HttpApiEndpoint.ts"
|
|
21
21
|
import type * as HttpApiGroup from "./HttpApiGroup.ts"
|
|
@@ -30,7 +30,14 @@ const TypeId = "~effect/httpapi/HttpApi"
|
|
|
30
30
|
* @category guards
|
|
31
31
|
* @since 4.0.0
|
|
32
32
|
*/
|
|
33
|
-
export const isHttpApi = (u: unknown): u is
|
|
33
|
+
export const isHttpApi = (u: unknown): u is Top => Predicate.hasProperty(u, TypeId)
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Groups indexed by their identifier.
|
|
37
|
+
*/
|
|
38
|
+
type GroupMap<Groups> = {
|
|
39
|
+
readonly [Group in Groups as HttpApiGroup.Identifier<Group>]: Group
|
|
40
|
+
}
|
|
34
41
|
|
|
35
42
|
/**
|
|
36
43
|
* An `HttpApi` is a collection of HTTP API groups and endpoints that represents a
|
|
@@ -46,23 +53,38 @@ export const isHttpApi = (u: unknown): u is Any => Predicate.hasProperty(u, Type
|
|
|
46
53
|
*/
|
|
47
54
|
export interface HttpApi<
|
|
48
55
|
out Id extends string,
|
|
49
|
-
out Groups extends HttpApiGroup.
|
|
56
|
+
in out Groups extends HttpApiGroup.Constraint = never
|
|
50
57
|
> extends Pipeable {
|
|
51
58
|
new(_: never): {}
|
|
52
59
|
readonly [TypeId]: typeof TypeId
|
|
53
60
|
readonly identifier: Id
|
|
54
|
-
readonly groups:
|
|
61
|
+
readonly groups: GroupMap<Groups>
|
|
55
62
|
readonly annotations: Context.Context<never>
|
|
56
63
|
|
|
57
64
|
/**
|
|
58
65
|
* Add a `HttpApiGroup` to the `HttpApi`.
|
|
59
66
|
*/
|
|
60
|
-
add<const A extends NonEmptyReadonlyArray<HttpApiGroup.
|
|
67
|
+
add<const A extends NonEmptyReadonlyArray<HttpApiGroup.Constraint>>(...groups: A): HttpApi<Id, Groups | A[number]>
|
|
61
68
|
|
|
62
69
|
/**
|
|
63
|
-
*
|
|
70
|
+
* Adds every group from another `HttpApi` while preserving its annotation scope.
|
|
71
|
+
*
|
|
72
|
+
* **When to use**
|
|
73
|
+
*
|
|
74
|
+
* Use when you want to compose an API from groups declared and annotated under another API.
|
|
75
|
+
*
|
|
76
|
+
* **Details**
|
|
77
|
+
*
|
|
78
|
+
* The added API is flattened into this API rather than retained as a nested value. Each added group
|
|
79
|
+
* is copied with the added API's annotations, leaving the added API unchanged. Annotation precedence
|
|
80
|
+
* from least to most specific is this API, the added API, the group, and then the endpoint.
|
|
81
|
+
*
|
|
82
|
+
* **Gotchas**
|
|
83
|
+
*
|
|
84
|
+
* Annotations from the added API do not become top-level annotations of the result and do not affect
|
|
85
|
+
* groups already present in this API. They remain scoped to the groups and endpoints being added.
|
|
64
86
|
*/
|
|
65
|
-
addHttpApi<Id2 extends string, Groups2 extends HttpApiGroup.
|
|
87
|
+
addHttpApi<Id2 extends string, Groups2 extends HttpApiGroup.Constraint>(
|
|
66
88
|
api: HttpApi<Id2, Groups2>
|
|
67
89
|
): HttpApi<Id, Groups | Groups2>
|
|
68
90
|
|
|
@@ -99,7 +121,7 @@ export interface HttpApi<
|
|
|
99
121
|
* @category models
|
|
100
122
|
* @since 4.0.0
|
|
101
123
|
*/
|
|
102
|
-
export interface
|
|
124
|
+
export interface Constraint {
|
|
103
125
|
readonly [TypeId]: typeof TypeId
|
|
104
126
|
}
|
|
105
127
|
|
|
@@ -110,7 +132,7 @@ export interface Any {
|
|
|
110
132
|
* @category models
|
|
111
133
|
* @since 4.0.0
|
|
112
134
|
*/
|
|
113
|
-
export
|
|
135
|
+
export interface Top extends HttpApi<string, HttpApiGroup.Top> {}
|
|
114
136
|
|
|
115
137
|
const Proto = {
|
|
116
138
|
[TypeId]: TypeId,
|
|
@@ -118,69 +140,72 @@ const Proto = {
|
|
|
118
140
|
return pipeArguments(this, arguments)
|
|
119
141
|
},
|
|
120
142
|
add(
|
|
121
|
-
this:
|
|
122
|
-
...toAdd: NonEmptyReadonlyArray<HttpApiGroup.
|
|
143
|
+
this: Top,
|
|
144
|
+
...toAdd: NonEmptyReadonlyArray<HttpApiGroup.Top>
|
|
123
145
|
) {
|
|
124
146
|
const groups = { ...this.groups }
|
|
125
147
|
for (const group of toAdd) {
|
|
126
|
-
groups
|
|
148
|
+
internalRecord.set(groups, group.identifier, group)
|
|
127
149
|
}
|
|
128
150
|
return makeProto({
|
|
129
|
-
|
|
130
|
-
groups
|
|
131
|
-
annotations: this.annotations
|
|
151
|
+
...optionsFromApi(this),
|
|
152
|
+
groups
|
|
132
153
|
})
|
|
133
154
|
},
|
|
134
155
|
addHttpApi(
|
|
135
|
-
this:
|
|
136
|
-
api:
|
|
156
|
+
this: Top,
|
|
157
|
+
api: Top
|
|
137
158
|
) {
|
|
138
159
|
const newGroups = { ...this.groups }
|
|
139
160
|
for (const key in api.groups) {
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
161
|
+
const group = api.groups[key]
|
|
162
|
+
internalRecord.set(
|
|
163
|
+
newGroups,
|
|
164
|
+
key,
|
|
165
|
+
group.annotateMerge(Context.merge(api.annotations, group.annotations))
|
|
166
|
+
)
|
|
143
167
|
}
|
|
144
168
|
return makeProto({
|
|
145
|
-
|
|
146
|
-
groups: newGroups
|
|
147
|
-
annotations: this.annotations
|
|
169
|
+
...optionsFromApi(this),
|
|
170
|
+
groups: newGroups
|
|
148
171
|
})
|
|
149
172
|
},
|
|
150
|
-
prefix(this:
|
|
173
|
+
prefix(this: Top, prefix: PathInput) {
|
|
151
174
|
return makeProto({
|
|
152
|
-
|
|
153
|
-
groups: Record.map(this.groups, (group) => group.prefix(prefix))
|
|
154
|
-
annotations: this.annotations
|
|
175
|
+
...optionsFromApi(this),
|
|
176
|
+
groups: Record.map(this.groups, (group) => group.prefix(prefix))
|
|
155
177
|
})
|
|
156
178
|
},
|
|
157
|
-
middleware(this:
|
|
179
|
+
middleware(this: Top, tag: HttpApiMiddleware.AnyService) {
|
|
158
180
|
return makeProto({
|
|
159
|
-
|
|
160
|
-
groups: Record.map(this.groups, (group) => group.middleware(tag as any))
|
|
161
|
-
annotations: this.annotations
|
|
181
|
+
...optionsFromApi(this),
|
|
182
|
+
groups: Record.map(this.groups, (group) => group.middleware(tag as any))
|
|
162
183
|
})
|
|
163
184
|
},
|
|
164
|
-
annotate(this:
|
|
185
|
+
annotate(this: Top, key: Context.Key<any, any>, value: any) {
|
|
165
186
|
return makeProto({
|
|
166
|
-
|
|
167
|
-
groups: this.groups,
|
|
187
|
+
...optionsFromApi(this),
|
|
168
188
|
annotations: Context.add(this.annotations, key, value)
|
|
169
189
|
})
|
|
170
190
|
},
|
|
171
|
-
annotateMerge(this:
|
|
191
|
+
annotateMerge(this: Top, annotations: Context.Context<never>) {
|
|
172
192
|
return makeProto({
|
|
173
|
-
|
|
174
|
-
groups: this.groups,
|
|
193
|
+
...optionsFromApi(this),
|
|
175
194
|
annotations: Context.merge(this.annotations, annotations)
|
|
176
195
|
})
|
|
177
196
|
}
|
|
178
197
|
}
|
|
179
198
|
|
|
180
|
-
const
|
|
199
|
+
const optionsFromApi = (api: Top) => ({
|
|
200
|
+
identifier: api.identifier,
|
|
201
|
+
groups: api.groups,
|
|
202
|
+
annotations: api.annotations
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
const makeProto = <Id extends string, Groups extends HttpApiGroup.Constraint>(
|
|
181
206
|
options: {
|
|
182
207
|
readonly identifier: Id
|
|
183
|
-
readonly groups: Record.ReadonlyRecord<string,
|
|
208
|
+
readonly groups: Record.ReadonlyRecord<string, HttpApiGroup.Constraint>
|
|
184
209
|
readonly annotations: Context.Context<never>
|
|
185
210
|
}
|
|
186
211
|
): HttpApi<Id, Groups> => {
|
|
@@ -219,22 +244,22 @@ export const make = <const Id extends string>(identifier: Id): HttpApi<Id, never
|
|
|
219
244
|
* @category reflection
|
|
220
245
|
* @since 4.0.0
|
|
221
246
|
*/
|
|
222
|
-
export const reflect = <Id extends string, Groups extends HttpApiGroup.
|
|
247
|
+
export const reflect = <Id extends string, Groups extends HttpApiGroup.Constraint>(
|
|
223
248
|
self: HttpApi<Id, Groups>,
|
|
224
249
|
options: {
|
|
225
250
|
readonly predicate?:
|
|
226
251
|
| Predicate.Predicate<{
|
|
227
|
-
readonly endpoint: HttpApiEndpoint.
|
|
228
|
-
readonly group: HttpApiGroup.
|
|
252
|
+
readonly endpoint: HttpApiEndpoint.Top
|
|
253
|
+
readonly group: HttpApiGroup.Top
|
|
229
254
|
}>
|
|
230
255
|
| undefined
|
|
231
256
|
readonly onGroup: (options: {
|
|
232
|
-
readonly group: HttpApiGroup.
|
|
257
|
+
readonly group: HttpApiGroup.Top
|
|
233
258
|
readonly mergedAnnotations: Context.Context<never>
|
|
234
259
|
}) => void
|
|
235
260
|
readonly onEndpoint: (options: {
|
|
236
|
-
readonly group: HttpApiGroup.
|
|
237
|
-
readonly endpoint: HttpApiEndpoint.
|
|
261
|
+
readonly group: HttpApiGroup.Top
|
|
262
|
+
readonly endpoint: HttpApiEndpoint.Top
|
|
238
263
|
readonly mergedAnnotations: Context.Context<never>
|
|
239
264
|
readonly middleware: ReadonlySet<HttpApiMiddleware.AnyService>
|
|
240
265
|
readonly successes: ReadonlyMap<number, readonly [Schema.Top, ...Array<Schema.Top>]>
|
|
@@ -242,14 +267,14 @@ export const reflect = <Id extends string, Groups extends HttpApiGroup.Any>(
|
|
|
242
267
|
}) => void
|
|
243
268
|
}
|
|
244
269
|
) => {
|
|
245
|
-
const groups = Object.values(self.groups) as any as Array<HttpApiGroup.
|
|
270
|
+
const groups = Object.values(self.groups) as any as Array<HttpApiGroup.Top>
|
|
246
271
|
for (const group of groups) {
|
|
247
272
|
const groupAnnotations = Context.merge(self.annotations, group.annotations)
|
|
248
273
|
options.onGroup({
|
|
249
274
|
group,
|
|
250
275
|
mergedAnnotations: groupAnnotations
|
|
251
276
|
})
|
|
252
|
-
const endpoints = Object.values(group.endpoints) as Iterable<HttpApiEndpoint.
|
|
277
|
+
const endpoints = Object.values(group.endpoints) as Iterable<HttpApiEndpoint.Top>
|
|
253
278
|
for (const endpoint of endpoints) {
|
|
254
279
|
if (
|
|
255
280
|
options.predicate && !options.predicate({
|