effect 2.4.3 → 2.4.4

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 (63) hide show
  1. package/dist/cjs/Brand.js +11 -38
  2. package/dist/cjs/Brand.js.map +1 -1
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/ManagedRuntime.js.map +1 -1
  5. package/dist/cjs/Predicate.js +7 -1
  6. package/dist/cjs/Predicate.js.map +1 -1
  7. package/dist/cjs/Runtime.js.map +1 -1
  8. package/dist/cjs/internal/blockedRequests.js +11 -7
  9. package/dist/cjs/internal/blockedRequests.js.map +1 -1
  10. package/dist/cjs/internal/core-effect.js +4 -4
  11. package/dist/cjs/internal/core-effect.js.map +1 -1
  12. package/dist/cjs/internal/core.js +4 -4
  13. package/dist/cjs/internal/core.js.map +1 -1
  14. package/dist/cjs/internal/fiberRuntime.js +3 -1
  15. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  16. package/dist/cjs/internal/managedRuntime.js +4 -4
  17. package/dist/cjs/internal/managedRuntime.js.map +1 -1
  18. package/dist/cjs/internal/runtime.js +13 -3
  19. package/dist/cjs/internal/runtime.js.map +1 -1
  20. package/dist/cjs/internal/version.js +1 -1
  21. package/dist/dts/Brand.d.ts +2 -1
  22. package/dist/dts/Brand.d.ts.map +1 -1
  23. package/dist/dts/Effect.d.ts +19 -15
  24. package/dist/dts/Effect.d.ts.map +1 -1
  25. package/dist/dts/ManagedRuntime.d.ts +6 -2
  26. package/dist/dts/ManagedRuntime.d.ts.map +1 -1
  27. package/dist/dts/Predicate.d.ts +5 -0
  28. package/dist/dts/Predicate.d.ts.map +1 -1
  29. package/dist/dts/Runtime.d.ts +6 -2
  30. package/dist/dts/Runtime.d.ts.map +1 -1
  31. package/dist/esm/Brand.js +9 -36
  32. package/dist/esm/Brand.js.map +1 -1
  33. package/dist/esm/Effect.js.map +1 -1
  34. package/dist/esm/ManagedRuntime.js.map +1 -1
  35. package/dist/esm/Predicate.js +5 -0
  36. package/dist/esm/Predicate.js.map +1 -1
  37. package/dist/esm/Runtime.js.map +1 -1
  38. package/dist/esm/internal/blockedRequests.js +9 -6
  39. package/dist/esm/internal/blockedRequests.js.map +1 -1
  40. package/dist/esm/internal/core-effect.js +4 -4
  41. package/dist/esm/internal/core-effect.js.map +1 -1
  42. package/dist/esm/internal/core.js +5 -5
  43. package/dist/esm/internal/core.js.map +1 -1
  44. package/dist/esm/internal/fiberRuntime.js +3 -1
  45. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  46. package/dist/esm/internal/managedRuntime.js +4 -4
  47. package/dist/esm/internal/managedRuntime.js.map +1 -1
  48. package/dist/esm/internal/runtime.js +13 -3
  49. package/dist/esm/internal/runtime.js.map +1 -1
  50. package/dist/esm/internal/version.js +1 -1
  51. package/package.json +1 -1
  52. package/src/Brand.ts +23 -18
  53. package/src/Effect.ts +21 -16
  54. package/src/ManagedRuntime.ts +6 -2
  55. package/src/Predicate.ts +8 -0
  56. package/src/Runtime.ts +7 -2
  57. package/src/internal/blockedRequests.ts +29 -13
  58. package/src/internal/core-effect.ts +19 -25
  59. package/src/internal/core.ts +13 -13
  60. package/src/internal/fiberRuntime.ts +3 -1
  61. package/src/internal/managedRuntime.ts +10 -6
  62. package/src/internal/runtime.ts +41 -21
  63. package/src/internal/version.ts +1 -1
@@ -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, isPromise, isString, type Predicate, type Refinement } from "../Predicate.js"
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 [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
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 [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
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 [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
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 [Promise<infer A1>] ? Effect.Effect<A1, E | Cause.UnknownException, R>
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 (isPromise(b)) {
723
+ } else if (isPromiseLike(b)) {
724
724
  return async<any, Cause.UnknownException>((resume) => {
725
- b.then((a) => resume(succeed(a))).catch((e) => resume(fail(new UnknownException(e))))
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 [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
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 [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
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 [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
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 [Promise<infer _A1>] ? Effect.Effect<A, E | Cause.UnknownException, R>
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 (isPromise(b)) {
1198
+ } else if (isPromiseLike(b)) {
1199
1199
  return async<any, Cause.UnknownException>((resume) => {
1200
- b.then((_) => resume(succeed(a))).catch((e) => resume(fail(new UnknownException(e))))
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(sequential), sequential.flat()),
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>): Promise<Exit<A, E | ER>> {
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>): Promise<A> {
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
@@ -257,31 +257,51 @@ export const unsafeRunSyncExit =
257
257
  }
258
258
 
259
259
  /** @internal */
260
- export const unsafeRunPromise =
261
- <R>(runtime: Runtime.Runtime<R>) => <A, E>(effect: Effect.Effect<A, E, R>): Promise<A> =>
262
- unsafeRunPromiseExit(runtime)(effect).then((result) => {
263
- switch (result._tag) {
264
- case OpCodes.OP_SUCCESS: {
265
- return result.i0
266
- }
267
- case OpCodes.OP_FAILURE: {
268
- throw fiberFailure(result.i0)
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
- <R>(runtime: Runtime.Runtime<R>) => <A, E>(effect: Effect.Effect<A, E, R>): Promise<Exit.Exit<A, E>> =>
276
- new Promise((resolve) => {
277
- const op = fastPath(effect)
278
- if (op) {
279
- resolve(op)
280
- }
281
- unsafeFork(runtime)(effect).addObserver((exit) => {
282
- resolve(exit)
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> {
@@ -1,4 +1,4 @@
1
- let moduleVersion = "2.4.3"
1
+ let moduleVersion = "2.4.4"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4