@pvorona/duration 0.0.3 → 0.1.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 +40 -79
- package/dist/index.js +115 -98
- package/dist/lib/duration.d.ts +21 -23
- package/dist/lib/duration.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,9 +13,9 @@ npm i @pvorona/duration
|
|
|
13
13
|
### Create and convert
|
|
14
14
|
|
|
15
15
|
```ts
|
|
16
|
-
import {
|
|
16
|
+
import { minutes } from '@pvorona/duration';
|
|
17
17
|
|
|
18
|
-
const d =
|
|
18
|
+
const d = minutes(5);
|
|
19
19
|
d.toSeconds(); // 300
|
|
20
20
|
d.toMilliSeconds(); // 300_000
|
|
21
21
|
```
|
|
@@ -23,10 +23,10 @@ d.toMilliSeconds(); // 300_000
|
|
|
23
23
|
### Compare
|
|
24
24
|
|
|
25
25
|
```ts
|
|
26
|
-
import {
|
|
26
|
+
import { milliSeconds, seconds } from '@pvorona/duration';
|
|
27
27
|
|
|
28
|
-
const a =
|
|
29
|
-
const b =
|
|
28
|
+
const a = seconds(1);
|
|
29
|
+
const b = milliSeconds(900);
|
|
30
30
|
|
|
31
31
|
a.greaterThan(b); // true
|
|
32
32
|
a.compare(b); // 1
|
|
@@ -35,19 +35,19 @@ a.compare(b); // 1
|
|
|
35
35
|
### Arithmetic
|
|
36
36
|
|
|
37
37
|
```ts
|
|
38
|
-
import {
|
|
38
|
+
import { add, milliSeconds, seconds } from '@pvorona/duration';
|
|
39
39
|
|
|
40
|
-
const total =
|
|
40
|
+
const total = add(seconds(1), milliSeconds(500));
|
|
41
41
|
total.toMilliSeconds(); // 1500
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
### Between dates
|
|
45
45
|
|
|
46
46
|
```ts
|
|
47
|
-
import {
|
|
47
|
+
import { since } from '@pvorona/duration';
|
|
48
48
|
|
|
49
49
|
const startedAt = new Date(Date.now() - 2_000);
|
|
50
|
-
const elapsed =
|
|
50
|
+
const elapsed = since(startedAt);
|
|
51
51
|
elapsed.toSeconds(); // ~2
|
|
52
52
|
```
|
|
53
53
|
|
|
@@ -55,7 +55,7 @@ elapsed.toSeconds(); // ~2
|
|
|
55
55
|
|
|
56
56
|
### `const enum TimeUnit`
|
|
57
57
|
|
|
58
|
-
Time units supported by `
|
|
58
|
+
Time units supported by `duration(value, unit)` and `d.to(unit)`.
|
|
59
59
|
|
|
60
60
|
```ts
|
|
61
61
|
export const enum TimeUnit {
|
|
@@ -78,9 +78,9 @@ Notes:
|
|
|
78
78
|
Example:
|
|
79
79
|
|
|
80
80
|
```ts
|
|
81
|
-
import {
|
|
81
|
+
import { duration, TimeUnit } from '@pvorona/duration';
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
duration(2, TimeUnit.Hour).toMinutes(); // 120
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
### `type Duration`
|
|
@@ -90,8 +90,8 @@ An opaque, immutable duration value.
|
|
|
90
90
|
#### Properties
|
|
91
91
|
|
|
92
92
|
- **`isFinite: boolean`**: `true` unless the duration is infinite
|
|
93
|
-
- **`isInfinite: boolean`**: `true` for `
|
|
94
|
-
- **`isInstant: boolean`**: `true` for zero duration (`
|
|
93
|
+
- **`isInfinite: boolean`**: `true` for `infinite`
|
|
94
|
+
- **`isInstant: boolean`**: `true` for zero duration (`instant`)
|
|
95
95
|
|
|
96
96
|
#### Conversions
|
|
97
97
|
|
|
@@ -117,101 +117,62 @@ An opaque, immutable duration value.
|
|
|
117
117
|
Example (properties + conversion + comparison):
|
|
118
118
|
|
|
119
119
|
```ts
|
|
120
|
-
import type
|
|
121
|
-
import { Duration as DurationNS } from '@pvorona/duration';
|
|
120
|
+
import { milliSeconds, seconds, type Duration } from '@pvorona/duration';
|
|
122
121
|
|
|
123
122
|
function isShort(d: Duration) {
|
|
124
123
|
return d.isFinite && d.toSeconds() < 5;
|
|
125
124
|
}
|
|
126
125
|
|
|
127
|
-
const a =
|
|
128
|
-
const b =
|
|
126
|
+
const a = seconds(1);
|
|
127
|
+
const b = milliSeconds(900);
|
|
129
128
|
|
|
130
129
|
isShort(a); // true
|
|
131
130
|
a.greaterThan(b); // true
|
|
132
131
|
```
|
|
133
132
|
|
|
134
|
-
###
|
|
135
|
-
|
|
136
|
-
Namespace-style factory + utilities.
|
|
133
|
+
### Function API
|
|
137
134
|
|
|
138
135
|
#### Constructors
|
|
139
136
|
|
|
140
|
-
-
|
|
141
|
-
-
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
|
|
150
|
-
Example:
|
|
151
|
-
|
|
152
|
-
```ts
|
|
153
|
-
import { Duration } from '@pvorona/duration';
|
|
154
|
-
|
|
155
|
-
Duration.ofHours(1).toMinutes(); // 60
|
|
156
|
-
Duration.ofWeeks(2).toDays(); // 14
|
|
157
|
-
```
|
|
137
|
+
- `duration(value: number, unit: TimeUnit): Duration`
|
|
138
|
+
- `milliSeconds(value: number): Duration`
|
|
139
|
+
- `seconds(value: number): Duration`
|
|
140
|
+
- `minutes(value: number): Duration`
|
|
141
|
+
- `hours(value: number): Duration`
|
|
142
|
+
- `days(value: number): Duration`
|
|
143
|
+
- `weeks(value: number): Duration`
|
|
144
|
+
- `months(value: number): Duration`
|
|
145
|
+
- `years(value: number): Duration`
|
|
158
146
|
|
|
159
147
|
#### Date helpers
|
|
160
148
|
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
|
|
164
|
-
Example:
|
|
165
|
-
|
|
166
|
-
```ts
|
|
167
|
-
import { Duration } from '@pvorona/duration';
|
|
168
|
-
|
|
169
|
-
const d = Duration.between(new Date(0), new Date(1_000));
|
|
170
|
-
d.toSeconds(); // 1
|
|
171
|
-
```
|
|
149
|
+
- `between(start: Date, end: Date): Duration`
|
|
150
|
+
- `since(start: Date): Duration`
|
|
172
151
|
|
|
173
152
|
#### Arithmetic helpers
|
|
174
153
|
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
|
|
180
|
-
Example:
|
|
181
|
-
|
|
182
|
-
```ts
|
|
183
|
-
import { Duration } from '@pvorona/duration';
|
|
184
|
-
|
|
185
|
-
const d = Duration.multiply(Duration.ofSeconds(2), 3);
|
|
186
|
-
d.toSeconds(); // 6
|
|
187
|
-
```
|
|
154
|
+
- `add(a: Duration, b: Duration): Duration`
|
|
155
|
+
- `subtract(a: Duration, b: Duration): Duration`
|
|
156
|
+
- `multiply(a: Duration, b: number): Duration`
|
|
157
|
+
- `divide(a: Duration, b: number): Duration`
|
|
188
158
|
|
|
189
159
|
#### Constants
|
|
190
160
|
|
|
191
|
-
-
|
|
192
|
-
-
|
|
193
|
-
|
|
194
|
-
Example:
|
|
195
|
-
|
|
196
|
-
```ts
|
|
197
|
-
import { Duration } from '@pvorona/duration';
|
|
198
|
-
|
|
199
|
-
Duration.ofInstant.isInstant; // true
|
|
200
|
-
Duration.ofInfinite.isInfinite; // true
|
|
201
|
-
```
|
|
161
|
+
- `instant: Duration`
|
|
162
|
+
- `infinite: Duration`
|
|
202
163
|
|
|
203
164
|
#### Guards / equality
|
|
204
165
|
|
|
205
|
-
-
|
|
206
|
-
-
|
|
166
|
+
- `isDuration(value: unknown): value is Duration`
|
|
167
|
+
- `isEqual(a: Duration, b: Duration): boolean`
|
|
207
168
|
|
|
208
169
|
Example:
|
|
209
170
|
|
|
210
171
|
```ts
|
|
211
|
-
import {
|
|
172
|
+
import { isDuration, seconds } from '@pvorona/duration';
|
|
212
173
|
|
|
213
|
-
const maybe: unknown =
|
|
214
|
-
if (
|
|
174
|
+
const maybe: unknown = seconds(1);
|
|
175
|
+
if (isDuration(maybe)) {
|
|
215
176
|
maybe.toMilliSeconds(); // ok, narrowed
|
|
216
177
|
}
|
|
217
178
|
```
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var f = /* @__PURE__ */ ((t) => (t[t.MilliSecond = 0] = "MilliSecond", t[t.Second = 1] = "Second", t[t.Minute = 2] = "Minute", t[t.Hour = 3] = "Hour", t[t.Day = 4] = "Day", t[t.Week = 5] = "Week", t[t.Month = 6] = "Month", t[t.Year = 7] = "Year", t))(f || {});
|
|
5
|
-
const e = /* @__PURE__ */ Symbol("milliSeconds"), u = {
|
|
1
|
+
import { isObject as i } from "@pvorona/assert";
|
|
2
|
+
var c = /* @__PURE__ */ ((t) => (t[t.MilliSecond = 0] = "MilliSecond", t[t.Second = 1] = "Second", t[t.Minute = 2] = "Minute", t[t.Hour = 3] = "Hour", t[t.Day = 4] = "Day", t[t.Week = 5] = "Week", t[t.Month = 6] = "Month", t[t.Year = 7] = "Year", t))(c || {});
|
|
3
|
+
const n = /* @__PURE__ */ Symbol("milliSeconds"), o = {
|
|
6
4
|
0: 1,
|
|
7
5
|
1: 1e3,
|
|
8
6
|
2: 60 * 1e3,
|
|
@@ -21,12 +19,12 @@ const e = /* @__PURE__ */ Symbol("milliSeconds"), u = {
|
|
|
21
19
|
365.25 * 24 * 60 * 60 * 1e3
|
|
22
20
|
)
|
|
23
21
|
}, a = {
|
|
24
|
-
[
|
|
22
|
+
[n]: 0,
|
|
25
23
|
isFinite: !1,
|
|
26
24
|
isInfinite: !1,
|
|
27
25
|
isInstant: !1,
|
|
28
26
|
to(t) {
|
|
29
|
-
return this[
|
|
27
|
+
return this[n] / o[t];
|
|
30
28
|
},
|
|
31
29
|
toMilliSeconds() {
|
|
32
30
|
return this.to(
|
|
@@ -77,112 +75,131 @@ const e = /* @__PURE__ */ Symbol("milliSeconds"), u = {
|
|
|
77
75
|
);
|
|
78
76
|
},
|
|
79
77
|
equals(t) {
|
|
80
|
-
return this[
|
|
78
|
+
return this[n] === t[n];
|
|
81
79
|
},
|
|
82
80
|
lessThan(t) {
|
|
83
|
-
return this[
|
|
81
|
+
return this[n] < t[n];
|
|
84
82
|
},
|
|
85
83
|
lessThanOrEqual(t) {
|
|
86
|
-
return this[
|
|
84
|
+
return this[n] <= t[n];
|
|
87
85
|
},
|
|
88
86
|
greaterThan(t) {
|
|
89
|
-
return this[
|
|
87
|
+
return this[n] > t[n];
|
|
90
88
|
},
|
|
91
89
|
greaterThanOrEqual(t) {
|
|
92
|
-
return this[
|
|
90
|
+
return this[n] >= t[n];
|
|
93
91
|
},
|
|
94
92
|
compare(t) {
|
|
95
93
|
return this.lessThan(t) ? -1 : this.greaterThan(t) ? 1 : 0;
|
|
96
94
|
}
|
|
97
95
|
};
|
|
98
|
-
function
|
|
99
|
-
const
|
|
100
|
-
return
|
|
96
|
+
function f(t, r) {
|
|
97
|
+
const s = Object.create(a);
|
|
98
|
+
return s[n] = t * o[r], s.isFinite = t !== 1 / 0, s.isInfinite = t === 1 / 0, s.isInstant = t === 0, Object.freeze(s);
|
|
101
99
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
t,
|
|
109
|
-
0
|
|
110
|
-
/* MilliSecond */
|
|
111
|
-
);
|
|
112
|
-
},
|
|
113
|
-
ofSeconds(t) {
|
|
114
|
-
return n.of(
|
|
115
|
-
t,
|
|
116
|
-
1
|
|
117
|
-
/* Second */
|
|
118
|
-
);
|
|
119
|
-
},
|
|
120
|
-
ofMinutes(t) {
|
|
121
|
-
return n.of(
|
|
122
|
-
t,
|
|
123
|
-
2
|
|
124
|
-
/* Minute */
|
|
125
|
-
);
|
|
126
|
-
},
|
|
127
|
-
ofHours(t) {
|
|
128
|
-
return n.of(
|
|
129
|
-
t,
|
|
130
|
-
3
|
|
131
|
-
/* Hour */
|
|
132
|
-
);
|
|
133
|
-
},
|
|
134
|
-
ofDays(t) {
|
|
135
|
-
return n.of(
|
|
136
|
-
t,
|
|
137
|
-
4
|
|
138
|
-
/* Day */
|
|
139
|
-
);
|
|
140
|
-
},
|
|
141
|
-
ofWeeks(t) {
|
|
142
|
-
return n.of(
|
|
143
|
-
t,
|
|
144
|
-
5
|
|
145
|
-
/* Week */
|
|
146
|
-
);
|
|
147
|
-
},
|
|
148
|
-
ofMonths(t) {
|
|
149
|
-
return n.of(
|
|
150
|
-
t,
|
|
151
|
-
6
|
|
152
|
-
/* Month */
|
|
153
|
-
);
|
|
154
|
-
},
|
|
155
|
-
ofYears(t) {
|
|
156
|
-
return n.of(
|
|
157
|
-
t,
|
|
158
|
-
7
|
|
159
|
-
/* Year */
|
|
160
|
-
);
|
|
161
|
-
},
|
|
162
|
-
between: (t, r) => n.of(
|
|
163
|
-
r.getTime() - t.getTime(),
|
|
164
|
-
0
|
|
165
|
-
/* MilliSecond */
|
|
166
|
-
),
|
|
167
|
-
since: (t) => n.between(t, /* @__PURE__ */ new Date()),
|
|
168
|
-
add: (t, r) => n.ofMilliSeconds(t[e] + r[e]),
|
|
169
|
-
subtract: (t, r) => n.ofMilliSeconds(t[e] - r[e]),
|
|
170
|
-
multiply: (t, r) => n.ofMilliSeconds(t[e] * r),
|
|
171
|
-
divide: (t, r) => n.ofMilliSeconds(t[e] / r),
|
|
172
|
-
ofInfinite: s(
|
|
173
|
-
1 / 0,
|
|
174
|
-
0
|
|
175
|
-
/* MilliSecond */
|
|
176
|
-
),
|
|
177
|
-
ofInstant: s(
|
|
178
|
-
0,
|
|
100
|
+
function e(t, r) {
|
|
101
|
+
return f(t, r);
|
|
102
|
+
}
|
|
103
|
+
function u(t) {
|
|
104
|
+
return e(
|
|
105
|
+
t,
|
|
179
106
|
0
|
|
180
107
|
/* MilliSecond */
|
|
181
|
-
)
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
function d(t) {
|
|
111
|
+
return e(
|
|
112
|
+
t,
|
|
113
|
+
1
|
|
114
|
+
/* Second */
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
function I(t) {
|
|
118
|
+
return e(
|
|
119
|
+
t,
|
|
120
|
+
2
|
|
121
|
+
/* Minute */
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
function S(t) {
|
|
125
|
+
return e(
|
|
126
|
+
t,
|
|
127
|
+
3
|
|
128
|
+
/* Hour */
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
function y(t) {
|
|
132
|
+
return e(
|
|
133
|
+
t,
|
|
134
|
+
4
|
|
135
|
+
/* Day */
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
function M(t) {
|
|
139
|
+
return e(
|
|
140
|
+
t,
|
|
141
|
+
5
|
|
142
|
+
/* Week */
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
function D(t) {
|
|
146
|
+
return e(
|
|
147
|
+
t,
|
|
148
|
+
6
|
|
149
|
+
/* Month */
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
function O(t) {
|
|
153
|
+
return e(
|
|
154
|
+
t,
|
|
155
|
+
7
|
|
156
|
+
/* Year */
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
function h(t, r) {
|
|
160
|
+
return u(r.getTime() - t.getTime());
|
|
161
|
+
}
|
|
162
|
+
function b(t) {
|
|
163
|
+
return h(t, /* @__PURE__ */ new Date());
|
|
164
|
+
}
|
|
165
|
+
function g(t, r) {
|
|
166
|
+
return u(t[n] + r[n]);
|
|
167
|
+
}
|
|
168
|
+
function E(t, r) {
|
|
169
|
+
return u(t[n] - r[n]);
|
|
170
|
+
}
|
|
171
|
+
function k(t, r) {
|
|
172
|
+
return u(t[n] * r);
|
|
173
|
+
}
|
|
174
|
+
function p(t, r) {
|
|
175
|
+
return u(t[n] / r);
|
|
176
|
+
}
|
|
177
|
+
const q = u(1 / 0), N = u(0);
|
|
178
|
+
function j(t) {
|
|
179
|
+
return i(t) && n in t;
|
|
180
|
+
}
|
|
181
|
+
function w(t, r) {
|
|
182
|
+
return t[n] === r[n];
|
|
183
|
+
}
|
|
185
184
|
export {
|
|
186
|
-
|
|
187
|
-
|
|
185
|
+
c as TimeUnit,
|
|
186
|
+
g as add,
|
|
187
|
+
h as between,
|
|
188
|
+
y as days,
|
|
189
|
+
p as divide,
|
|
190
|
+
e as duration,
|
|
191
|
+
S as hours,
|
|
192
|
+
q as infinite,
|
|
193
|
+
N as instant,
|
|
194
|
+
j as isDuration,
|
|
195
|
+
w as isEqual,
|
|
196
|
+
u as milliSeconds,
|
|
197
|
+
I as minutes,
|
|
198
|
+
D as months,
|
|
199
|
+
k as multiply,
|
|
200
|
+
d as seconds,
|
|
201
|
+
b as since,
|
|
202
|
+
E as subtract,
|
|
203
|
+
M as weeks,
|
|
204
|
+
O as years
|
|
188
205
|
};
|
package/dist/lib/duration.d.ts
CHANGED
|
@@ -8,9 +8,9 @@ export declare const enum TimeUnit {
|
|
|
8
8
|
Month = 6,
|
|
9
9
|
Year = 7
|
|
10
10
|
}
|
|
11
|
-
declare const
|
|
11
|
+
declare const millisecondsTag: unique symbol;
|
|
12
12
|
export type Duration = {
|
|
13
|
-
readonly [
|
|
13
|
+
readonly [millisecondsTag]: number;
|
|
14
14
|
readonly isFinite: boolean;
|
|
15
15
|
readonly isInfinite: boolean;
|
|
16
16
|
readonly isInstant: boolean;
|
|
@@ -30,26 +30,24 @@ export type Duration = {
|
|
|
30
30
|
greaterThanOrEqual(other: Duration): boolean;
|
|
31
31
|
compare(other: Duration): -1 | 0 | 1;
|
|
32
32
|
};
|
|
33
|
-
export declare
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
isEqual: (a: Duration, b: Duration) => boolean;
|
|
53
|
-
}>;
|
|
33
|
+
export declare function duration(value: number, unit: TimeUnit): Duration;
|
|
34
|
+
export declare function milliSeconds(value: number): Duration;
|
|
35
|
+
export declare function seconds(value: number): Duration;
|
|
36
|
+
export declare function minutes(value: number): Duration;
|
|
37
|
+
export declare function hours(value: number): Duration;
|
|
38
|
+
export declare function days(value: number): Duration;
|
|
39
|
+
export declare function weeks(value: number): Duration;
|
|
40
|
+
export declare function months(value: number): Duration;
|
|
41
|
+
export declare function years(value: number): Duration;
|
|
42
|
+
export declare function between(start: Date, end: Date): Duration;
|
|
43
|
+
export declare function since(start: Date): Duration;
|
|
44
|
+
export declare function add(a: Duration, b: Duration): Duration;
|
|
45
|
+
export declare function subtract(a: Duration, b: Duration): Duration;
|
|
46
|
+
export declare function multiply(a: Duration, b: number): Duration;
|
|
47
|
+
export declare function divide(a: Duration, b: number): Duration;
|
|
48
|
+
export declare const infinite: Duration;
|
|
49
|
+
export declare const instant: Duration;
|
|
50
|
+
export declare function isDuration(value: unknown): value is Duration;
|
|
51
|
+
export declare function isEqual(a: Duration, b: Duration): boolean;
|
|
54
52
|
export {};
|
|
55
53
|
//# sourceMappingURL=duration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/lib/duration.ts"],"names":[],"mappings":"AAMA,0BAAkB,QAAQ;IACxB,WAAW,IAAA;IACX,MAAM,IAAA;IACN,MAAM,IAAA;IACN,IAAI,IAAA;IACJ,GAAG,IAAA;IACH,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,IAAI,IAAA;CACL;AAED,QAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/lib/duration.ts"],"names":[],"mappings":"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"}
|