chronokinesis 3.1.2 → 4.0.1
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 +39 -97
- package/dist/index.es.js +38 -90
- package/index.js +8 -1
- package/package.json +15 -18
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,31 +100,35 @@ 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
|
-
/**
|
|
132
|
-
* Inspired by Time keeper - EEasy testing of time-dependent code.
|
|
133
|
-
*
|
|
134
|
-
* Veselin Todorov <hi@vesln.com>
|
|
135
|
-
* MIT License.
|
|
136
|
-
*/
|
|
137
118
|
var NativeDate = Date;
|
|
138
119
|
var nativeGetTimezoneOffset = NativeDate.prototype.getTimezoneOffset;
|
|
139
120
|
var freezedAt = null;
|
|
140
121
|
var traveledTo = null;
|
|
141
122
|
var started = null;
|
|
142
123
|
var iana = null;
|
|
143
|
-
|
|
144
124
|
function FakeDate() {
|
|
145
125
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
146
126
|
args[_key] = arguments[_key];
|
|
147
127
|
}
|
|
148
|
-
|
|
149
128
|
var length = args.length;
|
|
150
|
-
|
|
151
129
|
if (!length) {
|
|
152
130
|
if (freezedAt) args = [freezedAt];else if (traveledTo) args = [time()];
|
|
153
131
|
}
|
|
154
|
-
|
|
155
132
|
var dt = instantiate(NativeDate, args);
|
|
156
133
|
Object.defineProperty(dt, 'getTimezoneOffset', {
|
|
157
134
|
enumerable: false,
|
|
@@ -164,16 +141,13 @@ var chronokinesis = (function (exports) {
|
|
|
164
141
|
});
|
|
165
142
|
return dt;
|
|
166
143
|
}
|
|
167
|
-
|
|
168
144
|
FakeDate.UTC = NativeDate.UTC;
|
|
169
145
|
FakeDate.parse = NativeDate.parse;
|
|
170
146
|
FakeDate.prototype = NativeDate.prototype;
|
|
171
|
-
|
|
172
147
|
FakeDate.now = function () {
|
|
173
148
|
if (freezedAt) return freezedAt.getTime();
|
|
174
149
|
return time();
|
|
175
150
|
};
|
|
176
|
-
|
|
177
151
|
var chronokinesis = {
|
|
178
152
|
freeze: freeze,
|
|
179
153
|
defrost: defrost,
|
|
@@ -182,40 +156,38 @@ var chronokinesis = (function (exports) {
|
|
|
182
156
|
isKeepingTime: isKeepingTime,
|
|
183
157
|
timezone: timezone
|
|
184
158
|
};
|
|
185
|
-
|
|
186
159
|
function freeze() {
|
|
187
160
|
useFakeDate();
|
|
188
|
-
|
|
189
161
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
190
162
|
args[_key2] = arguments[_key2];
|
|
191
163
|
}
|
|
192
|
-
|
|
193
164
|
freezedAt = instantiate(Date, args);
|
|
165
|
+
if (isNaN(freezedAt)) {
|
|
166
|
+
reset();
|
|
167
|
+
throw new TypeError('Chronokinesis cannot freeze to invalid date, check your arguments. Chronokinesis is reset');
|
|
168
|
+
}
|
|
194
169
|
return freezedAt;
|
|
195
170
|
}
|
|
196
|
-
|
|
197
171
|
function defrost() {
|
|
198
172
|
freezedAt = null;
|
|
199
173
|
}
|
|
200
|
-
|
|
201
174
|
function travel() {
|
|
202
175
|
useFakeDate();
|
|
203
|
-
|
|
204
176
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
205
177
|
args[_key3] = arguments[_key3];
|
|
206
178
|
}
|
|
207
|
-
|
|
208
179
|
var travelToDate = instantiate(Date, args);
|
|
180
|
+
if (isNaN(travelToDate)) {
|
|
181
|
+
reset();
|
|
182
|
+
throw new TypeError('Chronokinesis cannot travel to invalid date, check your arguments. Chronokinesis is reset');
|
|
183
|
+
}
|
|
209
184
|
traveledTo = travelToDate.getTime();
|
|
210
185
|
started = NativeDate.now();
|
|
211
|
-
|
|
212
186
|
if (freezedAt) {
|
|
213
187
|
freezedAt = travelToDate;
|
|
214
188
|
}
|
|
215
|
-
|
|
216
189
|
return travelToDate;
|
|
217
190
|
}
|
|
218
|
-
|
|
219
191
|
function reset() {
|
|
220
192
|
useNativeDate();
|
|
221
193
|
freezedAt = null;
|
|
@@ -223,11 +195,9 @@ var chronokinesis = (function (exports) {
|
|
|
223
195
|
traveledTo = null;
|
|
224
196
|
iana = null;
|
|
225
197
|
}
|
|
226
|
-
|
|
227
198
|
function isKeepingTime() {
|
|
228
199
|
return Date === FakeDate;
|
|
229
200
|
}
|
|
230
|
-
|
|
231
201
|
function timezone(timeZone) {
|
|
232
202
|
var options = {
|
|
233
203
|
year: 'numeric',
|
|
@@ -251,24 +221,20 @@ var chronokinesis = (function (exports) {
|
|
|
251
221
|
freeze: freezeInTimezone,
|
|
252
222
|
travel: travelInTimezone
|
|
253
223
|
};
|
|
254
|
-
|
|
255
224
|
function freezeInTimezone() {
|
|
256
225
|
if (!arguments.length && iana === timeZone) return freeze();
|
|
257
226
|
iana = timeZone;
|
|
258
227
|
return freeze(getTime.apply(void 0, arguments));
|
|
259
228
|
}
|
|
260
|
-
|
|
261
229
|
function travelInTimezone() {
|
|
262
230
|
if (!arguments.length && iana === timeZone) return travel();
|
|
263
231
|
iana = timeZone;
|
|
264
232
|
return travel(getTime.apply(void 0, arguments));
|
|
265
233
|
}
|
|
266
|
-
|
|
267
234
|
function getTime() {
|
|
268
235
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
269
236
|
args[_key4] = arguments[_key4];
|
|
270
237
|
}
|
|
271
|
-
|
|
272
238
|
var realDate = instantiate(Date, args);
|
|
273
239
|
var tz = new NativeDate(toUTC(formatter, realDate));
|
|
274
240
|
if (!args.length) return tz.getTime();
|
|
@@ -276,7 +242,6 @@ var chronokinesis = (function (exports) {
|
|
|
276
242
|
return realDate.getTime() + currentTz.getTime() - tz.getTime();
|
|
277
243
|
}
|
|
278
244
|
}
|
|
279
|
-
|
|
280
245
|
function useFakeDate() {
|
|
281
246
|
Date = FakeDate; // eslint-disable-line no-global-assign
|
|
282
247
|
}
|
|
@@ -288,46 +253,36 @@ var chronokinesis = (function (exports) {
|
|
|
288
253
|
function time() {
|
|
289
254
|
return traveledTo + (NativeDate.now() - started);
|
|
290
255
|
}
|
|
291
|
-
|
|
292
256
|
function instantiate(type, args) {
|
|
293
257
|
var ctorArgs = args.slice();
|
|
294
258
|
ctorArgs.unshift(null);
|
|
295
259
|
return new (Function.prototype.bind.apply(type, ctorArgs))();
|
|
296
260
|
}
|
|
297
|
-
|
|
298
261
|
function toUTC(formatter, dt) {
|
|
299
262
|
var year, month, day, hour, minute, second;
|
|
300
|
-
|
|
301
263
|
var _iterator = _createForOfIteratorHelper(formatter.formatToParts(dt)),
|
|
302
|
-
|
|
303
|
-
|
|
264
|
+
_step;
|
|
304
265
|
try {
|
|
305
266
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
306
267
|
var _step$value = _step.value,
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
268
|
+
type = _step$value.type,
|
|
269
|
+
value = _step$value.value;
|
|
310
270
|
switch (type) {
|
|
311
271
|
case 'year':
|
|
312
272
|
year = parseInt(value);
|
|
313
273
|
break;
|
|
314
|
-
|
|
315
274
|
case 'month':
|
|
316
275
|
month = parseInt(value) - 1;
|
|
317
276
|
break;
|
|
318
|
-
|
|
319
277
|
case 'day':
|
|
320
278
|
day = parseInt(value);
|
|
321
279
|
break;
|
|
322
|
-
|
|
323
280
|
case 'hour':
|
|
324
281
|
hour = parseInt(value) % 24;
|
|
325
282
|
break;
|
|
326
|
-
|
|
327
283
|
case 'minute':
|
|
328
284
|
minute = parseInt(value);
|
|
329
285
|
break;
|
|
330
|
-
|
|
331
286
|
case 'second':
|
|
332
287
|
second = parseInt(value);
|
|
333
288
|
break;
|
|
@@ -338,26 +293,13 @@ var chronokinesis = (function (exports) {
|
|
|
338
293
|
} finally {
|
|
339
294
|
_iterator.f();
|
|
340
295
|
}
|
|
341
|
-
|
|
342
296
|
return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
|
|
343
297
|
}
|
|
344
|
-
var chronokinesis_1 = chronokinesis.freeze;
|
|
345
|
-
var chronokinesis_2 = chronokinesis.defrost;
|
|
346
|
-
var chronokinesis_3 = chronokinesis.travel;
|
|
347
|
-
var chronokinesis_4 = chronokinesis.reset;
|
|
348
|
-
var chronokinesis_5 = chronokinesis.isKeepingTime;
|
|
349
|
-
var chronokinesis_6 = chronokinesis.timezone;
|
|
350
298
|
|
|
351
|
-
exports
|
|
352
|
-
exports.defrost = chronokinesis_2;
|
|
353
|
-
exports.freeze = chronokinesis_1;
|
|
354
|
-
exports.isKeepingTime = chronokinesis_5;
|
|
355
|
-
exports.reset = chronokinesis_4;
|
|
356
|
-
exports.timezone = chronokinesis_6;
|
|
357
|
-
exports.travel = chronokinesis_3;
|
|
299
|
+
exports.default = chronokinesis;
|
|
358
300
|
|
|
359
301
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
360
302
|
|
|
361
303
|
return exports;
|
|
362
304
|
|
|
363
|
-
}({})
|
|
305
|
+
})({});
|
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,31 +97,35 @@ 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
|
-
/**
|
|
129
|
-
* Inspired by Time keeper - EEasy testing of time-dependent code.
|
|
130
|
-
*
|
|
131
|
-
* Veselin Todorov <hi@vesln.com>
|
|
132
|
-
* MIT License.
|
|
133
|
-
*/
|
|
134
115
|
var NativeDate = Date;
|
|
135
116
|
var nativeGetTimezoneOffset = NativeDate.prototype.getTimezoneOffset;
|
|
136
117
|
var freezedAt = null;
|
|
137
118
|
var traveledTo = null;
|
|
138
119
|
var started = null;
|
|
139
120
|
var iana = null;
|
|
140
|
-
|
|
141
121
|
function FakeDate() {
|
|
142
122
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
143
123
|
args[_key] = arguments[_key];
|
|
144
124
|
}
|
|
145
|
-
|
|
146
125
|
var length = args.length;
|
|
147
|
-
|
|
148
126
|
if (!length) {
|
|
149
127
|
if (freezedAt) args = [freezedAt];else if (traveledTo) args = [time()];
|
|
150
128
|
}
|
|
151
|
-
|
|
152
129
|
var dt = instantiate(NativeDate, args);
|
|
153
130
|
Object.defineProperty(dt, 'getTimezoneOffset', {
|
|
154
131
|
enumerable: false,
|
|
@@ -161,16 +138,13 @@ function FakeDate() {
|
|
|
161
138
|
});
|
|
162
139
|
return dt;
|
|
163
140
|
}
|
|
164
|
-
|
|
165
141
|
FakeDate.UTC = NativeDate.UTC;
|
|
166
142
|
FakeDate.parse = NativeDate.parse;
|
|
167
143
|
FakeDate.prototype = NativeDate.prototype;
|
|
168
|
-
|
|
169
144
|
FakeDate.now = function () {
|
|
170
145
|
if (freezedAt) return freezedAt.getTime();
|
|
171
146
|
return time();
|
|
172
147
|
};
|
|
173
|
-
|
|
174
148
|
var chronokinesis = {
|
|
175
149
|
freeze: freeze,
|
|
176
150
|
defrost: defrost,
|
|
@@ -179,40 +153,38 @@ var chronokinesis = {
|
|
|
179
153
|
isKeepingTime: isKeepingTime,
|
|
180
154
|
timezone: timezone
|
|
181
155
|
};
|
|
182
|
-
|
|
183
156
|
function freeze() {
|
|
184
157
|
useFakeDate();
|
|
185
|
-
|
|
186
158
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
187
159
|
args[_key2] = arguments[_key2];
|
|
188
160
|
}
|
|
189
|
-
|
|
190
161
|
freezedAt = instantiate(Date, args);
|
|
162
|
+
if (isNaN(freezedAt)) {
|
|
163
|
+
reset();
|
|
164
|
+
throw new TypeError('Chronokinesis cannot freeze to invalid date, check your arguments. Chronokinesis is reset');
|
|
165
|
+
}
|
|
191
166
|
return freezedAt;
|
|
192
167
|
}
|
|
193
|
-
|
|
194
168
|
function defrost() {
|
|
195
169
|
freezedAt = null;
|
|
196
170
|
}
|
|
197
|
-
|
|
198
171
|
function travel() {
|
|
199
172
|
useFakeDate();
|
|
200
|
-
|
|
201
173
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
202
174
|
args[_key3] = arguments[_key3];
|
|
203
175
|
}
|
|
204
|
-
|
|
205
176
|
var travelToDate = instantiate(Date, args);
|
|
177
|
+
if (isNaN(travelToDate)) {
|
|
178
|
+
reset();
|
|
179
|
+
throw new TypeError('Chronokinesis cannot travel to invalid date, check your arguments. Chronokinesis is reset');
|
|
180
|
+
}
|
|
206
181
|
traveledTo = travelToDate.getTime();
|
|
207
182
|
started = NativeDate.now();
|
|
208
|
-
|
|
209
183
|
if (freezedAt) {
|
|
210
184
|
freezedAt = travelToDate;
|
|
211
185
|
}
|
|
212
|
-
|
|
213
186
|
return travelToDate;
|
|
214
187
|
}
|
|
215
|
-
|
|
216
188
|
function reset() {
|
|
217
189
|
useNativeDate();
|
|
218
190
|
freezedAt = null;
|
|
@@ -220,11 +192,9 @@ function reset() {
|
|
|
220
192
|
traveledTo = null;
|
|
221
193
|
iana = null;
|
|
222
194
|
}
|
|
223
|
-
|
|
224
195
|
function isKeepingTime() {
|
|
225
196
|
return Date === FakeDate;
|
|
226
197
|
}
|
|
227
|
-
|
|
228
198
|
function timezone(timeZone) {
|
|
229
199
|
var options = {
|
|
230
200
|
year: 'numeric',
|
|
@@ -248,24 +218,20 @@ function timezone(timeZone) {
|
|
|
248
218
|
freeze: freezeInTimezone,
|
|
249
219
|
travel: travelInTimezone
|
|
250
220
|
};
|
|
251
|
-
|
|
252
221
|
function freezeInTimezone() {
|
|
253
222
|
if (!arguments.length && iana === timeZone) return freeze();
|
|
254
223
|
iana = timeZone;
|
|
255
224
|
return freeze(getTime.apply(void 0, arguments));
|
|
256
225
|
}
|
|
257
|
-
|
|
258
226
|
function travelInTimezone() {
|
|
259
227
|
if (!arguments.length && iana === timeZone) return travel();
|
|
260
228
|
iana = timeZone;
|
|
261
229
|
return travel(getTime.apply(void 0, arguments));
|
|
262
230
|
}
|
|
263
|
-
|
|
264
231
|
function getTime() {
|
|
265
232
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
266
233
|
args[_key4] = arguments[_key4];
|
|
267
234
|
}
|
|
268
|
-
|
|
269
235
|
var realDate = instantiate(Date, args);
|
|
270
236
|
var tz = new NativeDate(toUTC(formatter, realDate));
|
|
271
237
|
if (!args.length) return tz.getTime();
|
|
@@ -273,7 +239,6 @@ function timezone(timeZone) {
|
|
|
273
239
|
return realDate.getTime() + currentTz.getTime() - tz.getTime();
|
|
274
240
|
}
|
|
275
241
|
}
|
|
276
|
-
|
|
277
242
|
function useFakeDate() {
|
|
278
243
|
Date = FakeDate; // eslint-disable-line no-global-assign
|
|
279
244
|
}
|
|
@@ -285,46 +250,36 @@ function useNativeDate() {
|
|
|
285
250
|
function time() {
|
|
286
251
|
return traveledTo + (NativeDate.now() - started);
|
|
287
252
|
}
|
|
288
|
-
|
|
289
253
|
function instantiate(type, args) {
|
|
290
254
|
var ctorArgs = args.slice();
|
|
291
255
|
ctorArgs.unshift(null);
|
|
292
256
|
return new (Function.prototype.bind.apply(type, ctorArgs))();
|
|
293
257
|
}
|
|
294
|
-
|
|
295
258
|
function toUTC(formatter, dt) {
|
|
296
259
|
var year, month, day, hour, minute, second;
|
|
297
|
-
|
|
298
260
|
var _iterator = _createForOfIteratorHelper(formatter.formatToParts(dt)),
|
|
299
|
-
|
|
300
|
-
|
|
261
|
+
_step;
|
|
301
262
|
try {
|
|
302
263
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
303
264
|
var _step$value = _step.value,
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
265
|
+
type = _step$value.type,
|
|
266
|
+
value = _step$value.value;
|
|
307
267
|
switch (type) {
|
|
308
268
|
case 'year':
|
|
309
269
|
year = parseInt(value);
|
|
310
270
|
break;
|
|
311
|
-
|
|
312
271
|
case 'month':
|
|
313
272
|
month = parseInt(value) - 1;
|
|
314
273
|
break;
|
|
315
|
-
|
|
316
274
|
case 'day':
|
|
317
275
|
day = parseInt(value);
|
|
318
276
|
break;
|
|
319
|
-
|
|
320
277
|
case 'hour':
|
|
321
278
|
hour = parseInt(value) % 24;
|
|
322
279
|
break;
|
|
323
|
-
|
|
324
280
|
case 'minute':
|
|
325
281
|
minute = parseInt(value);
|
|
326
282
|
break;
|
|
327
|
-
|
|
328
283
|
case 'second':
|
|
329
284
|
second = parseInt(value);
|
|
330
285
|
break;
|
|
@@ -335,14 +290,7 @@ function toUTC(formatter, dt) {
|
|
|
335
290
|
} finally {
|
|
336
291
|
_iterator.f();
|
|
337
292
|
}
|
|
338
|
-
|
|
339
293
|
return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
|
|
340
294
|
}
|
|
341
|
-
var chronokinesis_1 = chronokinesis.freeze;
|
|
342
|
-
var chronokinesis_2 = chronokinesis.defrost;
|
|
343
|
-
var chronokinesis_3 = chronokinesis.travel;
|
|
344
|
-
var chronokinesis_4 = chronokinesis.reset;
|
|
345
|
-
var chronokinesis_5 = chronokinesis.isKeepingTime;
|
|
346
|
-
var chronokinesis_6 = chronokinesis.timezone;
|
|
347
295
|
|
|
348
|
-
export { chronokinesis as default
|
|
296
|
+
export { chronokinesis as default };
|
package/index.js
CHANGED
|
@@ -59,6 +59,10 @@ module.exports = {
|
|
|
59
59
|
function freeze(...args) {
|
|
60
60
|
useFakeDate();
|
|
61
61
|
freezedAt = instantiate(Date, args);
|
|
62
|
+
if (isNaN(freezedAt)) {
|
|
63
|
+
reset();
|
|
64
|
+
throw new TypeError('Chronokinesis cannot freeze to invalid date, check your arguments. Chronokinesis is reset');
|
|
65
|
+
}
|
|
62
66
|
return freezedAt;
|
|
63
67
|
}
|
|
64
68
|
|
|
@@ -68,8 +72,11 @@ function defrost() {
|
|
|
68
72
|
|
|
69
73
|
function travel(...args) {
|
|
70
74
|
useFakeDate();
|
|
71
|
-
|
|
72
75
|
const travelToDate = instantiate(Date, args);
|
|
76
|
+
if (isNaN(travelToDate)) {
|
|
77
|
+
reset();
|
|
78
|
+
throw new TypeError('Chronokinesis cannot travel to invalid date, check your arguments. Chronokinesis is reset');
|
|
79
|
+
}
|
|
73
80
|
|
|
74
81
|
traveledTo = travelToDate.getTime();
|
|
75
82
|
started = NativeDate.now();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chronokinesis",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"description": "Module for testing time-dependent code",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Pål Edman",
|
|
@@ -14,22 +14,19 @@
|
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "git://github.com/paed01/chronokinesis"
|
|
16
16
|
},
|
|
17
|
-
"engines": {
|
|
18
|
-
"node": ">=10"
|
|
19
|
-
},
|
|
20
17
|
"scripts": {
|
|
21
18
|
"toc": "node generate-api-toc.js",
|
|
22
|
-
"test": "
|
|
23
|
-
"
|
|
24
|
-
"test:lcov": "
|
|
25
|
-
"
|
|
19
|
+
"test": "mocha",
|
|
20
|
+
"lint": "eslint . --cache",
|
|
21
|
+
"test:lcov": "c8 -r lcov mocha && npm run lint",
|
|
22
|
+
"posttest": "npm run lint && npm run dist",
|
|
23
|
+
"prepublishOnly": "npm run dist",
|
|
24
|
+
"dist": "npm run toc && rollup -c"
|
|
26
25
|
},
|
|
27
26
|
"files": [
|
|
28
27
|
"index.js",
|
|
29
28
|
"dist/chronokinesis.js",
|
|
30
|
-
"dist/index.es.js"
|
|
31
|
-
"LICENSE",
|
|
32
|
-
"README.md"
|
|
29
|
+
"dist/index.es.js"
|
|
33
30
|
],
|
|
34
31
|
"bugs": {
|
|
35
32
|
"url": "https://github.com/paed01/chronokinesis/issues"
|
|
@@ -49,15 +46,15 @@
|
|
|
49
46
|
"devDependencies": {
|
|
50
47
|
"@babel/core": "^7.12.3",
|
|
51
48
|
"@babel/preset-env": "^7.12.1",
|
|
52
|
-
"@
|
|
53
|
-
"@
|
|
54
|
-
"
|
|
55
|
-
"
|
|
49
|
+
"@rollup/plugin-babel": "^6.0.3",
|
|
50
|
+
"@rollup/plugin-commonjs": "^23.0.4",
|
|
51
|
+
"c8": "^7.12.0",
|
|
52
|
+
"chai": "^4.3.7",
|
|
53
|
+
"eslint": "^8.29.0",
|
|
56
54
|
"lodash.clonedeep": "^4.5.0",
|
|
57
55
|
"markdown-toc": "^1.2.0",
|
|
56
|
+
"mocha": "^10.1.0",
|
|
58
57
|
"moment": "^2.29.1",
|
|
59
|
-
"rollup": "^
|
|
60
|
-
"rollup-plugin-babel": "^4.4.0",
|
|
61
|
-
"rollup-plugin-commonjs": "^10.1.0"
|
|
58
|
+
"rollup": "^3.7.0"
|
|
62
59
|
}
|
|
63
60
|
}
|