effect 2.4.3 → 2.4.5
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/cjs/Brand.js +11 -38
- package/dist/cjs/Brand.js.map +1 -1
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/ManagedRuntime.js.map +1 -1
- package/dist/cjs/Predicate.js +7 -1
- package/dist/cjs/Predicate.js.map +1 -1
- package/dist/cjs/Runtime.js.map +1 -1
- package/dist/cjs/internal/blockedRequests.js +11 -7
- package/dist/cjs/internal/blockedRequests.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +4 -4
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core.js +4 -4
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +3 -1
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/managedRuntime.js +4 -4
- package/dist/cjs/internal/managedRuntime.js.map +1 -1
- package/dist/cjs/internal/runtime.js +13 -3
- package/dist/cjs/internal/runtime.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Brand.d.ts +2 -1
- package/dist/dts/Brand.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +19 -15
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/ManagedRuntime.d.ts +6 -2
- package/dist/dts/ManagedRuntime.d.ts.map +1 -1
- package/dist/dts/Predicate.d.ts +5 -0
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/ReadonlyArray.d.ts +2 -2
- package/dist/dts/ReadonlyArray.d.ts.map +1 -1
- package/dist/dts/Runtime.d.ts +6 -2
- package/dist/dts/Runtime.d.ts.map +1 -1
- package/dist/esm/Brand.js +9 -36
- package/dist/esm/Brand.js.map +1 -1
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/ManagedRuntime.js.map +1 -1
- package/dist/esm/Predicate.js +5 -0
- package/dist/esm/Predicate.js.map +1 -1
- package/dist/esm/Runtime.js.map +1 -1
- package/dist/esm/internal/blockedRequests.js +9 -6
- package/dist/esm/internal/blockedRequests.js.map +1 -1
- package/dist/esm/internal/core-effect.js +4 -4
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +5 -5
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +3 -1
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/managedRuntime.js +4 -4
- package/dist/esm/internal/managedRuntime.js.map +1 -1
- package/dist/esm/internal/runtime.js +13 -3
- package/dist/esm/internal/runtime.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +1 -1
- package/src/Brand.ts +23 -18
- package/src/Effect.ts +21 -16
- package/src/ManagedRuntime.ts +6 -2
- package/src/Predicate.ts +8 -0
- package/src/ReadonlyArray.ts +2 -2
- package/src/Runtime.ts +7 -2
- package/src/internal/blockedRequests.ts +29 -13
- package/src/internal/core-effect.ts +19 -25
- package/src/internal/core.ts +13 -13
- package/src/internal/fiberRuntime.ts +3 -1
- package/src/internal/managedRuntime.ts +10 -6
- package/src/internal/runtime.ts +41 -21
- package/src/internal/version.ts +1 -1
package/src/internal/core.ts
CHANGED
|
@@ -26,7 +26,7 @@ import type * as MetricLabel from "../MetricLabel.js"
|
|
|
26
26
|
import * as MutableRef from "../MutableRef.js"
|
|
27
27
|
import * as Option from "../Option.js"
|
|
28
28
|
import { pipeArguments } from "../Pipeable.js"
|
|
29
|
-
import { hasProperty, isObject,
|
|
29
|
+
import { hasProperty, isObject, isPromiseLike, isString, type Predicate, type Refinement } from "../Predicate.js"
|
|
30
30
|
import * as ReadonlyArray from "../ReadonlyArray.js"
|
|
31
31
|
import type * as Request from "../Request.js"
|
|
32
32
|
import type * as BlockedRequests from "../RequestBlock.js"
|
|
@@ -694,35 +694,35 @@ export const andThen: {
|
|
|
694
694
|
): <E, R>(
|
|
695
695
|
self: Effect.Effect<A, E, R>
|
|
696
696
|
) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
|
|
697
|
-
: [X] extends [
|
|
697
|
+
: [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
|
|
698
698
|
: Effect.Effect<X, E, R>
|
|
699
699
|
<X>(
|
|
700
700
|
f: NotFunction<X>
|
|
701
701
|
): <A, E, R>(
|
|
702
702
|
self: Effect.Effect<A, E, R>
|
|
703
703
|
) => [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
|
|
704
|
-
: [X] extends [
|
|
704
|
+
: [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
|
|
705
705
|
: Effect.Effect<X, E, R>
|
|
706
706
|
<A, E, R, X>(
|
|
707
707
|
self: Effect.Effect<A, E, R>,
|
|
708
708
|
f: (a: NoInfer<A>) => X
|
|
709
709
|
): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
|
|
710
|
-
: [X] extends [
|
|
710
|
+
: [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
|
|
711
711
|
: Effect.Effect<X, E, R>
|
|
712
712
|
<A, E, R, X>(
|
|
713
713
|
self: Effect.Effect<A, E, R>,
|
|
714
714
|
f: NotFunction<X>
|
|
715
715
|
): [X] extends [Effect.Effect<infer A1, infer E1, infer R1>] ? Effect.Effect<A1, E | E1, R | R1>
|
|
716
|
-
: [X] extends [
|
|
716
|
+
: [X] extends [PromiseLike<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
|
|
717
717
|
: Effect.Effect<X, E, R>
|
|
718
718
|
} = dual(2, (self, f) =>
|
|
719
719
|
flatMap(self, (a) => {
|
|
720
720
|
const b = typeof f === "function" ? (f as any)(a) : f
|
|
721
721
|
if (isEffect(b)) {
|
|
722
722
|
return b
|
|
723
|
-
} else if (
|
|
723
|
+
} else if (isPromiseLike(b)) {
|
|
724
724
|
return async<any, Cause.UnknownException>((resume) => {
|
|
725
|
-
b.then((a) => resume(succeed(a))
|
|
725
|
+
b.then((a) => resume(succeed(a)), (e) => resume(fail(new UnknownException(e))))
|
|
726
726
|
})
|
|
727
727
|
}
|
|
728
728
|
return succeed(b)
|
|
@@ -1166,14 +1166,14 @@ export const tap = dual<
|
|
|
1166
1166
|
): <E, R>(
|
|
1167
1167
|
self: Effect.Effect<A, E, R>
|
|
1168
1168
|
) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1169
|
-
: [X] extends [
|
|
1169
|
+
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1170
1170
|
: Effect.Effect<A, E, R>
|
|
1171
1171
|
<X>(
|
|
1172
1172
|
f: NotFunction<X>
|
|
1173
1173
|
): <A, E, R>(
|
|
1174
1174
|
self: Effect.Effect<A, E, R>
|
|
1175
1175
|
) => [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1176
|
-
: [X] extends [
|
|
1176
|
+
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1177
1177
|
: Effect.Effect<A, E, R>
|
|
1178
1178
|
},
|
|
1179
1179
|
{
|
|
@@ -1181,13 +1181,13 @@ export const tap = dual<
|
|
|
1181
1181
|
self: Effect.Effect<A, E, R>,
|
|
1182
1182
|
f: (a: NoInfer<A>) => X
|
|
1183
1183
|
): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1184
|
-
: [X] extends [
|
|
1184
|
+
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1185
1185
|
: Effect.Effect<A, E, R>
|
|
1186
1186
|
<A, E, R, X>(
|
|
1187
1187
|
self: Effect.Effect<A, E, R>,
|
|
1188
1188
|
f: NotFunction<X>
|
|
1189
1189
|
): [X] extends [Effect.Effect<infer _A1, infer E1, infer R1>] ? Effect.Effect<A, E | E1, R | R1>
|
|
1190
|
-
: [X] extends [
|
|
1190
|
+
: [X] extends [PromiseLike<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
|
|
1191
1191
|
: Effect.Effect<A, E, R>
|
|
1192
1192
|
}
|
|
1193
1193
|
>(2, (self, f) =>
|
|
@@ -1195,9 +1195,9 @@ export const tap = dual<
|
|
|
1195
1195
|
const b = typeof f === "function" ? (f as any)(a) : f
|
|
1196
1196
|
if (isEffect(b)) {
|
|
1197
1197
|
return as(b, a)
|
|
1198
|
-
} else if (
|
|
1198
|
+
} else if (isPromiseLike(b)) {
|
|
1199
1199
|
return async<any, Cause.UnknownException>((resume) => {
|
|
1200
|
-
b.then((_) => resume(succeed(a))
|
|
1200
|
+
b.then((_) => resume(succeed(a)), (e) => resume(fail(new UnknownException(e))))
|
|
1201
1201
|
})
|
|
1202
1202
|
}
|
|
1203
1203
|
return succeed(a)
|
|
@@ -234,13 +234,15 @@ const runBlockedRequests = (self: RequestBlock.RequestBlock) =>
|
|
|
234
234
|
_RequestBlock.sequentialCollectionToChunk(requestsByRequestResolver),
|
|
235
235
|
([dataSource, sequential]) => {
|
|
236
236
|
const map = new Map<Request<any, any>, Entry<any>>()
|
|
237
|
+
const arr: Array<Array<Entry<any>>> = []
|
|
237
238
|
for (const block of sequential) {
|
|
239
|
+
arr.push(Chunk.toReadonlyArray(block) as any)
|
|
238
240
|
for (const entry of block) {
|
|
239
241
|
map.set(entry.request as Request<any, any>, entry)
|
|
240
242
|
}
|
|
241
243
|
}
|
|
242
244
|
return core.fiberRefLocally(
|
|
243
|
-
invokeWithInterrupt(dataSource.runAll(
|
|
245
|
+
invokeWithInterrupt(dataSource.runAll(arr), arr.flat()),
|
|
244
246
|
currentRequestMap,
|
|
245
247
|
map
|
|
246
248
|
)
|
|
@@ -88,10 +88,12 @@ export const make = <R, ER>(
|
|
|
88
88
|
internalRuntime.unsafeRunSyncEffect(provide(self, effect)) :
|
|
89
89
|
internalRuntime.unsafeRunSync(self.cachedRuntime)(effect)
|
|
90
90
|
},
|
|
91
|
-
runPromiseExit<A, E>(effect: Effect.Effect<A, E, R
|
|
91
|
+
runPromiseExit<A, E>(effect: Effect.Effect<A, E, R>, options?: {
|
|
92
|
+
readonly signal?: AbortSignal | undefined
|
|
93
|
+
}): Promise<Exit<A, E | ER>> {
|
|
92
94
|
return self.cachedRuntime === undefined ?
|
|
93
|
-
internalRuntime.unsafeRunPromiseExitEffect(provide(self, effect)) :
|
|
94
|
-
internalRuntime.unsafeRunPromiseExit(self.cachedRuntime)(effect)
|
|
95
|
+
internalRuntime.unsafeRunPromiseExitEffect(provide(self, effect), options) :
|
|
96
|
+
internalRuntime.unsafeRunPromiseExit(self.cachedRuntime)(effect, options)
|
|
95
97
|
},
|
|
96
98
|
runCallback<A, E>(
|
|
97
99
|
effect: Effect.Effect<A, E, R>,
|
|
@@ -101,10 +103,12 @@ export const make = <R, ER>(
|
|
|
101
103
|
internalRuntime.unsafeRunCallback(internalRuntime.defaultRuntime)(provide(self, effect), options) :
|
|
102
104
|
internalRuntime.unsafeRunCallback(self.cachedRuntime)(effect, options)
|
|
103
105
|
},
|
|
104
|
-
runPromise<A, E>(effect: Effect.Effect<A, E, R
|
|
106
|
+
runPromise<A, E>(effect: Effect.Effect<A, E, R>, options?: {
|
|
107
|
+
readonly signal?: AbortSignal | undefined
|
|
108
|
+
}): Promise<A> {
|
|
105
109
|
return self.cachedRuntime === undefined ?
|
|
106
|
-
internalRuntime.unsafeRunPromiseEffect(provide(self, effect)) :
|
|
107
|
-
internalRuntime.unsafeRunPromise(self.cachedRuntime)(effect)
|
|
110
|
+
internalRuntime.unsafeRunPromiseEffect(provide(self, effect), options) :
|
|
111
|
+
internalRuntime.unsafeRunPromise(self.cachedRuntime)(effect, options)
|
|
108
112
|
}
|
|
109
113
|
}
|
|
110
114
|
return self
|
package/src/internal/runtime.ts
CHANGED
|
@@ -257,31 +257,51 @@ export const unsafeRunSyncExit =
|
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
/** @internal */
|
|
260
|
-
export const unsafeRunPromise =
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
260
|
+
export const unsafeRunPromise = <R>(runtime: Runtime.Runtime<R>) =>
|
|
261
|
+
<A, E>(
|
|
262
|
+
effect: Effect.Effect<A, E, R>,
|
|
263
|
+
options?: {
|
|
264
|
+
readonly signal?: AbortSignal | undefined
|
|
265
|
+
} | undefined
|
|
266
|
+
): Promise<A> =>
|
|
267
|
+
unsafeRunPromiseExit(runtime)(effect, options).then((result) => {
|
|
268
|
+
switch (result._tag) {
|
|
269
|
+
case OpCodes.OP_SUCCESS: {
|
|
270
|
+
return result.i0
|
|
270
271
|
}
|
|
271
|
-
|
|
272
|
+
case OpCodes.OP_FAILURE: {
|
|
273
|
+
throw fiberFailure(result.i0)
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
})
|
|
272
277
|
|
|
273
278
|
/** @internal */
|
|
274
|
-
export const unsafeRunPromiseExit =
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
279
|
+
export const unsafeRunPromiseExit = <R>(runtime: Runtime.Runtime<R>) =>
|
|
280
|
+
<A, E>(
|
|
281
|
+
effect: Effect.Effect<A, E, R>,
|
|
282
|
+
options?: {
|
|
283
|
+
readonly signal?: AbortSignal | undefined
|
|
284
|
+
} | undefined
|
|
285
|
+
): Promise<Exit.Exit<A, E>> =>
|
|
286
|
+
new Promise((resolve) => {
|
|
287
|
+
const op = fastPath(effect)
|
|
288
|
+
if (op) {
|
|
289
|
+
resolve(op)
|
|
290
|
+
}
|
|
291
|
+
const fiber = unsafeFork(runtime)(effect)
|
|
292
|
+
fiber.addObserver((exit) => {
|
|
293
|
+
resolve(exit)
|
|
284
294
|
})
|
|
295
|
+
if (options?.signal !== undefined) {
|
|
296
|
+
if (options.signal.aborted) {
|
|
297
|
+
fiber.unsafeInterruptAsFork(fiber.id())
|
|
298
|
+
} else {
|
|
299
|
+
options.signal.addEventListener("abort", () => {
|
|
300
|
+
fiber.unsafeInterruptAsFork(fiber.id())
|
|
301
|
+
})
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
})
|
|
285
305
|
|
|
286
306
|
/** @internal */
|
|
287
307
|
export class RuntimeImpl<in R> implements Runtime.Runtime<R> {
|
package/src/internal/version.ts
CHANGED