effect 2.3.5 → 2.3.7
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/ModuleVersion/package.json +6 -0
- package/dist/cjs/Effect.js +18 -2
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/FiberId.js.map +1 -1
- package/dist/cjs/Function.js +21 -2
- package/dist/cjs/Function.js.map +1 -1
- package/dist/cjs/GlobalValue.js +27 -2
- package/dist/cjs/GlobalValue.js.map +1 -1
- package/dist/cjs/ModuleVersion.js +49 -0
- package/dist/cjs/ModuleVersion.js.map +1 -0
- package/dist/cjs/Random.js +6 -1
- package/dist/cjs/Random.js.map +1 -1
- package/dist/cjs/RequestResolver.js +27 -1
- package/dist/cjs/RequestResolver.js.map +1 -1
- package/dist/cjs/Runtime.js +39 -1
- package/dist/cjs/Runtime.js.map +1 -1
- package/dist/cjs/TestAnnotation.js.map +1 -1
- package/dist/cjs/TestAnnotationMap.js +40 -15
- package/dist/cjs/TestAnnotationMap.js.map +1 -1
- package/dist/cjs/TestAnnotations.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/cache.js +1 -1
- package/dist/cjs/internal/cache.js.map +1 -1
- package/dist/cjs/internal/cause.js +6 -2
- package/dist/cjs/internal/cause.js.map +1 -1
- package/dist/cjs/internal/dataSource.js +6 -1
- package/dist/cjs/internal/dataSource.js.map +1 -1
- package/dist/cjs/internal/defaultServices.js +3 -1
- package/dist/cjs/internal/defaultServices.js.map +1 -1
- package/dist/cjs/internal/effectable.js +2 -2
- package/dist/cjs/internal/effectable.js.map +1 -1
- package/dist/cjs/internal/fiberId.js +2 -0
- package/dist/cjs/internal/fiberId.js.map +1 -1
- package/dist/cjs/internal/fiberRefs.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +8 -4
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/option.js +2 -1
- package/dist/cjs/internal/option.js.map +1 -1
- package/dist/cjs/internal/runtime.js +15 -1
- package/dist/cjs/internal/runtime.js.map +1 -1
- package/dist/cjs/internal/tracer.js +12 -4
- package/dist/cjs/internal/tracer.js.map +1 -1
- package/dist/cjs/internal/version.js +8 -2
- package/dist/cjs/internal/version.js.map +1 -1
- package/dist/dts/Effect.d.ts +23 -4
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/FiberId.d.ts +11 -4
- package/dist/dts/FiberId.d.ts.map +1 -1
- package/dist/dts/FiberRefs.d.ts +14 -14
- package/dist/dts/FiberRefs.d.ts.map +1 -1
- package/dist/dts/Function.d.ts +18 -0
- package/dist/dts/Function.d.ts.map +1 -1
- package/dist/dts/ModuleVersion.d.ts +11 -0
- package/dist/dts/ModuleVersion.d.ts.map +1 -0
- package/dist/dts/Random.d.ts +6 -0
- package/dist/dts/Random.d.ts.map +1 -1
- package/dist/dts/RequestResolver.d.ts +29 -0
- package/dist/dts/RequestResolver.d.ts.map +1 -1
- package/dist/dts/Runtime.d.ts +48 -0
- package/dist/dts/Runtime.d.ts.map +1 -1
- package/dist/dts/TestAnnotation.d.ts.map +1 -1
- package/dist/dts/TestAnnotationMap.d.ts +2 -1
- package/dist/dts/TestAnnotationMap.d.ts.map +1 -1
- package/dist/dts/TestAnnotations.d.ts +3 -0
- package/dist/dts/TestAnnotations.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/version.d.ts +2 -1
- package/dist/dts/internal/version.d.ts.map +1 -1
- package/dist/esm/Effect.js +16 -0
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/FiberId.js.map +1 -1
- package/dist/esm/Function.js +18 -0
- package/dist/esm/Function.js.map +1 -1
- package/dist/esm/GlobalValue.js +2 -2
- package/dist/esm/GlobalValue.js.map +1 -1
- package/dist/esm/ModuleVersion.js +17 -0
- package/dist/esm/ModuleVersion.js.map +1 -0
- package/dist/esm/Random.js +5 -0
- package/dist/esm/Random.js.map +1 -1
- package/dist/esm/RequestResolver.js +26 -0
- package/dist/esm/RequestResolver.js.map +1 -1
- package/dist/esm/Runtime.js +38 -0
- package/dist/esm/Runtime.js.map +1 -1
- package/dist/esm/TestAnnotation.js.map +1 -1
- package/dist/esm/TestAnnotationMap.js +16 -16
- package/dist/esm/TestAnnotationMap.js.map +1 -1
- package/dist/esm/TestAnnotations.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/cache.js +1 -1
- package/dist/esm/internal/cache.js.map +1 -1
- package/dist/esm/internal/cause.js +6 -2
- package/dist/esm/internal/cause.js.map +1 -1
- package/dist/esm/internal/dataSource.js +5 -0
- package/dist/esm/internal/dataSource.js.map +1 -1
- package/dist/esm/internal/defaultServices.js +2 -0
- package/dist/esm/internal/defaultServices.js.map +1 -1
- package/dist/esm/internal/effectable.js +2 -2
- package/dist/esm/internal/effectable.js.map +1 -1
- package/dist/esm/internal/fiberId.js +2 -0
- package/dist/esm/internal/fiberId.js.map +1 -1
- package/dist/esm/internal/fiberRefs.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +6 -3
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/option.js +2 -1
- package/dist/esm/internal/option.js.map +1 -1
- package/dist/esm/internal/runtime.js +14 -0
- package/dist/esm/internal/runtime.js.map +1 -1
- package/dist/esm/internal/tracer.js +12 -4
- package/dist/esm/internal/tracer.js.map +1 -1
- package/dist/esm/internal/version.js +5 -1
- package/dist/esm/internal/version.js.map +1 -1
- package/package.json +9 -1
- package/src/Effect.ts +26 -4
- package/src/FiberId.ts +12 -4
- package/src/FiberRefs.ts +14 -14
- package/src/Function.ts +19 -0
- package/src/GlobalValue.ts +2 -2
- package/src/ModuleVersion.ts +18 -0
- package/src/Random.ts +7 -0
- package/src/RequestResolver.ts +37 -0
- package/src/Runtime.ts +51 -0
- package/src/TestAnnotation.ts +1 -0
- package/src/TestAnnotationMap.ts +19 -23
- package/src/TestAnnotations.ts +3 -0
- package/src/index.ts +7 -0
- package/src/internal/cache.ts +1 -1
- package/src/internal/cause.ts +11 -6
- package/src/internal/dataSource.ts +27 -0
- package/src/internal/defaultServices.ts +12 -2
- package/src/internal/effectable.ts +2 -2
- package/src/internal/fiberId.ts +6 -4
- package/src/internal/fiberRefs.ts +25 -25
- package/src/internal/fiberRuntime.ts +11 -4
- package/src/internal/option.ts +2 -1
- package/src/internal/runtime.ts +41 -0
- package/src/internal/tracer.ts +12 -4
- package/src/internal/version.ts +7 -1
|
@@ -7,6 +7,7 @@ import { dual, pipe } from "../Function.js"
|
|
|
7
7
|
import * as RA from "../ReadonlyArray.js"
|
|
8
8
|
import type * as Request from "../Request.js"
|
|
9
9
|
import type * as RequestResolver from "../RequestResolver.js"
|
|
10
|
+
import type { NoInfer } from "../Types.js"
|
|
10
11
|
import * as core from "./core.js"
|
|
11
12
|
import { invokeWithInterrupt, zipWithOptions } from "./fiberRuntime.js"
|
|
12
13
|
import { complete } from "./request.js"
|
|
@@ -71,6 +72,32 @@ export const around = dual<
|
|
|
71
72
|
Chunk.make("Around", self, before, after)
|
|
72
73
|
))
|
|
73
74
|
|
|
75
|
+
/** @internal */
|
|
76
|
+
export const aroundRequests = dual<
|
|
77
|
+
<A, R2, A2, R3, _>(
|
|
78
|
+
before: (requests: ReadonlyArray<NoInfer<A>>) => Effect.Effect<A2, never, R2>,
|
|
79
|
+
after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<_, never, R3>
|
|
80
|
+
) => <R>(
|
|
81
|
+
self: RequestResolver.RequestResolver<A, R>
|
|
82
|
+
) => RequestResolver.RequestResolver<A, R | R2 | R3>,
|
|
83
|
+
<R, A, R2, A2, R3, _>(
|
|
84
|
+
self: RequestResolver.RequestResolver<A, R>,
|
|
85
|
+
before: (requests: ReadonlyArray<NoInfer<A>>) => Effect.Effect<A2, never, R2>,
|
|
86
|
+
after: (requests: ReadonlyArray<NoInfer<A>>, _: A2) => Effect.Effect<_, never, R3>
|
|
87
|
+
) => RequestResolver.RequestResolver<A, R | R2 | R3>
|
|
88
|
+
>(3, (self, before, after) =>
|
|
89
|
+
new core.RequestResolverImpl(
|
|
90
|
+
(requests) => {
|
|
91
|
+
const flatRequests = requests.flatMap((chunk) => chunk.map((entry) => entry.request))
|
|
92
|
+
return core.acquireUseRelease(
|
|
93
|
+
before(flatRequests),
|
|
94
|
+
() => self.runAll(requests),
|
|
95
|
+
(a2) => after(flatRequests, a2)
|
|
96
|
+
)
|
|
97
|
+
},
|
|
98
|
+
Chunk.make("AroundRequests", self, before, after)
|
|
99
|
+
))
|
|
100
|
+
|
|
74
101
|
/** @internal */
|
|
75
102
|
export const batchN = dual<
|
|
76
103
|
(n: number) => <R, A>(
|
|
@@ -58,8 +58,8 @@ export const currentTimeNanos: Effect.Effect<bigint> = clockWith((clock) => cloc
|
|
|
58
58
|
|
|
59
59
|
/** @internal */
|
|
60
60
|
export const withClock = dual<
|
|
61
|
-
<
|
|
62
|
-
<
|
|
61
|
+
<X extends Clock.Clock>(value: X) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
|
|
62
|
+
<X extends Clock.Clock, A, E, R>(effect: Effect.Effect<A, E, R>, value: X) => Effect.Effect<A, E, R>
|
|
63
63
|
>(2, (effect, value) =>
|
|
64
64
|
core.fiberRefLocallyWith(
|
|
65
65
|
currentServices,
|
|
@@ -102,6 +102,16 @@ export const randomWith = <A, E, R>(f: (random: Random.Random) => Effect.Effect<
|
|
|
102
102
|
(services) => f(Context.get(services, random.randomTag))
|
|
103
103
|
)
|
|
104
104
|
|
|
105
|
+
/** @internal */
|
|
106
|
+
export const withRandom = dual<
|
|
107
|
+
<X extends Random.Random>(value: X) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
|
|
108
|
+
<X extends Random.Random, A, E, R>(effect: Effect.Effect<A, E, R>, value: X) => Effect.Effect<A, E, R>
|
|
109
|
+
>(2, (effect, value) =>
|
|
110
|
+
core.fiberRefLocallyWith(
|
|
111
|
+
currentServices,
|
|
112
|
+
Context.add(random.randomTag, value)
|
|
113
|
+
)(effect))
|
|
114
|
+
|
|
105
115
|
/** @internal */
|
|
106
116
|
export const next: Effect.Effect<number> = randomWith((random) => random.next)
|
|
107
117
|
|
|
@@ -7,7 +7,7 @@ import { pipeArguments } from "../Pipeable.js"
|
|
|
7
7
|
import type * as Sink from "../Sink.js"
|
|
8
8
|
import type * as Stream from "../Stream.js"
|
|
9
9
|
import * as OpCodes from "./opCodes/effect.js"
|
|
10
|
-
import
|
|
10
|
+
import * as version from "./version.js"
|
|
11
11
|
|
|
12
12
|
/** @internal */
|
|
13
13
|
export const EffectTypeId: Effect.EffectTypeId = Symbol.for("effect/Effect") as Effect.EffectTypeId
|
|
@@ -30,7 +30,7 @@ export const effectVariance = {
|
|
|
30
30
|
/* c8 ignore next */
|
|
31
31
|
_A: (_: never) => _,
|
|
32
32
|
|
|
33
|
-
_V:
|
|
33
|
+
_V: version.getCurrentVersion()
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const sinkVariance = {
|
package/src/internal/fiberId.ts
CHANGED
|
@@ -40,7 +40,9 @@ const emptyHash = Hash.string(`${FiberIdSymbolKey}-${OP_NONE}`)
|
|
|
40
40
|
/** @internal */
|
|
41
41
|
class None implements FiberId.None {
|
|
42
42
|
readonly [FiberIdTypeId]: FiberId.FiberIdTypeId = FiberIdTypeId
|
|
43
|
-
readonly _tag = OP_NONE
|
|
43
|
+
readonly _tag = OP_NONE
|
|
44
|
+
readonly id = -1
|
|
45
|
+
readonly startTimeMillis = -1;
|
|
44
46
|
[Hash.symbol](): number {
|
|
45
47
|
return emptyHash
|
|
46
48
|
}
|
|
@@ -141,15 +143,15 @@ class Composite implements FiberId.Composite {
|
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
/** @internal */
|
|
144
|
-
export const none: FiberId.
|
|
146
|
+
export const none: FiberId.None = new None()
|
|
145
147
|
|
|
146
148
|
/** @internal */
|
|
147
|
-
export const runtime = (id: number, startTimeMillis: number): FiberId.
|
|
149
|
+
export const runtime = (id: number, startTimeMillis: number): FiberId.Runtime => {
|
|
148
150
|
return new Runtime(id, startTimeMillis)
|
|
149
151
|
}
|
|
150
152
|
|
|
151
153
|
/** @internal */
|
|
152
|
-
export const composite = (left: FiberId.FiberId, right: FiberId.FiberId): FiberId.
|
|
154
|
+
export const composite = (left: FiberId.FiberId, right: FiberId.FiberId): FiberId.Composite => {
|
|
153
155
|
return new Composite(left, right)
|
|
154
156
|
}
|
|
155
157
|
|
|
@@ -12,7 +12,7 @@ import * as core from "./core.js"
|
|
|
12
12
|
|
|
13
13
|
/** @internal */
|
|
14
14
|
export function unsafeMake(
|
|
15
|
-
fiberRefLocals: Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
15
|
+
fiberRefLocals: Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>>
|
|
16
16
|
): FiberRefs.FiberRefs {
|
|
17
17
|
return new FiberRefsImpl(fiberRefLocals)
|
|
18
18
|
}
|
|
@@ -31,7 +31,7 @@ export class FiberRefsImpl implements FiberRefs.FiberRefs {
|
|
|
31
31
|
constructor(
|
|
32
32
|
readonly locals: Map<
|
|
33
33
|
FiberRef.FiberRef<any>,
|
|
34
|
-
Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
34
|
+
Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>
|
|
35
35
|
>
|
|
36
36
|
) {
|
|
37
37
|
}
|
|
@@ -43,8 +43,8 @@ export class FiberRefsImpl implements FiberRefs.FiberRefs {
|
|
|
43
43
|
/** @internal */
|
|
44
44
|
const findAncestor = (
|
|
45
45
|
_ref: FiberRef.FiberRef<any>,
|
|
46
|
-
_parentStack: ReadonlyArray<readonly [FiberId.
|
|
47
|
-
_childStack: ReadonlyArray<readonly [FiberId.
|
|
46
|
+
_parentStack: ReadonlyArray<readonly [FiberId.Single, unknown]>,
|
|
47
|
+
_childStack: ReadonlyArray<readonly [FiberId.Single, unknown]>,
|
|
48
48
|
_childModified = false
|
|
49
49
|
): readonly [unknown, boolean] => {
|
|
50
50
|
const ref = _ref
|
|
@@ -83,8 +83,8 @@ const findAncestor = (
|
|
|
83
83
|
|
|
84
84
|
/** @internal */
|
|
85
85
|
export const joinAs = dual<
|
|
86
|
-
(fiberId: FiberId.
|
|
87
|
-
(self: FiberRefs.FiberRefs, fiberId: FiberId.
|
|
86
|
+
(fiberId: FiberId.Single, that: FiberRefs.FiberRefs) => (self: FiberRefs.FiberRefs) => FiberRefs.FiberRefs,
|
|
87
|
+
(self: FiberRefs.FiberRefs, fiberId: FiberId.Single, that: FiberRefs.FiberRefs) => FiberRefs.FiberRefs
|
|
88
88
|
>(3, (self, fiberId, that) => {
|
|
89
89
|
const parentFiberRefs = new Map(self.locals)
|
|
90
90
|
that.locals.forEach((childStack, fiberRef) => {
|
|
@@ -111,7 +111,7 @@ export const joinAs = dual<
|
|
|
111
111
|
const oldValue = parentStack[0][1]
|
|
112
112
|
const newValue = fiberRef.join(oldValue, fiberRef.patch(patch)(oldValue))
|
|
113
113
|
if (!Equal.equals(oldValue, newValue)) {
|
|
114
|
-
let newStack: Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
114
|
+
let newStack: Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, unknown]>
|
|
115
115
|
const parentFiberId = parentStack[0][0]
|
|
116
116
|
if (parentFiberId[Equal.symbol](fiberId)) {
|
|
117
117
|
newStack = [[parentFiberId, newValue] as const, ...parentStack.slice(1)]
|
|
@@ -128,18 +128,18 @@ export const joinAs = dual<
|
|
|
128
128
|
|
|
129
129
|
/** @internal */
|
|
130
130
|
export const forkAs = dual<
|
|
131
|
-
(childId: FiberId.
|
|
132
|
-
(self: FiberRefs.FiberRefs, childId: FiberId.
|
|
131
|
+
(childId: FiberId.Single) => (self: FiberRefs.FiberRefs) => FiberRefs.FiberRefs,
|
|
132
|
+
(self: FiberRefs.FiberRefs, childId: FiberId.Single) => FiberRefs.FiberRefs
|
|
133
133
|
>(2, (self, childId) => {
|
|
134
|
-
const map = new Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
134
|
+
const map = new Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, unknown]>>()
|
|
135
135
|
unsafeForkAs(self, map, childId)
|
|
136
136
|
return new FiberRefsImpl(map)
|
|
137
137
|
})
|
|
138
138
|
|
|
139
139
|
const unsafeForkAs = (
|
|
140
140
|
self: FiberRefs.FiberRefs,
|
|
141
|
-
map: Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
142
|
-
fiberId: FiberId.
|
|
141
|
+
map: Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>>,
|
|
142
|
+
fiberId: FiberId.Single
|
|
143
143
|
) => {
|
|
144
144
|
self.locals.forEach((stack, fiberRef) => {
|
|
145
145
|
const oldValue = stack[0][1]
|
|
@@ -193,7 +193,7 @@ export const getOrDefault = dual<
|
|
|
193
193
|
export const updateAs = dual<
|
|
194
194
|
<A>(
|
|
195
195
|
options: {
|
|
196
|
-
readonly fiberId: FiberId.
|
|
196
|
+
readonly fiberId: FiberId.Single
|
|
197
197
|
readonly fiberRef: FiberRef.FiberRef<A>
|
|
198
198
|
readonly value: A
|
|
199
199
|
}
|
|
@@ -201,13 +201,13 @@ export const updateAs = dual<
|
|
|
201
201
|
<A>(
|
|
202
202
|
self: FiberRefs.FiberRefs,
|
|
203
203
|
options: {
|
|
204
|
-
readonly fiberId: FiberId.
|
|
204
|
+
readonly fiberId: FiberId.Single
|
|
205
205
|
readonly fiberRef: FiberRef.FiberRef<A>
|
|
206
206
|
readonly value: A
|
|
207
207
|
}
|
|
208
208
|
) => FiberRefs.FiberRefs
|
|
209
209
|
>(2, <A>(self: FiberRefs.FiberRefs, { fiberId, fiberRef, value }: {
|
|
210
|
-
readonly fiberId: FiberId.
|
|
210
|
+
readonly fiberId: FiberId.Single
|
|
211
211
|
readonly fiberRef: FiberRef.FiberRef<A>
|
|
212
212
|
readonly value: A
|
|
213
213
|
}) => {
|
|
@@ -220,13 +220,13 @@ export const updateAs = dual<
|
|
|
220
220
|
})
|
|
221
221
|
|
|
222
222
|
const unsafeUpdateAs = (
|
|
223
|
-
locals: Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
224
|
-
fiberId: FiberId.
|
|
223
|
+
locals: Map<FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>>,
|
|
224
|
+
fiberId: FiberId.Single,
|
|
225
225
|
fiberRef: FiberRef.FiberRef<any>,
|
|
226
226
|
value: any
|
|
227
227
|
) => {
|
|
228
|
-
const oldStack: ReadonlyArray<readonly [FiberId.
|
|
229
|
-
let newStack: Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
228
|
+
const oldStack: ReadonlyArray<readonly [FiberId.Single, any]> = locals.get(fiberRef) ?? []
|
|
229
|
+
let newStack: Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]> | undefined
|
|
230
230
|
|
|
231
231
|
if (Arr.isNonEmptyReadonlyArray(oldStack)) {
|
|
232
232
|
const [currentId, currentValue] = Arr.headNonEmpty(oldStack)
|
|
@@ -256,25 +256,25 @@ const unsafeUpdateAs = (
|
|
|
256
256
|
export const updateManyAs = dual<
|
|
257
257
|
(
|
|
258
258
|
options: {
|
|
259
|
-
readonly forkAs?: FiberId.
|
|
259
|
+
readonly forkAs?: FiberId.Single | undefined
|
|
260
260
|
readonly entries: Arr.NonEmptyReadonlyArray<
|
|
261
|
-
readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
261
|
+
readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>]
|
|
262
262
|
>
|
|
263
263
|
}
|
|
264
264
|
) => (self: FiberRefs.FiberRefs) => FiberRefs.FiberRefs,
|
|
265
265
|
(
|
|
266
266
|
self: FiberRefs.FiberRefs,
|
|
267
267
|
options: {
|
|
268
|
-
readonly forkAs?: FiberId.
|
|
268
|
+
readonly forkAs?: FiberId.Single | undefined
|
|
269
269
|
readonly entries: Arr.NonEmptyReadonlyArray<
|
|
270
|
-
readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
270
|
+
readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>]
|
|
271
271
|
>
|
|
272
272
|
}
|
|
273
273
|
) => FiberRefs.FiberRefs
|
|
274
274
|
>(2, (self: FiberRefs.FiberRefs, { entries, forkAs }: {
|
|
275
|
-
readonly forkAs?: FiberId.
|
|
275
|
+
readonly forkAs?: FiberId.Single | undefined
|
|
276
276
|
readonly entries: Arr.NonEmptyReadonlyArray<
|
|
277
|
-
readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.
|
|
277
|
+
readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Single, any]>]
|
|
278
278
|
>
|
|
279
279
|
}) => {
|
|
280
280
|
if (self.locals.size === 0) {
|
|
@@ -28,6 +28,7 @@ import * as MRef from "../MutableRef.js"
|
|
|
28
28
|
import * as Option from "../Option.js"
|
|
29
29
|
import { pipeArguments } from "../Pipeable.js"
|
|
30
30
|
import * as Predicate from "../Predicate.js"
|
|
31
|
+
import type * as Random from "../Random.js"
|
|
31
32
|
import * as RA from "../ReadonlyArray.js"
|
|
32
33
|
import * as Ref from "../Ref.js"
|
|
33
34
|
import type { Entry, Request } from "../Request.js"
|
|
@@ -59,13 +60,14 @@ import * as metric from "./metric.js"
|
|
|
59
60
|
import * as metricBoundaries from "./metric/boundaries.js"
|
|
60
61
|
import * as metricLabel from "./metric/label.js"
|
|
61
62
|
import * as OpCodes from "./opCodes/effect.js"
|
|
63
|
+
import { randomTag } from "./random.js"
|
|
62
64
|
import { complete } from "./request.js"
|
|
63
65
|
import * as _runtimeFlags from "./runtimeFlags.js"
|
|
64
66
|
import { OpSupervision } from "./runtimeFlags.js"
|
|
65
67
|
import * as supervisor from "./supervisor.js"
|
|
66
68
|
import * as SupervisorPatch from "./supervisor/patch.js"
|
|
67
69
|
import * as tracer from "./tracer.js"
|
|
68
|
-
import
|
|
70
|
+
import * as version from "./version.js"
|
|
69
71
|
|
|
70
72
|
/** @internal */
|
|
71
73
|
export const fiberStarted = metric.counter("effect_fiber_started")
|
|
@@ -1285,11 +1287,11 @@ export class FiberRuntime<in out A, in out E = never> implements Fiber.RuntimeFi
|
|
|
1285
1287
|
// @ts-expect-error
|
|
1286
1288
|
cur = this._tracer.context(
|
|
1287
1289
|
() => {
|
|
1288
|
-
if (
|
|
1290
|
+
if (version.getCurrentVersion() !== (cur as core.Primitive)[EffectTypeId]._V) {
|
|
1289
1291
|
return core.dieMessage(
|
|
1290
1292
|
`Cannot execute an Effect versioned ${
|
|
1291
1293
|
(cur as core.Primitive)[EffectTypeId]._V
|
|
1292
|
-
} with a Runtime of version ${
|
|
1294
|
+
} with a Runtime of version ${version.getCurrentVersion()}`
|
|
1293
1295
|
)
|
|
1294
1296
|
}
|
|
1295
1297
|
// @ts-expect-error
|
|
@@ -2705,6 +2707,10 @@ export const validateFirst = dual<
|
|
|
2705
2707
|
export const withClockScoped = <A extends Clock.Clock>(value: A) =>
|
|
2706
2708
|
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(clock.clockTag, value))
|
|
2707
2709
|
|
|
2710
|
+
/* @internal */
|
|
2711
|
+
export const withRandomScoped = <A extends Random.Random>(value: A) =>
|
|
2712
|
+
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(randomTag, value))
|
|
2713
|
+
|
|
2708
2714
|
/* @internal */
|
|
2709
2715
|
export const withConfigProviderScoped = (value: ConfigProvider) =>
|
|
2710
2716
|
fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(configProviderTag, value))
|
|
@@ -3073,7 +3079,8 @@ export const fiberAwaitAll = (fibers: Iterable<Fiber.Fiber<any, any>>): Effect.E
|
|
|
3073
3079
|
/** @internal */
|
|
3074
3080
|
export const fiberAll = <A, E>(fibers: Iterable<Fiber.Fiber<A, E>>): Fiber.Fiber<Array<A>, E> => ({
|
|
3075
3081
|
[internalFiber.FiberTypeId]: internalFiber.fiberVariance,
|
|
3076
|
-
id: () =>
|
|
3082
|
+
id: () =>
|
|
3083
|
+
RA.fromIterable(fibers).reduce((id, fiber) => FiberId.combine(id, fiber.id()), FiberId.none as FiberId.FiberId),
|
|
3077
3084
|
await: core.exit(forEachParUnbounded(fibers, (fiber) => core.flatten(fiber.await), false)),
|
|
3078
3085
|
children: core.map(forEachParUnbounded(fibers, (fiber) => fiber.children, false), RA.flatten),
|
|
3079
3086
|
inheritAll: core.forEachSequentialDiscard(fibers, (fiber) => fiber.inheritAll),
|
package/src/internal/option.ts
CHANGED
|
@@ -42,6 +42,7 @@ const SomeProto = Object.assign(Object.create(CommonProto), {
|
|
|
42
42
|
}
|
|
43
43
|
})
|
|
44
44
|
|
|
45
|
+
const NoneHash = Hash.hash("None")
|
|
45
46
|
const NoneProto = Object.assign(Object.create(CommonProto), {
|
|
46
47
|
_tag: "None",
|
|
47
48
|
_op: "None",
|
|
@@ -49,7 +50,7 @@ const NoneProto = Object.assign(Object.create(CommonProto), {
|
|
|
49
50
|
return isOption(that) && isNone(that)
|
|
50
51
|
},
|
|
51
52
|
[Hash.symbol]<A>(this: Option.None<A>) {
|
|
52
|
-
return
|
|
53
|
+
return NoneHash
|
|
53
54
|
},
|
|
54
55
|
toJSON<A>(this: Option.None<A>) {
|
|
55
56
|
return {
|
package/src/internal/runtime.ts
CHANGED
|
@@ -388,6 +388,47 @@ export const provideService: {
|
|
|
388
388
|
updateContext(self, Context.add(tag, service))
|
|
389
389
|
)
|
|
390
390
|
|
|
391
|
+
/** @internal */
|
|
392
|
+
export const updateFiberRefs: {
|
|
393
|
+
(f: (fiberRefs: FiberRefs.FiberRefs) => FiberRefs.FiberRefs): <R>(self: Runtime.Runtime<R>) => Runtime.Runtime<R>
|
|
394
|
+
<R>(self: Runtime.Runtime<R>, f: (fiberRefs: FiberRefs.FiberRefs) => FiberRefs.FiberRefs): Runtime.Runtime<R>
|
|
395
|
+
} = dual(
|
|
396
|
+
2,
|
|
397
|
+
<R>(self: Runtime.Runtime<R>, f: (fiberRefs: FiberRefs.FiberRefs) => FiberRefs.FiberRefs): Runtime.Runtime<R> =>
|
|
398
|
+
make({
|
|
399
|
+
context: self.context,
|
|
400
|
+
runtimeFlags: self.runtimeFlags,
|
|
401
|
+
fiberRefs: f(self.fiberRefs)
|
|
402
|
+
})
|
|
403
|
+
)
|
|
404
|
+
|
|
405
|
+
/** @internal */
|
|
406
|
+
export const setFiberRef: {
|
|
407
|
+
<A>(fiberRef: FiberRef.FiberRef<A>, value: A): <R>(self: Runtime.Runtime<R>) => Runtime.Runtime<R>
|
|
408
|
+
<R, A>(self: Runtime.Runtime<R>, fiberRef: FiberRef.FiberRef<A>, value: A): Runtime.Runtime<R>
|
|
409
|
+
} = dual(
|
|
410
|
+
3,
|
|
411
|
+
<R, A>(self: Runtime.Runtime<R>, fiberRef: FiberRef.FiberRef<A>, value: A): Runtime.Runtime<R> =>
|
|
412
|
+
updateFiberRefs(
|
|
413
|
+
self,
|
|
414
|
+
FiberRefs.updateAs({
|
|
415
|
+
fiberId: FiberId.none,
|
|
416
|
+
fiberRef,
|
|
417
|
+
value
|
|
418
|
+
})
|
|
419
|
+
)
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
/** @internal */
|
|
423
|
+
export const deleteFiberRef: {
|
|
424
|
+
<A>(fiberRef: FiberRef.FiberRef<A>): <R>(self: Runtime.Runtime<R>) => Runtime.Runtime<R>
|
|
425
|
+
<R, A>(self: Runtime.Runtime<R>, fiberRef: FiberRef.FiberRef<A>): Runtime.Runtime<R>
|
|
426
|
+
} = dual(
|
|
427
|
+
2,
|
|
428
|
+
<R, A>(self: Runtime.Runtime<R>, fiberRef: FiberRef.FiberRef<A>): Runtime.Runtime<R> =>
|
|
429
|
+
updateFiberRefs(self, FiberRefs.delete(fiberRef))
|
|
430
|
+
)
|
|
431
|
+
|
|
391
432
|
/** @internal */
|
|
392
433
|
export const unsafeRunEffect = unsafeRunCallback(defaultRuntime)
|
|
393
434
|
|
package/src/internal/tracer.ts
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import * as Context from "../Context.js"
|
|
5
5
|
import type * as Exit from "../Exit.js"
|
|
6
|
-
import { globalValue } from "../GlobalValue.js"
|
|
7
|
-
import * as MutableRef from "../MutableRef.js"
|
|
8
6
|
import type * as Option from "../Option.js"
|
|
9
7
|
import type * as Tracer from "../Tracer.js"
|
|
10
8
|
|
|
@@ -23,7 +21,17 @@ export const tracerTag = Context.GenericTag<Tracer.Tracer>("effect/Tracer")
|
|
|
23
21
|
/** @internal */
|
|
24
22
|
export const spanTag = Context.GenericTag<Tracer.ParentSpan>("effect/ParentSpan")
|
|
25
23
|
|
|
26
|
-
const
|
|
24
|
+
const randomString = (function() {
|
|
25
|
+
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
|
26
|
+
const charactersLength = characters.length
|
|
27
|
+
return function(length: number) {
|
|
28
|
+
let result = ""
|
|
29
|
+
for (let i = 0; i < length; i++) {
|
|
30
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength))
|
|
31
|
+
}
|
|
32
|
+
return result
|
|
33
|
+
}
|
|
34
|
+
})()
|
|
27
35
|
|
|
28
36
|
/** @internal */
|
|
29
37
|
export class NativeSpan implements Tracer.Span {
|
|
@@ -48,7 +56,7 @@ export class NativeSpan implements Tracer.Span {
|
|
|
48
56
|
startTime
|
|
49
57
|
}
|
|
50
58
|
this.attributes = new Map()
|
|
51
|
-
this.spanId = `span${
|
|
59
|
+
this.spanId = `span${randomString(16)}`
|
|
52
60
|
}
|
|
53
61
|
|
|
54
62
|
end = (endTime: bigint, exit: Exit.Exit<unknown, unknown>): void => {
|