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.
Files changed (140) hide show
  1. package/ModuleVersion/package.json +6 -0
  2. package/dist/cjs/Effect.js +18 -2
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberId.js.map +1 -1
  5. package/dist/cjs/Function.js +21 -2
  6. package/dist/cjs/Function.js.map +1 -1
  7. package/dist/cjs/GlobalValue.js +27 -2
  8. package/dist/cjs/GlobalValue.js.map +1 -1
  9. package/dist/cjs/ModuleVersion.js +49 -0
  10. package/dist/cjs/ModuleVersion.js.map +1 -0
  11. package/dist/cjs/Random.js +6 -1
  12. package/dist/cjs/Random.js.map +1 -1
  13. package/dist/cjs/RequestResolver.js +27 -1
  14. package/dist/cjs/RequestResolver.js.map +1 -1
  15. package/dist/cjs/Runtime.js +39 -1
  16. package/dist/cjs/Runtime.js.map +1 -1
  17. package/dist/cjs/TestAnnotation.js.map +1 -1
  18. package/dist/cjs/TestAnnotationMap.js +40 -15
  19. package/dist/cjs/TestAnnotationMap.js.map +1 -1
  20. package/dist/cjs/TestAnnotations.js.map +1 -1
  21. package/dist/cjs/index.js +4 -2
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/internal/cache.js +1 -1
  24. package/dist/cjs/internal/cache.js.map +1 -1
  25. package/dist/cjs/internal/cause.js +6 -2
  26. package/dist/cjs/internal/cause.js.map +1 -1
  27. package/dist/cjs/internal/dataSource.js +6 -1
  28. package/dist/cjs/internal/dataSource.js.map +1 -1
  29. package/dist/cjs/internal/defaultServices.js +3 -1
  30. package/dist/cjs/internal/defaultServices.js.map +1 -1
  31. package/dist/cjs/internal/effectable.js +2 -2
  32. package/dist/cjs/internal/effectable.js.map +1 -1
  33. package/dist/cjs/internal/fiberId.js +2 -0
  34. package/dist/cjs/internal/fiberId.js.map +1 -1
  35. package/dist/cjs/internal/fiberRefs.js.map +1 -1
  36. package/dist/cjs/internal/fiberRuntime.js +8 -4
  37. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  38. package/dist/cjs/internal/option.js +2 -1
  39. package/dist/cjs/internal/option.js.map +1 -1
  40. package/dist/cjs/internal/runtime.js +15 -1
  41. package/dist/cjs/internal/runtime.js.map +1 -1
  42. package/dist/cjs/internal/tracer.js +12 -4
  43. package/dist/cjs/internal/tracer.js.map +1 -1
  44. package/dist/cjs/internal/version.js +8 -2
  45. package/dist/cjs/internal/version.js.map +1 -1
  46. package/dist/dts/Effect.d.ts +23 -4
  47. package/dist/dts/Effect.d.ts.map +1 -1
  48. package/dist/dts/FiberId.d.ts +11 -4
  49. package/dist/dts/FiberId.d.ts.map +1 -1
  50. package/dist/dts/FiberRefs.d.ts +14 -14
  51. package/dist/dts/FiberRefs.d.ts.map +1 -1
  52. package/dist/dts/Function.d.ts +18 -0
  53. package/dist/dts/Function.d.ts.map +1 -1
  54. package/dist/dts/ModuleVersion.d.ts +11 -0
  55. package/dist/dts/ModuleVersion.d.ts.map +1 -0
  56. package/dist/dts/Random.d.ts +6 -0
  57. package/dist/dts/Random.d.ts.map +1 -1
  58. package/dist/dts/RequestResolver.d.ts +29 -0
  59. package/dist/dts/RequestResolver.d.ts.map +1 -1
  60. package/dist/dts/Runtime.d.ts +48 -0
  61. package/dist/dts/Runtime.d.ts.map +1 -1
  62. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  63. package/dist/dts/TestAnnotationMap.d.ts +2 -1
  64. package/dist/dts/TestAnnotationMap.d.ts.map +1 -1
  65. package/dist/dts/TestAnnotations.d.ts +3 -0
  66. package/dist/dts/TestAnnotations.d.ts.map +1 -1
  67. package/dist/dts/index.d.ts +6 -0
  68. package/dist/dts/index.d.ts.map +1 -1
  69. package/dist/dts/internal/version.d.ts +2 -1
  70. package/dist/dts/internal/version.d.ts.map +1 -1
  71. package/dist/esm/Effect.js +16 -0
  72. package/dist/esm/Effect.js.map +1 -1
  73. package/dist/esm/FiberId.js.map +1 -1
  74. package/dist/esm/Function.js +18 -0
  75. package/dist/esm/Function.js.map +1 -1
  76. package/dist/esm/GlobalValue.js +2 -2
  77. package/dist/esm/GlobalValue.js.map +1 -1
  78. package/dist/esm/ModuleVersion.js +17 -0
  79. package/dist/esm/ModuleVersion.js.map +1 -0
  80. package/dist/esm/Random.js +5 -0
  81. package/dist/esm/Random.js.map +1 -1
  82. package/dist/esm/RequestResolver.js +26 -0
  83. package/dist/esm/RequestResolver.js.map +1 -1
  84. package/dist/esm/Runtime.js +38 -0
  85. package/dist/esm/Runtime.js.map +1 -1
  86. package/dist/esm/TestAnnotation.js.map +1 -1
  87. package/dist/esm/TestAnnotationMap.js +16 -16
  88. package/dist/esm/TestAnnotationMap.js.map +1 -1
  89. package/dist/esm/TestAnnotations.js.map +1 -1
  90. package/dist/esm/index.js +6 -0
  91. package/dist/esm/index.js.map +1 -1
  92. package/dist/esm/internal/cache.js +1 -1
  93. package/dist/esm/internal/cache.js.map +1 -1
  94. package/dist/esm/internal/cause.js +6 -2
  95. package/dist/esm/internal/cause.js.map +1 -1
  96. package/dist/esm/internal/dataSource.js +5 -0
  97. package/dist/esm/internal/dataSource.js.map +1 -1
  98. package/dist/esm/internal/defaultServices.js +2 -0
  99. package/dist/esm/internal/defaultServices.js.map +1 -1
  100. package/dist/esm/internal/effectable.js +2 -2
  101. package/dist/esm/internal/effectable.js.map +1 -1
  102. package/dist/esm/internal/fiberId.js +2 -0
  103. package/dist/esm/internal/fiberId.js.map +1 -1
  104. package/dist/esm/internal/fiberRefs.js.map +1 -1
  105. package/dist/esm/internal/fiberRuntime.js +6 -3
  106. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  107. package/dist/esm/internal/option.js +2 -1
  108. package/dist/esm/internal/option.js.map +1 -1
  109. package/dist/esm/internal/runtime.js +14 -0
  110. package/dist/esm/internal/runtime.js.map +1 -1
  111. package/dist/esm/internal/tracer.js +12 -4
  112. package/dist/esm/internal/tracer.js.map +1 -1
  113. package/dist/esm/internal/version.js +5 -1
  114. package/dist/esm/internal/version.js.map +1 -1
  115. package/package.json +9 -1
  116. package/src/Effect.ts +26 -4
  117. package/src/FiberId.ts +12 -4
  118. package/src/FiberRefs.ts +14 -14
  119. package/src/Function.ts +19 -0
  120. package/src/GlobalValue.ts +2 -2
  121. package/src/ModuleVersion.ts +18 -0
  122. package/src/Random.ts +7 -0
  123. package/src/RequestResolver.ts +37 -0
  124. package/src/Runtime.ts +51 -0
  125. package/src/TestAnnotation.ts +1 -0
  126. package/src/TestAnnotationMap.ts +19 -23
  127. package/src/TestAnnotations.ts +3 -0
  128. package/src/index.ts +7 -0
  129. package/src/internal/cache.ts +1 -1
  130. package/src/internal/cause.ts +11 -6
  131. package/src/internal/dataSource.ts +27 -0
  132. package/src/internal/defaultServices.ts +12 -2
  133. package/src/internal/effectable.ts +2 -2
  134. package/src/internal/fiberId.ts +6 -4
  135. package/src/internal/fiberRefs.ts +25 -25
  136. package/src/internal/fiberRuntime.ts +11 -4
  137. package/src/internal/option.ts +2 -1
  138. package/src/internal/runtime.ts +41 -0
  139. package/src/internal/tracer.ts +12 -4
  140. 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
- <A extends Clock.Clock>(value: A) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
62
- <A extends Clock.Clock, E, R>(effect: Effect.Effect<A, E, R>, value: A) => Effect.Effect<A, E, R>
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 { moduleVersion } from "./version.js"
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: moduleVersion
33
+ _V: version.getCurrentVersion()
34
34
  }
35
35
 
36
36
  const sinkVariance = {
@@ -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.FiberId = new None()
146
+ export const none: FiberId.None = new None()
145
147
 
146
148
  /** @internal */
147
- export const runtime = (id: number, startTimeMillis: number): FiberId.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.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.Runtime, any]>>
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.Runtime, any]>
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.Runtime, unknown]>,
47
- _childStack: ReadonlyArray<readonly [FiberId.Runtime, unknown]>,
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.Runtime, that: FiberRefs.FiberRefs) => (self: FiberRefs.FiberRefs) => FiberRefs.FiberRefs,
87
- (self: FiberRefs.FiberRefs, fiberId: FiberId.Runtime, that: FiberRefs.FiberRefs) => FiberRefs.FiberRefs
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.Runtime, unknown]>
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.Runtime) => (self: FiberRefs.FiberRefs) => FiberRefs.FiberRefs,
132
- (self: FiberRefs.FiberRefs, childId: FiberId.Runtime) => FiberRefs.FiberRefs
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.Runtime, unknown]>>()
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.Runtime, any]>>,
142
- fiberId: FiberId.Runtime
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.Runtime
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.Runtime
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.Runtime
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.Runtime, any]>>,
224
- fiberId: FiberId.Runtime,
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.Runtime, any]> = locals.get(fiberRef) ?? []
229
- let newStack: Arr.NonEmptyReadonlyArray<readonly [FiberId.Runtime, any]> | undefined
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.Runtime | undefined
259
+ readonly forkAs?: FiberId.Single | undefined
260
260
  readonly entries: Arr.NonEmptyReadonlyArray<
261
- readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Runtime, any]>]
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.Runtime | undefined
268
+ readonly forkAs?: FiberId.Single | undefined
269
269
  readonly entries: Arr.NonEmptyReadonlyArray<
270
- readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Runtime, any]>]
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.Runtime | undefined
275
+ readonly forkAs?: FiberId.Single | undefined
276
276
  readonly entries: Arr.NonEmptyReadonlyArray<
277
- readonly [FiberRef.FiberRef<any>, Arr.NonEmptyReadonlyArray<readonly [FiberId.Runtime, any]>]
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 { moduleVersion } from "./version.js"
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 (moduleVersion !== (cur as core.Primitive)[EffectTypeId]._V) {
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 ${moduleVersion}`
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: () => RA.fromIterable(fibers).reduce((id, fiber) => FiberId.combine(id, fiber.id()), FiberId.none),
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),
@@ -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 Hash.combine(Hash.hash(this._tag))
53
+ return NoneHash
53
54
  },
54
55
  toJSON<A>(this: Option.None<A>) {
55
56
  return {
@@ -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
 
@@ -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 ids = globalValue("effect/Tracer/SpanId.ids", () => MutableRef.make(0))
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${MutableRef.incrementAndGet(ids)}`
59
+ this.spanId = `span${randomString(16)}`
52
60
  }
53
61
 
54
62
  end = (endTime: bigint, exit: Exit.Exit<unknown, unknown>): void => {
@@ -1 +1,7 @@
1
- export const moduleVersion = "2.3.5"
1
+ let moduleVersion = "2.3.7"
2
+
3
+ export const getCurrentVersion = () => moduleVersion
4
+
5
+ export const setCurrentVersion = (version: string) => {
6
+ moduleVersion = version
7
+ }