effect 3.5.8 → 3.6.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 (123) hide show
  1. package/DateTime/package.json +6 -0
  2. package/dist/cjs/Context.js.map +1 -1
  3. package/dist/cjs/DateTime.js +1514 -0
  4. package/dist/cjs/DateTime.js.map +1 -0
  5. package/dist/cjs/Effect.js +3 -3
  6. package/dist/cjs/Effect.js.map +1 -1
  7. package/dist/cjs/Either.js +3 -3
  8. package/dist/cjs/List.js.map +1 -1
  9. package/dist/cjs/Metric.js.map +1 -1
  10. package/dist/cjs/Micro.js +93 -41
  11. package/dist/cjs/Micro.js.map +1 -1
  12. package/dist/cjs/Option.js +3 -3
  13. package/dist/cjs/Predicate.js +8 -0
  14. package/dist/cjs/Predicate.js.map +1 -1
  15. package/dist/cjs/Random.js +16 -1
  16. package/dist/cjs/Random.js.map +1 -1
  17. package/dist/cjs/Stream.js +86 -7
  18. package/dist/cjs/Stream.js.map +1 -1
  19. package/dist/cjs/Struct.js +23 -1
  20. package/dist/cjs/Struct.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/configProvider.js.map +1 -1
  24. package/dist/cjs/internal/core.js +1 -1
  25. package/dist/cjs/internal/core.js.map +1 -1
  26. package/dist/cjs/internal/defaultServices.js +9 -2
  27. package/dist/cjs/internal/defaultServices.js.map +1 -1
  28. package/dist/cjs/internal/metric.js.map +1 -1
  29. package/dist/cjs/internal/stream/emit.js +73 -1
  30. package/dist/cjs/internal/stream/emit.js.map +1 -1
  31. package/dist/cjs/internal/stream.js +30 -22
  32. package/dist/cjs/internal/stream.js.map +1 -1
  33. package/dist/cjs/internal/version.js +1 -1
  34. package/dist/dts/ConfigProvider.d.ts +2 -2
  35. package/dist/dts/ConfigProvider.d.ts.map +1 -1
  36. package/dist/dts/Context.d.ts +3 -1
  37. package/dist/dts/Context.d.ts.map +1 -1
  38. package/dist/dts/DateTime.d.ts +1265 -0
  39. package/dist/dts/DateTime.d.ts.map +1 -0
  40. package/dist/dts/Effect.d.ts +18 -4
  41. package/dist/dts/Effect.d.ts.map +1 -1
  42. package/dist/dts/Either.d.ts +4 -4
  43. package/dist/dts/List.d.ts +2 -1
  44. package/dist/dts/List.d.ts.map +1 -1
  45. package/dist/dts/Metric.d.ts +1 -1
  46. package/dist/dts/Metric.d.ts.map +1 -1
  47. package/dist/dts/MetricRegistry.d.ts +1 -1
  48. package/dist/dts/MetricRegistry.d.ts.map +1 -1
  49. package/dist/dts/Micro.d.ts +60 -0
  50. package/dist/dts/Micro.d.ts.map +1 -1
  51. package/dist/dts/Option.d.ts +4 -4
  52. package/dist/dts/Predicate.d.ts +63 -2
  53. package/dist/dts/Predicate.d.ts.map +1 -1
  54. package/dist/dts/Random.d.ts +18 -0
  55. package/dist/dts/Random.d.ts.map +1 -1
  56. package/dist/dts/Stream.d.ts +95 -4
  57. package/dist/dts/Stream.d.ts.map +1 -1
  58. package/dist/dts/StreamEmit.d.ts +44 -0
  59. package/dist/dts/StreamEmit.d.ts.map +1 -1
  60. package/dist/dts/Struct.d.ts +21 -0
  61. package/dist/dts/Struct.d.ts.map +1 -1
  62. package/dist/dts/index.d.ts +4 -0
  63. package/dist/dts/index.d.ts.map +1 -1
  64. package/dist/dts/internal/core.d.ts.map +1 -1
  65. package/dist/dts/internal/defaultServices.d.ts.map +1 -1
  66. package/dist/dts/internal/stream.d.ts.map +1 -1
  67. package/dist/esm/Context.js.map +1 -1
  68. package/dist/esm/DateTime.js +1465 -0
  69. package/dist/esm/DateTime.js.map +1 -0
  70. package/dist/esm/Effect.js +4 -4
  71. package/dist/esm/Effect.js.map +1 -1
  72. package/dist/esm/Either.js +4 -4
  73. package/dist/esm/List.js.map +1 -1
  74. package/dist/esm/Metric.js.map +1 -1
  75. package/dist/esm/Micro.js +88 -38
  76. package/dist/esm/Micro.js.map +1 -1
  77. package/dist/esm/Option.js +4 -4
  78. package/dist/esm/Predicate.js +8 -0
  79. package/dist/esm/Predicate.js.map +1 -1
  80. package/dist/esm/Random.js +15 -0
  81. package/dist/esm/Random.js.map +1 -1
  82. package/dist/esm/Stream.js +84 -5
  83. package/dist/esm/Stream.js.map +1 -1
  84. package/dist/esm/Struct.js +21 -0
  85. package/dist/esm/Struct.js.map +1 -1
  86. package/dist/esm/index.js +4 -0
  87. package/dist/esm/index.js.map +1 -1
  88. package/dist/esm/internal/configProvider.js.map +1 -1
  89. package/dist/esm/internal/core.js +1 -1
  90. package/dist/esm/internal/core.js.map +1 -1
  91. package/dist/esm/internal/defaultServices.js +6 -0
  92. package/dist/esm/internal/defaultServices.js.map +1 -1
  93. package/dist/esm/internal/metric.js.map +1 -1
  94. package/dist/esm/internal/stream/emit.js +71 -0
  95. package/dist/esm/internal/stream/emit.js.map +1 -1
  96. package/dist/esm/internal/stream.js +24 -18
  97. package/dist/esm/internal/stream.js.map +1 -1
  98. package/dist/esm/internal/version.js +1 -1
  99. package/package.json +9 -1
  100. package/src/ConfigProvider.ts +2 -2
  101. package/src/Context.ts +3 -1
  102. package/src/DateTime.ts +2104 -0
  103. package/src/Effect.ts +28 -4
  104. package/src/Either.ts +4 -4
  105. package/src/List.ts +3 -2
  106. package/src/Metric.ts +1 -1
  107. package/src/MetricRegistry.ts +1 -1
  108. package/src/Micro.ts +117 -45
  109. package/src/Option.ts +4 -4
  110. package/src/Predicate.ts +68 -8
  111. package/src/Random.ts +24 -0
  112. package/src/Stream.ts +110 -5
  113. package/src/StreamEmit.ts +53 -0
  114. package/src/Struct.ts +22 -0
  115. package/src/index.ts +5 -0
  116. package/src/internal/configProvider.ts +20 -20
  117. package/src/internal/core.ts +37 -12
  118. package/src/internal/defaultServices.ts +14 -0
  119. package/src/internal/metric/registry.ts +1 -1
  120. package/src/internal/metric.ts +2 -2
  121. package/src/internal/stream/emit.ts +77 -0
  122. package/src/internal/stream.ts +86 -18
  123. package/src/internal/version.ts +1 -1
@@ -10,6 +10,7 @@ import * as Either from "../Either.js"
10
10
  import * as Equal from "../Equal.js"
11
11
  import * as Exit from "../Exit.js"
12
12
  import * as Fiber from "../Fiber.js"
13
+ import * as FiberRef from "../FiberRef.js"
13
14
  import type { LazyArg } from "../Function.js"
14
15
  import { constTrue, dual, identity, pipe } from "../Function.js"
15
16
  import * as Layer from "../Layer.js"
@@ -597,6 +598,51 @@ export const asyncEffect = <A, E = never, R = never>(
597
598
  fromChannel
598
599
  )
599
600
 
601
+ const queueFromBufferOptionsPush = <A, E>(
602
+ options?: { readonly bufferSize: "unbounded" } | {
603
+ readonly bufferSize?: number | undefined
604
+ readonly strategy?: "dropping" | "sliding" | undefined
605
+ } | undefined
606
+ ): Effect.Effect<Queue.Queue<Array<A> | Exit.Exit<void, E>>> => {
607
+ if (options?.bufferSize === "unbounded" || (options?.bufferSize === undefined && options?.strategy === undefined)) {
608
+ return Queue.unbounded()
609
+ }
610
+ switch (options?.strategy) {
611
+ case "sliding":
612
+ return Queue.sliding(options.bufferSize ?? 16)
613
+ default:
614
+ return Queue.dropping(options?.bufferSize ?? 16)
615
+ }
616
+ }
617
+
618
+ /** @internal */
619
+ export const asyncPush = <A, E = never, R = never>(
620
+ register: (emit: Emit.EmitOpsPush<E, A>) => Effect.Effect<unknown, never, R | Scope.Scope>,
621
+ options?: {
622
+ readonly bufferSize: "unbounded"
623
+ } | {
624
+ readonly bufferSize?: number | undefined
625
+ readonly strategy?: "dropping" | "sliding" | undefined
626
+ } | undefined
627
+ ): Stream.Stream<A, E, Exclude<R, Scope.Scope>> =>
628
+ Effect.acquireRelease(
629
+ queueFromBufferOptionsPush<A, E>(options),
630
+ Queue.shutdown
631
+ ).pipe(
632
+ Effect.tap((queue) =>
633
+ FiberRef.getWith(FiberRef.currentScheduler, (scheduler) => register(emit.makePush(queue, scheduler)))
634
+ ),
635
+ Effect.map((queue) => {
636
+ const loop: Channel.Channel<Chunk.Chunk<A>, unknown, E> = core.flatMap(Queue.take(queue), (item) =>
637
+ Exit.isExit(item)
638
+ ? Exit.isSuccess(item) ? core.void : core.failCause(item.cause)
639
+ : channel.zipRight(core.write(Chunk.unsafeFromArray(item)), loop))
640
+ return loop
641
+ }),
642
+ channel.unwrapScoped,
643
+ fromChannel
644
+ )
645
+
600
646
  /** @internal */
601
647
  export const asyncScoped = <A, E = never, R = never>(
602
648
  register: (emit: Emit.Emit<R, E, A, void>) => Effect.Effect<unknown, E, R | Scope.Scope>,
@@ -4116,6 +4162,23 @@ export const mkString = <E, R>(self: Stream.Stream<string, E, R>): Effect.Effect
4116
4162
  /** @internal */
4117
4163
  export const never: Stream.Stream<never> = fromEffect(Effect.never)
4118
4164
 
4165
+ /** @internal */
4166
+ export const onEnd: {
4167
+ <_, E2, R2>(
4168
+ effect: Effect.Effect<_, E2, R2>
4169
+ ): <A, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<A, E2 | E, R2 | R>
4170
+ <A, E, R, _, E2, R2>(
4171
+ self: Stream.Stream<A, E, R>,
4172
+ effect: Effect.Effect<_, E2, R2>
4173
+ ): Stream.Stream<A, E | E2, R | R2>
4174
+ } = dual(
4175
+ 2,
4176
+ <A, E, R, _, E2, R2>(
4177
+ self: Stream.Stream<A, E, R>,
4178
+ effect: Effect.Effect<_, E2, R2>
4179
+ ): Stream.Stream<A, E | E2, R | R2> => concat(self, drain(fromEffect(effect)))
4180
+ )
4181
+
4119
4182
  /** @internal */
4120
4183
  export const onError = dual<
4121
4184
  <E, X, R2>(
@@ -4154,6 +4217,23 @@ export const onDone = dual<
4154
4217
  )
4155
4218
  )
4156
4219
 
4220
+ /** @internal */
4221
+ export const onStart: {
4222
+ <_, E2, R2>(
4223
+ effect: Effect.Effect<_, E2, R2>
4224
+ ): <A, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<A, E2 | E, R2 | R>
4225
+ <A, E, R, _, E2, R2>(
4226
+ self: Stream.Stream<A, E, R>,
4227
+ effect: Effect.Effect<_, E2, R2>
4228
+ ): Stream.Stream<A, E | E2, R | R2>
4229
+ } = dual(
4230
+ 2,
4231
+ <A, E, R, _, E2, R2>(
4232
+ self: Stream.Stream<A, E, R>,
4233
+ effect: Effect.Effect<_, E2, R2>
4234
+ ): Stream.Stream<A, E | E2, R | R2> => unwrap(Effect.as(effect, self))
4235
+ )
4236
+
4157
4237
  /** @internal */
4158
4238
  export const orDie = <A, E, R>(self: Stream.Stream<A, E, R>): Stream.Stream<A, never, R> =>
4159
4239
  pipe(self, orDieWith(identity))
@@ -8324,23 +8404,11 @@ export const fromEventListener = <A = unknown>(
8324
8404
  readonly capture?: boolean
8325
8405
  readonly passive?: boolean
8326
8406
  readonly once?: boolean
8407
+ readonly bufferSize?: number | "unbounded" | undefined
8327
8408
  } | undefined
8328
8409
  ): Stream.Stream<A> =>
8329
- _async<A>((emit) => {
8330
- let batch: Array<A> = []
8331
- let taskRunning = false
8332
- function cb(e: A) {
8333
- batch.push(e)
8334
- if (!taskRunning) {
8335
- taskRunning = true
8336
- queueMicrotask(() => {
8337
- const events = batch
8338
- batch = []
8339
- taskRunning = false
8340
- emit.chunk(Chunk.unsafeFromArray(events))
8341
- })
8342
- }
8343
- }
8344
- target.addEventListener(type, cb as any, options)
8345
- return Effect.sync(() => target.removeEventListener(type, cb, options))
8346
- }, "unbounded")
8410
+ asyncPush<A>((emit) =>
8411
+ Effect.acquireRelease(
8412
+ Effect.sync(() => target.addEventListener(type, emit.single as any, options)),
8413
+ () => Effect.sync(() => target.removeEventListener(type, emit.single, options))
8414
+ ), { bufferSize: typeof options === "object" ? options.bufferSize : undefined })
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.5.8"
1
+ let moduleVersion = "3.6.0"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4