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,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
|