chronokinesis 3.1.1 → 4.0.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/chronokinesis.js +40 -87
- package/dist/index.es.js +38 -85
- package/index.js +10 -7
- package/package.json +9 -8
package/dist/chronokinesis.js
CHANGED
|
@@ -3,43 +3,27 @@ var chronokinesis = (function (exports) {
|
|
|
3
3
|
|
|
4
4
|
function ownKeys(object, enumerableOnly) {
|
|
5
5
|
var keys = Object.keys(object);
|
|
6
|
-
|
|
7
6
|
if (Object.getOwnPropertySymbols) {
|
|
8
7
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
keys.push.apply(keys, symbols);
|
|
8
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
9
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
10
|
+
})), keys.push.apply(keys, symbols);
|
|
17
11
|
}
|
|
18
|
-
|
|
19
12
|
return keys;
|
|
20
13
|
}
|
|
21
|
-
|
|
22
14
|
function _objectSpread2(target) {
|
|
23
15
|
for (var i = 1; i < arguments.length; i++) {
|
|
24
|
-
var source = arguments[i]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
} else if (Object.getOwnPropertyDescriptors) {
|
|
31
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
32
|
-
} else {
|
|
33
|
-
ownKeys(Object(source)).forEach(function (key) {
|
|
34
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
35
|
-
});
|
|
36
|
-
}
|
|
16
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
17
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
18
|
+
_defineProperty(target, key, source[key]);
|
|
19
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
20
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
21
|
+
});
|
|
37
22
|
}
|
|
38
|
-
|
|
39
23
|
return target;
|
|
40
24
|
}
|
|
41
|
-
|
|
42
25
|
function _defineProperty(obj, key, value) {
|
|
26
|
+
key = _toPropertyKey(key);
|
|
43
27
|
if (key in obj) {
|
|
44
28
|
Object.defineProperty(obj, key, {
|
|
45
29
|
value: value,
|
|
@@ -50,10 +34,8 @@ var chronokinesis = (function (exports) {
|
|
|
50
34
|
} else {
|
|
51
35
|
obj[key] = value;
|
|
52
36
|
}
|
|
53
|
-
|
|
54
37
|
return obj;
|
|
55
38
|
}
|
|
56
|
-
|
|
57
39
|
function _unsupportedIterableToArray(o, minLen) {
|
|
58
40
|
if (!o) return;
|
|
59
41
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
@@ -62,25 +44,18 @@ var chronokinesis = (function (exports) {
|
|
|
62
44
|
if (n === "Map" || n === "Set") return Array.from(o);
|
|
63
45
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
64
46
|
}
|
|
65
|
-
|
|
66
47
|
function _arrayLikeToArray(arr, len) {
|
|
67
48
|
if (len == null || len > arr.length) len = arr.length;
|
|
68
|
-
|
|
69
49
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
70
|
-
|
|
71
50
|
return arr2;
|
|
72
51
|
}
|
|
73
|
-
|
|
74
52
|
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
75
53
|
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
76
|
-
|
|
77
54
|
if (!it) {
|
|
78
55
|
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
79
56
|
if (it) o = it;
|
|
80
57
|
var i = 0;
|
|
81
|
-
|
|
82
58
|
var F = function () {};
|
|
83
|
-
|
|
84
59
|
return {
|
|
85
60
|
s: F,
|
|
86
61
|
n: function () {
|
|
@@ -98,13 +73,11 @@ var chronokinesis = (function (exports) {
|
|
|
98
73
|
f: F
|
|
99
74
|
};
|
|
100
75
|
}
|
|
101
|
-
|
|
102
76
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
103
77
|
}
|
|
104
|
-
|
|
105
78
|
var normalCompletion = true,
|
|
106
|
-
|
|
107
|
-
|
|
79
|
+
didErr = false,
|
|
80
|
+
err;
|
|
108
81
|
return {
|
|
109
82
|
s: function () {
|
|
110
83
|
it = it.call(o);
|
|
@@ -127,6 +100,20 @@ var chronokinesis = (function (exports) {
|
|
|
127
100
|
}
|
|
128
101
|
};
|
|
129
102
|
}
|
|
103
|
+
function _toPrimitive(input, hint) {
|
|
104
|
+
if (typeof input !== "object" || input === null) return input;
|
|
105
|
+
var prim = input[Symbol.toPrimitive];
|
|
106
|
+
if (prim !== undefined) {
|
|
107
|
+
var res = prim.call(input, hint || "default");
|
|
108
|
+
if (typeof res !== "object") return res;
|
|
109
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
110
|
+
}
|
|
111
|
+
return (hint === "string" ? String : Number)(input);
|
|
112
|
+
}
|
|
113
|
+
function _toPropertyKey(arg) {
|
|
114
|
+
var key = _toPrimitive(arg, "string");
|
|
115
|
+
return typeof key === "symbol" ? key : String(key);
|
|
116
|
+
}
|
|
130
117
|
|
|
131
118
|
/**
|
|
132
119
|
* Inspired by Time keeper - EEasy testing of time-dependent code.
|
|
@@ -140,39 +127,33 @@ var chronokinesis = (function (exports) {
|
|
|
140
127
|
var traveledTo = null;
|
|
141
128
|
var started = null;
|
|
142
129
|
var iana = null;
|
|
143
|
-
|
|
144
130
|
function FakeDate() {
|
|
145
131
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
146
132
|
args[_key] = arguments[_key];
|
|
147
133
|
}
|
|
148
|
-
|
|
149
134
|
var length = args.length;
|
|
150
|
-
|
|
151
135
|
if (!length) {
|
|
152
136
|
if (freezedAt) args = [freezedAt];else if (traveledTo) args = [time()];
|
|
153
137
|
}
|
|
154
|
-
|
|
155
138
|
var dt = instantiate(NativeDate, args);
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
139
|
+
Object.defineProperty(dt, 'getTimezoneOffset', {
|
|
140
|
+
enumerable: false,
|
|
141
|
+
value: function getTimezoneOffset() {
|
|
142
|
+
var curr = nativeGetTimezoneOffset.call(this);
|
|
143
|
+
if (!iana) return curr;
|
|
144
|
+
var tz = timezone(iana).getTime(this);
|
|
145
|
+
return Math.round((tz - this.getTime()) / 60000) + curr;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
164
148
|
return dt;
|
|
165
149
|
}
|
|
166
|
-
|
|
167
150
|
FakeDate.UTC = NativeDate.UTC;
|
|
168
151
|
FakeDate.parse = NativeDate.parse;
|
|
169
152
|
FakeDate.prototype = NativeDate.prototype;
|
|
170
|
-
|
|
171
153
|
FakeDate.now = function () {
|
|
172
154
|
if (freezedAt) return freezedAt.getTime();
|
|
173
155
|
return time();
|
|
174
156
|
};
|
|
175
|
-
|
|
176
157
|
var chronokinesis = {
|
|
177
158
|
freeze: freeze,
|
|
178
159
|
defrost: defrost,
|
|
@@ -181,40 +162,30 @@ var chronokinesis = (function (exports) {
|
|
|
181
162
|
isKeepingTime: isKeepingTime,
|
|
182
163
|
timezone: timezone
|
|
183
164
|
};
|
|
184
|
-
|
|
185
165
|
function freeze() {
|
|
186
166
|
useFakeDate();
|
|
187
|
-
|
|
188
167
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
189
168
|
args[_key2] = arguments[_key2];
|
|
190
169
|
}
|
|
191
|
-
|
|
192
170
|
freezedAt = instantiate(Date, args);
|
|
193
171
|
return freezedAt;
|
|
194
172
|
}
|
|
195
|
-
|
|
196
173
|
function defrost() {
|
|
197
174
|
freezedAt = null;
|
|
198
175
|
}
|
|
199
|
-
|
|
200
176
|
function travel() {
|
|
201
177
|
useFakeDate();
|
|
202
|
-
|
|
203
178
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
204
179
|
args[_key3] = arguments[_key3];
|
|
205
180
|
}
|
|
206
|
-
|
|
207
181
|
var travelToDate = instantiate(Date, args);
|
|
208
182
|
traveledTo = travelToDate.getTime();
|
|
209
183
|
started = NativeDate.now();
|
|
210
|
-
|
|
211
184
|
if (freezedAt) {
|
|
212
185
|
freezedAt = travelToDate;
|
|
213
186
|
}
|
|
214
|
-
|
|
215
187
|
return travelToDate;
|
|
216
188
|
}
|
|
217
|
-
|
|
218
189
|
function reset() {
|
|
219
190
|
useNativeDate();
|
|
220
191
|
freezedAt = null;
|
|
@@ -222,11 +193,9 @@ var chronokinesis = (function (exports) {
|
|
|
222
193
|
traveledTo = null;
|
|
223
194
|
iana = null;
|
|
224
195
|
}
|
|
225
|
-
|
|
226
196
|
function isKeepingTime() {
|
|
227
197
|
return Date === FakeDate;
|
|
228
198
|
}
|
|
229
|
-
|
|
230
199
|
function timezone(timeZone) {
|
|
231
200
|
var options = {
|
|
232
201
|
year: 'numeric',
|
|
@@ -250,24 +219,20 @@ var chronokinesis = (function (exports) {
|
|
|
250
219
|
freeze: freezeInTimezone,
|
|
251
220
|
travel: travelInTimezone
|
|
252
221
|
};
|
|
253
|
-
|
|
254
222
|
function freezeInTimezone() {
|
|
255
223
|
if (!arguments.length && iana === timeZone) return freeze();
|
|
256
224
|
iana = timeZone;
|
|
257
225
|
return freeze(getTime.apply(void 0, arguments));
|
|
258
226
|
}
|
|
259
|
-
|
|
260
227
|
function travelInTimezone() {
|
|
261
228
|
if (!arguments.length && iana === timeZone) return travel();
|
|
262
229
|
iana = timeZone;
|
|
263
230
|
return travel(getTime.apply(void 0, arguments));
|
|
264
231
|
}
|
|
265
|
-
|
|
266
232
|
function getTime() {
|
|
267
233
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
268
234
|
args[_key4] = arguments[_key4];
|
|
269
235
|
}
|
|
270
|
-
|
|
271
236
|
var realDate = instantiate(Date, args);
|
|
272
237
|
var tz = new NativeDate(toUTC(formatter, realDate));
|
|
273
238
|
if (!args.length) return tz.getTime();
|
|
@@ -275,7 +240,6 @@ var chronokinesis = (function (exports) {
|
|
|
275
240
|
return realDate.getTime() + currentTz.getTime() - tz.getTime();
|
|
276
241
|
}
|
|
277
242
|
}
|
|
278
|
-
|
|
279
243
|
function useFakeDate() {
|
|
280
244
|
Date = FakeDate; // eslint-disable-line no-global-assign
|
|
281
245
|
}
|
|
@@ -287,46 +251,36 @@ var chronokinesis = (function (exports) {
|
|
|
287
251
|
function time() {
|
|
288
252
|
return traveledTo + (NativeDate.now() - started);
|
|
289
253
|
}
|
|
290
|
-
|
|
291
254
|
function instantiate(type, args) {
|
|
292
255
|
var ctorArgs = args.slice();
|
|
293
256
|
ctorArgs.unshift(null);
|
|
294
257
|
return new (Function.prototype.bind.apply(type, ctorArgs))();
|
|
295
258
|
}
|
|
296
|
-
|
|
297
259
|
function toUTC(formatter, dt) {
|
|
298
260
|
var year, month, day, hour, minute, second;
|
|
299
|
-
|
|
300
261
|
var _iterator = _createForOfIteratorHelper(formatter.formatToParts(dt)),
|
|
301
|
-
|
|
302
|
-
|
|
262
|
+
_step;
|
|
303
263
|
try {
|
|
304
264
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
305
265
|
var _step$value = _step.value,
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
266
|
+
type = _step$value.type,
|
|
267
|
+
value = _step$value.value;
|
|
309
268
|
switch (type) {
|
|
310
269
|
case 'year':
|
|
311
270
|
year = parseInt(value);
|
|
312
271
|
break;
|
|
313
|
-
|
|
314
272
|
case 'month':
|
|
315
273
|
month = parseInt(value) - 1;
|
|
316
274
|
break;
|
|
317
|
-
|
|
318
275
|
case 'day':
|
|
319
276
|
day = parseInt(value);
|
|
320
277
|
break;
|
|
321
|
-
|
|
322
278
|
case 'hour':
|
|
323
279
|
hour = parseInt(value) % 24;
|
|
324
280
|
break;
|
|
325
|
-
|
|
326
281
|
case 'minute':
|
|
327
282
|
minute = parseInt(value);
|
|
328
283
|
break;
|
|
329
|
-
|
|
330
284
|
case 'second':
|
|
331
285
|
second = parseInt(value);
|
|
332
286
|
break;
|
|
@@ -337,7 +291,6 @@ var chronokinesis = (function (exports) {
|
|
|
337
291
|
} finally {
|
|
338
292
|
_iterator.f();
|
|
339
293
|
}
|
|
340
|
-
|
|
341
294
|
return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
|
|
342
295
|
}
|
|
343
296
|
var chronokinesis_1 = chronokinesis.freeze;
|
|
@@ -347,7 +300,7 @@ var chronokinesis = (function (exports) {
|
|
|
347
300
|
var chronokinesis_5 = chronokinesis.isKeepingTime;
|
|
348
301
|
var chronokinesis_6 = chronokinesis.timezone;
|
|
349
302
|
|
|
350
|
-
exports[
|
|
303
|
+
exports["default"] = chronokinesis;
|
|
351
304
|
exports.defrost = chronokinesis_2;
|
|
352
305
|
exports.freeze = chronokinesis_1;
|
|
353
306
|
exports.isKeepingTime = chronokinesis_5;
|
|
@@ -359,4 +312,4 @@ var chronokinesis = (function (exports) {
|
|
|
359
312
|
|
|
360
313
|
return exports;
|
|
361
314
|
|
|
362
|
-
}({})
|
|
315
|
+
})({});
|
package/dist/index.es.js
CHANGED
|
@@ -1,42 +1,26 @@
|
|
|
1
1
|
function ownKeys(object, enumerableOnly) {
|
|
2
2
|
var keys = Object.keys(object);
|
|
3
|
-
|
|
4
3
|
if (Object.getOwnPropertySymbols) {
|
|
5
4
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
keys.push.apply(keys, symbols);
|
|
5
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
6
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
7
|
+
})), keys.push.apply(keys, symbols);
|
|
14
8
|
}
|
|
15
|
-
|
|
16
9
|
return keys;
|
|
17
10
|
}
|
|
18
|
-
|
|
19
11
|
function _objectSpread2(target) {
|
|
20
12
|
for (var i = 1; i < arguments.length; i++) {
|
|
21
|
-
var source = arguments[i]
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} else if (Object.getOwnPropertyDescriptors) {
|
|
28
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
29
|
-
} else {
|
|
30
|
-
ownKeys(Object(source)).forEach(function (key) {
|
|
31
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
32
|
-
});
|
|
33
|
-
}
|
|
13
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
14
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
15
|
+
_defineProperty(target, key, source[key]);
|
|
16
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
17
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
18
|
+
});
|
|
34
19
|
}
|
|
35
|
-
|
|
36
20
|
return target;
|
|
37
21
|
}
|
|
38
|
-
|
|
39
22
|
function _defineProperty(obj, key, value) {
|
|
23
|
+
key = _toPropertyKey(key);
|
|
40
24
|
if (key in obj) {
|
|
41
25
|
Object.defineProperty(obj, key, {
|
|
42
26
|
value: value,
|
|
@@ -47,10 +31,8 @@ function _defineProperty(obj, key, value) {
|
|
|
47
31
|
} else {
|
|
48
32
|
obj[key] = value;
|
|
49
33
|
}
|
|
50
|
-
|
|
51
34
|
return obj;
|
|
52
35
|
}
|
|
53
|
-
|
|
54
36
|
function _unsupportedIterableToArray(o, minLen) {
|
|
55
37
|
if (!o) return;
|
|
56
38
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
@@ -59,25 +41,18 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
59
41
|
if (n === "Map" || n === "Set") return Array.from(o);
|
|
60
42
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
61
43
|
}
|
|
62
|
-
|
|
63
44
|
function _arrayLikeToArray(arr, len) {
|
|
64
45
|
if (len == null || len > arr.length) len = arr.length;
|
|
65
|
-
|
|
66
46
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
67
|
-
|
|
68
47
|
return arr2;
|
|
69
48
|
}
|
|
70
|
-
|
|
71
49
|
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
72
50
|
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
73
|
-
|
|
74
51
|
if (!it) {
|
|
75
52
|
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
76
53
|
if (it) o = it;
|
|
77
54
|
var i = 0;
|
|
78
|
-
|
|
79
55
|
var F = function () {};
|
|
80
|
-
|
|
81
56
|
return {
|
|
82
57
|
s: F,
|
|
83
58
|
n: function () {
|
|
@@ -95,13 +70,11 @@ function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
|
95
70
|
f: F
|
|
96
71
|
};
|
|
97
72
|
}
|
|
98
|
-
|
|
99
73
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
100
74
|
}
|
|
101
|
-
|
|
102
75
|
var normalCompletion = true,
|
|
103
|
-
|
|
104
|
-
|
|
76
|
+
didErr = false,
|
|
77
|
+
err;
|
|
105
78
|
return {
|
|
106
79
|
s: function () {
|
|
107
80
|
it = it.call(o);
|
|
@@ -124,6 +97,20 @@ function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
|
124
97
|
}
|
|
125
98
|
};
|
|
126
99
|
}
|
|
100
|
+
function _toPrimitive(input, hint) {
|
|
101
|
+
if (typeof input !== "object" || input === null) return input;
|
|
102
|
+
var prim = input[Symbol.toPrimitive];
|
|
103
|
+
if (prim !== undefined) {
|
|
104
|
+
var res = prim.call(input, hint || "default");
|
|
105
|
+
if (typeof res !== "object") return res;
|
|
106
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
107
|
+
}
|
|
108
|
+
return (hint === "string" ? String : Number)(input);
|
|
109
|
+
}
|
|
110
|
+
function _toPropertyKey(arg) {
|
|
111
|
+
var key = _toPrimitive(arg, "string");
|
|
112
|
+
return typeof key === "symbol" ? key : String(key);
|
|
113
|
+
}
|
|
127
114
|
|
|
128
115
|
/**
|
|
129
116
|
* Inspired by Time keeper - EEasy testing of time-dependent code.
|
|
@@ -137,39 +124,33 @@ var freezedAt = null;
|
|
|
137
124
|
var traveledTo = null;
|
|
138
125
|
var started = null;
|
|
139
126
|
var iana = null;
|
|
140
|
-
|
|
141
127
|
function FakeDate() {
|
|
142
128
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
143
129
|
args[_key] = arguments[_key];
|
|
144
130
|
}
|
|
145
|
-
|
|
146
131
|
var length = args.length;
|
|
147
|
-
|
|
148
132
|
if (!length) {
|
|
149
133
|
if (freezedAt) args = [freezedAt];else if (traveledTo) args = [time()];
|
|
150
134
|
}
|
|
151
|
-
|
|
152
135
|
var dt = instantiate(NativeDate, args);
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
136
|
+
Object.defineProperty(dt, 'getTimezoneOffset', {
|
|
137
|
+
enumerable: false,
|
|
138
|
+
value: function getTimezoneOffset() {
|
|
139
|
+
var curr = nativeGetTimezoneOffset.call(this);
|
|
140
|
+
if (!iana) return curr;
|
|
141
|
+
var tz = timezone(iana).getTime(this);
|
|
142
|
+
return Math.round((tz - this.getTime()) / 60000) + curr;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
161
145
|
return dt;
|
|
162
146
|
}
|
|
163
|
-
|
|
164
147
|
FakeDate.UTC = NativeDate.UTC;
|
|
165
148
|
FakeDate.parse = NativeDate.parse;
|
|
166
149
|
FakeDate.prototype = NativeDate.prototype;
|
|
167
|
-
|
|
168
150
|
FakeDate.now = function () {
|
|
169
151
|
if (freezedAt) return freezedAt.getTime();
|
|
170
152
|
return time();
|
|
171
153
|
};
|
|
172
|
-
|
|
173
154
|
var chronokinesis = {
|
|
174
155
|
freeze: freeze,
|
|
175
156
|
defrost: defrost,
|
|
@@ -178,40 +159,30 @@ var chronokinesis = {
|
|
|
178
159
|
isKeepingTime: isKeepingTime,
|
|
179
160
|
timezone: timezone
|
|
180
161
|
};
|
|
181
|
-
|
|
182
162
|
function freeze() {
|
|
183
163
|
useFakeDate();
|
|
184
|
-
|
|
185
164
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
186
165
|
args[_key2] = arguments[_key2];
|
|
187
166
|
}
|
|
188
|
-
|
|
189
167
|
freezedAt = instantiate(Date, args);
|
|
190
168
|
return freezedAt;
|
|
191
169
|
}
|
|
192
|
-
|
|
193
170
|
function defrost() {
|
|
194
171
|
freezedAt = null;
|
|
195
172
|
}
|
|
196
|
-
|
|
197
173
|
function travel() {
|
|
198
174
|
useFakeDate();
|
|
199
|
-
|
|
200
175
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
201
176
|
args[_key3] = arguments[_key3];
|
|
202
177
|
}
|
|
203
|
-
|
|
204
178
|
var travelToDate = instantiate(Date, args);
|
|
205
179
|
traveledTo = travelToDate.getTime();
|
|
206
180
|
started = NativeDate.now();
|
|
207
|
-
|
|
208
181
|
if (freezedAt) {
|
|
209
182
|
freezedAt = travelToDate;
|
|
210
183
|
}
|
|
211
|
-
|
|
212
184
|
return travelToDate;
|
|
213
185
|
}
|
|
214
|
-
|
|
215
186
|
function reset() {
|
|
216
187
|
useNativeDate();
|
|
217
188
|
freezedAt = null;
|
|
@@ -219,11 +190,9 @@ function reset() {
|
|
|
219
190
|
traveledTo = null;
|
|
220
191
|
iana = null;
|
|
221
192
|
}
|
|
222
|
-
|
|
223
193
|
function isKeepingTime() {
|
|
224
194
|
return Date === FakeDate;
|
|
225
195
|
}
|
|
226
|
-
|
|
227
196
|
function timezone(timeZone) {
|
|
228
197
|
var options = {
|
|
229
198
|
year: 'numeric',
|
|
@@ -247,24 +216,20 @@ function timezone(timeZone) {
|
|
|
247
216
|
freeze: freezeInTimezone,
|
|
248
217
|
travel: travelInTimezone
|
|
249
218
|
};
|
|
250
|
-
|
|
251
219
|
function freezeInTimezone() {
|
|
252
220
|
if (!arguments.length && iana === timeZone) return freeze();
|
|
253
221
|
iana = timeZone;
|
|
254
222
|
return freeze(getTime.apply(void 0, arguments));
|
|
255
223
|
}
|
|
256
|
-
|
|
257
224
|
function travelInTimezone() {
|
|
258
225
|
if (!arguments.length && iana === timeZone) return travel();
|
|
259
226
|
iana = timeZone;
|
|
260
227
|
return travel(getTime.apply(void 0, arguments));
|
|
261
228
|
}
|
|
262
|
-
|
|
263
229
|
function getTime() {
|
|
264
230
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
265
231
|
args[_key4] = arguments[_key4];
|
|
266
232
|
}
|
|
267
|
-
|
|
268
233
|
var realDate = instantiate(Date, args);
|
|
269
234
|
var tz = new NativeDate(toUTC(formatter, realDate));
|
|
270
235
|
if (!args.length) return tz.getTime();
|
|
@@ -272,7 +237,6 @@ function timezone(timeZone) {
|
|
|
272
237
|
return realDate.getTime() + currentTz.getTime() - tz.getTime();
|
|
273
238
|
}
|
|
274
239
|
}
|
|
275
|
-
|
|
276
240
|
function useFakeDate() {
|
|
277
241
|
Date = FakeDate; // eslint-disable-line no-global-assign
|
|
278
242
|
}
|
|
@@ -284,46 +248,36 @@ function useNativeDate() {
|
|
|
284
248
|
function time() {
|
|
285
249
|
return traveledTo + (NativeDate.now() - started);
|
|
286
250
|
}
|
|
287
|
-
|
|
288
251
|
function instantiate(type, args) {
|
|
289
252
|
var ctorArgs = args.slice();
|
|
290
253
|
ctorArgs.unshift(null);
|
|
291
254
|
return new (Function.prototype.bind.apply(type, ctorArgs))();
|
|
292
255
|
}
|
|
293
|
-
|
|
294
256
|
function toUTC(formatter, dt) {
|
|
295
257
|
var year, month, day, hour, minute, second;
|
|
296
|
-
|
|
297
258
|
var _iterator = _createForOfIteratorHelper(formatter.formatToParts(dt)),
|
|
298
|
-
|
|
299
|
-
|
|
259
|
+
_step;
|
|
300
260
|
try {
|
|
301
261
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
302
262
|
var _step$value = _step.value,
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
263
|
+
type = _step$value.type,
|
|
264
|
+
value = _step$value.value;
|
|
306
265
|
switch (type) {
|
|
307
266
|
case 'year':
|
|
308
267
|
year = parseInt(value);
|
|
309
268
|
break;
|
|
310
|
-
|
|
311
269
|
case 'month':
|
|
312
270
|
month = parseInt(value) - 1;
|
|
313
271
|
break;
|
|
314
|
-
|
|
315
272
|
case 'day':
|
|
316
273
|
day = parseInt(value);
|
|
317
274
|
break;
|
|
318
|
-
|
|
319
275
|
case 'hour':
|
|
320
276
|
hour = parseInt(value) % 24;
|
|
321
277
|
break;
|
|
322
|
-
|
|
323
278
|
case 'minute':
|
|
324
279
|
minute = parseInt(value);
|
|
325
280
|
break;
|
|
326
|
-
|
|
327
281
|
case 'second':
|
|
328
282
|
second = parseInt(value);
|
|
329
283
|
break;
|
|
@@ -334,7 +288,6 @@ function toUTC(formatter, dt) {
|
|
|
334
288
|
} finally {
|
|
335
289
|
_iterator.f();
|
|
336
290
|
}
|
|
337
|
-
|
|
338
291
|
return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
|
|
339
292
|
}
|
|
340
293
|
var chronokinesis_1 = chronokinesis.freeze;
|
package/index.js
CHANGED
|
@@ -23,13 +23,16 @@ function FakeDate(...args) {
|
|
|
23
23
|
|
|
24
24
|
const dt = instantiate(NativeDate, args);
|
|
25
25
|
|
|
26
|
-
dt
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
Object.defineProperty(dt, 'getTimezoneOffset', {
|
|
27
|
+
enumerable: false,
|
|
28
|
+
value: function getTimezoneOffset() {
|
|
29
|
+
const curr = nativeGetTimezoneOffset.call(this);
|
|
30
|
+
if (!iana) return curr;
|
|
31
|
+
|
|
32
|
+
const tz = timezone(iana).getTime(this);
|
|
33
|
+
return Math.round((tz - this.getTime()) / 60000) + curr;
|
|
34
|
+
},
|
|
35
|
+
});
|
|
33
36
|
|
|
34
37
|
return dt;
|
|
35
38
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chronokinesis",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Module for testing time-dependent code",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pål Edman",
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"url": "git://github.com/paed01/chronokinesis"
|
|
16
16
|
},
|
|
17
17
|
"engines": {
|
|
18
|
-
"node": ">=
|
|
18
|
+
"node": ">=12"
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
21
|
"toc": "node generate-api-toc.js",
|
|
22
|
-
"test": "
|
|
23
|
-
"posttest": "npm run prepare",
|
|
24
|
-
"test:lcov": "
|
|
22
|
+
"test": "mocha",
|
|
23
|
+
"posttest": "eslint . --cache && npm run prepare",
|
|
24
|
+
"test:lcov": "c8 -r lcov npm t",
|
|
25
25
|
"prepare": "npm run toc && rollup -c"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
@@ -49,12 +49,13 @@
|
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@babel/core": "^7.12.3",
|
|
51
51
|
"@babel/preset-env": "^7.12.1",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
52
|
+
"c8": "^7.12.0",
|
|
53
|
+
"chai": "^4.3.7",
|
|
54
54
|
"coveralls": "^3.1.0",
|
|
55
|
-
"eslint": "^
|
|
55
|
+
"eslint": "^8.29.0",
|
|
56
56
|
"lodash.clonedeep": "^4.5.0",
|
|
57
57
|
"markdown-toc": "^1.2.0",
|
|
58
|
+
"mocha": "^10.1.0",
|
|
58
59
|
"moment": "^2.29.1",
|
|
59
60
|
"rollup": "^2.56.3",
|
|
60
61
|
"rollup-plugin-babel": "^4.4.0",
|