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.
- package/ManagedRuntime/package.json +6 -0
- 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/Layer.js +9 -1
- package/dist/cjs/Layer.js.map +1 -1
- package/dist/cjs/ManagedRuntime.js +58 -0
- package/dist/cjs/ManagedRuntime.js.map +1 -0
- 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/index.js +4 -2
- package/dist/cjs/index.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/layer.js +7 -4
- package/dist/cjs/internal/layer.js.map +1 -1
- package/dist/cjs/internal/managedRuntime.js +94 -0
- package/dist/cjs/internal/managedRuntime.js.map +1 -0
- 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/Layer.d.ts +11 -0
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/ManagedRuntime.d.ts +100 -0
- package/dist/dts/ManagedRuntime.d.ts.map +1 -0
- package/dist/dts/Predicate.d.ts +5 -0
- package/dist/dts/Predicate.d.ts.map +1 -1
- package/dist/dts/Runtime.d.ts +6 -2
- package/dist/dts/Runtime.d.ts.map +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/managedRuntime.d.ts +2 -0
- package/dist/dts/internal/managedRuntime.d.ts.map +1 -0
- 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/Layer.js +8 -0
- package/dist/esm/Layer.js.map +1 -1
- package/dist/esm/ManagedRuntime.js +27 -0
- package/dist/esm/ManagedRuntime.js.map +1 -0
- 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/index.js +4 -0
- package/dist/esm/index.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/layer.js +5 -3
- package/dist/esm/internal/layer.js.map +1 -1
- package/dist/esm/internal/managedRuntime.js +62 -0
- package/dist/esm/internal/managedRuntime.js.map +1 -0
- 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 +9 -1
- package/src/Brand.ts +23 -18
- package/src/Effect.ts +21 -16
- package/src/Layer.ts +17 -0
- package/src/ManagedRuntime.ts +119 -0
- package/src/Predicate.ts +8 -0
- package/src/Runtime.ts +7 -2
- package/src/index.ts +5 -0
- 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/layer.ts +25 -4
- package/src/internal/managedRuntime.ts +115 -0
- package/src/internal/runtime.ts +41 -21
- 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
|
+
}
|
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