@ehmpathy/uni-time 1.8.2 → 1.9.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/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logic/manipulate/asDurationInWords.d.ts +12 -0
- package/dist/logic/manipulate/asDurationInWords.js +47 -0
- package/dist/logic/manipulate/asDurationInWords.js.map +1 -0
- package/dist/logic/manipulate/asDurationInWords.test.d.ts +1 -0
- package/dist/logic/manipulate/asDurationInWords.test.js +16 -0
- package/dist/logic/manipulate/asDurationInWords.test.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -10,5 +10,6 @@ export * from './logic/manipulate/addDuration';
|
|
|
10
10
|
export * from './logic/manipulate/getDuration';
|
|
11
11
|
export * from './logic/manipulate/subDuration';
|
|
12
12
|
export * from './logic/manipulate/toMilliseconds';
|
|
13
|
+
export * from './logic/manipulate/asDurationInWords';
|
|
13
14
|
export * from './logic/wrappers/waitFor';
|
|
14
15
|
export * from './logic/observe/stopwatch/startDurationStopwatch';
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,7 @@ __exportStar(require("./logic/manipulate/addDuration"), exports);
|
|
|
26
26
|
__exportStar(require("./logic/manipulate/getDuration"), exports);
|
|
27
27
|
__exportStar(require("./logic/manipulate/subDuration"), exports);
|
|
28
28
|
__exportStar(require("./logic/manipulate/toMilliseconds"), exports);
|
|
29
|
+
__exportStar(require("./logic/manipulate/asDurationInWords"), exports);
|
|
29
30
|
__exportStar(require("./logic/wrappers/waitFor"), exports);
|
|
30
31
|
__exportStar(require("./logic/observe/stopwatch/startDurationStopwatch"), exports);
|
|
31
32
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,uDAAqC;AACrC,sDAAoC;AACpC,+DAA6C;AAC7C,oEAAkD;AAClD,2DAAyC;AACzC,4DAA0C;AAC1C,yEAAuD;AACvD,iEAA+C;AAC/C,iEAA+C;AAC/C,iEAA+C;AAC/C,oEAAkD;AAClD,2DAAyC;AACzC,mFAAiE"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,uDAAqC;AACrC,sDAAoC;AACpC,+DAA6C;AAC7C,oEAAkD;AAClD,2DAAyC;AACzC,4DAA0C;AAC1C,yEAAuD;AACvD,iEAA+C;AAC/C,iEAA+C;AAC/C,iEAA+C;AAC/C,oEAAkD;AAClD,uEAAqD;AACrD,2DAAyC;AACzC,mFAAiE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { UniDuration } from '../../domain/UniDuration';
|
|
2
|
+
/**
|
|
3
|
+
* .what = stringify a UniDuration into short human words
|
|
4
|
+
* .why = minimum-surface-area: one obvious input, safe defaults
|
|
5
|
+
* .how =
|
|
6
|
+
* - order: weeks → ms
|
|
7
|
+
* - skip zeros
|
|
8
|
+
* - max 2 nonzero units
|
|
9
|
+
* - compact labels (e.g. 2h 5m)
|
|
10
|
+
* - fallback "0s" when all zero
|
|
11
|
+
*/
|
|
12
|
+
export declare const asDurationInWords: (duration: UniDuration) => string;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asDurationInWords = void 0;
|
|
4
|
+
const DURATION_ORDER = [
|
|
5
|
+
'weeks',
|
|
6
|
+
'days',
|
|
7
|
+
'hours',
|
|
8
|
+
'minutes',
|
|
9
|
+
'seconds',
|
|
10
|
+
'milliseconds',
|
|
11
|
+
];
|
|
12
|
+
const SHORT_LABELS = {
|
|
13
|
+
weeks: 'w',
|
|
14
|
+
days: 'd',
|
|
15
|
+
hours: 'h',
|
|
16
|
+
minutes: 'm',
|
|
17
|
+
seconds: 's',
|
|
18
|
+
milliseconds: 'ms',
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* .what = stringify a UniDuration into short human words
|
|
22
|
+
* .why = minimum-surface-area: one obvious input, safe defaults
|
|
23
|
+
* .how =
|
|
24
|
+
* - order: weeks → ms
|
|
25
|
+
* - skip zeros
|
|
26
|
+
* - max 2 nonzero units
|
|
27
|
+
* - compact labels (e.g. 2h 5m)
|
|
28
|
+
* - fallback "0s" when all zero
|
|
29
|
+
*/
|
|
30
|
+
const asDurationInWords = (duration) => {
|
|
31
|
+
const norm = Object.fromEntries(DURATION_ORDER.map((u) => {
|
|
32
|
+
const n = Number(duration?.[u] ?? 0);
|
|
33
|
+
return [u, Number.isFinite(n) ? Math.max(0, n) : 0];
|
|
34
|
+
}));
|
|
35
|
+
const parts = [];
|
|
36
|
+
for (const u of DURATION_ORDER) {
|
|
37
|
+
const v = norm[u];
|
|
38
|
+
if (!v)
|
|
39
|
+
continue;
|
|
40
|
+
parts.push(`${v}${SHORT_LABELS[u]}`);
|
|
41
|
+
if (parts.length === 2)
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
return parts.length ? parts.join(' ') : '0s';
|
|
45
|
+
};
|
|
46
|
+
exports.asDurationInWords = asDurationInWords;
|
|
47
|
+
//# sourceMappingURL=asDurationInWords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asDurationInWords.js","sourceRoot":"","sources":["../../../src/logic/manipulate/asDurationInWords.ts"],"names":[],"mappings":";;;AAEA,MAAM,cAAc,GAAG;IACrB,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,cAAc;CACN,CAAC;AAIX,MAAM,YAAY,GAAyB;IACzC,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF;;;;;;;;;GASG;AACI,MAAM,iBAAiB,GAAG,CAAC,QAAqB,EAAU,EAAE;IACjE,MAAM,IAAI,GAAyB,MAAM,CAAC,WAAW,CACnD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,CAAC,GAAG,MAAM,CAAE,QAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CACqB,CAAC;IAE1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;IAChC,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC,CAAC;AAjBW,QAAA,iBAAiB,qBAiB5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const asDurationInWords_1 = require("./asDurationInWords");
|
|
4
|
+
describe('asDurationInWords', () => {
|
|
5
|
+
const cases = [
|
|
6
|
+
{ input: { hours: 2, minutes: 5 }, output: '2h 5m' },
|
|
7
|
+
{ input: { minutes: 1, seconds: 0 }, output: '1m' },
|
|
8
|
+
{ input: { hours: 1, minutes: 59, seconds: 32 }, output: '1h 59m' },
|
|
9
|
+
{ input: { milliseconds: 350 }, output: '350ms' },
|
|
10
|
+
{ input: {}, output: '0s' },
|
|
11
|
+
];
|
|
12
|
+
it.each(cases)('%j', ({ input, output }) => {
|
|
13
|
+
expect((0, asDurationInWords_1.asDurationInWords)(input)).toBe(output);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=asDurationInWords.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asDurationInWords.test.js","sourceRoot":"","sources":["../../../src/logic/manipulate/asDurationInWords.test.ts"],"names":[],"mappings":";;AACA,2DAAwD;AAExD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,KAAK,GAA6C;QACtD,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QACpD,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QACnD,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;QACnE,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QACjD,EAAE,KAAK,EAAE,EAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;KAC3C,CAAC;IAEF,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QACzC,MAAM,CAAC,IAAA,qCAAiB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@ehmpathy/uni-time",
|
|
3
3
|
"author": "ehmpathy",
|
|
4
4
|
"description": "a glossary of universally intuitive time, date, and duration domain literals",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.9.0",
|
|
6
6
|
"repository": "ehmpathy/uni-time",
|
|
7
7
|
"homepage": "https://github.com/ehmpathy/uni-time",
|
|
8
8
|
"keywords": [
|