effect 3.12.3 → 3.12.5

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 (54) hide show
  1. package/dist/cjs/Arbitrary.js +72 -14
  2. package/dist/cjs/Arbitrary.js.map +1 -1
  3. package/dist/cjs/DateTime.js.map +1 -1
  4. package/dist/cjs/Inspectable.js +0 -4
  5. package/dist/cjs/Inspectable.js.map +1 -1
  6. package/dist/cjs/ParseResult.js +2 -2
  7. package/dist/cjs/ParseResult.js.map +1 -1
  8. package/dist/cjs/Schema.js +154 -93
  9. package/dist/cjs/Schema.js.map +1 -1
  10. package/dist/cjs/internal/dateTime.js +32 -4
  11. package/dist/cjs/internal/dateTime.js.map +1 -1
  12. package/dist/cjs/internal/effect/circular.js +15 -2
  13. package/dist/cjs/internal/effect/circular.js.map +1 -1
  14. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  15. package/dist/cjs/internal/version.js +1 -1
  16. package/dist/dts/Arbitrary.d.ts.map +1 -1
  17. package/dist/dts/DateTime.d.ts +40 -36
  18. package/dist/dts/DateTime.d.ts.map +1 -1
  19. package/dist/dts/Inspectable.d.ts.map +1 -1
  20. package/dist/dts/Layer.d.ts +1 -1
  21. package/dist/dts/Layer.d.ts.map +1 -1
  22. package/dist/dts/MetricPolling.d.ts +1 -1
  23. package/dist/dts/MetricPolling.d.ts.map +1 -1
  24. package/dist/dts/ParseResult.d.ts +11 -0
  25. package/dist/dts/ParseResult.d.ts.map +1 -1
  26. package/dist/dts/Schema.d.ts +34 -15
  27. package/dist/dts/Schema.d.ts.map +1 -1
  28. package/dist/esm/Arbitrary.js +72 -14
  29. package/dist/esm/Arbitrary.js.map +1 -1
  30. package/dist/esm/DateTime.js.map +1 -1
  31. package/dist/esm/Inspectable.js +0 -3
  32. package/dist/esm/Inspectable.js.map +1 -1
  33. package/dist/esm/ParseResult.js +2 -2
  34. package/dist/esm/ParseResult.js.map +1 -1
  35. package/dist/esm/Schema.js +149 -86
  36. package/dist/esm/Schema.js.map +1 -1
  37. package/dist/esm/internal/dateTime.js +31 -3
  38. package/dist/esm/internal/dateTime.js.map +1 -1
  39. package/dist/esm/internal/effect/circular.js +15 -2
  40. package/dist/esm/internal/effect/circular.js.map +1 -1
  41. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  42. package/dist/esm/internal/version.js +1 -1
  43. package/package.json +1 -1
  44. package/src/Arbitrary.ts +84 -14
  45. package/src/DateTime.ts +45 -56
  46. package/src/Inspectable.ts +0 -1
  47. package/src/Layer.ts +1 -1
  48. package/src/MetricPolling.ts +1 -1
  49. package/src/ParseResult.ts +15 -2
  50. package/src/Schema.ts +191 -93
  51. package/src/internal/dateTime.ts +67 -33
  52. package/src/internal/effect/circular.ts +19 -17
  53. package/src/internal/fiberRuntime.ts +2 -1
  54. package/src/internal/version.ts +1 -1
@@ -129,7 +129,21 @@ export const makeZonedProto = (
129
129
  const self = Object.create(ProtoZoned)
130
130
  self.epochMillis = epochMillis
131
131
  self.zone = zone
132
- self.partsUtc = partsUtc
132
+ Object.defineProperty(self, "partsUtc", {
133
+ value: partsUtc,
134
+ enumerable: false,
135
+ writable: true
136
+ })
137
+ Object.defineProperty(self, "adjustedEpochMillis", {
138
+ value: undefined,
139
+ enumerable: false,
140
+ writable: true
141
+ })
142
+ Object.defineProperty(self, "partsAdjusted", {
143
+ value: undefined,
144
+ enumerable: false,
145
+ writable: true
146
+ })
133
147
  return self
134
148
  }
135
149
 
@@ -173,8 +187,13 @@ export const Order: order.Order<DateTime.DateTime> = order.make((self, that) =>
173
187
 
174
188
  /** @internal */
175
189
  export const clamp: {
176
- (options: { minimum: DateTime.DateTime; maximum: DateTime.DateTime }): (self: DateTime.DateTime) => DateTime.DateTime
177
- (self: DateTime.DateTime, options: { minimum: DateTime.DateTime; maximum: DateTime.DateTime }): DateTime.DateTime
190
+ <Min extends DateTime.DateTime, Max extends DateTime.DateTime>(
191
+ options: { readonly minimum: Min; readonly maximum: Max }
192
+ ): <A extends DateTime.DateTime>(self: A) => A | Min | Max
193
+ <A extends DateTime.DateTime, Min extends DateTime.DateTime, Max extends DateTime.DateTime>(
194
+ self: A,
195
+ options: { readonly minimum: Min; readonly maximum: Max }
196
+ ): A | Min | Max
178
197
  } = order.clamp(Order)
179
198
 
180
199
  // =============================================================================
@@ -184,6 +203,11 @@ export const clamp: {
184
203
  const makeUtc = (epochMillis: number): DateTime.Utc => {
185
204
  const self = Object.create(ProtoUtc)
186
205
  self.epochMillis = epochMillis
206
+ Object.defineProperty(self, "partsUtc", {
207
+ value: undefined,
208
+ enumerable: false,
209
+ writable: true
210
+ })
187
211
  return self
188
212
  }
189
213
 
@@ -210,6 +234,9 @@ export const unsafeMake = <A extends DateTime.DateTime.Input>(input: A): DateTim
210
234
  return unsafeFromDate(new Date(input)) as DateTime.DateTime.PreserveZone<A>
211
235
  }
212
236
 
237
+ const minEpochMillis = -8640000000000000 + (12 * 60 * 60 * 1000)
238
+ const maxEpochMillis = 8640000000000000 - (14 * 60 * 60 * 1000)
239
+
213
240
  /** @internal */
214
241
  export const unsafeMakeZoned = (input: DateTime.DateTime.Input, options?: {
215
242
  readonly timeZone?: number | string | DateTime.TimeZone | undefined
@@ -219,6 +246,9 @@ export const unsafeMakeZoned = (input: DateTime.DateTime.Input, options?: {
219
246
  return input
220
247
  }
221
248
  const self = unsafeMake(input)
249
+ if (self.epochMillis < minEpochMillis || self.epochMillis > maxEpochMillis) {
250
+ throw new IllegalArgumentException(`Epoch millis out of range: ${self.epochMillis}`)
251
+ }
222
252
  let zone: DateTime.TimeZone
223
253
  if (options?.timeZone === undefined) {
224
254
  const offset = new Date(self.epochMillis).getTimezoneOffset() * -60 * 1000
@@ -451,14 +481,14 @@ export const distanceDuration: {
451
481
 
452
482
  /** @internal */
453
483
  export const min: {
454
- (that: DateTime.DateTime): (self: DateTime.DateTime) => DateTime.DateTime
455
- (self: DateTime.DateTime, that: DateTime.DateTime): DateTime.DateTime
484
+ <That extends DateTime.DateTime>(that: That): <Self extends DateTime.DateTime>(self: Self) => Self | That
485
+ <Self extends DateTime.DateTime, That extends DateTime.DateTime>(self: Self, that: That): Self | That
456
486
  } = order.min(Order)
457
487
 
458
488
  /** @internal */
459
489
  export const max: {
460
- (that: DateTime.DateTime): (self: DateTime.DateTime) => DateTime.DateTime
461
- (self: DateTime.DateTime, that: DateTime.DateTime): DateTime.DateTime
490
+ <That extends DateTime.DateTime>(that: That): <Self extends DateTime.DateTime>(self: Self) => Self | That
491
+ <Self extends DateTime.DateTime, That extends DateTime.DateTime>(self: Self, that: That): Self | That
462
492
  } = order.max(Order)
463
493
 
464
494
  /** @internal */
@@ -544,8 +574,12 @@ export const zonedOffset = (self: DateTime.Zoned): number => {
544
574
 
545
575
  const offsetToString = (offset: number): string => {
546
576
  const abs = Math.abs(offset)
547
- const hours = Math.floor(abs / (60 * 60 * 1000))
548
- const minutes = Math.round((abs % (60 * 60 * 1000)) / (60 * 1000))
577
+ let hours = Math.floor(abs / (60 * 60 * 1000))
578
+ let minutes = Math.round((abs % (60 * 60 * 1000)) / (60 * 1000))
579
+ if (minutes === 60) {
580
+ hours += 1
581
+ minutes = 0
582
+ }
549
583
  return `${offset < 0 ? "-" : "+"}${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`
550
584
  }
551
585
 
@@ -641,11 +675,11 @@ const setPartsDate = (date: Date, parts: Partial<DateTime.DateTime.PartsWithWeek
641
675
  export const setParts: {
642
676
  (
643
677
  parts: Partial<DateTime.DateTime.PartsWithWeekday>
644
- ): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
678
+ ): <A extends DateTime.DateTime>(self: A) => A
645
679
  <A extends DateTime.DateTime>(
646
680
  self: A,
647
681
  parts: Partial<DateTime.DateTime.PartsWithWeekday>
648
- ): DateTime.DateTime.PreserveZone<A>
682
+ ): A
649
683
  } = dual(
650
684
  2,
651
685
  (self: DateTime.DateTime, parts: Partial<DateTime.DateTime.PartsWithWeekday>): DateTime.DateTime =>
@@ -656,11 +690,11 @@ export const setParts: {
656
690
  export const setPartsUtc: {
657
691
  (
658
692
  parts: Partial<DateTime.DateTime.PartsWithWeekday>
659
- ): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
693
+ ): <A extends DateTime.DateTime>(self: A) => A
660
694
  <A extends DateTime.DateTime>(
661
695
  self: A,
662
696
  parts: Partial<DateTime.DateTime.PartsWithWeekday>
663
- ): DateTime.DateTime.PreserveZone<A>
697
+ ): A
664
698
  } = dual(
665
699
  2,
666
700
  (self: DateTime.DateTime, parts: Partial<DateTime.DateTime.PartsWithWeekday>): DateTime.DateTime =>
@@ -701,8 +735,8 @@ const calculateNamedOffset = (adjustedMillis: number, zone: DateTime.TimeZone.Na
701
735
 
702
736
  /** @internal */
703
737
  export const mutate: {
704
- (f: (date: Date) => void): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
705
- <A extends DateTime.DateTime>(self: A, f: (date: Date) => void): DateTime.DateTime.PreserveZone<A>
738
+ (f: (date: Date) => void): <A extends DateTime.DateTime>(self: A) => A
739
+ <A extends DateTime.DateTime>(self: A, f: (date: Date) => void): A
706
740
  } = dual(2, (self: DateTime.DateTime, f: (date: Date) => void): DateTime.DateTime => {
707
741
  if (self._tag === "Utc") {
708
742
  const date = toDateUtc(self)
@@ -717,8 +751,8 @@ export const mutate: {
717
751
 
718
752
  /** @internal */
719
753
  export const mutateUtc: {
720
- (f: (date: Date) => void): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
721
- <A extends DateTime.DateTime>(self: A, f: (date: Date) => void): DateTime.DateTime.PreserveZone<A>
754
+ (f: (date: Date) => void): <A extends DateTime.DateTime>(self: A) => A
755
+ <A extends DateTime.DateTime>(self: A, f: (date: Date) => void): A
722
756
  } = dual(2, (self: DateTime.DateTime, f: (date: Date) => void): DateTime.DateTime =>
723
757
  mapEpochMillis(self, (millis) => {
724
758
  const date = new Date(millis)
@@ -728,8 +762,8 @@ export const mutateUtc: {
728
762
 
729
763
  /** @internal */
730
764
  export const mapEpochMillis: {
731
- (f: (millis: number) => number): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
732
- <A extends DateTime.DateTime>(self: A, f: (millis: number) => number): DateTime.DateTime.PreserveZone<A>
765
+ (f: (millis: number) => number): <A extends DateTime.DateTime>(self: A) => A
766
+ <A extends DateTime.DateTime>(self: A, f: (millis: number) => number): A
733
767
  } = dual(2, (self: DateTime.DateTime, f: (millis: number) => number): DateTime.DateTime => {
734
768
  const millis = f(toEpochMillis(self))
735
769
  return self._tag === "Utc" ? makeUtc(millis) : makeZonedProto(millis, self.zone)
@@ -768,8 +802,8 @@ export const match: {
768
802
 
769
803
  /** @internal */
770
804
  export const addDuration: {
771
- (duration: Duration.DurationInput): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
772
- <A extends DateTime.DateTime>(self: A, duration: Duration.DurationInput): DateTime.DateTime.PreserveZone<A>
805
+ (duration: Duration.DurationInput): <A extends DateTime.DateTime>(self: A) => A
806
+ <A extends DateTime.DateTime>(self: A, duration: Duration.DurationInput): A
773
807
  } = dual(
774
808
  2,
775
809
  (self: DateTime.DateTime, duration: Duration.DurationInput): DateTime.DateTime =>
@@ -778,8 +812,8 @@ export const addDuration: {
778
812
 
779
813
  /** @internal */
780
814
  export const subtractDuration: {
781
- (duration: Duration.DurationInput): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
782
- <A extends DateTime.DateTime>(self: A, duration: Duration.DurationInput): DateTime.DateTime.PreserveZone<A>
815
+ (duration: Duration.DurationInput): <A extends DateTime.DateTime>(self: A) => A
816
+ <A extends DateTime.DateTime>(self: A, duration: Duration.DurationInput): A
783
817
  } = dual(
784
818
  2,
785
819
  (self: DateTime.DateTime, duration: Duration.DurationInput): DateTime.DateTime =>
@@ -794,11 +828,11 @@ const addMillis = (date: Date, amount: number): void => {
794
828
  export const add: {
795
829
  (
796
830
  parts: Partial<DateTime.DateTime.PartsForMath>
797
- ): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
831
+ ): <A extends DateTime.DateTime>(self: A) => A
798
832
  <A extends DateTime.DateTime>(
799
833
  self: A,
800
834
  parts: Partial<DateTime.DateTime.PartsForMath>
801
- ): DateTime.DateTime.PreserveZone<A>
835
+ ): A
802
836
  } = dual(
803
837
  2,
804
838
  (self: DateTime.DateTime, parts: Partial<DateTime.DateTime.PartsForMath>): DateTime.DateTime =>
@@ -847,11 +881,11 @@ export const add: {
847
881
  export const subtract: {
848
882
  (
849
883
  parts: Partial<DateTime.DateTime.PartsForMath>
850
- ): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
884
+ ): <A extends DateTime.DateTime>(self: A) => A
851
885
  <A extends DateTime.DateTime>(
852
886
  self: A,
853
887
  parts: Partial<DateTime.DateTime.PartsForMath>
854
- ): DateTime.DateTime.PreserveZone<A>
888
+ ): A
855
889
  } = dual(2, (self: DateTime.DateTime, parts: Partial<DateTime.DateTime.PartsForMath>): DateTime.DateTime => {
856
890
  const newParts = {} as Partial<Mutable<DateTime.DateTime.PartsForMath>>
857
891
  for (const key in parts) {
@@ -905,10 +939,10 @@ const startOfDate = (date: Date, part: DateTime.DateTime.UnitSingular, options?:
905
939
  export const startOf: {
906
940
  (part: DateTime.DateTime.UnitSingular, options?: {
907
941
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
908
- }): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
942
+ }): <A extends DateTime.DateTime>(self: A) => A
909
943
  <A extends DateTime.DateTime>(self: A, part: DateTime.DateTime.UnitSingular, options?: {
910
944
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
911
- }): DateTime.DateTime.PreserveZone<A>
945
+ }): A
912
946
  } = dual(isDateTimeArgs, (self: DateTime.DateTime, part: DateTime.DateTime.UnitSingular, options?: {
913
947
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
914
948
  }): DateTime.DateTime => mutate(self, (date) => startOfDate(date, part, options)))
@@ -958,10 +992,10 @@ const endOfDate = (date: Date, part: DateTime.DateTime.UnitSingular, options?: {
958
992
  export const endOf: {
959
993
  (part: DateTime.DateTime.UnitSingular, options?: {
960
994
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
961
- }): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
995
+ }): <A extends DateTime.DateTime>(self: A) => A
962
996
  <A extends DateTime.DateTime>(self: A, part: DateTime.DateTime.UnitSingular, options?: {
963
997
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
964
- }): DateTime.DateTime.PreserveZone<A>
998
+ }): A
965
999
  } = dual(isDateTimeArgs, (self: DateTime.DateTime, part: DateTime.DateTime.UnitSingular, options?: {
966
1000
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
967
1001
  }): DateTime.DateTime => mutate(self, (date) => endOfDate(date, part, options)))
@@ -970,10 +1004,10 @@ export const endOf: {
970
1004
  export const nearest: {
971
1005
  (part: DateTime.DateTime.UnitSingular, options?: {
972
1006
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
973
- }): <A extends DateTime.DateTime>(self: A) => DateTime.DateTime.PreserveZone<A>
1007
+ }): <A extends DateTime.DateTime>(self: A) => A
974
1008
  <A extends DateTime.DateTime>(self: A, part: DateTime.DateTime.UnitSingular, options?: {
975
1009
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
976
- }): DateTime.DateTime.PreserveZone<A>
1010
+ }): A
977
1011
  } = dual(isDateTimeArgs, (self: DateTime.DateTime, part: DateTime.DateTime.UnitSingular, options?: {
978
1012
  readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined
979
1013
  }): DateTime.DateTime =>
@@ -27,7 +27,6 @@ import type * as Types from "../../Types.js"
27
27
  import * as internalCause from "../cause.js"
28
28
  import * as effect from "../core-effect.js"
29
29
  import * as core from "../core.js"
30
- import * as executionStrategy from "../executionStrategy.js"
31
30
  import * as internalFiber from "../fiber.js"
32
31
  import * as fiberRuntime from "../fiberRuntime.js"
33
32
  import { globalScope } from "../fiberScope.js"
@@ -362,23 +361,26 @@ export const forkIn = dual<
362
361
  >(
363
362
  2,
364
363
  (self, scope) =>
365
- core.uninterruptibleMask((restore) =>
366
- core.flatMap(scope.fork(executionStrategy.sequential), (child) =>
367
- pipe(
368
- restore(self),
369
- core.onExit((exit) => child.close(exit)),
370
- fiberRuntime.forkDaemon,
371
- core.tap((fiber) =>
372
- child.addFinalizer(() =>
373
- core.fiberIdWith((fiberId) =>
374
- Equal.equals(fiberId, fiber.id()) ?
375
- core.void :
376
- core.asVoid(core.interruptFiber(fiber))
377
- )
378
- )
364
+ core.withFiberRuntime((parent, parentStatus) => {
365
+ const scopeImpl = scope as fiberRuntime.ScopeImpl
366
+ const fiber = fiberRuntime.unsafeFork(self, parent, parentStatus.runtimeFlags, globalScope)
367
+ if (scopeImpl.state._tag === "Open") {
368
+ const finalizer = () =>
369
+ core.fiberIdWith((fiberId) =>
370
+ Equal.equals(fiberId, fiber.id()) ?
371
+ core.void :
372
+ core.asVoid(core.interruptFiber(fiber))
379
373
  )
380
- ))
381
- )
374
+ scopeImpl.state.finalizers.add(finalizer)
375
+ fiber.addObserver(() => {
376
+ if (scopeImpl.state._tag === "Closed") return
377
+ scopeImpl.state.finalizers.delete(finalizer)
378
+ })
379
+ } else {
380
+ fiber.unsafeInterruptAsFork(parent.id())
381
+ }
382
+ return core.succeed(fiber)
383
+ })
382
384
  )
383
385
 
384
386
  /** @internal */
@@ -3207,7 +3207,8 @@ export const scopeTag = Context.GenericTag<Scope.Scope>("effect/Scope")
3207
3207
  /* @internal */
3208
3208
  export const scope: Effect.Effect<Scope.Scope, never, Scope.Scope> = scopeTag
3209
3209
 
3210
- interface ScopeImpl extends Scope.CloseableScope {
3210
+ /** @internal */
3211
+ export interface ScopeImpl extends Scope.CloseableScope {
3211
3212
  state: {
3212
3213
  readonly _tag: "Open"
3213
3214
  readonly finalizers: Set<Scope.Scope.Finalizer>
@@ -1,4 +1,4 @@
1
- let moduleVersion = "3.12.3"
1
+ let moduleVersion = "3.12.5"
2
2
 
3
3
  export const getCurrentVersion = () => moduleVersion
4
4