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