effect 3.11.10 → 3.12.1

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 (216) hide show
  1. package/dist/cjs/Context.js +28 -1
  2. package/dist/cjs/Context.js.map +1 -1
  3. package/dist/cjs/Cron.js +75 -24
  4. package/dist/cjs/Cron.js.map +1 -1
  5. package/dist/cjs/Effect.js +3044 -932
  6. package/dist/cjs/Effect.js.map +1 -1
  7. package/dist/cjs/Encoding.js +43 -2
  8. package/dist/cjs/Encoding.js.map +1 -1
  9. package/dist/cjs/GlobalValue.js +8 -6
  10. package/dist/cjs/GlobalValue.js.map +1 -1
  11. package/dist/cjs/HashMap.js +2 -2
  12. package/dist/cjs/HashMap.js.map +1 -1
  13. package/dist/cjs/Request.js +3 -3
  14. package/dist/cjs/Request.js.map +1 -1
  15. package/dist/cjs/RequestBlock.js +7 -7
  16. package/dist/cjs/RequestBlock.js.map +1 -1
  17. package/dist/cjs/Runtime.js.map +1 -1
  18. package/dist/cjs/Schedule.js +2 -2
  19. package/dist/cjs/Schedule.js.map +1 -1
  20. package/dist/cjs/Schema.js +70 -14
  21. package/dist/cjs/Schema.js.map +1 -1
  22. package/dist/cjs/Stream.js +5 -5
  23. package/dist/cjs/Stream.js.map +1 -1
  24. package/dist/cjs/Tracer.js +6 -1
  25. package/dist/cjs/Tracer.js.map +1 -1
  26. package/dist/cjs/internal/cause.js +10 -4
  27. package/dist/cjs/internal/cause.js.map +1 -1
  28. package/dist/cjs/internal/channel.js +3 -3
  29. package/dist/cjs/internal/channel.js.map +1 -1
  30. package/dist/cjs/internal/context.js +12 -1
  31. package/dist/cjs/internal/context.js.map +1 -1
  32. package/dist/cjs/internal/core-effect.js +30 -23
  33. package/dist/cjs/internal/core-effect.js.map +1 -1
  34. package/dist/cjs/internal/core.js +28 -46
  35. package/dist/cjs/internal/core.js.map +1 -1
  36. package/dist/cjs/internal/defaultServices.js +2 -2
  37. package/dist/cjs/internal/defaultServices.js.map +1 -1
  38. package/dist/cjs/internal/effect/circular.js +4 -4
  39. package/dist/cjs/internal/effect/circular.js.map +1 -1
  40. package/dist/cjs/internal/encoding/common.js +20 -2
  41. package/dist/cjs/internal/encoding/common.js.map +1 -1
  42. package/dist/cjs/internal/fiberRefs/patch.js +5 -5
  43. package/dist/cjs/internal/fiberRefs/patch.js.map +1 -1
  44. package/dist/cjs/internal/fiberRuntime.js +39 -36
  45. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  46. package/dist/cjs/internal/fiberScope.js.map +1 -1
  47. package/dist/cjs/internal/layer/circular.js +2 -2
  48. package/dist/cjs/internal/layer/circular.js.map +1 -1
  49. package/dist/cjs/internal/logSpan.js +10 -3
  50. package/dist/cjs/internal/logSpan.js.map +1 -1
  51. package/dist/cjs/internal/logger-circular.js +2 -2
  52. package/dist/cjs/internal/logger-circular.js.map +1 -1
  53. package/dist/cjs/internal/logger.js +43 -117
  54. package/dist/cjs/internal/logger.js.map +1 -1
  55. package/dist/cjs/internal/metric.js +3 -3
  56. package/dist/cjs/internal/metric.js.map +1 -1
  57. package/dist/cjs/internal/reloadable.js +7 -7
  58. package/dist/cjs/internal/reloadable.js.map +1 -1
  59. package/dist/cjs/internal/resource.js +2 -2
  60. package/dist/cjs/internal/resource.js.map +1 -1
  61. package/dist/cjs/internal/runtime.js +7 -7
  62. package/dist/cjs/internal/runtime.js.map +1 -1
  63. package/dist/cjs/internal/schedule.js +4 -4
  64. package/dist/cjs/internal/schedule.js.map +1 -1
  65. package/dist/cjs/internal/scopedCache.js +9 -9
  66. package/dist/cjs/internal/scopedCache.js.map +1 -1
  67. package/dist/cjs/internal/stream.js +28 -28
  68. package/dist/cjs/internal/stream.js.map +1 -1
  69. package/dist/cjs/internal/subscriptionRef.js +4 -4
  70. package/dist/cjs/internal/subscriptionRef.js.map +1 -1
  71. package/dist/cjs/internal/synchronizedRef.js.map +1 -1
  72. package/dist/cjs/internal/tracer.js +6 -1
  73. package/dist/cjs/internal/tracer.js.map +1 -1
  74. package/dist/cjs/internal/version.js +1 -1
  75. package/dist/cjs/internal/version.js.map +1 -1
  76. package/dist/dts/Context.d.ts +29 -0
  77. package/dist/dts/Context.d.ts.map +1 -1
  78. package/dist/dts/Cron.d.ts +30 -2
  79. package/dist/dts/Cron.d.ts.map +1 -1
  80. package/dist/dts/Effect.d.ts +6532 -2037
  81. package/dist/dts/Effect.d.ts.map +1 -1
  82. package/dist/dts/Encoding.d.ts +50 -0
  83. package/dist/dts/Encoding.d.ts.map +1 -1
  84. package/dist/dts/GlobalValue.d.ts.map +1 -1
  85. package/dist/dts/Runtime.d.ts +11 -1
  86. package/dist/dts/Runtime.d.ts.map +1 -1
  87. package/dist/dts/Schedule.d.ts +27 -3
  88. package/dist/dts/Schedule.d.ts.map +1 -1
  89. package/dist/dts/Schema.d.ts +39 -0
  90. package/dist/dts/Schema.d.ts.map +1 -1
  91. package/dist/dts/Tracer.d.ts +12 -0
  92. package/dist/dts/Tracer.d.ts.map +1 -1
  93. package/dist/dts/Utils.d.ts +4 -4
  94. package/dist/dts/Utils.d.ts.map +1 -1
  95. package/dist/dts/internal/core-effect.d.ts.map +1 -1
  96. package/dist/dts/internal/core.d.ts.map +1 -1
  97. package/dist/dts/internal/encoding/common.d.ts.map +1 -1
  98. package/dist/dts/internal/fiberScope.d.ts.map +1 -1
  99. package/dist/dts/internal/logger.d.ts +1 -1
  100. package/dist/dts/internal/logger.d.ts.map +1 -1
  101. package/dist/esm/Context.js +27 -0
  102. package/dist/esm/Context.js.map +1 -1
  103. package/dist/esm/Cron.js +72 -22
  104. package/dist/esm/Cron.js.map +1 -1
  105. package/dist/esm/Effect.js +3040 -929
  106. package/dist/esm/Effect.js.map +1 -1
  107. package/dist/esm/Encoding.js +39 -0
  108. package/dist/esm/Encoding.js.map +1 -1
  109. package/dist/esm/GlobalValue.js +8 -6
  110. package/dist/esm/GlobalValue.js.map +1 -1
  111. package/dist/esm/HashMap.js +2 -2
  112. package/dist/esm/HashMap.js.map +1 -1
  113. package/dist/esm/Request.js +3 -3
  114. package/dist/esm/Request.js.map +1 -1
  115. package/dist/esm/RequestBlock.js +7 -7
  116. package/dist/esm/RequestBlock.js.map +1 -1
  117. package/dist/esm/Runtime.js.map +1 -1
  118. package/dist/esm/Schedule.js +2 -2
  119. package/dist/esm/Schedule.js.map +1 -1
  120. package/dist/esm/Schema.js +58 -4
  121. package/dist/esm/Schema.js.map +1 -1
  122. package/dist/esm/Stream.js +5 -5
  123. package/dist/esm/Stream.js.map +1 -1
  124. package/dist/esm/Tracer.js +5 -0
  125. package/dist/esm/Tracer.js.map +1 -1
  126. package/dist/esm/internal/cause.js +10 -4
  127. package/dist/esm/internal/cause.js.map +1 -1
  128. package/dist/esm/internal/channel.js +3 -3
  129. package/dist/esm/internal/channel.js.map +1 -1
  130. package/dist/esm/internal/context.js +10 -0
  131. package/dist/esm/internal/context.js.map +1 -1
  132. package/dist/esm/internal/core-effect.js +30 -23
  133. package/dist/esm/internal/core-effect.js.map +1 -1
  134. package/dist/esm/internal/core.js +24 -41
  135. package/dist/esm/internal/core.js.map +1 -1
  136. package/dist/esm/internal/defaultServices.js +2 -2
  137. package/dist/esm/internal/defaultServices.js.map +1 -1
  138. package/dist/esm/internal/effect/circular.js +4 -4
  139. package/dist/esm/internal/effect/circular.js.map +1 -1
  140. package/dist/esm/internal/encoding/common.js +16 -0
  141. package/dist/esm/internal/encoding/common.js.map +1 -1
  142. package/dist/esm/internal/fiberRefs/patch.js +5 -5
  143. package/dist/esm/internal/fiberRefs/patch.js.map +1 -1
  144. package/dist/esm/internal/fiberRuntime.js +39 -36
  145. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  146. package/dist/esm/internal/fiberScope.js.map +1 -1
  147. package/dist/esm/internal/layer/circular.js +2 -2
  148. package/dist/esm/internal/layer/circular.js.map +1 -1
  149. package/dist/esm/internal/logSpan.js +7 -1
  150. package/dist/esm/internal/logSpan.js.map +1 -1
  151. package/dist/esm/internal/logger-circular.js +2 -2
  152. package/dist/esm/internal/logger-circular.js.map +1 -1
  153. package/dist/esm/internal/logger.js +44 -118
  154. package/dist/esm/internal/logger.js.map +1 -1
  155. package/dist/esm/internal/metric.js +3 -3
  156. package/dist/esm/internal/metric.js.map +1 -1
  157. package/dist/esm/internal/reloadable.js +7 -7
  158. package/dist/esm/internal/reloadable.js.map +1 -1
  159. package/dist/esm/internal/resource.js +2 -2
  160. package/dist/esm/internal/resource.js.map +1 -1
  161. package/dist/esm/internal/runtime.js +7 -7
  162. package/dist/esm/internal/runtime.js.map +1 -1
  163. package/dist/esm/internal/schedule.js +4 -4
  164. package/dist/esm/internal/schedule.js.map +1 -1
  165. package/dist/esm/internal/scopedCache.js +9 -9
  166. package/dist/esm/internal/scopedCache.js.map +1 -1
  167. package/dist/esm/internal/stream.js +28 -28
  168. package/dist/esm/internal/stream.js.map +1 -1
  169. package/dist/esm/internal/subscriptionRef.js +4 -4
  170. package/dist/esm/internal/subscriptionRef.js.map +1 -1
  171. package/dist/esm/internal/synchronizedRef.js.map +1 -1
  172. package/dist/esm/internal/tracer.js +5 -0
  173. package/dist/esm/internal/tracer.js.map +1 -1
  174. package/dist/esm/internal/version.js +1 -1
  175. package/dist/esm/internal/version.js.map +1 -1
  176. package/package.json +2 -2
  177. package/src/Context.ts +30 -0
  178. package/src/Cron.ts +85 -19
  179. package/src/Effect.ts +6671 -2092
  180. package/src/Encoding.ts +65 -0
  181. package/src/GlobalValue.ts +8 -6
  182. package/src/HashMap.ts +2 -2
  183. package/src/Request.ts +3 -3
  184. package/src/RequestBlock.ts +7 -7
  185. package/src/Runtime.ts +12 -4
  186. package/src/Schedule.ts +27 -3
  187. package/src/Schema.ts +72 -4
  188. package/src/Stream.ts +5 -5
  189. package/src/Tracer.ts +14 -0
  190. package/src/Utils.ts +4 -4
  191. package/src/internal/cause.ts +10 -4
  192. package/src/internal/channel.ts +3 -3
  193. package/src/internal/context.ts +13 -0
  194. package/src/internal/core-effect.ts +59 -47
  195. package/src/internal/core.ts +48 -67
  196. package/src/internal/defaultServices.ts +10 -10
  197. package/src/internal/effect/circular.ts +54 -49
  198. package/src/internal/encoding/common.ts +21 -0
  199. package/src/internal/fiberRefs/patch.ts +5 -5
  200. package/src/internal/fiberRuntime.ts +44 -40
  201. package/src/internal/fiberScope.ts +0 -1
  202. package/src/internal/layer/circular.ts +2 -2
  203. package/src/internal/logSpan.ts +8 -1
  204. package/src/internal/logger-circular.ts +2 -2
  205. package/src/internal/logger.ts +53 -144
  206. package/src/internal/metric.ts +3 -3
  207. package/src/internal/reloadable.ts +10 -10
  208. package/src/internal/resource.ts +2 -2
  209. package/src/internal/runtime.ts +8 -8
  210. package/src/internal/schedule.ts +8 -4
  211. package/src/internal/scopedCache.ts +23 -23
  212. package/src/internal/stream.ts +30 -30
  213. package/src/internal/subscriptionRef.ts +4 -4
  214. package/src/internal/synchronizedRef.ts +0 -1
  215. package/src/internal/tracer.ts +6 -0
  216. package/src/internal/version.ts +1 -1
@@ -99,13 +99,11 @@ export const try_: {
99
99
  evaluate = arg.try
100
100
  onFailure = arg.catch
101
101
  }
102
- return core.sync(() => {
102
+ return core.suspend(() => {
103
103
  try {
104
- return evaluate()
104
+ return core.succeed(internalCall(evaluate))
105
105
  } catch (error) {
106
- throw core.makeEffectError(internalCause.fail(
107
- onFailure ? onFailure(error) : new core.UnknownException(error)
108
- ))
106
+ return core.fail(onFailure ? internalCall(() => onFailure(error)) : new core.UnknownException(error))
109
107
  }
110
108
  })
111
109
  }
@@ -1600,7 +1598,7 @@ export const tapErrorCause = dual<
1600
1598
  /* @internal */
1601
1599
  export const timed = <A, E, R>(
1602
1600
  self: Effect.Effect<A, E, R>
1603
- ): Effect.Effect<[Duration.Duration, A], E, R> => timedWith(self, Clock.currentTimeNanos)
1601
+ ): Effect.Effect<[duration: Duration.Duration, result: A], E, R> => timedWith(self, Clock.currentTimeNanos)
1604
1602
 
1605
1603
  /* @internal */
1606
1604
  export const timedWith = dual<
@@ -2020,61 +2018,75 @@ export const linkSpans = dual<
2020
2018
 
2021
2019
  const bigint0 = BigInt(0)
2022
2020
 
2021
+ const filterDisablePropagation: (self: Option.Option<Tracer.AnySpan>) => Option.Option<Tracer.AnySpan> = Option.flatMap(
2022
+ (span) =>
2023
+ Context.get(span.context, internalTracer.DisablePropagation)
2024
+ ? span._tag === "Span" ? filterDisablePropagation(span.parent) : Option.none()
2025
+ : Option.some(span)
2026
+ )
2027
+
2023
2028
  /** @internal */
2024
2029
  export const unsafeMakeSpan = <XA, XE>(
2025
2030
  fiber: FiberRuntime<XA, XE>,
2026
2031
  name: string,
2027
2032
  options: Tracer.SpanOptions
2028
2033
  ) => {
2029
- const enabled = fiber.getFiberRef(core.currentTracerEnabled)
2030
- if (enabled === false) {
2031
- return core.noopSpan(name)
2032
- }
2033
-
2034
+ const disablePropagation = !fiber.getFiberRef(core.currentTracerEnabled) ||
2035
+ (options.context && Context.get(options.context, internalTracer.DisablePropagation))
2034
2036
  const context = fiber.getFiberRef(core.currentContext)
2035
- const services = fiber.getFiberRef(defaultServices.currentServices)
2036
-
2037
- const tracer = Context.get(services, internalTracer.tracerTag)
2038
- const clock = Context.get(services, Clock.Clock)
2039
- const timingEnabled = fiber.getFiberRef(core.currentTracerTimingEnabled)
2040
-
2041
- const fiberRefs = fiber.getFiberRefs()
2042
- const annotationsFromEnv = FiberRefs.get(fiberRefs, core.currentTracerSpanAnnotations)
2043
- const linksFromEnv = FiberRefs.get(fiberRefs, core.currentTracerSpanLinks)
2044
-
2045
2037
  const parent = options.parent
2046
2038
  ? Option.some(options.parent)
2047
2039
  : options.root
2048
2040
  ? Option.none()
2049
- : Context.getOption(context, internalTracer.spanTag)
2050
-
2051
- const links = linksFromEnv._tag === "Some" ?
2052
- options.links !== undefined ?
2053
- [
2054
- ...Chunk.toReadonlyArray(linksFromEnv.value),
2055
- ...(options.links ?? [])
2056
- ] :
2057
- Chunk.toReadonlyArray(linksFromEnv.value) :
2058
- options.links ?? Arr.empty()
2059
-
2060
- const span = tracer.span(
2061
- name,
2062
- parent,
2063
- options.context ?? Context.empty(),
2064
- links,
2065
- timingEnabled ? clock.unsafeCurrentTimeNanos() : bigint0,
2066
- options.kind ?? "internal"
2067
- )
2041
+ : filterDisablePropagation(Context.getOption(context, internalTracer.spanTag))
2068
2042
 
2069
- if (typeof options.captureStackTrace === "function") {
2070
- internalCause.spanToTrace.set(span, options.captureStackTrace)
2071
- }
2043
+ let span: Tracer.Span
2072
2044
 
2073
- if (annotationsFromEnv._tag === "Some") {
2074
- HashMap.forEach(annotationsFromEnv.value, (value, key) => span.attribute(key, value))
2045
+ if (disablePropagation) {
2046
+ span = core.noopSpan({
2047
+ name,
2048
+ parent,
2049
+ context: Context.add(options.context ?? Context.empty(), internalTracer.DisablePropagation, true)
2050
+ })
2051
+ } else {
2052
+ const services = fiber.getFiberRef(defaultServices.currentServices)
2053
+
2054
+ const tracer = Context.get(services, internalTracer.tracerTag)
2055
+ const clock = Context.get(services, Clock.Clock)
2056
+ const timingEnabled = fiber.getFiberRef(core.currentTracerTimingEnabled)
2057
+
2058
+ const fiberRefs = fiber.getFiberRefs()
2059
+ const annotationsFromEnv = FiberRefs.get(fiberRefs, core.currentTracerSpanAnnotations)
2060
+ const linksFromEnv = FiberRefs.get(fiberRefs, core.currentTracerSpanLinks)
2061
+
2062
+ const links = linksFromEnv._tag === "Some" ?
2063
+ options.links !== undefined ?
2064
+ [
2065
+ ...Chunk.toReadonlyArray(linksFromEnv.value),
2066
+ ...(options.links ?? [])
2067
+ ] :
2068
+ Chunk.toReadonlyArray(linksFromEnv.value) :
2069
+ options.links ?? Arr.empty()
2070
+
2071
+ span = tracer.span(
2072
+ name,
2073
+ parent,
2074
+ options.context ?? Context.empty(),
2075
+ links,
2076
+ timingEnabled ? clock.unsafeCurrentTimeNanos() : bigint0,
2077
+ options.kind ?? "internal"
2078
+ )
2079
+
2080
+ if (annotationsFromEnv._tag === "Some") {
2081
+ HashMap.forEach(annotationsFromEnv.value, (value, key) => span.attribute(key, value))
2082
+ }
2083
+ if (options.attributes !== undefined) {
2084
+ Object.entries(options.attributes).forEach(([k, v]) => span.attribute(k, v))
2085
+ }
2075
2086
  }
2076
- if (options.attributes !== undefined) {
2077
- Object.entries(options.attributes).forEach(([k, v]) => span.attribute(k, v))
2087
+
2088
+ if (typeof options.captureStackTrace === "function") {
2089
+ internalCause.spanToTrace.set(span, options.captureStackTrace)
2078
2090
  }
2079
2091
 
2080
2092
  return span
@@ -38,7 +38,7 @@ import type * as Scope from "../Scope.js"
38
38
  import type * as Tracer from "../Tracer.js"
39
39
  import type { NoInfer, NotFunction } from "../Types.js"
40
40
  import { internalCall, YieldWrap } from "../Utils.js"
41
- import * as _blockedRequests from "./blockedRequests.js"
41
+ import * as blockedRequests_ from "./blockedRequests.js"
42
42
  import * as internalCause from "./cause.js"
43
43
  import * as deferred from "./deferred.js"
44
44
  import * as internalDiffer from "./differ.js"
@@ -48,39 +48,13 @@ import type * as FiberRuntime from "./fiberRuntime.js"
48
48
  import type * as fiberScope from "./fiberScope.js"
49
49
  import * as DeferredOpCodes from "./opCodes/deferred.js"
50
50
  import * as OpCodes from "./opCodes/effect.js"
51
- import * as _runtimeFlags from "./runtimeFlags.js"
51
+ import * as runtimeFlags_ from "./runtimeFlags.js"
52
52
  import { SingleShotGen } from "./singleShotGen.js"
53
53
 
54
54
  // -----------------------------------------------------------------------------
55
55
  // Effect
56
56
  // -----------------------------------------------------------------------------
57
57
 
58
- /** @internal */
59
- const EffectErrorSymbolKey = "effect/EffectError"
60
-
61
- /** @internal */
62
- export const EffectErrorTypeId = Symbol.for(EffectErrorSymbolKey)
63
-
64
- /** @internal */
65
- export type EffectErrorTypeId = typeof EffectErrorTypeId
66
-
67
- /** @internal */
68
- export interface EffectError<out E> {
69
- readonly [EffectErrorTypeId]: EffectErrorTypeId
70
- readonly _tag: "EffectError"
71
- readonly cause: Cause.Cause<E>
72
- }
73
-
74
- /** @internal */
75
- export const isEffectError = (u: unknown): u is EffectError<unknown> => hasProperty(u, EffectErrorTypeId)
76
-
77
- /** @internal */
78
- export const makeEffectError = <E>(cause: Cause.Cause<E>): EffectError<E> => ({
79
- [EffectErrorTypeId]: EffectErrorTypeId,
80
- _tag: "EffectError",
81
- cause
82
- })
83
-
84
58
  /**
85
59
  * @internal
86
60
  */
@@ -677,7 +651,7 @@ export const catchSome = dual<
677
651
  /* @internal */
678
652
  export const checkInterruptible = <A, E, R>(
679
653
  f: (isInterruptible: boolean) => Effect.Effect<A, E, R>
680
- ): Effect.Effect<A, E, R> => withFiberRuntime((_, status) => f(_runtimeFlags.interruption(status.runtimeFlags)))
654
+ ): Effect.Effect<A, E, R> => withFiberRuntime((_, status) => f(runtimeFlags_.interruption(status.runtimeFlags)))
681
655
 
682
656
  const spanSymbol = Symbol.for("effect/SpanAnnotation")
683
657
  const originalSymbol = Symbol.for("effect/OriginalAnnotation")
@@ -1027,7 +1001,7 @@ export const interruptWith = (fiberId: FiberId.FiberId): Effect.Effect<never> =>
1027
1001
  /* @internal */
1028
1002
  export const interruptible = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => {
1029
1003
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1030
- effect.effect_instruction_i0 = RuntimeFlagsPatch.enable(_runtimeFlags.Interruption)
1004
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.enable(runtimeFlags_.Interruption)
1031
1005
  effect.effect_instruction_i1 = () => self
1032
1006
  return effect
1033
1007
  }
@@ -1038,9 +1012,9 @@ export const interruptibleMask = <A, E, R>(
1038
1012
  ): Effect.Effect<A, E, R> =>
1039
1013
  custom(f, function() {
1040
1014
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1041
- effect.effect_instruction_i0 = RuntimeFlagsPatch.enable(_runtimeFlags.Interruption)
1015
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.enable(runtimeFlags_.Interruption)
1042
1016
  effect.effect_instruction_i1 = (oldFlags: RuntimeFlags.RuntimeFlags) =>
1043
- _runtimeFlags.interruption(oldFlags)
1017
+ runtimeFlags_.interruption(oldFlags)
1044
1018
  ? internalCall(() => this.effect_instruction_i0(interruptible))
1045
1019
  : internalCall(() => this.effect_instruction_i0(uninterruptible))
1046
1020
  return effect
@@ -1356,7 +1330,7 @@ export const uninterruptible: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.
1356
1330
  self: Effect.Effect<A, E, R>
1357
1331
  ): Effect.Effect<A, E, R> => {
1358
1332
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1359
- effect.effect_instruction_i0 = RuntimeFlagsPatch.disable(_runtimeFlags.Interruption)
1333
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.disable(runtimeFlags_.Interruption)
1360
1334
  effect.effect_instruction_i1 = () => self
1361
1335
  return effect
1362
1336
  }
@@ -1367,9 +1341,9 @@ export const uninterruptibleMask = <A, E, R>(
1367
1341
  ): Effect.Effect<A, E, R> =>
1368
1342
  custom(f, function() {
1369
1343
  const effect = new EffectPrimitive(OpCodes.OP_UPDATE_RUNTIME_FLAGS) as any
1370
- effect.effect_instruction_i0 = RuntimeFlagsPatch.disable(_runtimeFlags.Interruption)
1344
+ effect.effect_instruction_i0 = RuntimeFlagsPatch.disable(runtimeFlags_.Interruption)
1371
1345
  effect.effect_instruction_i1 = (oldFlags: RuntimeFlags.RuntimeFlags) =>
1372
- _runtimeFlags.interruption(oldFlags)
1346
+ runtimeFlags_.interruption(oldFlags)
1373
1347
  ? internalCall(() => this.effect_instruction_i0(interruptible))
1374
1348
  : internalCall(() => this.effect_instruction_i0(uninterruptible))
1375
1349
  return effect
@@ -1427,13 +1401,23 @@ export const whileLoop = <A, E, R>(
1427
1401
  }
1428
1402
 
1429
1403
  /* @internal */
1430
- export const gen: typeof Effect.gen = function() {
1431
- const f = arguments.length === 1 ? arguments[0] : arguments[1].bind(arguments[0])
1432
- return suspend(() => {
1404
+ export const fromIterator = <Eff extends YieldWrap<Effect.Effect<any, any, any>>, AEff>(
1405
+ iterator: LazyArg<Iterator<Eff, AEff, never>>
1406
+ ): Effect.Effect<
1407
+ AEff,
1408
+ [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E : never,
1409
+ [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R : never
1410
+ > =>
1411
+ suspend(() => {
1433
1412
  const effect = new EffectPrimitive(OpCodes.OP_ITERATOR) as any
1434
- effect.effect_instruction_i0 = f(pipe)
1413
+ effect.effect_instruction_i0 = iterator()
1435
1414
  return effect
1436
1415
  })
1416
+
1417
+ /* @internal */
1418
+ export const gen: typeof Effect.gen = function() {
1419
+ const f = arguments.length === 1 ? arguments[0] : arguments[1].bind(arguments[0])
1420
+ return fromIterator(() => f(pipe))
1437
1421
  }
1438
1422
 
1439
1423
  /* @internal */
@@ -1894,17 +1878,17 @@ export const requestBlockLocally = <A>(
1894
1878
  self: BlockedRequests.RequestBlock,
1895
1879
  ref: FiberRef.FiberRef<A>,
1896
1880
  value: A
1897
- ): BlockedRequests.RequestBlock => _blockedRequests.reduce(self, LocallyReducer(ref, value))
1881
+ ): BlockedRequests.RequestBlock => blockedRequests_.reduce(self, LocallyReducer(ref, value))
1898
1882
 
1899
1883
  const LocallyReducer = <A>(
1900
1884
  ref: FiberRef.FiberRef<A>,
1901
1885
  value: A
1902
1886
  ): BlockedRequests.RequestBlock.Reducer<BlockedRequests.RequestBlock> => ({
1903
- emptyCase: () => _blockedRequests.empty,
1904
- parCase: (left, right) => _blockedRequests.par(left, right),
1905
- seqCase: (left, right) => _blockedRequests.seq(left, right),
1887
+ emptyCase: () => blockedRequests_.empty,
1888
+ parCase: (left, right) => blockedRequests_.par(left, right),
1889
+ seqCase: (left, right) => blockedRequests_.seq(left, right),
1906
1890
  singleCase: (dataSource, blockedRequest) =>
1907
- _blockedRequests.single(
1891
+ blockedRequests_.single(
1908
1892
  resolverLocally(dataSource, ref, value),
1909
1893
  blockedRequest as any
1910
1894
  )
@@ -2007,8 +1991,8 @@ export const fiberRefUnsafeMakeRuntimeFlags = (
2007
1991
  initial: RuntimeFlags.RuntimeFlags
2008
1992
  ): FiberRef.FiberRef<RuntimeFlags.RuntimeFlags> =>
2009
1993
  fiberRefUnsafeMakePatch(initial, {
2010
- differ: _runtimeFlags.differ,
2011
- fork: _runtimeFlags.differ.empty
1994
+ differ: runtimeFlags_.differ,
1995
+ fork: runtimeFlags_.differ.empty
2012
1996
  })
2013
1997
 
2014
1998
  /** @internal */
@@ -3014,9 +2998,9 @@ export const contextWith = <R0, A>(
3014
2998
  ): Effect.Effect<A, never, R0> => map(context<R0>(), f)
3015
2999
 
3016
3000
  /* @internal */
3017
- export const contextWithEffect = <R0, A, E, R>(
3018
- f: (context: Context.Context<R0>) => Effect.Effect<A, E, R>
3019
- ): Effect.Effect<A, E, R | R0> => flatMap(context<R0>(), f)
3001
+ export const contextWithEffect = <R2, A, E, R>(
3002
+ f: (context: Context.Context<R2>) => Effect.Effect<A, E, R>
3003
+ ): Effect.Effect<A, E, R | R2> => flatMap(context<R2>(), f)
3020
3004
 
3021
3005
  /* @internal */
3022
3006
  export const provideContext = dual<
@@ -3040,17 +3024,17 @@ export const provideSomeContext = dual<
3040
3024
 
3041
3025
  /* @internal */
3042
3026
  export const mapInputContext = dual<
3043
- <R0, R>(
3044
- f: (context: Context.Context<R0>) => Context.Context<R>
3045
- ) => <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R0>,
3046
- <A, E, R, R0>(
3027
+ <R2, R>(
3028
+ f: (context: Context.Context<R2>) => Context.Context<R>
3029
+ ) => <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R2>,
3030
+ <A, E, R, R2>(
3047
3031
  self: Effect.Effect<A, E, R>,
3048
- f: (context: Context.Context<R0>) => Context.Context<R>
3049
- ) => Effect.Effect<A, E, R0>
3050
- >(2, <A, E, R, R0>(
3032
+ f: (context: Context.Context<R2>) => Context.Context<R>
3033
+ ) => Effect.Effect<A, E, R2>
3034
+ >(2, <A, E, R, R2>(
3051
3035
  self: Effect.Effect<A, E, R>,
3052
- f: (context: Context.Context<R0>) => Context.Context<R>
3053
- ) => contextWithEffect((context: Context.Context<R0>) => provideContext(self, f(context))))
3036
+ f: (context: Context.Context<R2>) => Context.Context<R>
3037
+ ) => contextWithEffect((context: Context.Context<R2>) => provideContext(self, f(context))))
3054
3038
 
3055
3039
  // -----------------------------------------------------------------------------
3056
3040
  // Tracing
@@ -3062,14 +3046,11 @@ export const currentSpanFromFiber = <A, E>(fiber: Fiber.RuntimeFiber<A, E>): Opt
3062
3046
  return span !== undefined && span._tag === "Span" ? Option.some(span) : Option.none()
3063
3047
  }
3064
3048
 
3065
- const NoopSpanProto: Tracer.Span = {
3049
+ const NoopSpanProto: Omit<Tracer.Span, "parent" | "name" | "context"> = {
3066
3050
  _tag: "Span",
3067
3051
  spanId: "noop",
3068
3052
  traceId: "noop",
3069
- name: "noop",
3070
3053
  sampled: false,
3071
- parent: Option.none(),
3072
- context: Context.empty(),
3073
3054
  status: {
3074
3055
  _tag: "Ended",
3075
3056
  startTime: BigInt(0),
@@ -3085,8 +3066,8 @@ const NoopSpanProto: Tracer.Span = {
3085
3066
  }
3086
3067
 
3087
3068
  /** @internal */
3088
- export const noopSpan = (name: string): Tracer.Span => {
3089
- const span = Object.create(NoopSpanProto)
3090
- span.name = name
3091
- return span
3092
- }
3069
+ export const noopSpan = (options: {
3070
+ readonly name: string
3071
+ readonly parent: Option.Option<Tracer.AnySpan>
3072
+ readonly context: Context.Context<never>
3073
+ }): Tracer.Span => Object.assign(Object.create(NoopSpanProto), options)
@@ -64,29 +64,29 @@ export const currentTimeNanos: Effect.Effect<bigint> = clockWith((clock) => cloc
64
64
 
65
65
  /** @internal */
66
66
  export const withClock = dual<
67
- <X extends Clock.Clock>(value: X) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
68
- <X extends Clock.Clock, A, E, R>(effect: Effect.Effect<A, E, R>, value: X) => Effect.Effect<A, E, R>
69
- >(2, (effect, value) =>
67
+ <C extends Clock.Clock>(clock: C) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
68
+ <C extends Clock.Clock, A, E, R>(effect: Effect.Effect<A, E, R>, clock: C) => Effect.Effect<A, E, R>
69
+ >(2, (effect, c) =>
70
70
  core.fiberRefLocallyWith(
71
71
  currentServices,
72
- Context.add(clock.clockTag, value)
72
+ Context.add(clock.clockTag, c)
73
73
  )(effect))
74
74
 
75
75
  // circular with ConfigProvider
76
76
 
77
77
  /** @internal */
78
78
  export const withConfigProvider = dual<
79
- (value: ConfigProvider.ConfigProvider) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
80
- <A, E, R>(effect: Effect.Effect<A, E, R>, value: ConfigProvider.ConfigProvider) => Effect.Effect<A, E, R>
81
- >(2, (effect, value) =>
79
+ (provider: ConfigProvider.ConfigProvider) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
80
+ <A, E, R>(self: Effect.Effect<A, E, R>, provider: ConfigProvider.ConfigProvider) => Effect.Effect<A, E, R>
81
+ >(2, (self, provider) =>
82
82
  core.fiberRefLocallyWith(
83
83
  currentServices,
84
- Context.add(configProvider.configProviderTag, value)
85
- )(effect))
84
+ Context.add(configProvider.configProviderTag, provider)
85
+ )(self))
86
86
 
87
87
  /** @internal */
88
88
  export const configProviderWith = <A, E, R>(
89
- f: (configProvider: ConfigProvider.ConfigProvider) => Effect.Effect<A, E, R>
89
+ f: (provider: ConfigProvider.ConfigProvider) => Effect.Effect<A, E, R>
90
90
  ): Effect.Effect<A, E, R> =>
91
91
  defaultServicesWith((services) => f(services.unsafeMap.get(configProvider.configProviderTag.key)))
92
92
 
@@ -32,7 +32,7 @@ import * as internalFiber from "../fiber.js"
32
32
  import * as fiberRuntime from "../fiberRuntime.js"
33
33
  import { globalScope } from "../fiberScope.js"
34
34
  import * as internalRef from "../ref.js"
35
- import * as _schedule from "../schedule.js"
35
+ import * as schedule_ from "../schedule.js"
36
36
  import * as supervisor from "../supervisor.js"
37
37
 
38
38
  /** @internal */
@@ -480,7 +480,7 @@ export const scheduleForked = dual<
480
480
  self: Effect.Effect<A, E, R>,
481
481
  schedule: Schedule.Schedule<Out, unknown, R2>
482
482
  ) => Effect.Effect<Fiber.RuntimeFiber<Out, E>, never, R | R2 | Scope.Scope>
483
- >(2, (self, schedule) => pipe(self, _schedule.schedule_Effect(schedule), forkScoped))
483
+ >(2, (self, schedule) => pipe(self, schedule_.schedule_Effect(schedule), forkScoped))
484
484
 
485
485
  /** @internal */
486
486
  export const supervised = dual<
@@ -583,58 +583,63 @@ export const timeoutTo = dual<
583
583
  readonly duration: Duration.DurationInput
584
584
  }
585
585
  ) => Effect.Effect<B | B1, E, R>
586
- >(2, (self, { duration, onSuccess, onTimeout }) =>
587
- core.fiberIdWith((parentFiberId) =>
588
- fiberRuntime.raceFibersWith(
589
- self,
590
- core.interruptible(effect.sleep(duration)),
591
- {
592
- onSelfWin: (winner, loser) =>
593
- core.flatMap(
594
- winner.await,
595
- (exit) => {
596
- if (exit._tag === "Success") {
597
- return core.flatMap(
598
- winner.inheritAll,
599
- () =>
600
- core.as(
586
+ >(
587
+ 2,
588
+ (self, { duration, onSuccess, onTimeout }) =>
589
+ core.fiberIdWith((parentFiberId) =>
590
+ core.uninterruptibleMask((restore) =>
591
+ fiberRuntime.raceFibersWith(
592
+ restore(self),
593
+ core.interruptible(effect.sleep(duration)),
594
+ {
595
+ onSelfWin: (winner, loser) =>
596
+ core.flatMap(
597
+ winner.await,
598
+ (exit) => {
599
+ if (exit._tag === "Success") {
600
+ return core.flatMap(
601
+ winner.inheritAll,
602
+ () =>
603
+ core.as(
604
+ core.interruptAsFiber(loser, parentFiberId),
605
+ onSuccess(exit.value)
606
+ )
607
+ )
608
+ } else {
609
+ return core.flatMap(
601
610
  core.interruptAsFiber(loser, parentFiberId),
602
- onSuccess(exit.value)
611
+ () => core.exitFailCause(exit.cause)
603
612
  )
604
- )
605
- } else {
606
- return core.flatMap(
607
- core.interruptAsFiber(loser, parentFiberId),
608
- () => core.exitFailCause(exit.cause)
609
- )
610
- }
611
- }
612
- ),
613
- onOtherWin: (winner, loser) =>
614
- core.flatMap(
615
- winner.await,
616
- (exit) => {
617
- if (exit._tag === "Success") {
618
- return core.flatMap(
619
- winner.inheritAll,
620
- () =>
621
- core.as(
613
+ }
614
+ }
615
+ ),
616
+ onOtherWin: (winner, loser) =>
617
+ core.flatMap(
618
+ winner.await,
619
+ (exit) => {
620
+ if (exit._tag === "Success") {
621
+ return core.flatMap(
622
+ winner.inheritAll,
623
+ () =>
624
+ core.as(
625
+ core.interruptAsFiber(loser, parentFiberId),
626
+ onTimeout()
627
+ )
628
+ )
629
+ } else {
630
+ return core.flatMap(
622
631
  core.interruptAsFiber(loser, parentFiberId),
623
- onTimeout()
632
+ () => core.exitFailCause(exit.cause)
624
633
  )
625
- )
626
- } else {
627
- return core.flatMap(
628
- core.interruptAsFiber(loser, parentFiberId),
629
- () => core.exitFailCause(exit.cause)
630
- )
631
- }
632
- }
633
- ),
634
- otherScope: globalScope
635
- }
634
+ }
635
+ }
636
+ ),
637
+ otherScope: globalScope
638
+ }
639
+ )
640
+ )
636
641
  )
637
- ))
642
+ )
638
643
 
639
644
  // circular with Synchronized
640
645
 
@@ -23,6 +23,27 @@ export const DecodeException = (input: string, message?: string): Encoding.Decod
23
23
  /** @internal */
24
24
  export const isDecodeException = (u: unknown): u is Encoding.DecodeException => hasProperty(u, DecodeExceptionTypeId)
25
25
 
26
+ /** @internal */
27
+ export const EncodeExceptionTypeId: Encoding.EncodeExceptionTypeId = Symbol.for(
28
+ "effect/Encoding/errors/Encode"
29
+ ) as Encoding.EncodeExceptionTypeId
30
+
31
+ /** @internal */
32
+ export const EncodeException = (input: string, message?: string): Encoding.EncodeException => {
33
+ const out: Mutable<Encoding.EncodeException> = {
34
+ _tag: "EncodeException",
35
+ [EncodeExceptionTypeId]: EncodeExceptionTypeId,
36
+ input
37
+ }
38
+ if (isString(message)) {
39
+ out.message = message
40
+ }
41
+ return out
42
+ }
43
+
44
+ /** @internal */
45
+ export const isEncodeException = (u: unknown): u is Encoding.EncodeException => hasProperty(u, EncodeExceptionTypeId)
46
+
26
47
  /** @interal */
27
48
  export const encoder = new TextEncoder()
28
49
 
@@ -4,7 +4,7 @@ import type * as FiberId from "../../FiberId.js"
4
4
  import type * as FiberRefs from "../../FiberRefs.js"
5
5
  import type * as FiberRefsPatch from "../../FiberRefsPatch.js"
6
6
  import { dual } from "../../Function.js"
7
- import * as _fiberRefs from "../fiberRefs.js"
7
+ import * as fiberRefs_ from "../fiberRefs.js"
8
8
 
9
9
  /** @internal */
10
10
  export const OP_EMPTY = "Empty" as const
@@ -111,7 +111,7 @@ export const patch = dual<
111
111
  break
112
112
  }
113
113
  case OP_ADD: {
114
- fiberRefs = _fiberRefs.updateAs(fiberRefs, {
114
+ fiberRefs = fiberRefs_.updateAs(fiberRefs, {
115
115
  fiberId,
116
116
  fiberRef: head.fiberRef,
117
117
  value: head.value
@@ -120,13 +120,13 @@ export const patch = dual<
120
120
  break
121
121
  }
122
122
  case OP_REMOVE: {
123
- fiberRefs = _fiberRefs.delete_(fiberRefs, head.fiberRef)
123
+ fiberRefs = fiberRefs_.delete_(fiberRefs, head.fiberRef)
124
124
  patches = tail
125
125
  break
126
126
  }
127
127
  case OP_UPDATE: {
128
- const value = _fiberRefs.getOrDefault(fiberRefs, head.fiberRef)
129
- fiberRefs = _fiberRefs.updateAs(fiberRefs, {
128
+ const value = fiberRefs_.getOrDefault(fiberRefs, head.fiberRef)
129
+ fiberRefs = fiberRefs_.updateAs(fiberRefs, {
130
130
  fiberId,
131
131
  fiberRef: head.fiberRef,
132
132
  value: head.fiberRef.patch(head.patch)(value)