effect 2.4.2 → 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 (87) hide show
  1. package/ManagedRuntime/package.json +6 -0
  2. package/dist/cjs/Brand.js +11 -38
  3. package/dist/cjs/Brand.js.map +1 -1
  4. package/dist/cjs/Effect.js.map +1 -1
  5. package/dist/cjs/Layer.js +9 -1
  6. package/dist/cjs/Layer.js.map +1 -1
  7. package/dist/cjs/ManagedRuntime.js +58 -0
  8. package/dist/cjs/ManagedRuntime.js.map +1 -0
  9. package/dist/cjs/Predicate.js +7 -1
  10. package/dist/cjs/Predicate.js.map +1 -1
  11. package/dist/cjs/Runtime.js.map +1 -1
  12. package/dist/cjs/index.js +4 -2
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/internal/blockedRequests.js +11 -7
  15. package/dist/cjs/internal/blockedRequests.js.map +1 -1
  16. package/dist/cjs/internal/core-effect.js +4 -4
  17. package/dist/cjs/internal/core-effect.js.map +1 -1
  18. package/dist/cjs/internal/core.js +4 -4
  19. package/dist/cjs/internal/core.js.map +1 -1
  20. package/dist/cjs/internal/fiberRuntime.js +3 -1
  21. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  22. package/dist/cjs/internal/layer.js +7 -4
  23. package/dist/cjs/internal/layer.js.map +1 -1
  24. package/dist/cjs/internal/managedRuntime.js +94 -0
  25. package/dist/cjs/internal/managedRuntime.js.map +1 -0
  26. package/dist/cjs/internal/runtime.js +13 -3
  27. package/dist/cjs/internal/runtime.js.map +1 -1
  28. package/dist/cjs/internal/version.js +1 -1
  29. package/dist/dts/Brand.d.ts +2 -1
  30. package/dist/dts/Brand.d.ts.map +1 -1
  31. package/dist/dts/Effect.d.ts +19 -15
  32. package/dist/dts/Effect.d.ts.map +1 -1
  33. package/dist/dts/Layer.d.ts +11 -0
  34. package/dist/dts/Layer.d.ts.map +1 -1
  35. package/dist/dts/ManagedRuntime.d.ts +100 -0
  36. package/dist/dts/ManagedRuntime.d.ts.map +1 -0
  37. package/dist/dts/Predicate.d.ts +5 -0
  38. package/dist/dts/Predicate.d.ts.map +1 -1
  39. package/dist/dts/Runtime.d.ts +6 -2
  40. package/dist/dts/Runtime.d.ts.map +1 -1
  41. package/dist/dts/index.d.ts +4 -0
  42. package/dist/dts/index.d.ts.map +1 -1
  43. package/dist/dts/internal/managedRuntime.d.ts +2 -0
  44. package/dist/dts/internal/managedRuntime.d.ts.map +1 -0
  45. package/dist/esm/Brand.js +9 -36
  46. package/dist/esm/Brand.js.map +1 -1
  47. package/dist/esm/Effect.js.map +1 -1
  48. package/dist/esm/Layer.js +8 -0
  49. package/dist/esm/Layer.js.map +1 -1
  50. package/dist/esm/ManagedRuntime.js +27 -0
  51. package/dist/esm/ManagedRuntime.js.map +1 -0
  52. package/dist/esm/Predicate.js +5 -0
  53. package/dist/esm/Predicate.js.map +1 -1
  54. package/dist/esm/Runtime.js.map +1 -1
  55. package/dist/esm/index.js +4 -0
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/internal/blockedRequests.js +9 -6
  58. package/dist/esm/internal/blockedRequests.js.map +1 -1
  59. package/dist/esm/internal/core-effect.js +4 -4
  60. package/dist/esm/internal/core-effect.js.map +1 -1
  61. package/dist/esm/internal/core.js +5 -5
  62. package/dist/esm/internal/core.js.map +1 -1
  63. package/dist/esm/internal/fiberRuntime.js +3 -1
  64. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  65. package/dist/esm/internal/layer.js +5 -3
  66. package/dist/esm/internal/layer.js.map +1 -1
  67. package/dist/esm/internal/managedRuntime.js +62 -0
  68. package/dist/esm/internal/managedRuntime.js.map +1 -0
  69. package/dist/esm/internal/runtime.js +13 -3
  70. package/dist/esm/internal/runtime.js.map +1 -1
  71. package/dist/esm/internal/version.js +1 -1
  72. package/package.json +9 -1
  73. package/src/Brand.ts +23 -18
  74. package/src/Effect.ts +21 -16
  75. package/src/Layer.ts +17 -0
  76. package/src/ManagedRuntime.ts +119 -0
  77. package/src/Predicate.ts +8 -0
  78. package/src/Runtime.ts +7 -2
  79. package/src/index.ts +5 -0
  80. package/src/internal/blockedRequests.ts +29 -13
  81. package/src/internal/core-effect.ts +19 -25
  82. package/src/internal/core.ts +13 -13
  83. package/src/internal/fiberRuntime.ts +3 -1
  84. package/src/internal/layer.ts +25 -4
  85. package/src/internal/managedRuntime.ts +115 -0
  86. package/src/internal/runtime.ts +41 -21
  87. package/src/internal/version.ts +1 -1
@@ -0,0 +1,115 @@
1
+ import type * as Effect from "../Effect.js"
2
+ import type { Exit } from "../Exit.js"
3
+ import type * as Fiber from "../Fiber.js"
4
+ import type * as Layer from "../Layer.js"
5
+ import type { ManagedRuntime } from "../ManagedRuntime.js"
6
+ import { pipeArguments } from "../Pipeable.js"
7
+ import type * as Runtime from "../Runtime.js"
8
+ import * as Scope from "../Scope.js"
9
+ import * as effect from "./core-effect.js"
10
+ import * as core from "./core.js"
11
+ import * as fiberRuntime from "./fiberRuntime.js"
12
+ import * as internalLayer from "./layer.js"
13
+ import * as internalRuntime from "./runtime.js"
14
+
15
+ interface ManagedRuntimeImpl<R, E> extends ManagedRuntime<R, E> {
16
+ readonly scope: Scope.CloseableScope
17
+ cachedRuntime: Runtime.Runtime<R> | undefined
18
+ }
19
+
20
+ function provide<R, ER, A, E>(
21
+ managed: ManagedRuntimeImpl<R, ER>,
22
+ effect: Effect.Effect<A, E, R>
23
+ ): Effect.Effect<A, E | ER> {
24
+ return core.flatMap(
25
+ managed.runtimeEffect,
26
+ (rt) =>
27
+ core.withFiberRuntime((fiber) => {
28
+ fiber.setFiberRefs(rt.fiberRefs)
29
+ fiber._runtimeFlags = rt.runtimeFlags
30
+ return core.provideContext(effect, rt.context)
31
+ })
32
+ )
33
+ }
34
+
35
+ /** @internal */
36
+ export const make = <R, ER>(
37
+ layer: Layer.Layer<R, ER, never>,
38
+ memoMap?: Layer.MemoMap
39
+ ): ManagedRuntime<R, ER> => {
40
+ memoMap = memoMap ?? internalLayer.unsafeMakeMemoMap()
41
+ const scope = internalRuntime.unsafeRunSyncEffect(fiberRuntime.scopeMake())
42
+ const self: ManagedRuntimeImpl<R, ER> = {
43
+ memoMap,
44
+ scope,
45
+ runtimeEffect: internalRuntime
46
+ .unsafeRunSyncEffect(
47
+ effect.memoize(
48
+ core.tap(
49
+ Scope.extend(
50
+ internalLayer.toRuntimeWithMemoMap(layer, memoMap),
51
+ scope
52
+ ),
53
+ (rt) => {
54
+ self.cachedRuntime = rt
55
+ }
56
+ )
57
+ )
58
+ ),
59
+ cachedRuntime: undefined,
60
+ pipe() {
61
+ return pipeArguments(this, arguments)
62
+ },
63
+ runtime() {
64
+ return self.cachedRuntime === undefined ?
65
+ internalRuntime.unsafeRunPromiseEffect(self.runtimeEffect) :
66
+ Promise.resolve(self.cachedRuntime)
67
+ },
68
+ dispose(): Promise<void> {
69
+ return internalRuntime.unsafeRunPromiseEffect(self.disposeEffect)
70
+ },
71
+ disposeEffect: core.suspend(() => {
72
+ ;(self as any).runtime = core.die("ManagedRuntime disposed")
73
+ self.cachedRuntime = undefined
74
+ return Scope.close(self.scope, core.exitUnit)
75
+ }),
76
+ runFork<A, E>(effect: Effect.Effect<A, E, R>, options?: Runtime.RunForkOptions): Fiber.RuntimeFiber<A, E | ER> {
77
+ return self.cachedRuntime === undefined ?
78
+ internalRuntime.unsafeForkEffect(provide(self, effect), options) :
79
+ internalRuntime.unsafeFork(self.cachedRuntime)(effect, options)
80
+ },
81
+ runSyncExit<A, E>(effect: Effect.Effect<A, E, R>): Exit<A, E | ER> {
82
+ return self.cachedRuntime === undefined ?
83
+ internalRuntime.unsafeRunSyncExitEffect(provide(self, effect)) :
84
+ internalRuntime.unsafeRunSyncExit(self.cachedRuntime)(effect)
85
+ },
86
+ runSync<A, E>(effect: Effect.Effect<A, E, R>): A {
87
+ return self.cachedRuntime === undefined ?
88
+ internalRuntime.unsafeRunSyncEffect(provide(self, effect)) :
89
+ internalRuntime.unsafeRunSync(self.cachedRuntime)(effect)
90
+ },
91
+ runPromiseExit<A, E>(effect: Effect.Effect<A, E, R>, options?: {
92
+ readonly signal?: AbortSignal | undefined
93
+ }): Promise<Exit<A, E | ER>> {
94
+ return self.cachedRuntime === undefined ?
95
+ internalRuntime.unsafeRunPromiseExitEffect(provide(self, effect), options) :
96
+ internalRuntime.unsafeRunPromiseExit(self.cachedRuntime)(effect, options)
97
+ },
98
+ runCallback<A, E>(
99
+ effect: Effect.Effect<A, E, R>,
100
+ options?: Runtime.RunCallbackOptions<A, E | ER> | undefined
101
+ ): Runtime.Cancel<A, E | ER> {
102
+ return self.cachedRuntime === undefined ?
103
+ internalRuntime.unsafeRunCallback(internalRuntime.defaultRuntime)(provide(self, effect), options) :
104
+ internalRuntime.unsafeRunCallback(self.cachedRuntime)(effect, options)
105
+ },
106
+ runPromise<A, E>(effect: Effect.Effect<A, E, R>, options?: {
107
+ readonly signal?: AbortSignal | undefined
108
+ }): Promise<A> {
109
+ return self.cachedRuntime === undefined ?
110
+ internalRuntime.unsafeRunPromiseEffect(provide(self, effect), options) :
111
+ internalRuntime.unsafeRunPromise(self.cachedRuntime)(effect, options)
112
+ }
113
+ }
114
+ return self
115
+ }
@@ -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.2"
1
+ let moduleVersion = "2.4.4"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4