effect 3.10.19 → 3.11.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 (167) hide show
  1. package/dist/cjs/BigDecimal.js +125 -24
  2. package/dist/cjs/BigDecimal.js.map +1 -1
  3. package/dist/cjs/Channel.js +44 -4
  4. package/dist/cjs/Channel.js.map +1 -1
  5. package/dist/cjs/Config.js +8 -1
  6. package/dist/cjs/Config.js.map +1 -1
  7. package/dist/cjs/Context.js +26 -1
  8. package/dist/cjs/Context.js.map +1 -1
  9. package/dist/cjs/Cron.js +75 -67
  10. package/dist/cjs/Cron.js.map +1 -1
  11. package/dist/cjs/DateTime.js +114 -664
  12. package/dist/cjs/DateTime.js.map +1 -1
  13. package/dist/cjs/Effect.js +82 -4
  14. package/dist/cjs/Effect.js.map +1 -1
  15. package/dist/cjs/Inspectable.js +8 -4
  16. package/dist/cjs/Inspectable.js.map +1 -1
  17. package/dist/cjs/JSONSchema.js.map +1 -1
  18. package/dist/cjs/Micro.js +1099 -1072
  19. package/dist/cjs/Micro.js.map +1 -1
  20. package/dist/cjs/STM.js.map +1 -1
  21. package/dist/cjs/Schema.js +57 -8
  22. package/dist/cjs/Schema.js.map +1 -1
  23. package/dist/cjs/Sink.js +9 -1
  24. package/dist/cjs/Sink.js.map +1 -1
  25. package/dist/cjs/Stream.js +25 -7
  26. package/dist/cjs/Stream.js.map +1 -1
  27. package/dist/cjs/Utils.js +7 -1
  28. package/dist/cjs/Utils.js.map +1 -1
  29. package/dist/cjs/internal/channel/channelExecutor.js +5 -9
  30. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  31. package/dist/cjs/internal/channel.js +156 -130
  32. package/dist/cjs/internal/channel.js.map +1 -1
  33. package/dist/cjs/internal/config.js +13 -4
  34. package/dist/cjs/internal/config.js.map +1 -1
  35. package/dist/cjs/internal/context.js +46 -3
  36. package/dist/cjs/internal/context.js.map +1 -1
  37. package/dist/cjs/internal/dateTime.js +747 -0
  38. package/dist/cjs/internal/dateTime.js.map +1 -0
  39. package/dist/cjs/internal/fiberRuntime.js +34 -11
  40. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  41. package/dist/cjs/internal/groupBy.js +9 -3
  42. package/dist/cjs/internal/groupBy.js.map +1 -1
  43. package/dist/cjs/internal/layer.js +1 -1
  44. package/dist/cjs/internal/layer.js.map +1 -1
  45. package/dist/cjs/internal/mailbox.js +1 -1
  46. package/dist/cjs/internal/mailbox.js.map +1 -1
  47. package/dist/cjs/internal/sink.js +25 -21
  48. package/dist/cjs/internal/sink.js.map +1 -1
  49. package/dist/cjs/internal/stream.js +70 -71
  50. package/dist/cjs/internal/stream.js.map +1 -1
  51. package/dist/cjs/internal/version.js +1 -1
  52. package/dist/cjs/internal/version.js.map +1 -1
  53. package/dist/dts/BigDecimal.d.ts +56 -1
  54. package/dist/dts/BigDecimal.d.ts.map +1 -1
  55. package/dist/dts/Channel.d.ts +66 -5
  56. package/dist/dts/Channel.d.ts.map +1 -1
  57. package/dist/dts/Config.d.ts +23 -1
  58. package/dist/dts/Config.d.ts.map +1 -1
  59. package/dist/dts/Context.d.ts +111 -0
  60. package/dist/dts/Context.d.ts.map +1 -1
  61. package/dist/dts/Cron.d.ts +15 -6
  62. package/dist/dts/Cron.d.ts.map +1 -1
  63. package/dist/dts/DateTime.d.ts +40 -49
  64. package/dist/dts/DateTime.d.ts.map +1 -1
  65. package/dist/dts/Effect.d.ts +88 -1
  66. package/dist/dts/Effect.d.ts.map +1 -1
  67. package/dist/dts/Inspectable.d.ts.map +1 -1
  68. package/dist/dts/JSONSchema.d.ts +1 -0
  69. package/dist/dts/JSONSchema.d.ts.map +1 -1
  70. package/dist/dts/Micro.d.ts +875 -872
  71. package/dist/dts/Micro.d.ts.map +1 -1
  72. package/dist/dts/STM.d.ts +2 -0
  73. package/dist/dts/STM.d.ts.map +1 -1
  74. package/dist/dts/Schema.d.ts +32 -0
  75. package/dist/dts/Schema.d.ts.map +1 -1
  76. package/dist/dts/Sink.d.ts +8 -0
  77. package/dist/dts/Sink.d.ts.map +1 -1
  78. package/dist/dts/Stream.d.ts +50 -32
  79. package/dist/dts/Stream.d.ts.map +1 -1
  80. package/dist/dts/Utils.d.ts +4 -0
  81. package/dist/dts/Utils.d.ts.map +1 -1
  82. package/dist/dts/internal/context.d.ts +1 -1
  83. package/dist/dts/internal/context.d.ts.map +1 -1
  84. package/dist/dts/internal/dateTime.d.ts +2 -0
  85. package/dist/dts/internal/dateTime.d.ts.map +1 -0
  86. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  87. package/dist/dts/internal/stream.d.ts.map +1 -1
  88. package/dist/esm/BigDecimal.js +119 -20
  89. package/dist/esm/BigDecimal.js.map +1 -1
  90. package/dist/esm/Channel.js +42 -2
  91. package/dist/esm/Channel.js.map +1 -1
  92. package/dist/esm/Config.js +7 -0
  93. package/dist/esm/Config.js.map +1 -1
  94. package/dist/esm/Context.js +25 -0
  95. package/dist/esm/Context.js.map +1 -1
  96. package/dist/esm/Cron.js +75 -67
  97. package/dist/esm/Cron.js.map +1 -1
  98. package/dist/esm/DateTime.js +112 -627
  99. package/dist/esm/DateTime.js.map +1 -1
  100. package/dist/esm/Effect.js +77 -0
  101. package/dist/esm/Effect.js.map +1 -1
  102. package/dist/esm/Inspectable.js +8 -4
  103. package/dist/esm/Inspectable.js.map +1 -1
  104. package/dist/esm/JSONSchema.js.map +1 -1
  105. package/dist/esm/Micro.js +1077 -1047
  106. package/dist/esm/Micro.js.map +1 -1
  107. package/dist/esm/STM.js.map +1 -1
  108. package/dist/esm/Schema.js +54 -0
  109. package/dist/esm/Schema.js.map +1 -1
  110. package/dist/esm/Sink.js +8 -0
  111. package/dist/esm/Sink.js.map +1 -1
  112. package/dist/esm/Stream.js +23 -5
  113. package/dist/esm/Stream.js.map +1 -1
  114. package/dist/esm/Utils.js +5 -0
  115. package/dist/esm/Utils.js.map +1 -1
  116. package/dist/esm/internal/channel/channelExecutor.js +5 -7
  117. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  118. package/dist/esm/internal/channel.js +152 -129
  119. package/dist/esm/internal/channel.js.map +1 -1
  120. package/dist/esm/internal/config.js +11 -3
  121. package/dist/esm/internal/config.js.map +1 -1
  122. package/dist/esm/internal/context.js +42 -2
  123. package/dist/esm/internal/context.js.map +1 -1
  124. package/dist/esm/internal/dateTime.js +704 -0
  125. package/dist/esm/internal/dateTime.js.map +1 -0
  126. package/dist/esm/internal/fiberRuntime.js +31 -9
  127. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  128. package/dist/esm/internal/groupBy.js +9 -3
  129. package/dist/esm/internal/groupBy.js.map +1 -1
  130. package/dist/esm/internal/layer.js +1 -1
  131. package/dist/esm/internal/layer.js.map +1 -1
  132. package/dist/esm/internal/mailbox.js +1 -1
  133. package/dist/esm/internal/mailbox.js.map +1 -1
  134. package/dist/esm/internal/sink.js +23 -20
  135. package/dist/esm/internal/sink.js.map +1 -1
  136. package/dist/esm/internal/stream.js +66 -69
  137. package/dist/esm/internal/stream.js.map +1 -1
  138. package/dist/esm/internal/version.js +1 -1
  139. package/dist/esm/internal/version.js.map +1 -1
  140. package/package.json +1 -1
  141. package/src/BigDecimal.ts +131 -21
  142. package/src/Channel.ts +81 -5
  143. package/src/Config.ts +24 -1
  144. package/src/Context.ts +119 -0
  145. package/src/Cron.ts +85 -68
  146. package/src/DateTime.ts +155 -757
  147. package/src/Effect.ts +340 -1
  148. package/src/Inspectable.ts +11 -7
  149. package/src/JSONSchema.ts +1 -0
  150. package/src/Micro.ts +2005 -1757
  151. package/src/STM.ts +2 -0
  152. package/src/Schema.ts +60 -0
  153. package/src/Sink.ts +11 -0
  154. package/src/Stream.ts +55 -44
  155. package/src/Utils.ts +8 -0
  156. package/src/internal/channel/channelExecutor.ts +37 -33
  157. package/src/internal/channel.ts +504 -467
  158. package/src/internal/config.ts +18 -6
  159. package/src/internal/context.ts +56 -4
  160. package/src/internal/dateTime.ts +1126 -0
  161. package/src/internal/fiberRuntime.ts +35 -16
  162. package/src/internal/groupBy.ts +13 -22
  163. package/src/internal/layer.ts +5 -8
  164. package/src/internal/mailbox.ts +6 -4
  165. package/src/internal/sink.ts +55 -35
  166. package/src/internal/stream.ts +299 -299
  167. package/src/internal/version.ts +1 -1
@@ -0,0 +1,747 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.zonedOffsetIso = exports.zonedOffset = exports.zoneUnsafeMakeNamed = exports.zoneToString = exports.zoneMakeOffset = exports.zoneMakeNamedEffect = exports.zoneMakeNamed = exports.zoneMakeLocal = exports.zoneFromString = exports.withDateUtc = exports.withDate = exports.unsafeSetZoneNamed = exports.unsafeNow = exports.unsafeMakeZoned = exports.unsafeMake = exports.unsafeIsPast = exports.unsafeIsFuture = exports.unsafeFromDate = exports.toPartsUtc = exports.toParts = exports.toEpochMillis = exports.toDateUtc = exports.toDate = exports.subtractDuration = exports.subtract = exports.startOf = exports.setZoneOffset = exports.setZoneNamed = exports.setZone = exports.setPartsUtc = exports.setParts = exports.removeTime = exports.now = exports.nearest = exports.mutateUtc = exports.mutate = exports.min = exports.max = exports.match = exports.mapEpochMillis = exports.makeZonedProto = exports.makeZonedFromString = exports.makeZoned = exports.make = exports.lessThanOrEqualTo = exports.lessThan = exports.isZoned = exports.isUtc = exports.isTimeZoneOffset = exports.isTimeZoneNamed = exports.isTimeZone = exports.isPast = exports.isFuture = exports.isDateTime = exports.greaterThanOrEqualTo = exports.greaterThan = exports.getPartUtc = exports.getPart = exports.formatUtc = exports.formatLocal = exports.formatIsoZoned = exports.formatIsoOffset = exports.formatIsoDateUtc = exports.formatIsoDate = exports.formatIso = exports.formatIntl = exports.format = exports.endOf = exports.distanceDurationEither = exports.distanceDuration = exports.distance = exports.clamp = exports.between = exports.addDuration = exports.add = exports.TypeId = exports.TimeZoneTypeId = exports.Order = exports.Equivalence = void 0;
7
+ var _Cause = require("../Cause.js");
8
+ var Clock = _interopRequireWildcard(require("../Clock.js"));
9
+ var Duration = _interopRequireWildcard(require("../Duration.js"));
10
+ var Either = _interopRequireWildcard(require("../Either.js"));
11
+ var Equal = _interopRequireWildcard(require("../Equal.js"));
12
+ var equivalence = _interopRequireWildcard(require("../Equivalence.js"));
13
+ var _Function = require("../Function.js");
14
+ var _GlobalValue = require("../GlobalValue.js");
15
+ var Hash = _interopRequireWildcard(require("../Hash.js"));
16
+ var Inspectable = _interopRequireWildcard(require("../Inspectable.js"));
17
+ var Option = _interopRequireWildcard(require("../Option.js"));
18
+ var order = _interopRequireWildcard(require("../Order.js"));
19
+ var _Pipeable = require("../Pipeable.js");
20
+ var Predicate = _interopRequireWildcard(require("../Predicate.js"));
21
+ var internalEffect = _interopRequireWildcard(require("./core-effect.js"));
22
+ var core = _interopRequireWildcard(require("./core.js"));
23
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
24
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
25
+ /** @internal */
26
+ const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("effect/DateTime");
27
+ /** @internal */
28
+ const TimeZoneTypeId = exports.TimeZoneTypeId = /*#__PURE__*/Symbol.for("effect/DateTime/TimeZone");
29
+ const Proto = {
30
+ [TypeId]: TypeId,
31
+ pipe() {
32
+ return (0, _Pipeable.pipeArguments)(this, arguments);
33
+ },
34
+ [Inspectable.NodeInspectSymbol]() {
35
+ return this.toString();
36
+ },
37
+ toJSON() {
38
+ return toDateUtc(this).toJSON();
39
+ }
40
+ };
41
+ const ProtoUtc = {
42
+ ...Proto,
43
+ _tag: "Utc",
44
+ [Hash.symbol]() {
45
+ return Hash.cached(this, Hash.number(this.epochMillis));
46
+ },
47
+ [Equal.symbol](that) {
48
+ return isDateTime(that) && that._tag === "Utc" && this.epochMillis === that.epochMillis;
49
+ },
50
+ toString() {
51
+ return `DateTime.Utc(${toDateUtc(this).toJSON()})`;
52
+ }
53
+ };
54
+ const ProtoZoned = {
55
+ ...Proto,
56
+ _tag: "Zoned",
57
+ [Hash.symbol]() {
58
+ return (0, _Function.pipe)(Hash.number(this.epochMillis), Hash.combine(Hash.hash(this.zone)), Hash.cached(this));
59
+ },
60
+ [Equal.symbol](that) {
61
+ return isDateTime(that) && that._tag === "Zoned" && this.epochMillis === that.epochMillis && Equal.equals(this.zone, that.zone);
62
+ },
63
+ toString() {
64
+ return `DateTime.Zoned(${formatIsoZoned(this)})`;
65
+ }
66
+ };
67
+ const ProtoTimeZone = {
68
+ [TimeZoneTypeId]: TimeZoneTypeId,
69
+ [Inspectable.NodeInspectSymbol]() {
70
+ return this.toString();
71
+ }
72
+ };
73
+ const ProtoTimeZoneNamed = {
74
+ ...ProtoTimeZone,
75
+ _tag: "Named",
76
+ [Hash.symbol]() {
77
+ return Hash.cached(this, Hash.string(`Named:${this.id}`));
78
+ },
79
+ [Equal.symbol](that) {
80
+ return isTimeZone(that) && that._tag === "Named" && this.id === that.id;
81
+ },
82
+ toString() {
83
+ return `TimeZone.Named(${this.id})`;
84
+ },
85
+ toJSON() {
86
+ return {
87
+ _id: "TimeZone",
88
+ _tag: "Named",
89
+ id: this.id
90
+ };
91
+ }
92
+ };
93
+ const ProtoTimeZoneOffset = {
94
+ ...ProtoTimeZone,
95
+ _tag: "Offset",
96
+ [Hash.symbol]() {
97
+ return Hash.cached(this, Hash.string(`Offset:${this.offset}`));
98
+ },
99
+ [Equal.symbol](that) {
100
+ return isTimeZone(that) && that._tag === "Offset" && this.offset === that.offset;
101
+ },
102
+ toString() {
103
+ return `TimeZone.Offset(${offsetToString(this.offset)})`;
104
+ },
105
+ toJSON() {
106
+ return {
107
+ _id: "TimeZone",
108
+ _tag: "Offset",
109
+ offset: this.offset
110
+ };
111
+ }
112
+ };
113
+ /** @internal */
114
+ const makeZonedProto = (epochMillis, zone, partsUtc) => {
115
+ const self = Object.create(ProtoZoned);
116
+ self.epochMillis = epochMillis;
117
+ self.zone = zone;
118
+ self.partsUtc = partsUtc;
119
+ return self;
120
+ };
121
+ // =============================================================================
122
+ // guards
123
+ // =============================================================================
124
+ /** @internal */
125
+ exports.makeZonedProto = makeZonedProto;
126
+ const isDateTime = u => Predicate.hasProperty(u, TypeId);
127
+ exports.isDateTime = isDateTime;
128
+ const isDateTimeArgs = args => isDateTime(args[0]);
129
+ /** @internal */
130
+ const isTimeZone = u => Predicate.hasProperty(u, TimeZoneTypeId);
131
+ /** @internal */
132
+ exports.isTimeZone = isTimeZone;
133
+ const isTimeZoneOffset = u => isTimeZone(u) && u._tag === "Offset";
134
+ /** @internal */
135
+ exports.isTimeZoneOffset = isTimeZoneOffset;
136
+ const isTimeZoneNamed = u => isTimeZone(u) && u._tag === "Named";
137
+ /** @internal */
138
+ exports.isTimeZoneNamed = isTimeZoneNamed;
139
+ const isUtc = self => self._tag === "Utc";
140
+ /** @internal */
141
+ exports.isUtc = isUtc;
142
+ const isZoned = self => self._tag === "Zoned";
143
+ // =============================================================================
144
+ // instances
145
+ // =============================================================================
146
+ /** @internal */
147
+ exports.isZoned = isZoned;
148
+ const Equivalence = exports.Equivalence = /*#__PURE__*/equivalence.make((a, b) => a.epochMillis === b.epochMillis);
149
+ /** @internal */
150
+ const Order = exports.Order = /*#__PURE__*/order.make((self, that) => self.epochMillis < that.epochMillis ? -1 : self.epochMillis > that.epochMillis ? 1 : 0);
151
+ /** @internal */
152
+ const clamp = exports.clamp = /*#__PURE__*/order.clamp(Order);
153
+ // =============================================================================
154
+ // constructors
155
+ // =============================================================================
156
+ const makeUtc = epochMillis => {
157
+ const self = Object.create(ProtoUtc);
158
+ self.epochMillis = epochMillis;
159
+ return self;
160
+ };
161
+ /** @internal */
162
+ const unsafeFromDate = date => {
163
+ const epochMillis = date.getTime();
164
+ if (Number.isNaN(epochMillis)) {
165
+ throw new _Cause.IllegalArgumentException("Invalid date");
166
+ }
167
+ return makeUtc(epochMillis);
168
+ };
169
+ /** @internal */
170
+ exports.unsafeFromDate = unsafeFromDate;
171
+ const unsafeMake = input => {
172
+ if (isDateTime(input)) {
173
+ return input;
174
+ } else if (input instanceof Date) {
175
+ return unsafeFromDate(input);
176
+ } else if (typeof input === "object") {
177
+ const date = new Date(0);
178
+ setPartsDate(date, input);
179
+ return unsafeFromDate(date);
180
+ }
181
+ return unsafeFromDate(new Date(input));
182
+ };
183
+ /** @internal */
184
+ exports.unsafeMake = unsafeMake;
185
+ const unsafeMakeZoned = (input, options) => {
186
+ if (options?.timeZone === undefined && isDateTime(input) && isZoned(input)) {
187
+ return input;
188
+ }
189
+ const self = unsafeMake(input);
190
+ let zone;
191
+ if (options?.timeZone === undefined) {
192
+ const offset = new Date(self.epochMillis).getTimezoneOffset() * -60 * 1000;
193
+ zone = zoneMakeOffset(offset);
194
+ } else if (isTimeZone(options?.timeZone)) {
195
+ zone = options.timeZone;
196
+ } else if (typeof options?.timeZone === "number") {
197
+ zone = zoneMakeOffset(options.timeZone);
198
+ } else {
199
+ const parsedZone = zoneFromString(options.timeZone);
200
+ if (Option.isNone(parsedZone)) {
201
+ throw new _Cause.IllegalArgumentException(`Invalid time zone: ${options.timeZone}`);
202
+ }
203
+ zone = parsedZone.value;
204
+ }
205
+ if (options?.adjustForTimeZone !== true) {
206
+ return makeZonedProto(self.epochMillis, zone, self.partsUtc);
207
+ }
208
+ return makeZonedFromAdjusted(self.epochMillis, zone);
209
+ };
210
+ /** @internal */
211
+ exports.unsafeMakeZoned = unsafeMakeZoned;
212
+ const makeZoned = exports.makeZoned = /*#__PURE__*/Option.liftThrowable(unsafeMakeZoned);
213
+ /** @internal */
214
+ const make = exports.make = /*#__PURE__*/Option.liftThrowable(unsafeMake);
215
+ const zonedStringRegex = /^(.{17,35})\[(.+)\]$/;
216
+ /** @internal */
217
+ const makeZonedFromString = input => {
218
+ const match = zonedStringRegex.exec(input);
219
+ if (match === null) {
220
+ const offset = parseOffset(input);
221
+ return offset !== null ? makeZoned(input, {
222
+ timeZone: offset
223
+ }) : Option.none();
224
+ }
225
+ const [, isoString, timeZone] = match;
226
+ return makeZoned(isoString, {
227
+ timeZone
228
+ });
229
+ };
230
+ /** @internal */
231
+ exports.makeZonedFromString = makeZonedFromString;
232
+ const now = exports.now = /*#__PURE__*/core.map(Clock.currentTimeMillis, makeUtc);
233
+ /** @internal */
234
+ const unsafeNow = () => makeUtc(Date.now());
235
+ // =============================================================================
236
+ // time zones
237
+ // =============================================================================
238
+ /** @internal */
239
+ exports.unsafeNow = unsafeNow;
240
+ const setZone = exports.setZone = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, zone, options) => options?.adjustForTimeZone === true ? makeZonedFromAdjusted(self.epochMillis, zone) : makeZonedProto(self.epochMillis, zone, self.partsUtc));
241
+ /** @internal */
242
+ const setZoneOffset = exports.setZoneOffset = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, offset, options) => setZone(self, zoneMakeOffset(offset), options));
243
+ const validZoneCache = /*#__PURE__*/(0, _GlobalValue.globalValue)("effect/DateTime/validZoneCache", () => new Map());
244
+ const formatOptions = {
245
+ day: "numeric",
246
+ month: "numeric",
247
+ year: "numeric",
248
+ hour: "numeric",
249
+ minute: "numeric",
250
+ second: "numeric",
251
+ timeZoneName: "longOffset",
252
+ fractionalSecondDigits: 3,
253
+ hourCycle: "h23"
254
+ };
255
+ const zoneMakeIntl = format => {
256
+ const zoneId = format.resolvedOptions().timeZone;
257
+ if (validZoneCache.has(zoneId)) {
258
+ return validZoneCache.get(zoneId);
259
+ }
260
+ const zone = Object.create(ProtoTimeZoneNamed);
261
+ zone.id = zoneId;
262
+ zone.format = format;
263
+ validZoneCache.set(zoneId, zone);
264
+ return zone;
265
+ };
266
+ /** @internal */
267
+ const zoneUnsafeMakeNamed = zoneId => {
268
+ if (validZoneCache.has(zoneId)) {
269
+ return validZoneCache.get(zoneId);
270
+ }
271
+ try {
272
+ return zoneMakeIntl(new Intl.DateTimeFormat("en-US", {
273
+ ...formatOptions,
274
+ timeZone: zoneId
275
+ }));
276
+ } catch (_) {
277
+ throw new _Cause.IllegalArgumentException(`Invalid time zone: ${zoneId}`);
278
+ }
279
+ };
280
+ /** @internal */
281
+ exports.zoneUnsafeMakeNamed = zoneUnsafeMakeNamed;
282
+ const zoneMakeOffset = offset => {
283
+ const zone = Object.create(ProtoTimeZoneOffset);
284
+ zone.offset = offset;
285
+ return zone;
286
+ };
287
+ /** @internal */
288
+ exports.zoneMakeOffset = zoneMakeOffset;
289
+ const zoneMakeNamed = exports.zoneMakeNamed = /*#__PURE__*/Option.liftThrowable(zoneUnsafeMakeNamed);
290
+ /** @internal */
291
+ const zoneMakeNamedEffect = zoneId => internalEffect.try_({
292
+ try: () => zoneUnsafeMakeNamed(zoneId),
293
+ catch: e => e
294
+ });
295
+ /** @internal */
296
+ exports.zoneMakeNamedEffect = zoneMakeNamedEffect;
297
+ const zoneMakeLocal = () => zoneMakeIntl(new Intl.DateTimeFormat("en-US", formatOptions));
298
+ exports.zoneMakeLocal = zoneMakeLocal;
299
+ const offsetZoneRegex = /^(?:GMT|[+-])/;
300
+ /** @internal */
301
+ const zoneFromString = zone => {
302
+ if (offsetZoneRegex.test(zone)) {
303
+ const offset = parseOffset(zone);
304
+ return offset === null ? Option.none() : Option.some(zoneMakeOffset(offset));
305
+ }
306
+ return zoneMakeNamed(zone);
307
+ };
308
+ /** @internal */
309
+ exports.zoneFromString = zoneFromString;
310
+ const zoneToString = self => {
311
+ if (self._tag === "Offset") {
312
+ return offsetToString(self.offset);
313
+ }
314
+ return self.id;
315
+ };
316
+ /** @internal */
317
+ exports.zoneToString = zoneToString;
318
+ const setZoneNamed = exports.setZoneNamed = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, zoneId, options) => Option.map(zoneMakeNamed(zoneId), zone => setZone(self, zone, options)));
319
+ /** @internal */
320
+ const unsafeSetZoneNamed = exports.unsafeSetZoneNamed = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, zoneId, options) => setZone(self, zoneUnsafeMakeNamed(zoneId), options));
321
+ // =============================================================================
322
+ // comparisons
323
+ // =============================================================================
324
+ /** @internal */
325
+ const distance = exports.distance = /*#__PURE__*/(0, _Function.dual)(2, (self, other) => toEpochMillis(other) - toEpochMillis(self));
326
+ /** @internal */
327
+ const distanceDurationEither = exports.distanceDurationEither = /*#__PURE__*/(0, _Function.dual)(2, (self, other) => {
328
+ const diffMillis = distance(self, other);
329
+ return diffMillis > 0 ? Either.right(Duration.millis(diffMillis)) : Either.left(Duration.millis(-diffMillis));
330
+ });
331
+ /** @internal */
332
+ const distanceDuration = exports.distanceDuration = /*#__PURE__*/(0, _Function.dual)(2, (self, other) => Duration.millis(Math.abs(distance(self, other))));
333
+ /** @internal */
334
+ const min = exports.min = /*#__PURE__*/order.min(Order);
335
+ /** @internal */
336
+ const max = exports.max = /*#__PURE__*/order.max(Order);
337
+ /** @internal */
338
+ const greaterThan = exports.greaterThan = /*#__PURE__*/order.greaterThan(Order);
339
+ /** @internal */
340
+ const greaterThanOrEqualTo = exports.greaterThanOrEqualTo = /*#__PURE__*/order.greaterThanOrEqualTo(Order);
341
+ /** @internal */
342
+ const lessThan = exports.lessThan = /*#__PURE__*/order.lessThan(Order);
343
+ /** @internal */
344
+ const lessThanOrEqualTo = exports.lessThanOrEqualTo = /*#__PURE__*/order.lessThanOrEqualTo(Order);
345
+ /** @internal */
346
+ const between = exports.between = /*#__PURE__*/order.between(Order);
347
+ /** @internal */
348
+ const isFuture = self => core.map(now, lessThan(self));
349
+ /** @internal */
350
+ exports.isFuture = isFuture;
351
+ const unsafeIsFuture = self => lessThan(unsafeNow(), self);
352
+ /** @internal */
353
+ exports.unsafeIsFuture = unsafeIsFuture;
354
+ const isPast = self => core.map(now, greaterThan(self));
355
+ /** @internal */
356
+ exports.isPast = isPast;
357
+ const unsafeIsPast = self => greaterThan(unsafeNow(), self);
358
+ // =============================================================================
359
+ // conversions
360
+ // =============================================================================
361
+ /** @internal */
362
+ exports.unsafeIsPast = unsafeIsPast;
363
+ const toDateUtc = self => new Date(self.epochMillis);
364
+ /** @internal */
365
+ exports.toDateUtc = toDateUtc;
366
+ const toDate = self => {
367
+ if (self._tag === "Utc") {
368
+ return new Date(self.epochMillis);
369
+ } else if (self.zone._tag === "Offset") {
370
+ return new Date(self.epochMillis + self.zone.offset);
371
+ } else if (self.adjustedEpochMillis !== undefined) {
372
+ return new Date(self.adjustedEpochMillis);
373
+ }
374
+ const parts = self.zone.format.formatToParts(self.epochMillis).filter(_ => _.type !== "literal");
375
+ const date = new Date(0);
376
+ date.setUTCFullYear(Number(parts[2].value), Number(parts[0].value) - 1, Number(parts[1].value));
377
+ date.setUTCHours(Number(parts[3].value), Number(parts[4].value), Number(parts[5].value), Number(parts[6].value));
378
+ self.adjustedEpochMillis = date.getTime();
379
+ return date;
380
+ };
381
+ /** @internal */
382
+ exports.toDate = toDate;
383
+ const zonedOffset = self => {
384
+ const date = toDate(self);
385
+ return date.getTime() - toEpochMillis(self);
386
+ };
387
+ exports.zonedOffset = zonedOffset;
388
+ const offsetToString = offset => {
389
+ const abs = Math.abs(offset);
390
+ const hours = Math.floor(abs / (60 * 60 * 1000));
391
+ const minutes = Math.round(abs % (60 * 60 * 1000) / (60 * 1000));
392
+ return `${offset < 0 ? "-" : "+"}${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`;
393
+ };
394
+ /** @internal */
395
+ const zonedOffsetIso = self => offsetToString(zonedOffset(self));
396
+ /** @internal */
397
+ exports.zonedOffsetIso = zonedOffsetIso;
398
+ const toEpochMillis = self => self.epochMillis;
399
+ /** @internal */
400
+ exports.toEpochMillis = toEpochMillis;
401
+ const removeTime = self => withDate(self, date => {
402
+ date.setUTCHours(0, 0, 0, 0);
403
+ return makeUtc(date.getTime());
404
+ });
405
+ // =============================================================================
406
+ // parts
407
+ // =============================================================================
408
+ exports.removeTime = removeTime;
409
+ const dateToParts = date => ({
410
+ millis: date.getUTCMilliseconds(),
411
+ seconds: date.getUTCSeconds(),
412
+ minutes: date.getUTCMinutes(),
413
+ hours: date.getUTCHours(),
414
+ day: date.getUTCDate(),
415
+ weekDay: date.getUTCDay(),
416
+ month: date.getUTCMonth() + 1,
417
+ year: date.getUTCFullYear()
418
+ });
419
+ /** @internal */
420
+ const toParts = self => {
421
+ if (self._tag === "Utc") {
422
+ return toPartsUtc(self);
423
+ } else if (self.partsAdjusted !== undefined) {
424
+ return self.partsAdjusted;
425
+ }
426
+ self.partsAdjusted = withDate(self, dateToParts);
427
+ return self.partsAdjusted;
428
+ };
429
+ /** @internal */
430
+ exports.toParts = toParts;
431
+ const toPartsUtc = self => {
432
+ if (self.partsUtc !== undefined) {
433
+ return self.partsUtc;
434
+ }
435
+ self.partsUtc = withDateUtc(self, dateToParts);
436
+ return self.partsUtc;
437
+ };
438
+ /** @internal */
439
+ exports.toPartsUtc = toPartsUtc;
440
+ const getPartUtc = exports.getPartUtc = /*#__PURE__*/(0, _Function.dual)(2, (self, part) => toPartsUtc(self)[part]);
441
+ /** @internal */
442
+ const getPart = exports.getPart = /*#__PURE__*/(0, _Function.dual)(2, (self, part) => toParts(self)[part]);
443
+ const setPartsDate = (date, parts) => {
444
+ if (parts.year !== undefined) {
445
+ date.setUTCFullYear(parts.year);
446
+ }
447
+ if (parts.month !== undefined) {
448
+ date.setUTCMonth(parts.month - 1);
449
+ }
450
+ if (parts.day !== undefined) {
451
+ date.setUTCDate(parts.day);
452
+ }
453
+ if (parts.weekDay !== undefined) {
454
+ const diff = parts.weekDay - date.getUTCDay();
455
+ date.setUTCDate(date.getUTCDate() + diff);
456
+ }
457
+ if (parts.hours !== undefined) {
458
+ date.setUTCHours(parts.hours);
459
+ }
460
+ if (parts.minutes !== undefined) {
461
+ date.setUTCMinutes(parts.minutes);
462
+ }
463
+ if (parts.seconds !== undefined) {
464
+ date.setUTCSeconds(parts.seconds);
465
+ }
466
+ if (parts.millis !== undefined) {
467
+ date.setUTCMilliseconds(parts.millis);
468
+ }
469
+ };
470
+ /** @internal */
471
+ const setParts = exports.setParts = /*#__PURE__*/(0, _Function.dual)(2, (self, parts) => mutate(self, date => setPartsDate(date, parts)));
472
+ /** @internal */
473
+ const setPartsUtc = exports.setPartsUtc = /*#__PURE__*/(0, _Function.dual)(2, (self, parts) => mutateUtc(self, date => setPartsDate(date, parts)));
474
+ // =============================================================================
475
+ // mapping
476
+ // =============================================================================
477
+ const makeZonedFromAdjusted = (adjustedMillis, zone) => {
478
+ const offset = zone._tag === "Offset" ? zone.offset : calculateNamedOffset(adjustedMillis, zone);
479
+ return makeZonedProto(adjustedMillis - offset, zone);
480
+ };
481
+ const offsetRegex = /([+-])(\d{2}):(\d{2})$/;
482
+ const parseOffset = offset => {
483
+ const match = offsetRegex.exec(offset);
484
+ if (match === null) {
485
+ return null;
486
+ }
487
+ const [, sign, hours, minutes] = match;
488
+ return (sign === "+" ? 1 : -1) * (Number(hours) * 60 + Number(minutes)) * 60 * 1000;
489
+ };
490
+ const calculateNamedOffset = (adjustedMillis, zone) => {
491
+ const offset = zone.format.formatToParts(adjustedMillis).find(_ => _.type === "timeZoneName")?.value ?? "";
492
+ if (offset === "GMT") {
493
+ return 0;
494
+ }
495
+ const result = parseOffset(offset);
496
+ if (result === null) {
497
+ // fallback to using the adjusted date
498
+ return zonedOffset(makeZonedProto(adjustedMillis, zone));
499
+ }
500
+ return result;
501
+ };
502
+ /** @internal */
503
+ const mutate = exports.mutate = /*#__PURE__*/(0, _Function.dual)(2, (self, f) => {
504
+ if (self._tag === "Utc") {
505
+ const date = toDateUtc(self);
506
+ f(date);
507
+ return makeUtc(date.getTime());
508
+ }
509
+ const adjustedDate = toDate(self);
510
+ const newAdjustedDate = new Date(adjustedDate.getTime());
511
+ f(newAdjustedDate);
512
+ return makeZonedFromAdjusted(newAdjustedDate.getTime(), self.zone);
513
+ });
514
+ /** @internal */
515
+ const mutateUtc = exports.mutateUtc = /*#__PURE__*/(0, _Function.dual)(2, (self, f) => mapEpochMillis(self, millis => {
516
+ const date = new Date(millis);
517
+ f(date);
518
+ return date.getTime();
519
+ }));
520
+ /** @internal */
521
+ const mapEpochMillis = exports.mapEpochMillis = /*#__PURE__*/(0, _Function.dual)(2, (self, f) => {
522
+ const millis = f(toEpochMillis(self));
523
+ return self._tag === "Utc" ? makeUtc(millis) : makeZonedProto(millis, self.zone);
524
+ });
525
+ /** @internal */
526
+ const withDate = exports.withDate = /*#__PURE__*/(0, _Function.dual)(2, (self, f) => f(toDate(self)));
527
+ /** @internal */
528
+ const withDateUtc = exports.withDateUtc = /*#__PURE__*/(0, _Function.dual)(2, (self, f) => f(toDateUtc(self)));
529
+ /** @internal */
530
+ const match = exports.match = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => self._tag === "Utc" ? options.onUtc(self) : options.onZoned(self));
531
+ // =============================================================================
532
+ // math
533
+ // =============================================================================
534
+ /** @internal */
535
+ const addDuration = exports.addDuration = /*#__PURE__*/(0, _Function.dual)(2, (self, duration) => mapEpochMillis(self, millis => millis + Duration.toMillis(duration)));
536
+ /** @internal */
537
+ const subtractDuration = exports.subtractDuration = /*#__PURE__*/(0, _Function.dual)(2, (self, duration) => mapEpochMillis(self, millis => millis - Duration.toMillis(duration)));
538
+ const addMillis = (date, amount) => {
539
+ date.setTime(date.getTime() + amount);
540
+ };
541
+ /** @internal */
542
+ const add = exports.add = /*#__PURE__*/(0, _Function.dual)(2, (self, parts) => mutate(self, date => {
543
+ if (parts.millis) {
544
+ addMillis(date, parts.millis);
545
+ }
546
+ if (parts.seconds) {
547
+ addMillis(date, parts.seconds * 1000);
548
+ }
549
+ if (parts.minutes) {
550
+ addMillis(date, parts.minutes * 60 * 1000);
551
+ }
552
+ if (parts.hours) {
553
+ addMillis(date, parts.hours * 60 * 60 * 1000);
554
+ }
555
+ if (parts.days) {
556
+ date.setUTCDate(date.getUTCDate() + parts.days);
557
+ }
558
+ if (parts.weeks) {
559
+ date.setUTCDate(date.getUTCDate() + parts.weeks * 7);
560
+ }
561
+ if (parts.months) {
562
+ const day = date.getUTCDate();
563
+ date.setUTCMonth(date.getUTCMonth() + parts.months + 1, 0);
564
+ if (day < date.getUTCDate()) {
565
+ date.setUTCDate(day);
566
+ }
567
+ }
568
+ if (parts.years) {
569
+ const day = date.getUTCDate();
570
+ const month = date.getUTCMonth();
571
+ date.setUTCFullYear(date.getUTCFullYear() + parts.years, month + 1, 0);
572
+ if (day < date.getUTCDate()) {
573
+ date.setUTCDate(day);
574
+ }
575
+ }
576
+ }));
577
+ /** @internal */
578
+ const subtract = exports.subtract = /*#__PURE__*/(0, _Function.dual)(2, (self, parts) => {
579
+ const newParts = {};
580
+ for (const key in parts) {
581
+ newParts[key] = -1 * parts[key];
582
+ }
583
+ return add(self, newParts);
584
+ });
585
+ const startOfDate = (date, part, options) => {
586
+ switch (part) {
587
+ case "second":
588
+ {
589
+ date.setUTCMilliseconds(0);
590
+ break;
591
+ }
592
+ case "minute":
593
+ {
594
+ date.setUTCSeconds(0, 0);
595
+ break;
596
+ }
597
+ case "hour":
598
+ {
599
+ date.setUTCMinutes(0, 0, 0);
600
+ break;
601
+ }
602
+ case "day":
603
+ {
604
+ date.setUTCHours(0, 0, 0, 0);
605
+ break;
606
+ }
607
+ case "week":
608
+ {
609
+ const weekStartsOn = options?.weekStartsOn ?? 0;
610
+ const day = date.getUTCDay();
611
+ const diff = (day - weekStartsOn + 7) % 7;
612
+ date.setUTCDate(date.getUTCDate() - diff);
613
+ date.setUTCHours(0, 0, 0, 0);
614
+ break;
615
+ }
616
+ case "month":
617
+ {
618
+ date.setUTCDate(1);
619
+ date.setUTCHours(0, 0, 0, 0);
620
+ break;
621
+ }
622
+ case "year":
623
+ {
624
+ date.setUTCMonth(0, 1);
625
+ date.setUTCHours(0, 0, 0, 0);
626
+ break;
627
+ }
628
+ }
629
+ };
630
+ /** @internal */
631
+ const startOf = exports.startOf = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, part, options) => mutate(self, date => startOfDate(date, part, options)));
632
+ const endOfDate = (date, part, options) => {
633
+ switch (part) {
634
+ case "second":
635
+ {
636
+ date.setUTCMilliseconds(999);
637
+ break;
638
+ }
639
+ case "minute":
640
+ {
641
+ date.setUTCSeconds(59, 999);
642
+ break;
643
+ }
644
+ case "hour":
645
+ {
646
+ date.setUTCMinutes(59, 59, 999);
647
+ break;
648
+ }
649
+ case "day":
650
+ {
651
+ date.setUTCHours(23, 59, 59, 999);
652
+ break;
653
+ }
654
+ case "week":
655
+ {
656
+ const weekStartsOn = options?.weekStartsOn ?? 0;
657
+ const day = date.getUTCDay();
658
+ const diff = (day - weekStartsOn + 7) % 7;
659
+ date.setUTCDate(date.getUTCDate() - diff + 6);
660
+ date.setUTCHours(23, 59, 59, 999);
661
+ break;
662
+ }
663
+ case "month":
664
+ {
665
+ date.setUTCMonth(date.getUTCMonth() + 1, 0);
666
+ date.setUTCHours(23, 59, 59, 999);
667
+ break;
668
+ }
669
+ case "year":
670
+ {
671
+ date.setUTCMonth(11, 31);
672
+ date.setUTCHours(23, 59, 59, 999);
673
+ break;
674
+ }
675
+ }
676
+ };
677
+ /** @internal */
678
+ const endOf = exports.endOf = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, part, options) => mutate(self, date => endOfDate(date, part, options)));
679
+ /** @internal */
680
+ const nearest = exports.nearest = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, part, options) => mutate(self, date => {
681
+ if (part === "milli") return;
682
+ const millis = date.getTime();
683
+ const start = new Date(millis);
684
+ startOfDate(start, part, options);
685
+ const startMillis = start.getTime();
686
+ const end = new Date(millis);
687
+ endOfDate(end, part, options);
688
+ const endMillis = end.getTime() + 1;
689
+ const diffStart = millis - startMillis;
690
+ const diffEnd = endMillis - millis;
691
+ if (diffStart < diffEnd) {
692
+ date.setTime(startMillis);
693
+ } else {
694
+ date.setTime(endMillis);
695
+ }
696
+ }));
697
+ // =============================================================================
698
+ // formatting
699
+ // =============================================================================
700
+ const intlTimeZone = self => {
701
+ if (self._tag === "Named") {
702
+ return self.id;
703
+ }
704
+ return offsetToString(self.offset);
705
+ };
706
+ /** @internal */
707
+ const format = exports.format = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, options) => {
708
+ try {
709
+ return new Intl.DateTimeFormat(options?.locale, {
710
+ timeZone: self._tag === "Utc" ? "UTC" : intlTimeZone(self.zone),
711
+ ...options
712
+ }).format(self.epochMillis);
713
+ } catch (_) {
714
+ return new Intl.DateTimeFormat(options?.locale, {
715
+ timeZone: "UTC",
716
+ ...options
717
+ }).format(toDate(self));
718
+ }
719
+ });
720
+ /** @internal */
721
+ const formatLocal = exports.formatLocal = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, options) => new Intl.DateTimeFormat(options?.locale, options).format(self.epochMillis));
722
+ /** @internal */
723
+ const formatUtc = exports.formatUtc = /*#__PURE__*/(0, _Function.dual)(isDateTimeArgs, (self, options) => new Intl.DateTimeFormat(options?.locale, {
724
+ ...options,
725
+ timeZone: "UTC"
726
+ }).format(self.epochMillis));
727
+ /** @internal */
728
+ const formatIntl = exports.formatIntl = /*#__PURE__*/(0, _Function.dual)(2, (self, format) => format.format(self.epochMillis));
729
+ /** @internal */
730
+ const formatIso = self => toDateUtc(self).toISOString();
731
+ /** @internal */
732
+ exports.formatIso = formatIso;
733
+ const formatIsoDate = self => toDate(self).toISOString().slice(0, 10);
734
+ /** @internal */
735
+ exports.formatIsoDate = formatIsoDate;
736
+ const formatIsoDateUtc = self => toDateUtc(self).toISOString().slice(0, 10);
737
+ /** @internal */
738
+ exports.formatIsoDateUtc = formatIsoDateUtc;
739
+ const formatIsoOffset = self => {
740
+ const date = toDate(self);
741
+ return self._tag === "Utc" ? date.toISOString() : `${date.toISOString().slice(0, -1)}${zonedOffsetIso(self)}`;
742
+ };
743
+ /** @internal */
744
+ exports.formatIsoOffset = formatIsoOffset;
745
+ const formatIsoZoned = self => self.zone._tag === "Offset" ? formatIsoOffset(self) : `${formatIsoOffset(self)}[${self.zone.id}]`;
746
+ exports.formatIsoZoned = formatIsoZoned;
747
+ //# sourceMappingURL=dateTime.js.map