effect 3.7.3 → 3.8.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 (209) hide show
  1. package/Mailbox/package.json +6 -0
  2. package/dist/cjs/Deferred.js.map +1 -1
  3. package/dist/cjs/Duration.js +99 -35
  4. package/dist/cjs/Duration.js.map +1 -1
  5. package/dist/cjs/Effect.js +30 -3
  6. package/dist/cjs/Effect.js.map +1 -1
  7. package/dist/cjs/Fiber.js.map +1 -1
  8. package/dist/cjs/FiberRef.js.map +1 -1
  9. package/dist/cjs/Logger.js +29 -1
  10. package/dist/cjs/Logger.js.map +1 -1
  11. package/dist/cjs/Mailbox.js +95 -0
  12. package/dist/cjs/Mailbox.js.map +1 -0
  13. package/dist/cjs/MutableHashMap.js +13 -1
  14. package/dist/cjs/MutableHashMap.js.map +1 -1
  15. package/dist/cjs/Number.js +20 -1
  16. package/dist/cjs/Number.js.map +1 -1
  17. package/dist/cjs/Queue.js.map +1 -1
  18. package/dist/cjs/RcMap.js +6 -1
  19. package/dist/cjs/RcMap.js.map +1 -1
  20. package/dist/cjs/RcRef.js.map +1 -1
  21. package/dist/cjs/Ref.js.map +1 -1
  22. package/dist/cjs/Stream.js +11 -2
  23. package/dist/cjs/Stream.js.map +1 -1
  24. package/dist/cjs/SubscriptionRef.js.map +1 -1
  25. package/dist/cjs/SynchronizedRef.js.map +1 -1
  26. package/dist/cjs/index.js +4 -2
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/internal/core.js +32 -25
  29. package/dist/cjs/internal/core.js.map +1 -1
  30. package/dist/cjs/internal/defaultServices.js +8 -5
  31. package/dist/cjs/internal/defaultServices.js.map +1 -1
  32. package/dist/cjs/internal/effect/circular.js +81 -8
  33. package/dist/cjs/internal/effect/circular.js.map +1 -1
  34. package/dist/cjs/internal/fiber.js +51 -26
  35. package/dist/cjs/internal/fiber.js.map +1 -1
  36. package/dist/cjs/internal/fiberRefs.js.map +1 -1
  37. package/dist/cjs/internal/fiberRuntime.js +126 -96
  38. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  39. package/dist/cjs/internal/groupBy.js +6 -1
  40. package/dist/cjs/internal/groupBy.js.map +1 -1
  41. package/dist/cjs/internal/layer.js +3 -3
  42. package/dist/cjs/internal/layer.js.map +1 -1
  43. package/dist/cjs/internal/logger.js +4 -1
  44. package/dist/cjs/internal/logger.js.map +1 -1
  45. package/dist/cjs/internal/mailbox.js +408 -0
  46. package/dist/cjs/internal/mailbox.js.map +1 -0
  47. package/dist/cjs/internal/managedRuntime.js +1 -1
  48. package/dist/cjs/internal/managedRuntime.js.map +1 -1
  49. package/dist/cjs/internal/pubsub.js +6 -1
  50. package/dist/cjs/internal/pubsub.js.map +1 -1
  51. package/dist/cjs/internal/queue.js +6 -1
  52. package/dist/cjs/internal/queue.js.map +1 -1
  53. package/dist/cjs/internal/rcMap.js +7 -1
  54. package/dist/cjs/internal/rcMap.js.map +1 -1
  55. package/dist/cjs/internal/rcRef.js +10 -6
  56. package/dist/cjs/internal/rcRef.js.map +1 -1
  57. package/dist/cjs/internal/ref.js +7 -7
  58. package/dist/cjs/internal/ref.js.map +1 -1
  59. package/dist/cjs/internal/runtime.js +1 -1
  60. package/dist/cjs/internal/runtime.js.map +1 -1
  61. package/dist/cjs/internal/stream.js +7 -2
  62. package/dist/cjs/internal/stream.js.map +1 -1
  63. package/dist/cjs/internal/subscriptionRef.js +7 -8
  64. package/dist/cjs/internal/subscriptionRef.js.map +1 -1
  65. package/dist/cjs/internal/version.js +1 -1
  66. package/dist/dts/Deferred.d.ts +21 -2
  67. package/dist/dts/Deferred.d.ts.map +1 -1
  68. package/dist/dts/Duration.d.ts +38 -1
  69. package/dist/dts/Duration.d.ts.map +1 -1
  70. package/dist/dts/Effect.d.ts +45 -0
  71. package/dist/dts/Effect.d.ts.map +1 -1
  72. package/dist/dts/Fiber.d.ts +69 -2
  73. package/dist/dts/Fiber.d.ts.map +1 -1
  74. package/dist/dts/FiberRef.d.ts +21 -2
  75. package/dist/dts/FiberRef.d.ts.map +1 -1
  76. package/dist/dts/Logger.d.ts +28 -0
  77. package/dist/dts/Logger.d.ts.map +1 -1
  78. package/dist/dts/Mailbox.d.ts +220 -0
  79. package/dist/dts/Mailbox.d.ts.map +1 -0
  80. package/dist/dts/MutableHashMap.d.ts +5 -0
  81. package/dist/dts/MutableHashMap.d.ts.map +1 -1
  82. package/dist/dts/Number.d.ts +19 -0
  83. package/dist/dts/Number.d.ts.map +1 -1
  84. package/dist/dts/Queue.d.ts +40 -1
  85. package/dist/dts/Queue.d.ts.map +1 -1
  86. package/dist/dts/RcMap.d.ts +5 -0
  87. package/dist/dts/RcMap.d.ts.map +1 -1
  88. package/dist/dts/RcRef.d.ts +22 -2
  89. package/dist/dts/RcRef.d.ts.map +1 -1
  90. package/dist/dts/Ref.d.ts +22 -2
  91. package/dist/dts/Ref.d.ts.map +1 -1
  92. package/dist/dts/Stream.d.ts +30 -0
  93. package/dist/dts/Stream.d.ts.map +1 -1
  94. package/dist/dts/SubscriptionRef.d.ts +20 -0
  95. package/dist/dts/SubscriptionRef.d.ts.map +1 -1
  96. package/dist/dts/SynchronizedRef.d.ts +20 -0
  97. package/dist/dts/SynchronizedRef.d.ts.map +1 -1
  98. package/dist/dts/index.d.ts +5 -0
  99. package/dist/dts/index.d.ts.map +1 -1
  100. package/dist/dts/internal/core.d.ts.map +1 -1
  101. package/dist/dts/internal/fiber.d.ts.map +1 -1
  102. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  103. package/dist/dts/internal/logger.d.ts.map +1 -1
  104. package/dist/dts/internal/mailbox.d.ts +2 -0
  105. package/dist/dts/internal/mailbox.d.ts.map +1 -0
  106. package/dist/dts/internal/stream.d.ts +22 -0
  107. package/dist/dts/internal/stream.d.ts.map +1 -1
  108. package/dist/esm/Deferred.js.map +1 -1
  109. package/dist/esm/Duration.js +92 -33
  110. package/dist/esm/Duration.js.map +1 -1
  111. package/dist/esm/Effect.js +27 -0
  112. package/dist/esm/Effect.js.map +1 -1
  113. package/dist/esm/Fiber.js.map +1 -1
  114. package/dist/esm/FiberRef.js.map +1 -1
  115. package/dist/esm/Logger.js +28 -0
  116. package/dist/esm/Logger.js.map +1 -1
  117. package/dist/esm/Mailbox.js +85 -0
  118. package/dist/esm/Mailbox.js.map +1 -0
  119. package/dist/esm/MutableHashMap.js +11 -0
  120. package/dist/esm/MutableHashMap.js.map +1 -1
  121. package/dist/esm/Number.js +19 -0
  122. package/dist/esm/Number.js.map +1 -1
  123. package/dist/esm/Queue.js.map +1 -1
  124. package/dist/esm/RcMap.js +5 -0
  125. package/dist/esm/RcMap.js.map +1 -1
  126. package/dist/esm/RcRef.js.map +1 -1
  127. package/dist/esm/Ref.js.map +1 -1
  128. package/dist/esm/Stream.js +9 -0
  129. package/dist/esm/Stream.js.map +1 -1
  130. package/dist/esm/SubscriptionRef.js.map +1 -1
  131. package/dist/esm/SynchronizedRef.js.map +1 -1
  132. package/dist/esm/index.js +5 -0
  133. package/dist/esm/index.js.map +1 -1
  134. package/dist/esm/internal/core.js +33 -26
  135. package/dist/esm/internal/core.js.map +1 -1
  136. package/dist/esm/internal/defaultServices.js +6 -4
  137. package/dist/esm/internal/defaultServices.js.map +1 -1
  138. package/dist/esm/internal/effect/circular.js +77 -6
  139. package/dist/esm/internal/effect/circular.js.map +1 -1
  140. package/dist/esm/internal/fiber.js +51 -26
  141. package/dist/esm/internal/fiber.js.map +1 -1
  142. package/dist/esm/internal/fiberRefs.js.map +1 -1
  143. package/dist/esm/internal/fiberRuntime.js +124 -95
  144. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  145. package/dist/esm/internal/groupBy.js +6 -1
  146. package/dist/esm/internal/groupBy.js.map +1 -1
  147. package/dist/esm/internal/layer.js +3 -3
  148. package/dist/esm/internal/layer.js.map +1 -1
  149. package/dist/esm/internal/logger.js +3 -0
  150. package/dist/esm/internal/logger.js.map +1 -1
  151. package/dist/esm/internal/mailbox.js +395 -0
  152. package/dist/esm/internal/mailbox.js.map +1 -0
  153. package/dist/esm/internal/managedRuntime.js +1 -1
  154. package/dist/esm/internal/managedRuntime.js.map +1 -1
  155. package/dist/esm/internal/pubsub.js +6 -1
  156. package/dist/esm/internal/pubsub.js.map +1 -1
  157. package/dist/esm/internal/queue.js +6 -1
  158. package/dist/esm/internal/queue.js.map +1 -1
  159. package/dist/esm/internal/rcMap.js +5 -0
  160. package/dist/esm/internal/rcMap.js.map +1 -1
  161. package/dist/esm/internal/rcRef.js +10 -6
  162. package/dist/esm/internal/rcRef.js.map +1 -1
  163. package/dist/esm/internal/ref.js +7 -7
  164. package/dist/esm/internal/ref.js.map +1 -1
  165. package/dist/esm/internal/runtime.js +1 -1
  166. package/dist/esm/internal/runtime.js.map +1 -1
  167. package/dist/esm/internal/stream.js +5 -0
  168. package/dist/esm/internal/stream.js.map +1 -1
  169. package/dist/esm/internal/subscriptionRef.js +7 -8
  170. package/dist/esm/internal/subscriptionRef.js.map +1 -1
  171. package/dist/esm/internal/version.js +1 -1
  172. package/package.json +9 -1
  173. package/src/Deferred.ts +21 -2
  174. package/src/Duration.ts +112 -35
  175. package/src/Effect.ts +52 -0
  176. package/src/Fiber.ts +78 -2
  177. package/src/FiberRef.ts +21 -2
  178. package/src/Logger.ts +30 -0
  179. package/src/Mailbox.ts +236 -0
  180. package/src/MutableHashMap.ts +12 -0
  181. package/src/Number.ts +23 -0
  182. package/src/Queue.ts +42 -1
  183. package/src/RcMap.ts +6 -0
  184. package/src/RcRef.ts +24 -2
  185. package/src/Ref.ts +22 -2
  186. package/src/Stream.ts +36 -0
  187. package/src/SubscriptionRef.ts +22 -0
  188. package/src/SynchronizedRef.ts +20 -0
  189. package/src/index.ts +6 -0
  190. package/src/internal/core.ts +31 -28
  191. package/src/internal/defaultServices.ts +9 -10
  192. package/src/internal/effect/circular.ts +83 -6
  193. package/src/internal/fiber.ts +56 -29
  194. package/src/internal/fiberRefs.ts +1 -2
  195. package/src/internal/fiberRuntime.ts +133 -102
  196. package/src/internal/groupBy.ts +7 -1
  197. package/src/internal/layer.ts +3 -3
  198. package/src/internal/logger.ts +4 -0
  199. package/src/internal/mailbox.ts +461 -0
  200. package/src/internal/managedRuntime.ts +1 -1
  201. package/src/internal/pubsub.ts +9 -2
  202. package/src/internal/queue.ts +7 -1
  203. package/src/internal/rcMap.ts +8 -0
  204. package/src/internal/rcRef.ts +10 -6
  205. package/src/internal/ref.ts +7 -7
  206. package/src/internal/runtime.ts +1 -1
  207. package/src/internal/stream.ts +53 -0
  208. package/src/internal/subscriptionRef.ts +7 -8
  209. package/src/internal/version.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  import * as Effect from "../Effect.js";
2
+ import * as Effectable from "../Effectable.js";
2
3
  import { dual, pipe } from "../Function.js";
3
- import { pipeArguments } from "../Pipeable.js";
4
4
  import * as PubSub from "../PubSub.js";
5
5
  import * as Readable from "../Readable.js";
6
6
  import * as Ref from "../Ref.js";
@@ -18,25 +18,24 @@ const subscriptionRefVariance = {
18
18
  _A: _ => _
19
19
  };
20
20
  /** @internal */
21
- class SubscriptionRefImpl {
21
+ class SubscriptionRefImpl extends Effectable.Class {
22
22
  ref;
23
23
  pubsub;
24
24
  semaphore;
25
- [Readable.TypeId];
26
- [Subscribable.TypeId];
25
+ [Readable.TypeId] = Readable.TypeId;
26
+ [Subscribable.TypeId] = Subscribable.TypeId;
27
27
  [Ref.RefTypeId] = _ref.refVariance;
28
28
  [Synchronized.SynchronizedRefTypeId] = _circular.synchronizedVariance;
29
29
  [SubscriptionRefTypeId] = subscriptionRefVariance;
30
30
  constructor(ref, pubsub, semaphore) {
31
+ super();
31
32
  this.ref = ref;
32
33
  this.pubsub = pubsub;
33
34
  this.semaphore = semaphore;
34
- this[Readable.TypeId] = Readable.TypeId;
35
- this[Subscribable.TypeId] = Subscribable.TypeId;
36
35
  this.get = Ref.get(this.ref);
37
36
  }
38
- pipe() {
39
- return pipeArguments(this, arguments);
37
+ commit() {
38
+ return this.get;
40
39
  }
41
40
  get;
42
41
  get changes() {
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptionRef.js","names":["Effect","dual","pipe","pipeArguments","PubSub","Readable","Ref","Subscribable","Synchronized","_circular","_ref","stream","SubscriptionRefSymbolKey","SubscriptionRefTypeId","Symbol","for","subscriptionRefVariance","_A","_","SubscriptionRefImpl","ref","pubsub","semaphore","TypeId","RefTypeId","refVariance","SynchronizedRefTypeId","synchronizedVariance","constructor","get","arguments","changes","flatMap","a","map","fromPubSub","scoped","s","concat","make","withPermits","unwrapScoped","modify","f","modifyEffect","succeed","b","set","as","zipLeft","publish","self","value","all","unbounded","makeSemaphore"],"sources":["../../../src/internal/subscriptionRef.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"subscriptionRef.js","names":["Effect","Effectable","dual","pipe","PubSub","Readable","Ref","Subscribable","Synchronized","_circular","_ref","stream","SubscriptionRefSymbolKey","SubscriptionRefTypeId","Symbol","for","subscriptionRefVariance","_A","_","SubscriptionRefImpl","Class","ref","pubsub","semaphore","TypeId","RefTypeId","refVariance","SynchronizedRefTypeId","synchronizedVariance","constructor","get","commit","changes","flatMap","a","map","fromPubSub","scoped","s","concat","make","withPermits","unwrapScoped","modify","f","modifyEffect","succeed","b","set","as","zipLeft","publish","self","value","all","unbounded","makeSemaphore"],"sources":["../../../src/internal/subscriptionRef.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.7.3";
1
+ let moduleVersion = "3.8.0";
2
2
  export const getCurrentVersion = () => moduleVersion;
3
3
  export const setCurrentVersion = version => {
4
4
  moduleVersion = version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect",
3
- "version": "3.7.3",
3
+ "version": "3.8.0",
4
4
  "description": "The missing standard library for TypeScript, for writing production-grade software.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -302,6 +302,11 @@
302
302
  "import": "./dist/esm/Logger.js",
303
303
  "default": "./dist/cjs/Logger.js"
304
304
  },
305
+ "./Mailbox": {
306
+ "types": "./dist/dts/Mailbox.d.ts",
307
+ "import": "./dist/esm/Mailbox.js",
308
+ "default": "./dist/cjs/Mailbox.js"
309
+ },
305
310
  "./ManagedRuntime": {
306
311
  "types": "./dist/dts/ManagedRuntime.d.ts",
307
312
  "import": "./dist/esm/ManagedRuntime.js",
@@ -998,6 +1003,9 @@
998
1003
  "Logger": [
999
1004
  "./dist/dts/Logger.d.ts"
1000
1005
  ],
1006
+ "Mailbox": [
1007
+ "./dist/dts/Mailbox.d.ts"
1008
+ ],
1001
1009
  "ManagedRuntime": [
1002
1010
  "./dist/dts/ManagedRuntime.d.ts"
1003
1011
  ],
package/src/Deferred.ts CHANGED
@@ -10,8 +10,8 @@ import * as core from "./internal/core.js"
10
10
  import * as internal from "./internal/deferred.js"
11
11
  import type * as MutableRef from "./MutableRef.js"
12
12
  import type * as Option from "./Option.js"
13
- import type { Pipeable } from "./Pipeable.js"
14
13
  import type * as Types from "./Types.js"
14
+ import type * as Unify from "./Unify.js"
15
15
 
16
16
  /**
17
17
  * @since 2.0.0
@@ -37,11 +37,30 @@ export type DeferredTypeId = typeof DeferredTypeId
37
37
  * @since 2.0.0
38
38
  * @category models
39
39
  */
40
- export interface Deferred<in out A, in out E = never> extends Deferred.Variance<A, E>, Pipeable {
40
+ export interface Deferred<in out A, in out E = never> extends Effect.Effect<A, E>, Deferred.Variance<A, E> {
41
41
  /** @internal */
42
42
  readonly state: MutableRef.MutableRef<internal.State<A, E>>
43
43
  /** @internal */
44
44
  readonly blockingOn: FiberId.FiberId
45
+ readonly [Unify.typeSymbol]?: unknown
46
+ readonly [Unify.unifySymbol]?: DeferredUnify<this>
47
+ readonly [Unify.ignoreSymbol]?: DeferredUnifyIgnore
48
+ }
49
+
50
+ /**
51
+ * @category models
52
+ * @since 3.8.0
53
+ */
54
+ export interface DeferredUnify<A extends { [Unify.typeSymbol]?: any }> extends Effect.EffectUnify<A> {
55
+ Deferred?: () => Extract<A[Unify.typeSymbol], Deferred<any>>
56
+ }
57
+
58
+ /**
59
+ * @category models
60
+ * @since 3.8.0
61
+ */
62
+ export interface DeferredUnifyIgnore extends Effect.EffectUnifyIgnore {
63
+ Effect?: true
45
64
  }
46
65
 
47
66
  /**
package/src/Duration.ts CHANGED
@@ -282,23 +282,61 @@ export const weeks = (weeks: number): Duration => make(weeks * 604_800_000)
282
282
  * @since 2.0.0
283
283
  * @category getters
284
284
  */
285
- export const toMillis = (self: DurationInput): number => {
286
- const _self = decode(self)
287
- switch (_self.value._tag) {
288
- case "Infinity":
289
- return Infinity
290
- case "Nanos":
291
- return Number(_self.value.nanos) / 1_000_000
292
- case "Millis":
293
- return _self.value.millis
294
- }
295
- }
285
+ export const toMillis = (self: DurationInput): number =>
286
+ match(self, {
287
+ onMillis: (millis) => millis,
288
+ onNanos: (nanos) => Number(nanos) / 1_000_000
289
+ })
296
290
 
297
291
  /**
298
292
  * @since 2.0.0
299
293
  * @category getters
300
294
  */
301
- export const toSeconds = (self: DurationInput): number => toMillis(self) / 1_000
295
+ export const toSeconds = (self: DurationInput): number =>
296
+ match(self, {
297
+ onMillis: (millis) => millis / 1_000,
298
+ onNanos: (nanos) => Number(nanos) / 1_000_000_000
299
+ })
300
+
301
+ /**
302
+ * @since 3.8.0
303
+ * @category getters
304
+ */
305
+ export const toMinutes = (self: DurationInput): number =>
306
+ match(self, {
307
+ onMillis: (millis) => millis / 60_000,
308
+ onNanos: (nanos) => Number(nanos) / 60_000_000_000
309
+ })
310
+
311
+ /**
312
+ * @since 3.8.0
313
+ * @category getters
314
+ */
315
+ export const toHours = (self: DurationInput): number =>
316
+ match(self, {
317
+ onMillis: (millis) => millis / 3_600_000,
318
+ onNanos: (nanos) => Number(nanos) / 3_600_000_000_000
319
+ })
320
+
321
+ /**
322
+ * @since 3.8.0
323
+ * @category getters
324
+ */
325
+ export const toDays = (self: DurationInput): number =>
326
+ match(self, {
327
+ onMillis: (millis) => millis / 86_400_000,
328
+ onNanos: (nanos) => Number(nanos) / 86_400_000_000_000
329
+ })
330
+
331
+ /**
332
+ * @since 3.8.0
333
+ * @category getters
334
+ */
335
+ export const toWeeks = (self: DurationInput): number =>
336
+ match(self, {
337
+ onMillis: (millis) => millis / 604_800_000,
338
+ onNanos: (nanos) => Number(nanos) / 604_800_000_000_000
339
+ })
302
340
 
303
341
  /**
304
342
  * Get the duration in nanoseconds as a bigint.
@@ -501,6 +539,7 @@ const _max = order.max(Order)
501
539
 
502
540
  /**
503
541
  * @since 2.0.0
542
+ * @category order
504
543
  */
505
544
  export const max: {
506
545
  (that: DurationInput): (self: DurationInput) => Duration
@@ -511,6 +550,7 @@ const _clamp = order.clamp(Order)
511
550
 
512
551
  /**
513
552
  * @since 2.0.0
553
+ * @category order
514
554
  */
515
555
  export const clamp: {
516
556
  (options: {
@@ -707,10 +747,54 @@ export const equals: {
707
747
  (self: DurationInput, that: DurationInput): boolean
708
748
  } = dual(2, (self: DurationInput, that: DurationInput): boolean => Equivalence(decode(self), decode(that)))
709
749
 
750
+ /**
751
+ * Converts a `Duration` to its parts.
752
+ *
753
+ * @since 3.8.0
754
+ * @category conversions
755
+ */
756
+ export const parts = (self: DurationInput): {
757
+ days: number
758
+ hours: number
759
+ minutes: number
760
+ seconds: number
761
+ millis: number
762
+ nanos: number
763
+ } => {
764
+ const duration = decode(self)
765
+ if (duration.value._tag === "Infinity") {
766
+ return {
767
+ days: Infinity,
768
+ hours: Infinity,
769
+ minutes: Infinity,
770
+ seconds: Infinity,
771
+ millis: Infinity,
772
+ nanos: Infinity
773
+ }
774
+ }
775
+
776
+ const nanos = unsafeToNanos(duration)
777
+ const ms = nanos / bigint1e6
778
+ const sec = ms / bigint1e3
779
+ const min = sec / bigint60
780
+ const hr = min / bigint60
781
+ const days = hr / bigint24
782
+
783
+ return {
784
+ days: Number(days),
785
+ hours: Number(hr % bigint24),
786
+ minutes: Number(min % bigint60),
787
+ seconds: Number(sec % bigint60),
788
+ millis: Number(ms % bigint1e3),
789
+ nanos: Number(nanos % bigint1e6)
790
+ }
791
+ }
792
+
710
793
  /**
711
794
  * Converts a `Duration` to a human readable string.
712
- * @since 2.0.0
713
795
  *
796
+ * @since 2.0.0
797
+ * @category conversions
714
798
  * @example
715
799
  * import { Duration } from "effect"
716
800
  *
@@ -719,42 +803,35 @@ export const equals: {
719
803
  */
720
804
  export const format = (self: DurationInput): string => {
721
805
  const duration = decode(self)
722
- const parts = []
723
-
724
806
  if (duration.value._tag === "Infinity") {
725
807
  return "Infinity"
726
808
  }
727
809
 
728
- const nanos = unsafeToNanos(duration)
729
-
730
- if (nanos % bigint1e6) {
731
- parts.push(`${nanos % bigint1e6}ns`)
810
+ const fragments = parts(duration)
811
+ const pieces = []
812
+ if (fragments.days !== 0) {
813
+ pieces.push(`${fragments.days}d`)
732
814
  }
733
815
 
734
- const ms = nanos / bigint1e6
735
- if (ms % bigint1e3 !== bigint0) {
736
- parts.push(`${ms % bigint1e3}ms`)
816
+ if (fragments.hours !== 0) {
817
+ pieces.push(`${fragments.hours}h`)
737
818
  }
738
819
 
739
- const sec = ms / bigint1e3
740
- if (sec % bigint60 !== bigint0) {
741
- parts.push(`${sec % bigint60}s`)
820
+ if (fragments.minutes !== 0) {
821
+ pieces.push(`${fragments.minutes}m`)
742
822
  }
743
823
 
744
- const min = sec / bigint60
745
- if (min % bigint60 !== bigint0) {
746
- parts.push(`${min % bigint60}m`)
824
+ if (fragments.seconds !== 0) {
825
+ pieces.push(`${fragments.seconds}s`)
747
826
  }
748
827
 
749
- const hr = min / bigint60
750
- if (hr % bigint24 !== bigint0) {
751
- parts.push(`${hr % bigint24}h`)
828
+ if (fragments.millis !== 0) {
829
+ pieces.push(`${fragments.millis}ms`)
752
830
  }
753
831
 
754
- const days = hr / bigint24
755
- if (days !== bigint0) {
756
- parts.push(`${days}d`)
832
+ if (fragments.nanos !== 0) {
833
+ pieces.push(`${fragments.nanos}ns`)
757
834
  }
758
835
 
759
- return parts.reverse().join(" ")
836
+ return pieces.join(" ")
760
837
  }
package/src/Effect.ts CHANGED
@@ -5374,6 +5374,8 @@ export interface Permit {
5374
5374
  export interface Semaphore {
5375
5375
  /** when the given amount of permits are available, run the effect and release the permits when finished */
5376
5376
  withPermits(permits: number): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
5377
+ /** only if the given permits are available, run the effect and release the permits when finished */
5378
+ withPermitsIfAvailable(permits: number): <A, E, R>(self: Effect<A, E, R>) => Effect<Option.Option<A>, E, R>
5377
5379
  /** take the given amount of permits, suspending if they are not yet available */
5378
5380
  take(permits: number): Effect<number>
5379
5381
  /** release the given amount of permits, and return the resulting available permits */
@@ -5398,6 +5400,56 @@ export const unsafeMakeSemaphore: (permits: number) => Semaphore = circular.unsa
5398
5400
  */
5399
5401
  export const makeSemaphore: (permits: number) => Effect<Semaphore> = circular.makeSemaphore
5400
5402
 
5403
+ // -------------------------------------------------------------------------------------
5404
+ // latch
5405
+ // -------------------------------------------------------------------------------------
5406
+
5407
+ /**
5408
+ * @category latch
5409
+ * @since 3.8.0
5410
+ */
5411
+ export interface Latch {
5412
+ /** open the latch, releasing all fibers waiting on it */
5413
+ readonly open: Effect<void>
5414
+ /** release all fibers waiting on the latch, without opening it */
5415
+ readonly release: Effect<void>
5416
+ /** wait for the latch to be opened */
5417
+ readonly await: Effect<void>
5418
+ /** close the latch */
5419
+ readonly close: Effect<void>
5420
+ /** only run the given effect when the latch is open */
5421
+ readonly whenOpen: <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
5422
+ }
5423
+
5424
+ /**
5425
+ * @category latch
5426
+ * @since 3.8.0
5427
+ */
5428
+ export const unsafeMakeLatch: (open?: boolean | undefined) => Latch = circular.unsafeMakeLatch
5429
+
5430
+ /**
5431
+ * @category latch
5432
+ * @since 3.8.0
5433
+ * @example
5434
+ * import { Effect } from "effect"
5435
+ *
5436
+ * Effect.gen(function*() {
5437
+ * // Create a latch, starting in the closed state
5438
+ * const latch = yield* Effect.makeLatch(false)
5439
+ *
5440
+ * // Fork a fiber that logs "open sesame" when the latch is opened
5441
+ * const fiber = yield* Effect.log("open sesame").pipe(
5442
+ * latch.whenOpen,
5443
+ * Effect.fork
5444
+ * )
5445
+ *
5446
+ * // Open the latch
5447
+ * yield* latch.open
5448
+ * yield* fiber.await
5449
+ * })
5450
+ */
5451
+ export const makeLatch: (open?: boolean | undefined) => Effect<Latch, never, never> = circular.makeLatch
5452
+
5401
5453
  // -------------------------------------------------------------------------------------
5402
5454
  // execution
5403
5455
  // -------------------------------------------------------------------------------------
package/src/Fiber.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  * @since 2.0.0
3
3
  */
4
4
  import type * as Cause from "./Cause.js"
5
+ import type { Context } from "./Context.js"
6
+ import type { DefaultServices } from "./DefaultServices.js"
5
7
  import type * as Effect from "./Effect.js"
6
8
  import type * as Either from "./Either.js"
7
9
  import type * as Exit from "./Exit.js"
@@ -16,10 +18,13 @@ import * as internal from "./internal/fiber.js"
16
18
  import * as fiberRuntime from "./internal/fiberRuntime.js"
17
19
  import type * as Option from "./Option.js"
18
20
  import type * as order from "./Order.js"
19
- import type { Pipeable } from "./Pipeable.js"
20
21
  import type * as RuntimeFlags from "./RuntimeFlags.js"
22
+ import type { Scheduler } from "./Scheduler.js"
21
23
  import type * as Scope from "./Scope.js"
24
+ import type { Supervisor } from "./Supervisor.js"
25
+ import type { AnySpan, Tracer } from "./Tracer.js"
22
26
  import type * as Types from "./Types.js"
27
+ import type * as Unify from "./Unify.js"
23
28
 
24
29
  /**
25
30
  * @since 2.0.0
@@ -57,7 +62,7 @@ export type RuntimeFiberTypeId = typeof RuntimeFiberTypeId
57
62
  * @since 2.0.0
58
63
  * @category models
59
64
  */
60
- export interface Fiber<out A, out E = never> extends Fiber.Variance<A, E>, Pipeable {
65
+ export interface Fiber<out A, out E = never> extends Effect.Effect<A, E>, Fiber.Variance<A, E> {
61
66
  /**
62
67
  * The identity of the fiber.
63
68
  */
@@ -92,6 +97,26 @@ export interface Fiber<out A, out E = never> extends Fiber.Variance<A, E>, Pipea
92
97
  * resume immediately. Otherwise, the effect will resume when the fiber exits.
93
98
  */
94
99
  interruptAsFork(fiberId: FiberId.FiberId): Effect.Effect<void>
100
+
101
+ readonly [Unify.typeSymbol]?: unknown
102
+ readonly [Unify.unifySymbol]?: FiberUnify<this>
103
+ readonly [Unify.ignoreSymbol]?: FiberUnifyIgnore
104
+ }
105
+
106
+ /**
107
+ * @category models
108
+ * @since 3.8.0
109
+ */
110
+ export interface FiberUnify<A extends { [Unify.typeSymbol]?: any }> extends Effect.EffectUnify<A> {
111
+ Fiber?: () => A[Unify.typeSymbol] extends Fiber<infer A0, infer E0> | infer _ ? Fiber<A0, E0> : never
112
+ }
113
+
114
+ /**
115
+ * @category models
116
+ * @since 3.8.0
117
+ */
118
+ export interface FiberUnifyIgnore extends Effect.EffectUnifyIgnore {
119
+ Effect?: true
95
120
  }
96
121
 
97
122
  /**
@@ -155,6 +180,57 @@ export interface RuntimeFiber<out A, out E = never> extends Fiber<A, E>, Fiber.R
155
180
  * resume immediately. Otherwise, the effect will resume when the fiber exits.
156
181
  */
157
182
  unsafeInterruptAsFork(fiberId: FiberId.FiberId): void
183
+
184
+ /**
185
+ * Gets the current context
186
+ */
187
+ get currentContext(): Context<never>
188
+
189
+ /**
190
+ * Gets the current context
191
+ */
192
+ get currentDefaultServices(): Context<DefaultServices>
193
+
194
+ /**
195
+ * Gets the current scheduler
196
+ */
197
+ get currentScheduler(): Scheduler
198
+
199
+ /**
200
+ * Gets the current tracer
201
+ */
202
+ get currentTracer(): Tracer
203
+
204
+ /**
205
+ * Gets the current span
206
+ */
207
+ get currentSpan(): AnySpan | undefined
208
+
209
+ /**
210
+ * Gets the current supervisor
211
+ */
212
+ get currentSupervisor(): Supervisor<unknown>
213
+
214
+ readonly [Unify.typeSymbol]?: unknown
215
+ readonly [Unify.unifySymbol]?: RuntimeFiberUnify<this>
216
+ readonly [Unify.ignoreSymbol]?: RuntimeFiberUnifyIgnore
217
+ }
218
+
219
+ /**
220
+ * @category models
221
+ * @since 3.8.0
222
+ */
223
+ export interface RuntimeFiberUnify<A extends { [Unify.typeSymbol]?: any }> extends FiberUnify<A> {
224
+ RuntimeFiber?: () => A[Unify.typeSymbol] extends RuntimeFiber<infer A0, infer E0> | infer _ ? RuntimeFiber<A0, E0>
225
+ : never
226
+ }
227
+
228
+ /**
229
+ * @category models
230
+ * @since 3.8.0
231
+ */
232
+ export interface RuntimeFiberUnifyIgnore extends FiberUnifyIgnore {
233
+ Fiber?: true
158
234
  }
159
235
 
160
236
  /**
package/src/FiberRef.ts CHANGED
@@ -18,7 +18,6 @@ import type * as LogLevel from "./LogLevel.js"
18
18
  import type * as LogSpan from "./LogSpan.js"
19
19
  import type * as MetricLabel from "./MetricLabel.js"
20
20
  import type * as Option from "./Option.js"
21
- import type { Pipeable } from "./Pipeable.js"
22
21
  import type * as Request from "./Request.js"
23
22
  import type * as RuntimeFlags from "./RuntimeFlags.js"
24
23
  import * as Scheduler from "./Scheduler.js"
@@ -26,6 +25,7 @@ import type * as Scope from "./Scope.js"
26
25
  import type * as Supervisor from "./Supervisor.js"
27
26
  import type * as Tracer from "./Tracer.js"
28
27
  import type * as Types from "./Types.js"
28
+ import type * as Unify from "./Unify.js"
29
29
 
30
30
  /**
31
31
  * @since 2.0.0
@@ -43,7 +43,7 @@ export type FiberRefTypeId = typeof FiberRefTypeId
43
43
  * @since 2.0.0
44
44
  * @category model
45
45
  */
46
- export interface FiberRef<in out A> extends Variance<A>, Pipeable {
46
+ export interface FiberRef<in out A> extends Effect.Effect<A>, Variance<A> {
47
47
  /** @internal */
48
48
  readonly initial: A
49
49
  /** @internal */
@@ -56,6 +56,25 @@ export interface FiberRef<in out A> extends Variance<A>, Pipeable {
56
56
  readonly fork: unknown
57
57
  /** @internal */
58
58
  join(oldValue: A, newValue: A): A
59
+ readonly [Unify.typeSymbol]?: unknown
60
+ readonly [Unify.unifySymbol]?: FiberRefUnify<this>
61
+ readonly [Unify.ignoreSymbol]?: FiberRefUnifyIgnore
62
+ }
63
+
64
+ /**
65
+ * @category models
66
+ * @since 3.8.0
67
+ */
68
+ export interface FiberRefUnify<A extends { [Unify.typeSymbol]?: any }> extends Effect.EffectUnify<A> {
69
+ FiberRef?: () => Extract<A[Unify.typeSymbol], FiberRef<any>>
70
+ }
71
+
72
+ /**
73
+ * @category models
74
+ * @since 3.8.0
75
+ */
76
+ export interface FiberRefUnifyIgnore extends Effect.EffectUnifyIgnore {
77
+ Effect?: true
59
78
  }
60
79
 
61
80
  /**
package/src/Logger.ts CHANGED
@@ -238,6 +238,28 @@ export const batched: {
238
238
  */
239
239
  export const withConsoleLog: <M, O>(self: Logger<M, O>) => Logger<M, void> = fiberRuntime.loggerWithConsoleLog
240
240
 
241
+ /**
242
+ * Takes a `Logger<M, O>` and returns a logger that calls the respective `Console` method
243
+ * based on the log level.
244
+ *
245
+ * @example
246
+ * import { Logger, Effect } from "effect"
247
+ *
248
+ * const loggerLayer = Logger.replace(
249
+ * Logger.defaultLogger,
250
+ * Logger.withLeveledConsole(Logger.stringLogger),
251
+ * )
252
+ *
253
+ * Effect.gen(function* () {
254
+ * yield* Effect.logError("an error")
255
+ * yield* Effect.logInfo("an info")
256
+ * }).pipe(Effect.provide(loggerLayer))
257
+ *
258
+ * @since 3.8.0
259
+ * @category console
260
+ */
261
+ export const withLeveledConsole: <M, O>(self: Logger<M, O>) => Logger<M, void> = fiberRuntime.loggerWithLeveledLog
262
+
241
263
  /**
242
264
  * @since 2.0.0
243
265
  * @category console
@@ -475,6 +497,14 @@ export const prettyLogger: (
475
497
  }
476
498
  ) => Logger<unknown, void> = internal.prettyLogger
477
499
 
500
+ /**
501
+ * A default version of the pretty logger.
502
+ *
503
+ * @since 3.8.0
504
+ * @category constructors
505
+ */
506
+ export const prettyLoggerDefault: Logger<unknown, void> = internal.prettyLoggerDefault
507
+
478
508
  /**
479
509
  * The structured logger provides detailed log outputs, structured in a way that
480
510
  * retains comprehensive traceability of the events, suitable for deeper