MCPcopy
hub / github.com/Effect-TS/effect / make

Function make

packages/effect/src/internal/managedRuntime.ts:54–137  ·  view source on GitHub ↗
(
  layer: Layer.Layer<R, ER, never>,
  memoMap?: Layer.MemoMap
)

Source from the content-addressed store, hash-verified

52
53/** @internal */
54export const make = <R, ER>(
55 layer: Layer.Layer<R, ER, never>,
56 memoMap?: Layer.MemoMap
57): M.ManagedRuntime<R, ER> => {
58 memoMap = memoMap ?? internalLayer.unsafeMakeMemoMap()
59 const scope = internalRuntime.unsafeRunSyncEffect(fiberRuntime.scopeMake())
60 let buildFiber: Fiber.RuntimeFiber<Runtime.Runtime<R>, ER> | undefined
61 const runtimeEffect = core.suspend(() => {
62 if (!buildFiber) {
63 const scheduler = new Scheduler.SyncScheduler()
64 buildFiber = internalRuntime.unsafeForkEffect(
65 core.tap(
66 Scope.extend(
67 internalLayer.toRuntimeWithMemoMap(layer, memoMap),
68 scope
69 ),
70 (rt) => {
71 self.cachedRuntime = rt
72 }
73 ),
74 { scope, scheduler }
75 )
76 scheduler.flush()
77 }
78 return core.flatten(buildFiber.await)
79 })
80 const self: ManagedRuntimeImpl<R, ER> = Object.assign(Object.create(ManagedRuntimeProto), {
81 memoMap,
82 scope,
83 runtimeEffect,
84 cachedRuntime: undefined,
85 runtime() {
86 return self.cachedRuntime === undefined ?
87 internalRuntime.unsafeRunPromiseEffect(self.runtimeEffect) :
88 Promise.resolve(self.cachedRuntime)
89 },
90 dispose(): Promise<void> {
91 return internalRuntime.unsafeRunPromiseEffect(self.disposeEffect)
92 },
93 disposeEffect: core.suspend(() => {
94 ;(self as Mutable<ManagedRuntimeImpl<R, ER>>).runtimeEffect = core.die("ManagedRuntime disposed")
95 self.cachedRuntime = undefined
96 return Scope.close(self.scope, core.exitVoid)
97 }),
98 runFork<A, E>(effect: Effect.Effect<A, E, R>, options?: Runtime.RunForkOptions): Fiber.RuntimeFiber<A, E | ER> {
99 return self.cachedRuntime === undefined ?
100 internalRuntime.unsafeForkEffect(provide(self, effect), options) :
101 internalRuntime.unsafeFork(self.cachedRuntime)(effect, options)
102 },
103 runSyncExit<A, E>(effect: Effect.Effect<A, E, R>): Exit<A, E | ER> {
104 return self.cachedRuntime === undefined ?
105 internalRuntime.unsafeRunSyncExitEffect(provide(self, effect)) :
106 internalRuntime.unsafeRunSyncExit(self.cachedRuntime)(effect)
107 },
108 runSync<A, E>(effect: Effect.Effect<A, E, R>): A {
109 return self.cachedRuntime === undefined ?
110 internalRuntime.unsafeRunSyncEffect(provide(self, effect)) :
111 internalRuntime.unsafeRunSync(self.cachedRuntime)(effect)

Callers

nothing calls this directly

Calls 4

flushMethod · 0.95
createMethod · 0.80
dieMethod · 0.65
closeMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…