chronokinesis 4.0.1 → 5.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  chronokinesis
2
2
  =============
3
- [![Build Status](https://app.travis-ci.com/paed01/chronokinesis.svg?branch=master)](https://app.travis-ci.com/paed01/chronokinesis) [![Coverage Status](https://coveralls.io/repos/github/paed01/chronokinesis/badge.svg?branch=master)](https://coveralls.io/github/paed01/chronokinesis?branch=master)
3
+ [![Build](https://github.com/paed01/chronokinesis/actions/workflows/build.yaml/badge.svg)](https://github.com/paed01/chronokinesis/actions/workflows/build.yaml) [![Coverage Status](https://coveralls.io/repos/github/paed01/chronokinesis/badge.svg?branch=master)](https://coveralls.io/github/paed01/chronokinesis?branch=master)
4
4
 
5
5
  Mock time and date for traveling and freezing. Inspired and borrowed from [timekeeper](https://github.com/vesln/timekeeper).
6
6
 
@@ -19,8 +19,8 @@ Mock time and date for traveling and freezing. Inspired and borrowed from [timek
19
19
  - [timezone `reset()`](#timezone-reset)
20
20
  - [timezone `defrost()`](#timezone-defrost)
21
21
  - [Distributions](#distributions)
22
- - [Browser](#browser)
23
- - [Rollup](#rollup)
22
+ - [Nodejs require](#nodejs-require)
23
+ - [Browser (UMD)](#browser-umd)
24
24
  - [Acknowledgements](#acknowledgements)
25
25
 
26
26
  <!-- tocstop -->
@@ -30,7 +30,7 @@ Mock time and date for traveling and freezing. Inspired and borrowed from [timek
30
30
  Mock `Date` and `Date.now` in order to help you test time-dependent code. Provides `travel`, `freeze`, and timezone functionality for your Node.js tests.
31
31
 
32
32
  ```javascript
33
- const ck = require('chronokinesis');
33
+ import * as ck from 'chronokinesis';
34
34
 
35
35
  ck.freeze();
36
36
 
@@ -45,8 +45,8 @@ setTimeout(() => {
45
45
  or use with [`moment`](http://momentjs.com):
46
46
 
47
47
  ```javascript
48
- const moment = require('moment');
49
- const ck = require('chronokinesis');
48
+ import moment from 'moment';
49
+ import * as ck from 'chronokinesis';
50
50
 
51
51
  ck.travel(moment().add(1, 'year'));
52
52
 
@@ -67,7 +67,7 @@ Freeze point in time. Calls can be made with the same arguments as the `Date` co
67
67
  - `...args`: Optional date constructor arguments, if empty stops time at now
68
68
 
69
69
  ```javascript
70
- const ck = require('chronokinesis');
70
+ import * as ck from 'chronokinesis';
71
71
 
72
72
  ck.freeze('1942-01-08');
73
73
 
@@ -86,7 +86,7 @@ Time travel to another era. Calls can be made with the same arguments as the `Da
86
86
  - `...args`: Optional date constructor arguments, pretty useless if empty but won´t crash
87
87
 
88
88
  ```javascript
89
- const ck = require('chronokinesis');
89
+ import * as ck from 'chronokinesis';
90
90
  let date = new Date(2018, 0, 31);
91
91
 
92
92
  ck.travel(date);
@@ -100,8 +100,8 @@ setTimeout(function() {
100
100
  When used in combination with [`freeze`](#freeze) the time is still frozen but at the travelled time().
101
101
 
102
102
  ```javascript
103
- const ck = require('chronokinesis');
104
- const moment = require('moment');
103
+ import * as ck from 'chronokinesis';
104
+ import moment from 'moment';
105
105
 
106
106
  let date = new Date(2018, 0, 31);
107
107
 
@@ -121,7 +121,7 @@ setTimeout(function() {
121
121
  Defrost a frozen point in time. Used in combination with travelling will start ticking the clock.
122
122
 
123
123
  ```javascript
124
- const ck = require('chronokinesis');
124
+ import * as ck from 'chronokinesis';
125
125
 
126
126
  ck.freeze(1980, 0, 1);
127
127
 
@@ -144,7 +144,7 @@ setTimeout(() => {
144
144
  Resets Date to current glory.
145
145
 
146
146
  ```javascript
147
- const ck = require('chronokinesis');
147
+ import * as ck from 'chronokinesis';
148
148
 
149
149
  ck.freeze(2060, 0, 1);
150
150
  console.log(`end of time is reached at ${new Date()} according to Newton`)
@@ -160,7 +160,7 @@ console.log(new Date())
160
160
  Utility function to see if we still travel or freeze time.
161
161
 
162
162
  ```javascript
163
- const ck = require('chronokinesis');
163
+ import * as ck from 'chronokinesis';
164
164
 
165
165
  console.log(ck.isKeepingTime() ? 'Is' : 'Not', 'keeping time');
166
166
  ck.travel(1893448800000);
@@ -172,7 +172,7 @@ console.log(ck.isKeepingTime() ? 'Is' : 'Not', 'keeping time');
172
172
  Freeze and travel in different time zones.
173
173
 
174
174
  ```javascript
175
- const ck = require('chronokinesis');
175
+ import * as ck from 'chronokinesis';
176
176
 
177
177
  const tz = ck.timezone('Asia/Shanghai');
178
178
 
@@ -197,15 +197,17 @@ Same as [#defrost](#defrost)
197
197
 
198
198
  # Distributions
199
199
 
200
- The module is prepared for browser and [rollup](https://github.com/rollup/rollup).
200
+ The module is prepared for browser and nodejs.
201
201
 
202
- ## Browser
202
+ ## Nodejs require
203
203
 
204
- Use `dist/chronokinesis.js`. Sets global property `chronokinesis`.
204
+ ```js
205
+ const ck = require('chronokinesis');
206
+ ```
205
207
 
206
- ## Rollup
208
+ ## Browser (UMD)
207
209
 
208
- `jsnext:main: dist/index.es.js`
210
+ Use `dist/chronokinesis.cjs`. Sets global property `chronokinesis`.
209
211
 
210
212
  # Acknowledgements
211
213
 
@@ -0,0 +1,202 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.chronokinesis = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ /**
8
+ * Inspired by Time keeper - EEasy testing of time-dependent code.
9
+ *
10
+ * Veselin Todorov <hi@vesln.com>
11
+ * MIT License.
12
+ */
13
+ const NativeDate = Date;
14
+ const nativeGetTimezoneOffset = NativeDate.prototype.getTimezoneOffset;
15
+
16
+ let freezedAt = null;
17
+ let traveledTo = null;
18
+ let started = null;
19
+ let iana = null;
20
+
21
+ function FakeDate(...args) {
22
+ const length = args.length;
23
+ if (!length) {
24
+ if (freezedAt) args = [freezedAt];
25
+ else if (traveledTo) args = [time()];
26
+ }
27
+
28
+ const dt = instantiate(NativeDate, args);
29
+
30
+ Object.defineProperty(dt, 'getTimezoneOffset', {
31
+ enumerable: false,
32
+ value: function getTimezoneOffset() {
33
+ const curr = nativeGetTimezoneOffset.call(this);
34
+ if (!iana) return curr;
35
+
36
+ const tz = timezone(iana).getTime(this);
37
+ return Math.round((tz - this.getTime()) / 60000) + curr;
38
+ },
39
+ });
40
+
41
+ return dt;
42
+ }
43
+
44
+ FakeDate.UTC = NativeDate.UTC;
45
+ FakeDate.parse = NativeDate.parse;
46
+
47
+ FakeDate.prototype = NativeDate.prototype;
48
+
49
+ FakeDate.now = function() {
50
+ if (freezedAt) return freezedAt.getTime();
51
+ return time();
52
+ };
53
+
54
+ function freeze(...args) {
55
+ useFakeDate();
56
+ freezedAt = instantiate(Date, args);
57
+ if (isNaN(freezedAt)) {
58
+ reset();
59
+ throw new TypeError('Chronokinesis cannot freeze to invalid date, check your arguments. Chronokinesis is reset');
60
+ }
61
+ return freezedAt;
62
+ }
63
+
64
+ function defrost() {
65
+ freezedAt = null;
66
+ }
67
+
68
+ function travel(...args) {
69
+ useFakeDate();
70
+ const travelToDate = instantiate(Date, args);
71
+ if (isNaN(travelToDate)) {
72
+ reset();
73
+ throw new TypeError('Chronokinesis cannot travel to invalid date, check your arguments. Chronokinesis is reset');
74
+ }
75
+
76
+ traveledTo = travelToDate.getTime();
77
+ started = NativeDate.now();
78
+
79
+ if (freezedAt) {
80
+ freezedAt = travelToDate;
81
+ }
82
+
83
+ return travelToDate;
84
+ }
85
+
86
+ function reset() {
87
+ useNativeDate();
88
+ freezedAt = null;
89
+ started = null;
90
+ traveledTo = null;
91
+ iana = null;
92
+ }
93
+
94
+ function isKeepingTime() {
95
+ return Date === FakeDate;
96
+ }
97
+
98
+ function timezone(timeZone) {
99
+ const options = {
100
+ year: 'numeric',
101
+ month: 'numeric',
102
+ day: 'numeric',
103
+ hour: 'numeric',
104
+ minute: 'numeric',
105
+ second: 'numeric',
106
+ hour12: false,
107
+ };
108
+
109
+ const current = Intl.DateTimeFormat('UTC', options);
110
+ const formatter = Intl.DateTimeFormat('UTC', {
111
+ timeZone: timeZone,
112
+ ...options,
113
+ });
114
+
115
+ return {
116
+ timeZone,
117
+ defrost,
118
+ reset,
119
+ isKeepingTime,
120
+ getTime,
121
+ freeze: freezeInTimezone,
122
+ travel: travelInTimezone,
123
+ };
124
+
125
+ function freezeInTimezone(...args) {
126
+ if (!args.length && iana === timeZone) return freeze();
127
+ iana = timeZone;
128
+ return freeze(getTime(...args));
129
+ }
130
+
131
+ function travelInTimezone(...args) {
132
+ if (!args.length && iana === timeZone) return travel();
133
+ iana = timeZone;
134
+ return travel(getTime(...args));
135
+ }
136
+
137
+ function getTime(...args) {
138
+ const realDate = instantiate(Date, args);
139
+ const tz = new NativeDate(toUTC(formatter, realDate));
140
+
141
+ if (!args.length) return tz.getTime();
142
+ const currentTz = new NativeDate(toUTC(current, realDate));
143
+
144
+ return realDate.getTime() + currentTz.getTime() - tz.getTime();
145
+ }
146
+ }
147
+
148
+ function useFakeDate() {
149
+ Date = FakeDate; // eslint-disable-line no-global-assign
150
+ }
151
+
152
+ function useNativeDate() {
153
+ Date = NativeDate; // eslint-disable-line no-global-assign
154
+ }
155
+
156
+ function time() {
157
+ return traveledTo + (NativeDate.now() - started);
158
+ }
159
+
160
+ function instantiate(type, args) {
161
+ const ctorArgs = args.slice();
162
+ ctorArgs.unshift(null);
163
+ return new (Function.prototype.bind.apply(type, ctorArgs))();
164
+ }
165
+
166
+ function toUTC(formatter, dt) {
167
+ let year, month, day, hour, minute, second;
168
+
169
+ for (const {type, value} of formatter.formatToParts(dt)) {
170
+ switch (type) {
171
+ case 'year':
172
+ year = parseInt(value);
173
+ break;
174
+ case 'month':
175
+ month = parseInt(value) - 1;
176
+ break;
177
+ case 'day':
178
+ day = parseInt(value);
179
+ break;
180
+ case 'hour':
181
+ hour = parseInt(value) % 24;
182
+ break;
183
+ case 'minute':
184
+ minute = parseInt(value);
185
+ break;
186
+ case 'second':
187
+ second = parseInt(value);
188
+ break;
189
+ }
190
+ }
191
+
192
+ return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
193
+ }
194
+
195
+ exports.defrost = defrost;
196
+ exports.freeze = freeze;
197
+ exports.isKeepingTime = isKeepingTime;
198
+ exports.reset = reset;
199
+ exports.timezone = timezone;
200
+ exports.travel = travel;
201
+
202
+ }));
package/dist/index.cjs ADDED
@@ -0,0 +1,196 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Inspired by Time keeper - EEasy testing of time-dependent code.
5
+ *
6
+ * Veselin Todorov <hi@vesln.com>
7
+ * MIT License.
8
+ */
9
+ const NativeDate = Date;
10
+ const nativeGetTimezoneOffset = NativeDate.prototype.getTimezoneOffset;
11
+
12
+ let freezedAt = null;
13
+ let traveledTo = null;
14
+ let started = null;
15
+ let iana = null;
16
+
17
+ function FakeDate(...args) {
18
+ const length = args.length;
19
+ if (!length) {
20
+ if (freezedAt) args = [freezedAt];
21
+ else if (traveledTo) args = [time()];
22
+ }
23
+
24
+ const dt = instantiate(NativeDate, args);
25
+
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
+ });
36
+
37
+ return dt;
38
+ }
39
+
40
+ FakeDate.UTC = NativeDate.UTC;
41
+ FakeDate.parse = NativeDate.parse;
42
+
43
+ FakeDate.prototype = NativeDate.prototype;
44
+
45
+ FakeDate.now = function() {
46
+ if (freezedAt) return freezedAt.getTime();
47
+ return time();
48
+ };
49
+
50
+ function freeze(...args) {
51
+ useFakeDate();
52
+ freezedAt = instantiate(Date, args);
53
+ if (isNaN(freezedAt)) {
54
+ reset();
55
+ throw new TypeError('Chronokinesis cannot freeze to invalid date, check your arguments. Chronokinesis is reset');
56
+ }
57
+ return freezedAt;
58
+ }
59
+
60
+ function defrost() {
61
+ freezedAt = null;
62
+ }
63
+
64
+ function travel(...args) {
65
+ useFakeDate();
66
+ const travelToDate = instantiate(Date, args);
67
+ if (isNaN(travelToDate)) {
68
+ reset();
69
+ throw new TypeError('Chronokinesis cannot travel to invalid date, check your arguments. Chronokinesis is reset');
70
+ }
71
+
72
+ traveledTo = travelToDate.getTime();
73
+ started = NativeDate.now();
74
+
75
+ if (freezedAt) {
76
+ freezedAt = travelToDate;
77
+ }
78
+
79
+ return travelToDate;
80
+ }
81
+
82
+ function reset() {
83
+ useNativeDate();
84
+ freezedAt = null;
85
+ started = null;
86
+ traveledTo = null;
87
+ iana = null;
88
+ }
89
+
90
+ function isKeepingTime() {
91
+ return Date === FakeDate;
92
+ }
93
+
94
+ function timezone(timeZone) {
95
+ const options = {
96
+ year: 'numeric',
97
+ month: 'numeric',
98
+ day: 'numeric',
99
+ hour: 'numeric',
100
+ minute: 'numeric',
101
+ second: 'numeric',
102
+ hour12: false,
103
+ };
104
+
105
+ const current = Intl.DateTimeFormat('UTC', options);
106
+ const formatter = Intl.DateTimeFormat('UTC', {
107
+ timeZone: timeZone,
108
+ ...options,
109
+ });
110
+
111
+ return {
112
+ timeZone,
113
+ defrost,
114
+ reset,
115
+ isKeepingTime,
116
+ getTime,
117
+ freeze: freezeInTimezone,
118
+ travel: travelInTimezone,
119
+ };
120
+
121
+ function freezeInTimezone(...args) {
122
+ if (!args.length && iana === timeZone) return freeze();
123
+ iana = timeZone;
124
+ return freeze(getTime(...args));
125
+ }
126
+
127
+ function travelInTimezone(...args) {
128
+ if (!args.length && iana === timeZone) return travel();
129
+ iana = timeZone;
130
+ return travel(getTime(...args));
131
+ }
132
+
133
+ function getTime(...args) {
134
+ const realDate = instantiate(Date, args);
135
+ const tz = new NativeDate(toUTC(formatter, realDate));
136
+
137
+ if (!args.length) return tz.getTime();
138
+ const currentTz = new NativeDate(toUTC(current, realDate));
139
+
140
+ return realDate.getTime() + currentTz.getTime() - tz.getTime();
141
+ }
142
+ }
143
+
144
+ function useFakeDate() {
145
+ Date = FakeDate; // eslint-disable-line no-global-assign
146
+ }
147
+
148
+ function useNativeDate() {
149
+ Date = NativeDate; // eslint-disable-line no-global-assign
150
+ }
151
+
152
+ function time() {
153
+ return traveledTo + (NativeDate.now() - started);
154
+ }
155
+
156
+ function instantiate(type, args) {
157
+ const ctorArgs = args.slice();
158
+ ctorArgs.unshift(null);
159
+ return new (Function.prototype.bind.apply(type, ctorArgs))();
160
+ }
161
+
162
+ function toUTC(formatter, dt) {
163
+ let year, month, day, hour, minute, second;
164
+
165
+ for (const {type, value} of formatter.formatToParts(dt)) {
166
+ switch (type) {
167
+ case 'year':
168
+ year = parseInt(value);
169
+ break;
170
+ case 'month':
171
+ month = parseInt(value) - 1;
172
+ break;
173
+ case 'day':
174
+ day = parseInt(value);
175
+ break;
176
+ case 'hour':
177
+ hour = parseInt(value) % 24;
178
+ break;
179
+ case 'minute':
180
+ minute = parseInt(value);
181
+ break;
182
+ case 'second':
183
+ second = parseInt(value);
184
+ break;
185
+ }
186
+ }
187
+
188
+ return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
189
+ }
190
+
191
+ exports.defrost = defrost;
192
+ exports.freeze = freeze;
193
+ exports.isKeepingTime = isKeepingTime;
194
+ exports.reset = reset;
195
+ exports.timezone = timezone;
196
+ exports.travel = travel;
package/index.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Freeze point in time.
3
+ * @param args Same arguments as the `Date` constructor.
4
+ */
5
+ export function freeze(...args: any[]): Date;
6
+ /**
7
+ * Defrost a frozen point in time.
8
+ * Used in combination with travelling will start ticking the clock.
9
+ */
10
+ export function defrost(): void;
11
+ /**
12
+ * Time travel to another era.
13
+ * @param args Same arguments as Date constructor.
14
+ */
15
+ export function travel(...args: any[]): Date;
16
+ /**
17
+ * Resets Date to current glory.
18
+ */
19
+ export function reset(): void;
20
+ /**
21
+ * Utility function to see if we still travel or freeze time.
22
+ */
23
+ export function isKeepingTime(): boolean;
24
+
25
+ /**
26
+ * Timezone traveling
27
+ */
28
+ interface TimezoneTraveling {
29
+ /** Timezone */
30
+ readonly timeZone: string;
31
+ defrost: typeof defrost;
32
+ reset: typeof reset;
33
+ isKeepingTime: typeof isKeepingTime;
34
+ freeze: typeof freeze;
35
+ travel: typeof travel;
36
+ /**
37
+ * Get timezone datetime in milliseconds, like Date.getTime
38
+ * @param args Same arguments as Date constructor.
39
+ * @returns number of milliseconds since the epoch (January 1, 1970, UTC)
40
+ */
41
+ getTime: (...args: any[]) => number;
42
+ }
43
+
44
+ /**
45
+ * Freeze and travel in different time zones.
46
+ * @param timeZone
47
+ */
48
+ export function timezone(timeZone: string): TimezoneTraveling;
package/index.js CHANGED
@@ -4,8 +4,6 @@
4
4
  * Veselin Todorov <hi@vesln.com>
5
5
  * MIT License.
6
6
  */
7
- 'use strict';
8
-
9
7
  const NativeDate = Date;
10
8
  const nativeGetTimezoneOffset = NativeDate.prototype.getTimezoneOffset;
11
9
 
@@ -47,16 +45,7 @@ FakeDate.now = function() {
47
45
  return time();
48
46
  };
49
47
 
50
- module.exports = {
51
- freeze,
52
- defrost,
53
- travel,
54
- reset,
55
- isKeepingTime,
56
- timezone,
57
- };
58
-
59
- function freeze(...args) {
48
+ export function freeze(...args) {
60
49
  useFakeDate();
61
50
  freezedAt = instantiate(Date, args);
62
51
  if (isNaN(freezedAt)) {
@@ -66,11 +55,11 @@ function freeze(...args) {
66
55
  return freezedAt;
67
56
  }
68
57
 
69
- function defrost() {
58
+ export function defrost() {
70
59
  freezedAt = null;
71
60
  }
72
61
 
73
- function travel(...args) {
62
+ export function travel(...args) {
74
63
  useFakeDate();
75
64
  const travelToDate = instantiate(Date, args);
76
65
  if (isNaN(travelToDate)) {
@@ -88,7 +77,7 @@ function travel(...args) {
88
77
  return travelToDate;
89
78
  }
90
79
 
91
- function reset() {
80
+ export function reset() {
92
81
  useNativeDate();
93
82
  freezedAt = null;
94
83
  started = null;
@@ -96,11 +85,11 @@ function reset() {
96
85
  iana = null;
97
86
  }
98
87
 
99
- function isKeepingTime() {
88
+ export function isKeepingTime() {
100
89
  return Date === FakeDate;
101
90
  }
102
91
 
103
- function timezone(timeZone) {
92
+ export function timezone(timeZone) {
104
93
  const options = {
105
94
  year: 'numeric',
106
95
  month: 'numeric',
package/package.json CHANGED
@@ -1,32 +1,36 @@
1
1
  {
2
2
  "name": "chronokinesis",
3
- "version": "4.0.1",
3
+ "version": "5.0.0",
4
4
  "description": "Module for testing time-dependent code",
5
5
  "author": {
6
6
  "name": "Pål Edman",
7
7
  "url": "https://github.com/paed01"
8
8
  },
9
9
  "license": "MIT",
10
- "main": "index.js",
11
- "browser": "dist/chronokinesis.js",
12
- "jsnext:main": "dist/index.es.js",
10
+ "type": "module",
11
+ "module": "index.js",
12
+ "main": "dist/main.cjs",
13
+ "browser": "dist/chronokinesis.cjs",
14
+ "jsnext:main": "index.js",
15
+ "sideEffects": true,
13
16
  "repository": {
14
17
  "type": "git",
15
18
  "url": "git://github.com/paed01/chronokinesis"
16
19
  },
17
20
  "scripts": {
18
- "toc": "node generate-api-toc.js",
21
+ "toc": "node generate-api-toc.cjs",
19
22
  "test": "mocha",
20
23
  "lint": "eslint . --cache",
21
- "test:lcov": "c8 -r lcov mocha && npm run lint",
24
+ "test:lcov": "c8 -r lcov -r text mocha && npm run lint",
22
25
  "posttest": "npm run lint && npm run dist",
23
- "prepublishOnly": "npm run dist",
26
+ "prepack": "npm run dist",
24
27
  "dist": "npm run toc && rollup -c"
25
28
  },
26
29
  "files": [
27
30
  "index.js",
28
- "dist/chronokinesis.js",
29
- "dist/index.es.js"
31
+ "index.d.ts",
32
+ "dist/chronokinesis.cjs",
33
+ "dist/index.cjs"
30
34
  ],
31
35
  "bugs": {
32
36
  "url": "https://github.com/paed01/chronokinesis/issues"
@@ -44,17 +48,14 @@
44
48
  "fake now"
45
49
  ],
46
50
  "devDependencies": {
47
- "@babel/core": "^7.12.3",
48
- "@babel/preset-env": "^7.12.1",
49
- "@rollup/plugin-babel": "^6.0.3",
50
- "@rollup/plugin-commonjs": "^23.0.4",
51
+ "@rollup/plugin-commonjs": "^24.0.1",
51
52
  "c8": "^7.12.0",
52
53
  "chai": "^4.3.7",
53
54
  "eslint": "^8.29.0",
54
55
  "lodash.clonedeep": "^4.5.0",
55
56
  "markdown-toc": "^1.2.0",
56
57
  "mocha": "^10.1.0",
57
- "moment": "^2.29.1",
58
+ "moment": "^2.29.4",
58
59
  "rollup": "^3.7.0"
59
60
  }
60
61
  }
@@ -1,305 +0,0 @@
1
- var chronokinesis = (function (exports) {
2
- 'use strict';
3
-
4
- function ownKeys(object, enumerableOnly) {
5
- var keys = Object.keys(object);
6
- if (Object.getOwnPropertySymbols) {
7
- var symbols = Object.getOwnPropertySymbols(object);
8
- enumerableOnly && (symbols = symbols.filter(function (sym) {
9
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
10
- })), keys.push.apply(keys, symbols);
11
- }
12
- return keys;
13
- }
14
- function _objectSpread2(target) {
15
- for (var i = 1; i < arguments.length; i++) {
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
- });
22
- }
23
- return target;
24
- }
25
- function _defineProperty(obj, key, value) {
26
- key = _toPropertyKey(key);
27
- if (key in obj) {
28
- Object.defineProperty(obj, key, {
29
- value: value,
30
- enumerable: true,
31
- configurable: true,
32
- writable: true
33
- });
34
- } else {
35
- obj[key] = value;
36
- }
37
- return obj;
38
- }
39
- function _unsupportedIterableToArray(o, minLen) {
40
- if (!o) return;
41
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
42
- var n = Object.prototype.toString.call(o).slice(8, -1);
43
- if (n === "Object" && o.constructor) n = o.constructor.name;
44
- if (n === "Map" || n === "Set") return Array.from(o);
45
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
46
- }
47
- function _arrayLikeToArray(arr, len) {
48
- if (len == null || len > arr.length) len = arr.length;
49
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
50
- return arr2;
51
- }
52
- function _createForOfIteratorHelper(o, allowArrayLike) {
53
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
54
- if (!it) {
55
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
56
- if (it) o = it;
57
- var i = 0;
58
- var F = function () {};
59
- return {
60
- s: F,
61
- n: function () {
62
- if (i >= o.length) return {
63
- done: true
64
- };
65
- return {
66
- done: false,
67
- value: o[i++]
68
- };
69
- },
70
- e: function (e) {
71
- throw e;
72
- },
73
- f: F
74
- };
75
- }
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.");
77
- }
78
- var normalCompletion = true,
79
- didErr = false,
80
- err;
81
- return {
82
- s: function () {
83
- it = it.call(o);
84
- },
85
- n: function () {
86
- var step = it.next();
87
- normalCompletion = step.done;
88
- return step;
89
- },
90
- e: function (e) {
91
- didErr = true;
92
- err = e;
93
- },
94
- f: function () {
95
- try {
96
- if (!normalCompletion && it.return != null) it.return();
97
- } finally {
98
- if (didErr) throw err;
99
- }
100
- }
101
- };
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
- }
117
-
118
- var NativeDate = Date;
119
- var nativeGetTimezoneOffset = NativeDate.prototype.getTimezoneOffset;
120
- var freezedAt = null;
121
- var traveledTo = null;
122
- var started = null;
123
- var iana = null;
124
- function FakeDate() {
125
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
126
- args[_key] = arguments[_key];
127
- }
128
- var length = args.length;
129
- if (!length) {
130
- if (freezedAt) args = [freezedAt];else if (traveledTo) args = [time()];
131
- }
132
- var dt = instantiate(NativeDate, args);
133
- Object.defineProperty(dt, 'getTimezoneOffset', {
134
- enumerable: false,
135
- value: function getTimezoneOffset() {
136
- var curr = nativeGetTimezoneOffset.call(this);
137
- if (!iana) return curr;
138
- var tz = timezone(iana).getTime(this);
139
- return Math.round((tz - this.getTime()) / 60000) + curr;
140
- }
141
- });
142
- return dt;
143
- }
144
- FakeDate.UTC = NativeDate.UTC;
145
- FakeDate.parse = NativeDate.parse;
146
- FakeDate.prototype = NativeDate.prototype;
147
- FakeDate.now = function () {
148
- if (freezedAt) return freezedAt.getTime();
149
- return time();
150
- };
151
- var chronokinesis = {
152
- freeze: freeze,
153
- defrost: defrost,
154
- travel: travel,
155
- reset: reset,
156
- isKeepingTime: isKeepingTime,
157
- timezone: timezone
158
- };
159
- function freeze() {
160
- useFakeDate();
161
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
162
- args[_key2] = arguments[_key2];
163
- }
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
- }
169
- return freezedAt;
170
- }
171
- function defrost() {
172
- freezedAt = null;
173
- }
174
- function travel() {
175
- useFakeDate();
176
- for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
177
- args[_key3] = arguments[_key3];
178
- }
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
- }
184
- traveledTo = travelToDate.getTime();
185
- started = NativeDate.now();
186
- if (freezedAt) {
187
- freezedAt = travelToDate;
188
- }
189
- return travelToDate;
190
- }
191
- function reset() {
192
- useNativeDate();
193
- freezedAt = null;
194
- started = null;
195
- traveledTo = null;
196
- iana = null;
197
- }
198
- function isKeepingTime() {
199
- return Date === FakeDate;
200
- }
201
- function timezone(timeZone) {
202
- var options = {
203
- year: 'numeric',
204
- month: 'numeric',
205
- day: 'numeric',
206
- hour: 'numeric',
207
- minute: 'numeric',
208
- second: 'numeric',
209
- hour12: false
210
- };
211
- var current = Intl.DateTimeFormat('UTC', options);
212
- var formatter = Intl.DateTimeFormat('UTC', _objectSpread2({
213
- timeZone: timeZone
214
- }, options));
215
- return {
216
- timeZone: timeZone,
217
- defrost: defrost,
218
- reset: reset,
219
- isKeepingTime: isKeepingTime,
220
- getTime: getTime,
221
- freeze: freezeInTimezone,
222
- travel: travelInTimezone
223
- };
224
- function freezeInTimezone() {
225
- if (!arguments.length && iana === timeZone) return freeze();
226
- iana = timeZone;
227
- return freeze(getTime.apply(void 0, arguments));
228
- }
229
- function travelInTimezone() {
230
- if (!arguments.length && iana === timeZone) return travel();
231
- iana = timeZone;
232
- return travel(getTime.apply(void 0, arguments));
233
- }
234
- function getTime() {
235
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
236
- args[_key4] = arguments[_key4];
237
- }
238
- var realDate = instantiate(Date, args);
239
- var tz = new NativeDate(toUTC(formatter, realDate));
240
- if (!args.length) return tz.getTime();
241
- var currentTz = new NativeDate(toUTC(current, realDate));
242
- return realDate.getTime() + currentTz.getTime() - tz.getTime();
243
- }
244
- }
245
- function useFakeDate() {
246
- Date = FakeDate; // eslint-disable-line no-global-assign
247
- }
248
-
249
- function useNativeDate() {
250
- Date = NativeDate; // eslint-disable-line no-global-assign
251
- }
252
-
253
- function time() {
254
- return traveledTo + (NativeDate.now() - started);
255
- }
256
- function instantiate(type, args) {
257
- var ctorArgs = args.slice();
258
- ctorArgs.unshift(null);
259
- return new (Function.prototype.bind.apply(type, ctorArgs))();
260
- }
261
- function toUTC(formatter, dt) {
262
- var year, month, day, hour, minute, second;
263
- var _iterator = _createForOfIteratorHelper(formatter.formatToParts(dt)),
264
- _step;
265
- try {
266
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
267
- var _step$value = _step.value,
268
- type = _step$value.type,
269
- value = _step$value.value;
270
- switch (type) {
271
- case 'year':
272
- year = parseInt(value);
273
- break;
274
- case 'month':
275
- month = parseInt(value) - 1;
276
- break;
277
- case 'day':
278
- day = parseInt(value);
279
- break;
280
- case 'hour':
281
- hour = parseInt(value) % 24;
282
- break;
283
- case 'minute':
284
- minute = parseInt(value);
285
- break;
286
- case 'second':
287
- second = parseInt(value);
288
- break;
289
- }
290
- }
291
- } catch (err) {
292
- _iterator.e(err);
293
- } finally {
294
- _iterator.f();
295
- }
296
- return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
297
- }
298
-
299
- exports.default = chronokinesis;
300
-
301
- Object.defineProperty(exports, '__esModule', { value: true });
302
-
303
- return exports;
304
-
305
- })({});
package/dist/index.es.js DELETED
@@ -1,296 +0,0 @@
1
- function ownKeys(object, enumerableOnly) {
2
- var keys = Object.keys(object);
3
- if (Object.getOwnPropertySymbols) {
4
- var symbols = Object.getOwnPropertySymbols(object);
5
- enumerableOnly && (symbols = symbols.filter(function (sym) {
6
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
7
- })), keys.push.apply(keys, symbols);
8
- }
9
- return keys;
10
- }
11
- function _objectSpread2(target) {
12
- for (var i = 1; i < arguments.length; i++) {
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
- });
19
- }
20
- return target;
21
- }
22
- function _defineProperty(obj, key, value) {
23
- key = _toPropertyKey(key);
24
- if (key in obj) {
25
- Object.defineProperty(obj, key, {
26
- value: value,
27
- enumerable: true,
28
- configurable: true,
29
- writable: true
30
- });
31
- } else {
32
- obj[key] = value;
33
- }
34
- return obj;
35
- }
36
- function _unsupportedIterableToArray(o, minLen) {
37
- if (!o) return;
38
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
39
- var n = Object.prototype.toString.call(o).slice(8, -1);
40
- if (n === "Object" && o.constructor) n = o.constructor.name;
41
- if (n === "Map" || n === "Set") return Array.from(o);
42
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
43
- }
44
- function _arrayLikeToArray(arr, len) {
45
- if (len == null || len > arr.length) len = arr.length;
46
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
47
- return arr2;
48
- }
49
- function _createForOfIteratorHelper(o, allowArrayLike) {
50
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
51
- if (!it) {
52
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
53
- if (it) o = it;
54
- var i = 0;
55
- var F = function () {};
56
- return {
57
- s: F,
58
- n: function () {
59
- if (i >= o.length) return {
60
- done: true
61
- };
62
- return {
63
- done: false,
64
- value: o[i++]
65
- };
66
- },
67
- e: function (e) {
68
- throw e;
69
- },
70
- f: F
71
- };
72
- }
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.");
74
- }
75
- var normalCompletion = true,
76
- didErr = false,
77
- err;
78
- return {
79
- s: function () {
80
- it = it.call(o);
81
- },
82
- n: function () {
83
- var step = it.next();
84
- normalCompletion = step.done;
85
- return step;
86
- },
87
- e: function (e) {
88
- didErr = true;
89
- err = e;
90
- },
91
- f: function () {
92
- try {
93
- if (!normalCompletion && it.return != null) it.return();
94
- } finally {
95
- if (didErr) throw err;
96
- }
97
- }
98
- };
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
- }
114
-
115
- var NativeDate = Date;
116
- var nativeGetTimezoneOffset = NativeDate.prototype.getTimezoneOffset;
117
- var freezedAt = null;
118
- var traveledTo = null;
119
- var started = null;
120
- var iana = null;
121
- function FakeDate() {
122
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
123
- args[_key] = arguments[_key];
124
- }
125
- var length = args.length;
126
- if (!length) {
127
- if (freezedAt) args = [freezedAt];else if (traveledTo) args = [time()];
128
- }
129
- var dt = instantiate(NativeDate, args);
130
- Object.defineProperty(dt, 'getTimezoneOffset', {
131
- enumerable: false,
132
- value: function getTimezoneOffset() {
133
- var curr = nativeGetTimezoneOffset.call(this);
134
- if (!iana) return curr;
135
- var tz = timezone(iana).getTime(this);
136
- return Math.round((tz - this.getTime()) / 60000) + curr;
137
- }
138
- });
139
- return dt;
140
- }
141
- FakeDate.UTC = NativeDate.UTC;
142
- FakeDate.parse = NativeDate.parse;
143
- FakeDate.prototype = NativeDate.prototype;
144
- FakeDate.now = function () {
145
- if (freezedAt) return freezedAt.getTime();
146
- return time();
147
- };
148
- var chronokinesis = {
149
- freeze: freeze,
150
- defrost: defrost,
151
- travel: travel,
152
- reset: reset,
153
- isKeepingTime: isKeepingTime,
154
- timezone: timezone
155
- };
156
- function freeze() {
157
- useFakeDate();
158
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
159
- args[_key2] = arguments[_key2];
160
- }
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
- }
166
- return freezedAt;
167
- }
168
- function defrost() {
169
- freezedAt = null;
170
- }
171
- function travel() {
172
- useFakeDate();
173
- for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
174
- args[_key3] = arguments[_key3];
175
- }
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
- }
181
- traveledTo = travelToDate.getTime();
182
- started = NativeDate.now();
183
- if (freezedAt) {
184
- freezedAt = travelToDate;
185
- }
186
- return travelToDate;
187
- }
188
- function reset() {
189
- useNativeDate();
190
- freezedAt = null;
191
- started = null;
192
- traveledTo = null;
193
- iana = null;
194
- }
195
- function isKeepingTime() {
196
- return Date === FakeDate;
197
- }
198
- function timezone(timeZone) {
199
- var options = {
200
- year: 'numeric',
201
- month: 'numeric',
202
- day: 'numeric',
203
- hour: 'numeric',
204
- minute: 'numeric',
205
- second: 'numeric',
206
- hour12: false
207
- };
208
- var current = Intl.DateTimeFormat('UTC', options);
209
- var formatter = Intl.DateTimeFormat('UTC', _objectSpread2({
210
- timeZone: timeZone
211
- }, options));
212
- return {
213
- timeZone: timeZone,
214
- defrost: defrost,
215
- reset: reset,
216
- isKeepingTime: isKeepingTime,
217
- getTime: getTime,
218
- freeze: freezeInTimezone,
219
- travel: travelInTimezone
220
- };
221
- function freezeInTimezone() {
222
- if (!arguments.length && iana === timeZone) return freeze();
223
- iana = timeZone;
224
- return freeze(getTime.apply(void 0, arguments));
225
- }
226
- function travelInTimezone() {
227
- if (!arguments.length && iana === timeZone) return travel();
228
- iana = timeZone;
229
- return travel(getTime.apply(void 0, arguments));
230
- }
231
- function getTime() {
232
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
233
- args[_key4] = arguments[_key4];
234
- }
235
- var realDate = instantiate(Date, args);
236
- var tz = new NativeDate(toUTC(formatter, realDate));
237
- if (!args.length) return tz.getTime();
238
- var currentTz = new NativeDate(toUTC(current, realDate));
239
- return realDate.getTime() + currentTz.getTime() - tz.getTime();
240
- }
241
- }
242
- function useFakeDate() {
243
- Date = FakeDate; // eslint-disable-line no-global-assign
244
- }
245
-
246
- function useNativeDate() {
247
- Date = NativeDate; // eslint-disable-line no-global-assign
248
- }
249
-
250
- function time() {
251
- return traveledTo + (NativeDate.now() - started);
252
- }
253
- function instantiate(type, args) {
254
- var ctorArgs = args.slice();
255
- ctorArgs.unshift(null);
256
- return new (Function.prototype.bind.apply(type, ctorArgs))();
257
- }
258
- function toUTC(formatter, dt) {
259
- var year, month, day, hour, minute, second;
260
- var _iterator = _createForOfIteratorHelper(formatter.formatToParts(dt)),
261
- _step;
262
- try {
263
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
264
- var _step$value = _step.value,
265
- type = _step$value.type,
266
- value = _step$value.value;
267
- switch (type) {
268
- case 'year':
269
- year = parseInt(value);
270
- break;
271
- case 'month':
272
- month = parseInt(value) - 1;
273
- break;
274
- case 'day':
275
- day = parseInt(value);
276
- break;
277
- case 'hour':
278
- hour = parseInt(value) % 24;
279
- break;
280
- case 'minute':
281
- minute = parseInt(value);
282
- break;
283
- case 'second':
284
- second = parseInt(value);
285
- break;
286
- }
287
- }
288
- } catch (err) {
289
- _iterator.e(err);
290
- } finally {
291
- _iterator.f();
292
- }
293
- return NativeDate.UTC(year, month, day, hour, minute, second, dt.getMilliseconds());
294
- }
295
-
296
- export { chronokinesis as default };