effect 3.0.7 → 3.1.0

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 (96) hide show
  1. package/dist/cjs/Channel.js.map +1 -1
  2. package/dist/cjs/Data.js +15 -1
  3. package/dist/cjs/Data.js.map +1 -1
  4. package/dist/cjs/Effect.js +44 -7
  5. package/dist/cjs/Effect.js.map +1 -1
  6. package/dist/cjs/Layer.js.map +1 -1
  7. package/dist/cjs/SortedMap.js +24 -1
  8. package/dist/cjs/SortedMap.js.map +1 -1
  9. package/dist/cjs/Stream.js +8 -3
  10. package/dist/cjs/Stream.js.map +1 -1
  11. package/dist/cjs/Tracer.js.map +1 -1
  12. package/dist/cjs/internal/cause.js +3 -3
  13. package/dist/cjs/internal/cause.js.map +1 -1
  14. package/dist/cjs/internal/channel.js.map +1 -1
  15. package/dist/cjs/internal/core-effect.js +1 -1
  16. package/dist/cjs/internal/core-effect.js.map +1 -1
  17. package/dist/cjs/internal/core.js +1 -0
  18. package/dist/cjs/internal/core.js.map +1 -1
  19. package/dist/cjs/internal/effect/circular.js +7 -1
  20. package/dist/cjs/internal/effect/circular.js.map +1 -1
  21. package/dist/cjs/internal/fiberRuntime.js +15 -1
  22. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  23. package/dist/cjs/internal/layer/circular.js.map +1 -1
  24. package/dist/cjs/internal/layer.js.map +1 -1
  25. package/dist/cjs/internal/stream.js +23 -3
  26. package/dist/cjs/internal/stream.js.map +1 -1
  27. package/dist/cjs/internal/tracer.js +4 -2
  28. package/dist/cjs/internal/tracer.js.map +1 -1
  29. package/dist/cjs/internal/version.js +1 -1
  30. package/dist/dts/Channel.d.ts +2 -14
  31. package/dist/dts/Channel.d.ts.map +1 -1
  32. package/dist/dts/Data.d.ts +20 -5
  33. package/dist/dts/Data.d.ts.map +1 -1
  34. package/dist/dts/Effect.d.ts +56 -60
  35. package/dist/dts/Effect.d.ts.map +1 -1
  36. package/dist/dts/Layer.d.ts +3 -18
  37. package/dist/dts/Layer.d.ts.map +1 -1
  38. package/dist/dts/SortedMap.d.ts +13 -0
  39. package/dist/dts/SortedMap.d.ts.map +1 -1
  40. package/dist/dts/Stream.d.ts +7 -14
  41. package/dist/dts/Stream.d.ts.map +1 -1
  42. package/dist/dts/Tracer.d.ts +19 -1
  43. package/dist/dts/Tracer.d.ts.map +1 -1
  44. package/dist/dts/Types.d.ts +18 -0
  45. package/dist/dts/Types.d.ts.map +1 -1
  46. package/dist/dts/internal/fiberRuntime.d.ts +6 -1
  47. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  48. package/dist/esm/Channel.js.map +1 -1
  49. package/dist/esm/Data.js +14 -0
  50. package/dist/esm/Data.js.map +1 -1
  51. package/dist/esm/Effect.js +40 -3
  52. package/dist/esm/Effect.js.map +1 -1
  53. package/dist/esm/Layer.js.map +1 -1
  54. package/dist/esm/SortedMap.js +22 -0
  55. package/dist/esm/SortedMap.js.map +1 -1
  56. package/dist/esm/Stream.js +5 -0
  57. package/dist/esm/Stream.js.map +1 -1
  58. package/dist/esm/Tracer.js.map +1 -1
  59. package/dist/esm/internal/cause.js +3 -3
  60. package/dist/esm/internal/cause.js.map +1 -1
  61. package/dist/esm/internal/channel.js.map +1 -1
  62. package/dist/esm/internal/core-effect.js +1 -1
  63. package/dist/esm/internal/core-effect.js.map +1 -1
  64. package/dist/esm/internal/core.js +1 -0
  65. package/dist/esm/internal/core.js.map +1 -1
  66. package/dist/esm/internal/effect/circular.js +6 -0
  67. package/dist/esm/internal/effect/circular.js.map +1 -1
  68. package/dist/esm/internal/fiberRuntime.js +13 -0
  69. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  70. package/dist/esm/internal/layer/circular.js.map +1 -1
  71. package/dist/esm/internal/layer.js.map +1 -1
  72. package/dist/esm/internal/stream.js +19 -0
  73. package/dist/esm/internal/stream.js.map +1 -1
  74. package/dist/esm/internal/tracer.js +4 -2
  75. package/dist/esm/internal/tracer.js.map +1 -1
  76. package/dist/esm/internal/version.js +1 -1
  77. package/package.json +1 -1
  78. package/src/Channel.ts +2 -14
  79. package/src/Data.ts +39 -3
  80. package/src/Effect.ts +60 -66
  81. package/src/Layer.ts +3 -18
  82. package/src/SortedMap.ts +35 -0
  83. package/src/Stream.ts +12 -14
  84. package/src/Tracer.ts +22 -1
  85. package/src/Types.ts +21 -0
  86. package/src/internal/cause.ts +3 -3
  87. package/src/internal/channel.ts +2 -14
  88. package/src/internal/core-effect.ts +19 -43
  89. package/src/internal/core.ts +1 -0
  90. package/src/internal/effect/circular.ts +16 -0
  91. package/src/internal/fiberRuntime.ts +33 -21
  92. package/src/internal/layer/circular.ts +1 -6
  93. package/src/internal/layer.ts +17 -20
  94. package/src/internal/stream.ts +27 -14
  95. package/src/internal/tracer.ts +5 -3
  96. package/src/internal/version.ts +1 -1
@@ -2027,13 +2027,7 @@ const bigint0 = BigInt(0)
2027
2027
  export const unsafeMakeSpan = <XA, XE>(
2028
2028
  fiber: FiberRuntime<XA, XE>,
2029
2029
  name: string,
2030
- options?: {
2031
- readonly attributes?: Record<string, unknown> | undefined
2032
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2033
- readonly parent?: Tracer.AnySpan | undefined
2034
- readonly root?: boolean | undefined
2035
- readonly context?: Context.Context<never> | undefined
2036
- }
2030
+ options?: Tracer.SpanOptions
2037
2031
  ) => {
2038
2032
  const enabled = fiber.getFiberRef(core.currentTracerEnabled)
2039
2033
  if (enabled === false) {
@@ -2071,7 +2065,8 @@ export const unsafeMakeSpan = <XA, XE>(
2071
2065
  parent,
2072
2066
  options?.context ?? Context.empty(),
2073
2067
  links,
2074
- timingEnabled ? clock.unsafeCurrentTimeNanos() : bigint0
2068
+ timingEnabled ? clock.unsafeCurrentTimeNanos() : bigint0,
2069
+ options?.kind ?? "internal"
2075
2070
  )
2076
2071
 
2077
2072
  if (annotationsFromEnv._tag === "Some") {
@@ -2087,13 +2082,7 @@ export const unsafeMakeSpan = <XA, XE>(
2087
2082
  /** @internal */
2088
2083
  export const makeSpan = (
2089
2084
  name: string,
2090
- options?: {
2091
- readonly attributes?: Record<string, unknown> | undefined
2092
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2093
- readonly parent?: Tracer.AnySpan | undefined
2094
- readonly root?: boolean | undefined
2095
- readonly context?: Context.Context<never> | undefined
2096
- }
2085
+ options?: Tracer.SpanOptions
2097
2086
  ): Effect.Effect<Tracer.Span> => core.withFiberRuntime((fiber) => core.succeed(unsafeMakeSpan(fiber, name, options)))
2098
2087
 
2099
2088
  /* @internal */
@@ -2107,13 +2096,11 @@ export const spanLinks: Effect.Effect<Chunk.Chunk<Tracer.SpanLink>> = core
2107
2096
  /** @internal */
2108
2097
  export const useSpan: {
2109
2098
  <A, E, R>(name: string, evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R>
2110
- <A, E, R>(name: string, options: {
2111
- readonly attributes?: Record<string, unknown> | undefined
2112
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2113
- readonly parent?: Tracer.AnySpan | undefined
2114
- readonly root?: boolean | undefined
2115
- readonly context?: Context.Context<never> | undefined
2116
- }, evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R>
2099
+ <A, E, R>(
2100
+ name: string,
2101
+ options: Tracer.SpanOptions,
2102
+ evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>
2103
+ ): Effect.Effect<A, E, R>
2117
2104
  } = <A, E, R>(
2118
2105
  name: string,
2119
2106
  ...args: [evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>] | [
@@ -2121,13 +2108,7 @@ export const useSpan: {
2121
2108
  evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R>
2122
2109
  ]
2123
2110
  ) => {
2124
- const options: {
2125
- readonly attributes?: Record<string, unknown> | undefined
2126
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2127
- readonly parent?: Tracer.AnySpan | undefined
2128
- readonly root?: boolean | undefined
2129
- readonly context?: Context.Context<never> | undefined
2130
- } | undefined = args.length === 1 ? undefined : args[0]
2111
+ const options: Tracer.SpanOptions | undefined = args.length === 1 ? undefined : args[0]
2131
2112
  const evaluate: (span: Tracer.Span) => Effect.Effect<A, E, R> = args[args.length - 1]
2132
2113
 
2133
2114
  return core.withFiberRuntime<A, E, R>((fiber) => {
@@ -2154,20 +2135,15 @@ export const withParentSpan = dual<
2154
2135
 
2155
2136
  /** @internal */
2156
2137
  export const withSpan = dual<
2157
- (name: string, options?: {
2158
- readonly attributes?: Record<string, unknown> | undefined
2159
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2160
- readonly parent?: Tracer.AnySpan | undefined
2161
- readonly root?: boolean | undefined
2162
- readonly context?: Context.Context<never> | undefined
2163
- }) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>,
2164
- <A, E, R>(self: Effect.Effect<A, E, R>, name: string, options?: {
2165
- readonly attributes?: Record<string, unknown> | undefined
2166
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
2167
- readonly parent?: Tracer.AnySpan | undefined
2168
- readonly root?: boolean | undefined
2169
- readonly context?: Context.Context<never> | undefined
2170
- }) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>
2138
+ (
2139
+ name: string,
2140
+ options?: Tracer.SpanOptions
2141
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>,
2142
+ <A, E, R>(
2143
+ self: Effect.Effect<A, E, R>,
2144
+ name: string,
2145
+ options?: Tracer.SpanOptions
2146
+ ) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan>>
2171
2147
  >(
2172
2148
  (args) => typeof args[0] !== "string",
2173
2149
  (self, name, options) =>
@@ -2982,6 +2982,7 @@ const NoopSpanProto: Tracer.Span = {
2982
2982
  },
2983
2983
  attributes: new Map(),
2984
2984
  links: [],
2985
+ kind: "internal",
2985
2986
  attribute() {},
2986
2987
  event() {},
2987
2988
  end() {}
@@ -467,6 +467,22 @@ export const timeoutFailCause = dual<
467
467
  duration
468
468
  })))
469
469
 
470
+ /** @internal */
471
+ export const timeoutOption = dual<
472
+ (
473
+ duration: Duration.DurationInput
474
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<Option.Option<A>, E, R>,
475
+ <A, E, R>(
476
+ self: Effect.Effect<A, E, R>,
477
+ duration: Duration.DurationInput
478
+ ) => Effect.Effect<Option.Option<A>, E, R>
479
+ >(2, (self, duration) =>
480
+ timeoutTo(self, {
481
+ duration,
482
+ onSuccess: Option.some,
483
+ onTimeout: Option.none
484
+ }))
485
+
470
486
  /** @internal */
471
487
  export const timeoutTo = dual<
472
488
  <A, B, B1>(
@@ -1502,6 +1502,29 @@ export const batchedLogger = dual<
1502
1502
  )
1503
1503
  }))
1504
1504
 
1505
+ export const annotateLogsScoped: {
1506
+ (key: string, value: unknown): Effect.Effect<void, never, Scope.Scope>
1507
+ (values: Record<string, unknown>): Effect.Effect<void, never, Scope.Scope>
1508
+ } = function() {
1509
+ if (typeof arguments[0] === "string") {
1510
+ return fiberRefLocallyScopedWith(
1511
+ core.currentLogAnnotations,
1512
+ HashMap.set(arguments[0], arguments[1])
1513
+ )
1514
+ }
1515
+ const entries = Object.entries(arguments[0])
1516
+ return fiberRefLocallyScopedWith(
1517
+ core.currentLogAnnotations,
1518
+ HashMap.mutate((annotations) => {
1519
+ for (let i = 0; i < entries.length; i++) {
1520
+ const [key, value] = entries[i]
1521
+ HashMap.set(annotations, key, value)
1522
+ }
1523
+ return annotations
1524
+ })
1525
+ )
1526
+ }
1527
+
1505
1528
  // circular with Effect
1506
1529
 
1507
1530
  /* @internal */
@@ -3598,13 +3621,7 @@ export const interruptWhenPossible = dual<
3598
3621
  /** @internal */
3599
3622
  export const makeSpanScoped = (
3600
3623
  name: string,
3601
- options?: {
3602
- readonly attributes?: Record<string, unknown> | undefined
3603
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
3604
- readonly parent?: Tracer.AnySpan | undefined
3605
- readonly root?: boolean | undefined
3606
- readonly context?: Context.Context<never> | undefined
3607
- } | undefined
3624
+ options?: Tracer.SpanOptions | undefined
3608
3625
  ): Effect.Effect<Tracer.Span, never, Scope.Scope> =>
3609
3626
  core.uninterruptible(
3610
3627
  core.withFiberRuntime((fiber) => {
@@ -3631,20 +3648,15 @@ export const withTracerScoped = (value: Tracer.Tracer): Effect.Effect<void, neve
3631
3648
 
3632
3649
  /** @internal */
3633
3650
  export const withSpanScoped = dual<
3634
- (name: string, options?: {
3635
- readonly attributes?: Record<string, unknown> | undefined
3636
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
3637
- readonly parent?: Tracer.AnySpan | undefined
3638
- readonly root?: boolean | undefined
3639
- readonly context?: Context.Context<never> | undefined
3640
- }) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan> | Scope.Scope>,
3641
- <A, E, R>(self: Effect.Effect<A, E, R>, name: string, options?: {
3642
- readonly attributes?: Record<string, unknown> | undefined
3643
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
3644
- readonly parent?: Tracer.AnySpan | undefined
3645
- readonly root?: boolean | undefined
3646
- readonly context?: Context.Context<never> | undefined
3647
- }) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan> | Scope.Scope>
3651
+ (
3652
+ name: string,
3653
+ options?: Tracer.SpanOptions
3654
+ ) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan> | Scope.Scope>,
3655
+ <A, E, R>(
3656
+ self: Effect.Effect<A, E, R>,
3657
+ name: string,
3658
+ options?: Tracer.SpanOptions
3659
+ ) => Effect.Effect<A, E, Exclude<R, Tracer.ParentSpan> | Scope.Scope>
3648
3660
  >(
3649
3661
  (args) => typeof args[0] !== "string",
3650
3662
  (self, name, options) =>
@@ -191,12 +191,7 @@ export const parentSpan = (span: Tracer.AnySpan): Layer.Layer<Tracer.ParentSpan>
191
191
  /** @internal */
192
192
  export const span = (
193
193
  name: string,
194
- options?: {
195
- readonly attributes?: Record<string, unknown> | undefined
196
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
197
- readonly parent?: Tracer.AnySpan | undefined
198
- readonly root?: boolean | undefined
199
- readonly context?: Context.Context<never> | undefined
194
+ options?: Tracer.SpanOptions & {
200
195
  readonly onEnd?:
201
196
  | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
202
197
  | undefined
@@ -1114,26 +1114,23 @@ export const unwrapScoped = <A, E1, R1, E, R>(
1114
1114
 
1115
1115
  /** @internal */
1116
1116
  export const withSpan = dual<
1117
- (name: string, options?: {
1118
- readonly attributes?: Record<string, unknown> | undefined
1119
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
1120
- readonly parent?: Tracer.AnySpan | undefined
1121
- readonly root?: boolean | undefined
1122
- readonly context?: Context.Context<never> | undefined
1123
- readonly onEnd?:
1124
- | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1125
- | undefined
1126
- }) => <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>,
1127
- <A, E, R>(self: Layer.Layer<A, E, R>, name: string, options?: {
1128
- readonly attributes?: Record<string, unknown> | undefined
1129
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
1130
- readonly parent?: Tracer.AnySpan | undefined
1131
- readonly root?: boolean | undefined
1132
- readonly context?: Context.Context<never> | undefined
1133
- readonly onEnd?:
1134
- | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1135
- | undefined
1136
- }) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1117
+ (
1118
+ name: string,
1119
+ options?: Tracer.SpanOptions & {
1120
+ readonly onEnd?:
1121
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1122
+ | undefined
1123
+ }
1124
+ ) => <A, E, R>(self: Layer.Layer<A, E, R>) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>,
1125
+ <A, E, R>(
1126
+ self: Layer.Layer<A, E, R>,
1127
+ name: string,
1128
+ options?: Tracer.SpanOptions & {
1129
+ readonly onEnd?:
1130
+ | ((span: Tracer.Span, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>)
1131
+ | undefined
1132
+ }
1133
+ ) => Layer.Layer<A, E, Exclude<R, Tracer.ParentSpan>>
1137
1134
  >((args) => isLayer(args[0]), (self, name, options) =>
1138
1135
  unwrapScoped(
1139
1136
  core.map(
@@ -6803,24 +6803,12 @@ export const whenEffect = dual<
6803
6803
  export const withSpan = dual<
6804
6804
  (
6805
6805
  name: string,
6806
- options?: {
6807
- readonly attributes?: Record<string, unknown> | undefined
6808
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
6809
- readonly parent?: Tracer.AnySpan | undefined
6810
- readonly root?: boolean | undefined
6811
- readonly context?: Context.Context<never> | undefined
6812
- }
6806
+ options?: Tracer.SpanOptions
6813
6807
  ) => <A, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<A, E, Exclude<R, Tracer.ParentSpan>>,
6814
6808
  <A, E, R>(
6815
6809
  self: Stream.Stream<A, E, R>,
6816
6810
  name: string,
6817
- options?: {
6818
- readonly attributes?: Record<string, unknown> | undefined
6819
- readonly links?: ReadonlyArray<Tracer.SpanLink> | undefined
6820
- readonly parent?: Tracer.AnySpan | undefined
6821
- readonly root?: boolean | undefined
6822
- readonly context?: Context.Context<never> | undefined
6823
- }
6811
+ options?: Tracer.SpanOptions
6824
6812
  ) => Stream.Stream<A, E, Exclude<R, Tracer.ParentSpan>>
6825
6813
  >(3, (self, name, options) => new StreamImpl(channel.withSpan(toChannel(self), name, options)))
6826
6814
 
@@ -8048,3 +8036,28 @@ export const encodeText = <E, R>(self: Stream.Stream<string, E, R>): Stream.Stre
8048
8036
  const encoder = new TextEncoder()
8049
8037
  return map(self, (s) => encoder.encode(s))
8050
8038
  })
8039
+
8040
+ /** @internal */
8041
+ export const fromEventListener = <A = Event>(
8042
+ target: EventTarget,
8043
+ type: string,
8044
+ options?: boolean | Omit<AddEventListenerOptions, "signal">
8045
+ ): Stream.Stream<A> =>
8046
+ _async<A>((emit) => {
8047
+ let batch: Array<A> = []
8048
+ let taskRunning = false
8049
+ function cb(e: A) {
8050
+ batch.push(e)
8051
+ if (!taskRunning) {
8052
+ taskRunning = true
8053
+ queueMicrotask(() => {
8054
+ const events = batch
8055
+ batch = []
8056
+ taskRunning = false
8057
+ emit.chunk(Chunk.unsafeFromArray(events))
8058
+ })
8059
+ }
8060
+ }
8061
+ target.addEventListener(type, cb as any, options)
8062
+ return Effect.sync(() => target.removeEventListener(type, cb as any, options))
8063
+ })
@@ -49,7 +49,8 @@ export class NativeSpan implements Tracer.Span {
49
49
  readonly parent: Option.Option<Tracer.AnySpan>,
50
50
  readonly context: Context.Context<never>,
51
51
  readonly links: ReadonlyArray<Tracer.SpanLink>,
52
- readonly startTime: bigint
52
+ readonly startTime: bigint,
53
+ readonly kind: Tracer.SpanKind
53
54
  ) {
54
55
  this.status = {
55
56
  _tag: "Started",
@@ -80,13 +81,14 @@ export class NativeSpan implements Tracer.Span {
80
81
 
81
82
  /** @internal */
82
83
  export const nativeTracer: Tracer.Tracer = make({
83
- span: (name, parent, context, links, startTime) =>
84
+ span: (name, parent, context, links, startTime, kind) =>
84
85
  new NativeSpan(
85
86
  name,
86
87
  parent,
87
88
  context,
88
89
  links,
89
- startTime
90
+ startTime,
91
+ kind
90
92
  ),
91
93
  context: (f) => f()
92
94
  })
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.0.7"
1
+ let moduleVersion = "3.1.0"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4