@choksheak/ts-utils 0.3.6 → 0.3.7
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/arrayBuffer.cjs +39 -10
- package/arrayBuffer.min.cjs +1 -1
- package/arrayBuffer.min.cjs.map +1 -1
- package/arrayBuffer.min.mjs +1 -1
- package/arrayBuffer.min.mjs.map +1 -1
- package/arrayBuffer.mjs +10 -7
- package/asNumber.cjs +38 -6
- package/asNumber.min.cjs +1 -1
- package/asNumber.min.cjs.map +1 -1
- package/asNumber.min.mjs +1 -1
- package/asNumber.min.mjs.map +1 -1
- package/asNumber.mjs +11 -4
- package/assert.cjs +27 -4
- package/assert.min.cjs +1 -1
- package/assert.min.cjs.map +1 -1
- package/assert.min.mjs +1 -1
- package/assert.min.mjs.map +1 -1
- package/assert.mjs +0 -2
- package/base64Url.cjs +29 -5
- package/base64Url.min.cjs +1 -1
- package/base64Url.min.cjs.map +1 -1
- package/base64Url.min.mjs +1 -1
- package/base64Url.min.mjs.map +1 -1
- package/base64Url.mjs +0 -2
- package/capLength.cjs +71 -7
- package/capLength.min.cjs +5 -1
- package/capLength.min.cjs.map +1 -1
- package/capLength.min.mjs +5 -1
- package/capLength.min.mjs.map +1 -1
- package/capLength.mjs +41 -4
- package/concatIterators.cjs +27 -4
- package/concatIterators.min.cjs +1 -1
- package/concatIterators.min.cjs.map +1 -1
- package/concatIterators.min.mjs +1 -1
- package/concatIterators.min.mjs.map +1 -1
- package/concatIterators.mjs +0 -2
- package/dateTimeStr.cjs +119 -31
- package/dateTimeStr.min.cjs +1 -1
- package/dateTimeStr.min.cjs.map +1 -1
- package/dateTimeStr.min.mjs +1 -1
- package/dateTimeStr.min.mjs.map +1 -1
- package/dateTimeStr.mjs +69 -17
- package/duration.cjs +188 -24
- package/duration.min.cjs +1 -1
- package/duration.min.cjs.map +1 -1
- package/duration.min.mjs +1 -1
- package/duration.min.mjs.map +1 -1
- package/duration.mjs +144 -14
- package/getEnv.cjs +31 -7
- package/getEnv.min.cjs +1 -1
- package/getEnv.min.cjs.map +1 -1
- package/getEnv.min.mjs +1 -1
- package/getEnv.min.mjs.map +1 -1
- package/getEnv.mjs +0 -2
- package/isEmpty.cjs +46 -8
- package/isEmpty.min.cjs +1 -1
- package/isEmpty.min.cjs.map +1 -1
- package/isEmpty.min.mjs +1 -1
- package/isEmpty.min.mjs.map +1 -1
- package/isEmpty.mjs +19 -6
- package/isPromise.cjs +29 -5
- package/isPromise.min.cjs +1 -1
- package/isPromise.min.cjs.map +1 -1
- package/isPromise.min.mjs +1 -1
- package/isPromise.min.mjs.map +1 -1
- package/isPromise.mjs +0 -2
- package/kvStore.cjs +353 -15
- package/kvStore.min.cjs +1 -1
- package/kvStore.min.cjs.map +1 -1
- package/kvStore.min.mjs +1 -1
- package/kvStore.min.mjs.map +1 -1
- package/kvStore.mjs +319 -12
- package/localStore.cjs +264 -15
- package/localStore.min.cjs +1 -1
- package/localStore.min.cjs.map +1 -1
- package/localStore.min.mjs +1 -1
- package/localStore.min.mjs.map +1 -1
- package/localStore.mjs +230 -12
- package/mean.cjs +48 -8
- package/mean.min.cjs +1 -1
- package/mean.min.cjs.map +1 -1
- package/mean.min.mjs +1 -1
- package/mean.min.mjs.map +1 -1
- package/mean.mjs +18 -5
- package/median.cjs +41 -7
- package/median.min.cjs +1 -1
- package/median.min.cjs.map +1 -1
- package/median.min.mjs +1 -1
- package/median.min.mjs.map +1 -1
- package/median.mjs +11 -4
- package/nonEmpty.cjs +48 -8
- package/nonEmpty.min.cjs +1 -1
- package/nonEmpty.min.cjs.map +1 -1
- package/nonEmpty.min.mjs +1 -1
- package/nonEmpty.min.mjs.map +1 -1
- package/nonEmpty.mjs +19 -6
- package/nonNil.cjs +27 -4
- package/nonNil.min.cjs +1 -1
- package/nonNil.min.cjs.map +1 -1
- package/nonNil.min.mjs +1 -1
- package/nonNil.min.mjs.map +1 -1
- package/nonNil.mjs +0 -2
- package/package.json +1 -257
- package/round.cjs +32 -6
- package/round.min.cjs +1 -1
- package/round.min.cjs.map +1 -1
- package/round.min.mjs +1 -1
- package/round.min.mjs.map +1 -1
- package/round.mjs +5 -4
- package/roundToString.cjs +35 -7
- package/roundToString.min.cjs +1 -1
- package/roundToString.min.cjs.map +1 -1
- package/roundToString.min.mjs +1 -1
- package/roundToString.min.mjs.map +1 -1
- package/roundToString.mjs +5 -4
- package/safeBtoa.cjs +27 -4
- package/safeBtoa.min.cjs +1 -1
- package/safeBtoa.min.cjs.map +1 -1
- package/safeBtoa.min.mjs +1 -1
- package/safeBtoa.min.mjs.map +1 -1
- package/safeBtoa.mjs +0 -2
- package/sha256.cjs +34 -8
- package/sha256.min.cjs +1 -1
- package/sha256.min.cjs.map +1 -1
- package/sha256.min.mjs +1 -1
- package/sha256.min.mjs.map +1 -1
- package/sha256.mjs +7 -6
- package/sleep.cjs +27 -4
- package/sleep.min.cjs +1 -1
- package/sleep.min.cjs.map +1 -1
- package/sleep.min.mjs +1 -1
- package/sleep.min.mjs.map +1 -1
- package/sleep.mjs +0 -2
- package/storageAdapter.cjs +18 -1
- package/storageAdapter.min.cjs +2 -1
- package/storageAdapter.min.cjs.map +1 -1
- package/sum.cjs +45 -5
- package/sum.min.cjs +1 -1
- package/sum.min.cjs.map +1 -1
- package/sum.min.mjs +1 -1
- package/sum.min.mjs.map +1 -1
- package/sum.mjs +18 -5
- package/timeConstants.cjs +69 -35
- package/timeConstants.min.cjs +1 -1
- package/timeConstants.min.cjs.map +1 -1
- package/timeConstants.min.mjs +1 -1
- package/timeConstants.min.mjs.map +1 -1
- package/timeConstants.mjs +15 -19
- package/timer.cjs +180 -7
- package/timer.min.cjs +1 -1
- package/timer.min.cjs.map +1 -1
- package/timer.min.mjs +1 -1
- package/timer.min.mjs.map +1 -1
- package/timer.mjs +154 -8
- package/toReadableString.cjs +68 -6
- package/toReadableString.min.cjs +5 -1
- package/toReadableString.min.cjs.map +1 -1
- package/toReadableString.min.mjs +5 -1
- package/toReadableString.min.mjs.map +1 -1
- package/toReadableString.mjs +41 -4
- package/chunk-22JDWCOS.min.cjs +0 -2
- package/chunk-22JDWCOS.min.cjs.map +0 -1
- package/chunk-244NBT4Q.min.mjs +0 -2
- package/chunk-244NBT4Q.min.mjs.map +0 -1
- package/chunk-27MBP3ES.min.cjs +0 -2
- package/chunk-27MBP3ES.min.cjs.map +0 -1
- package/chunk-34ENP2B3.min.mjs +0 -438
- package/chunk-34ENP2B3.min.mjs.map +0 -1
- package/chunk-3EBQ2GO2.min.cjs +0 -2
- package/chunk-3EBQ2GO2.min.cjs.map +0 -1
- package/chunk-4GLOLTJ5.cjs +0 -167
- package/chunk-6TQBMXTL.min.cjs +0 -2
- package/chunk-6TQBMXTL.min.cjs.map +0 -1
- package/chunk-AWZBCFMG.min.cjs +0 -2
- package/chunk-AWZBCFMG.min.cjs.map +0 -1
- package/chunk-AXNETZET.cjs +0 -20
- package/chunk-BKZM6NWX.min.cjs +0 -2
- package/chunk-BKZM6NWX.min.cjs.map +0 -1
- package/chunk-BZKQXX3A.cjs +0 -40
- package/chunk-CERFUU5I.cjs +0 -93
- package/chunk-CSTKFJ6G.mjs +0 -239
- package/chunk-DUN4UY2Q.cjs +0 -239
- package/chunk-EDJJUP4K.min.cjs +0 -6
- package/chunk-EDJJUP4K.min.cjs.map +0 -1
- package/chunk-FFNQBZH5.cjs +0 -14
- package/chunk-FZZRSHSH.min.mjs +0 -6
- package/chunk-FZZRSHSH.min.mjs.map +0 -1
- package/chunk-GAP2HS5M.min.cjs +0 -2
- package/chunk-GAP2HS5M.min.cjs.map +0 -1
- package/chunk-GLYMAPS4.min.mjs +0 -2
- package/chunk-GLYMAPS4.min.mjs.map +0 -1
- package/chunk-I65KPVMO.min.cjs +0 -438
- package/chunk-I65KPVMO.min.cjs.map +0 -1
- package/chunk-ILGTU46T.cjs +0 -39
- package/chunk-IOKRXHKE.min.mjs +0 -2
- package/chunk-IOKRXHKE.min.mjs.map +0 -1
- package/chunk-ISP4SMRC.min.cjs +0 -2
- package/chunk-ISP4SMRC.min.cjs.map +0 -1
- package/chunk-KETP5HBF.cjs +0 -24
- package/chunk-KLHNGJ4Y.min.mjs +0 -2
- package/chunk-KLHNGJ4Y.min.mjs.map +0 -1
- package/chunk-KMNTU3DJ.mjs +0 -45
- package/chunk-LDVEXETI.cjs +0 -45
- package/chunk-LZENHV35.min.cjs +0 -2
- package/chunk-LZENHV35.min.cjs.map +0 -1
- package/chunk-M5PIM2HB.mjs +0 -42
- package/chunk-M6PYQYOX.mjs +0 -39
- package/chunk-MN5EYNZN.min.mjs +0 -2
- package/chunk-MN5EYNZN.min.mjs.map +0 -1
- package/chunk-NRIBJ2OJ.mjs +0 -16031
- package/chunk-NVLYXWLX.cjs +0 -32
- package/chunk-O352F2MT.mjs +0 -24
- package/chunk-O6B2TKFK.min.mjs +0 -2
- package/chunk-O6B2TKFK.min.mjs.map +0 -1
- package/chunk-OGF34H4T.min.cjs +0 -2
- package/chunk-OGF34H4T.min.cjs.map +0 -1
- package/chunk-OXSWWWOM.min.mjs +0 -2
- package/chunk-OXSWWWOM.min.mjs.map +0 -1
- package/chunk-PRUGHVRT.mjs +0 -14
- package/chunk-Q4WCMSOW.min.mjs +0 -2
- package/chunk-Q4WCMSOW.min.mjs.map +0 -1
- package/chunk-QH74JZCK.mjs +0 -9
- package/chunk-QNNJNLGK.min.cjs +0 -2
- package/chunk-QNNJNLGK.min.cjs.map +0 -1
- package/chunk-QWCFN7ZM.mjs +0 -15
- package/chunk-SDM2OPT6.mjs +0 -32
- package/chunk-SHKRZCF2.cjs +0 -16031
- package/chunk-SJDJDNDN.min.cjs +0 -2
- package/chunk-SJDJDNDN.min.cjs.map +0 -1
- package/chunk-SULNMALN.cjs +0 -328
- package/chunk-SV35RBZ7.min.mjs +0 -2
- package/chunk-SV35RBZ7.min.mjs.map +0 -1
- package/chunk-TJFYGFOW.mjs +0 -328
- package/chunk-UHRYBUUX.min.mjs +0 -2
- package/chunk-UHRYBUUX.min.mjs.map +0 -1
- package/chunk-UOU6IP3S.min.mjs +0 -2
- package/chunk-UOU6IP3S.min.mjs.map +0 -1
- package/chunk-V76XVNZ5.mjs +0 -20
- package/chunk-VFYQ7I5V.min.mjs +0 -2
- package/chunk-VFYQ7I5V.min.mjs.map +0 -1
- package/chunk-VG7VV7J2.mjs +0 -167
- package/chunk-VJCV56DO.cjs +0 -15
- package/chunk-VREA6AKG.cjs +0 -9
- package/chunk-W5I6Y5FK.min.mjs +0 -2
- package/chunk-W5I6Y5FK.min.mjs.map +0 -1
- package/chunk-Y7MC73BZ.cjs +0 -42
- package/chunk-YVWROQKU.mjs +0 -40
- package/chunk-ZKIZ5SWK.min.cjs +0 -2
- package/chunk-ZKIZ5SWK.min.cjs.map +0 -1
- package/chunk-ZZZB7NJX.mjs +0 -93
- package/magic-string.es-4UY437WL.min.mjs +0 -14
- package/magic-string.es-4UY437WL.min.mjs.map +0 -1
- package/magic-string.es-OAQWZQTY.mjs +0 -1323
- package/magic-string.es-UE2UVQEL.cjs +0 -1323
- package/magic-string.es-X6DNUB6Y.min.cjs +0 -14
- package/magic-string.es-X6DNUB6Y.min.cjs.map +0 -1
package/timer.cjs
CHANGED
|
@@ -1,11 +1,184 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
19
|
|
|
20
|
+
// src/timer.ts
|
|
21
|
+
var timer_exports = {};
|
|
22
|
+
__export(timer_exports, {
|
|
23
|
+
timer: () => timer
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(timer_exports);
|
|
3
26
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
27
|
+
// src/timeConstants.ts
|
|
28
|
+
var MS_PER_SECOND = 1e3;
|
|
29
|
+
var MS_PER_MINUTE = 6e4;
|
|
30
|
+
var SECONDS_PER_MINUTE = 60;
|
|
31
|
+
var MINUTES_PER_HOUR = 60;
|
|
32
|
+
var HOURS_PER_DAY = 24;
|
|
9
33
|
|
|
34
|
+
// src/duration.ts
|
|
35
|
+
var DURATION_TYPE_SEQUENCE = [
|
|
36
|
+
"days",
|
|
37
|
+
"hours",
|
|
38
|
+
"minutes",
|
|
39
|
+
"seconds",
|
|
40
|
+
"milliseconds"
|
|
41
|
+
];
|
|
42
|
+
var DURATION_STYLE_SUFFIX_MAP = {
|
|
43
|
+
days: {
|
|
44
|
+
short: "day",
|
|
45
|
+
shorts: "days",
|
|
46
|
+
long: "day",
|
|
47
|
+
longs: "days",
|
|
48
|
+
narrow: "d"
|
|
49
|
+
},
|
|
50
|
+
hours: {
|
|
51
|
+
short: "hr",
|
|
52
|
+
shorts: "hrs",
|
|
53
|
+
long: "hour",
|
|
54
|
+
longs: "hours",
|
|
55
|
+
narrow: "h"
|
|
56
|
+
},
|
|
57
|
+
minutes: {
|
|
58
|
+
short: "min",
|
|
59
|
+
shorts: "mins",
|
|
60
|
+
long: "minute",
|
|
61
|
+
longs: "minutes",
|
|
62
|
+
narrow: "m"
|
|
63
|
+
},
|
|
64
|
+
seconds: {
|
|
65
|
+
short: "sec",
|
|
66
|
+
shorts: "secs",
|
|
67
|
+
long: "second",
|
|
68
|
+
longs: "seconds",
|
|
69
|
+
narrow: "s"
|
|
70
|
+
},
|
|
71
|
+
milliseconds: {
|
|
72
|
+
short: "ms",
|
|
73
|
+
shorts: "ms",
|
|
74
|
+
long: "millisecond",
|
|
75
|
+
longs: "milliseconds",
|
|
76
|
+
narrow: "ms"
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
function getDurationStyleForPlural(style) {
|
|
80
|
+
return style == "short" ? "shorts" : style === "long" ? "longs" : style;
|
|
81
|
+
}
|
|
82
|
+
function getValueAndUnitSeparator(style) {
|
|
83
|
+
return style === "narrow" ? "" : " ";
|
|
84
|
+
}
|
|
85
|
+
function getDurationTypeSeparator(style) {
|
|
86
|
+
return style === "narrow" ? " " : ", ";
|
|
87
|
+
}
|
|
88
|
+
function msToDuration(ms, durationTypeForZero) {
|
|
89
|
+
if (ms === 0) {
|
|
90
|
+
durationTypeForZero = durationTypeForZero ?? "milliseconds";
|
|
91
|
+
return { [durationTypeForZero]: 0 };
|
|
92
|
+
}
|
|
93
|
+
const duration = {};
|
|
94
|
+
for (let i = 0; i < 1; i++) {
|
|
95
|
+
let seconds = Math.floor(ms / MS_PER_SECOND);
|
|
96
|
+
const millis = ms - seconds * MS_PER_SECOND;
|
|
97
|
+
if (millis > 0) {
|
|
98
|
+
duration["milliseconds"] = millis;
|
|
99
|
+
}
|
|
100
|
+
if (seconds === 0) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);
|
|
104
|
+
seconds -= minutes * SECONDS_PER_MINUTE;
|
|
105
|
+
if (seconds > 0) {
|
|
106
|
+
duration["seconds"] = seconds;
|
|
107
|
+
}
|
|
108
|
+
if (minutes === 0) {
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
let hours = Math.floor(minutes / MINUTES_PER_HOUR);
|
|
112
|
+
minutes -= hours * MINUTES_PER_HOUR;
|
|
113
|
+
if (minutes > 0) {
|
|
114
|
+
duration["minutes"] = minutes;
|
|
115
|
+
}
|
|
116
|
+
if (hours === 0) {
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
const days = Math.floor(hours / HOURS_PER_DAY);
|
|
120
|
+
hours -= days * HOURS_PER_DAY;
|
|
121
|
+
if (hours > 0) {
|
|
122
|
+
duration["hours"] = hours;
|
|
123
|
+
}
|
|
124
|
+
if (days > 0) {
|
|
125
|
+
duration["days"] = days;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return duration;
|
|
129
|
+
}
|
|
130
|
+
function formatDuration(duration, style) {
|
|
131
|
+
style = style ?? "short";
|
|
132
|
+
const stylePlural = getDurationStyleForPlural(style);
|
|
133
|
+
const space = getValueAndUnitSeparator(style);
|
|
134
|
+
const a = [];
|
|
135
|
+
for (const unit of DURATION_TYPE_SEQUENCE) {
|
|
136
|
+
const value = duration[unit];
|
|
137
|
+
if (value === void 0) continue;
|
|
138
|
+
const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];
|
|
139
|
+
const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];
|
|
140
|
+
a.push(value + space + suffix);
|
|
141
|
+
}
|
|
142
|
+
const separator = getDurationTypeSeparator(style);
|
|
143
|
+
return a.join(separator);
|
|
144
|
+
}
|
|
145
|
+
function readableDuration(ms, options) {
|
|
146
|
+
const duration = msToDuration(ms, options?.durationTypeForZero);
|
|
147
|
+
return formatDuration(duration, options?.style);
|
|
148
|
+
}
|
|
149
|
+
function elapsed(ms) {
|
|
150
|
+
if (ms > MS_PER_MINUTE) {
|
|
151
|
+
return readableDuration(ms);
|
|
152
|
+
}
|
|
153
|
+
if (ms > 100) {
|
|
154
|
+
return `${(ms / 1e3).toFixed(3)}s`;
|
|
155
|
+
}
|
|
156
|
+
return ms + "ms";
|
|
157
|
+
}
|
|
10
158
|
|
|
11
|
-
|
|
159
|
+
// src/timer.ts
|
|
160
|
+
function timer() {
|
|
161
|
+
const obj = {
|
|
162
|
+
startMs: Date.now(),
|
|
163
|
+
endMs: 0,
|
|
164
|
+
stop() {
|
|
165
|
+
obj.endMs = Date.now();
|
|
166
|
+
},
|
|
167
|
+
restart() {
|
|
168
|
+
obj.endMs = 0;
|
|
169
|
+
obj.startMs = Date.now();
|
|
170
|
+
},
|
|
171
|
+
elapsedMs() {
|
|
172
|
+
const stopMs = obj.endMs || Date.now();
|
|
173
|
+
return stopMs - obj.startMs;
|
|
174
|
+
},
|
|
175
|
+
toString() {
|
|
176
|
+
return elapsed(obj.elapsedMs());
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
return obj;
|
|
180
|
+
}
|
|
181
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
182
|
+
0 && (module.exports = {
|
|
183
|
+
timer
|
|
184
|
+
});
|
package/timer.min.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(
|
|
1
|
+
"use strict";var l=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var D=(o,r)=>{for(var n in r)l(o,n,{get:r[n],enumerable:!0})},M=(o,r,n,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of d(r))!m.call(o,t)&&t!==n&&l(o,t,{get:()=>r[t],enumerable:!(i=p(r,t))||i.enumerable});return o};var h=o=>M(l({},"__esModule",{value:!0}),o);var O={};D(O,{timer:()=>N});module.exports=h(O);var T=["days","hours","minutes","seconds","milliseconds"],_={days:{short:"day",shorts:"days",long:"day",longs:"days",narrow:"d"},hours:{short:"hr",shorts:"hrs",long:"hour",longs:"hours",narrow:"h"},minutes:{short:"min",shorts:"mins",long:"minute",longs:"minutes",narrow:"m"},seconds:{short:"sec",shorts:"secs",long:"second",longs:"seconds",narrow:"s"},milliseconds:{short:"ms",shorts:"ms",long:"millisecond",longs:"milliseconds",narrow:"ms"}};function b(o){return o=="short"?"shorts":o==="long"?"longs":o}function E(o){return o==="narrow"?"":" "}function R(o){return o==="narrow"?" ":", "}function w(o,r){if(o===0)return r=r??"milliseconds",{[r]:0};let n={};for(let i=0;i<1;i++){let t=Math.floor(o/1e3),a=o-t*1e3;if(a>0&&(n.milliseconds=a),t===0)break;let e=Math.floor(t/60);if(t-=e*60,t>0&&(n.seconds=t),e===0)break;let s=Math.floor(e/60);if(e-=s*60,e>0&&(n.minutes=e),s===0)break;let u=Math.floor(s/24);s-=u*24,s>0&&(n.hours=s),u>0&&(n.days=u)}return n}function P(o,r){r=r??"short";let n=b(r),i=E(r),t=[];for(let e of T){let s=o[e];if(s===void 0)continue;let u=_[e],f=s===1?u[r]:u[n];t.push(s+i+f)}let a=R(r);return t.join(a)}function U(o,r){let n=w(o,r?.durationTypeForZero);return P(n,r?.style)}function c(o){return o>6e4?U(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}function N(){let o={startMs:Date.now(),endMs:0,stop(){o.endMs=Date.now()},restart(){o.endMs=0,o.startMs=Date.now()},elapsedMs(){return(o.endMs||Date.now())-o.startMs},toString(){return c(o.elapsedMs())}};return o}0&&(module.exports={timer});
|
|
2
2
|
//# sourceMappingURL=timer.min.cjs.map
|
package/timer.min.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/choksheaklau/src/ts-utils/dist/timer.min.cjs"],"names":[],"mappings":"AAAA,wIAAyC,oCAAiC,oCAAiC,oCAAiC,oCAAE,CAAE,CAAC,uCAAkB","file":"/Users/choksheaklau/src/ts-utils/dist/timer.min.cjs"}
|
|
1
|
+
{"version":3,"sources":["../src/timer.ts","../src/duration.ts"],"sourcesContent":["import { elapsed } from \"./duration\";\n\n/**\n * Create a new timer and starts the timing right away. Returns a closed object\n * instead of a class to make sure the variables are bound correctly.\n */\nexport function timer() {\n const obj = {\n startMs: Date.now(),\n endMs: 0,\n\n stop(): void {\n obj.endMs = Date.now();\n },\n\n restart(): void {\n obj.endMs = 0;\n obj.startMs = Date.now();\n },\n\n elapsedMs(): number {\n const stopMs = obj.endMs || Date.now();\n return stopMs - obj.startMs;\n },\n\n toString(): string {\n return elapsed(obj.elapsedMs());\n },\n };\n\n return obj;\n}\n\n/** Defines the type of the Timer object. */\nexport type Timer = ReturnType<typeof timer>;\n","/**\n * Bunch of miscellaneous constants and utility functions related to handling\n * date and time durations.\n *\n * Note that month and year do not have fixed durations, and hence are excluded\n * from this file. Weeks have fixed durations, but are excluded because we\n * use days as the max duration supported.\n */\n\nimport {\n HOURS_PER_DAY,\n MINUTES_PER_HOUR,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n SECONDS_PER_MINUTE,\n} from \"./timeConstants\";\n\nexport type Duration = {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\n/**\n * One of: days, hours, minutes, seconds, milliseconds\n */\nexport type DurationType = keyof Duration;\n\n/**\n * Order in which the duration type appears in the duration string.\n */\nexport const DURATION_TYPE_SEQUENCE: DurationType[] = [\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\n/**\n * Follows the same format as Intl.DurationFormat.prototype.format().\n *\n * Short: 1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, 9 ns\n * Long: 1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds,\n * 7 milliseconds, 8 microseconds, 9 nanoseconds\n * Narrow: 1y 2mo 3w 3d 4h 5m 6s 7ms 8μs 9ns\n */\nexport type DurationStyle = \"short\" | \"long\" | \"narrow\";\n\nexport type DurationSuffixMap = {\n short: string;\n shorts: string;\n long: string;\n longs: string;\n narrow: string;\n};\n\nexport type DurationSuffixType = keyof DurationSuffixMap;\n\nexport const DURATION_STYLE_SUFFIX_MAP: Record<\n DurationType,\n DurationSuffixMap\n> = {\n days: {\n short: \"day\",\n shorts: \"days\",\n long: \"day\",\n longs: \"days\",\n narrow: \"d\",\n },\n hours: {\n short: \"hr\",\n shorts: \"hrs\",\n long: \"hour\",\n longs: \"hours\",\n narrow: \"h\",\n },\n minutes: {\n short: \"min\",\n shorts: \"mins\",\n long: \"minute\",\n longs: \"minutes\",\n narrow: \"m\",\n },\n seconds: {\n short: \"sec\",\n shorts: \"secs\",\n long: \"second\",\n longs: \"seconds\",\n narrow: \"s\",\n },\n milliseconds: {\n short: \"ms\",\n shorts: \"ms\",\n long: \"millisecond\",\n longs: \"milliseconds\",\n narrow: \"ms\",\n },\n};\n\nfunction getDurationStyleForPlural(style: DurationStyle): DurationSuffixType {\n return style == \"short\" ? \"shorts\" : style === \"long\" ? \"longs\" : style;\n}\n\nfunction getValueAndUnitSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \"\" : \" \";\n}\n\nfunction getDurationTypeSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \" \" : \", \";\n}\n\n/**\n * Convert a milliseconds duration into a Duration object. If the given ms is\n * zero, then return an object with a single field of zero with duration type\n * of durationTypeForZero.\n *\n * @param durationTypeForZero Defaults to 'milliseconds'\n */\nexport function msToDuration(\n ms: number,\n durationTypeForZero?: DurationType,\n): Duration {\n if (ms === 0) {\n durationTypeForZero = durationTypeForZero ?? \"milliseconds\";\n return { [durationTypeForZero]: 0 };\n }\n\n const duration: Duration = {};\n\n for (let i = 0; i < 1; i++) {\n let seconds = Math.floor(ms / MS_PER_SECOND);\n const millis = ms - seconds * MS_PER_SECOND;\n\n if (millis > 0) {\n duration[\"milliseconds\"] = millis;\n }\n\n if (seconds === 0) {\n break;\n }\n\n let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);\n seconds -= minutes * SECONDS_PER_MINUTE;\n\n if (seconds > 0) {\n duration[\"seconds\"] = seconds;\n }\n\n if (minutes === 0) {\n break;\n }\n\n let hours = Math.floor(minutes / MINUTES_PER_HOUR);\n minutes -= hours * MINUTES_PER_HOUR;\n\n if (minutes > 0) {\n duration[\"minutes\"] = minutes;\n }\n\n if (hours === 0) {\n break;\n }\n\n const days = Math.floor(hours / HOURS_PER_DAY);\n hours -= days * HOURS_PER_DAY;\n\n if (hours > 0) {\n duration[\"hours\"] = hours;\n }\n\n if (days > 0) {\n duration[\"days\"] = days;\n }\n }\n\n return duration;\n}\n\n/**\n * Returns the number of milliseconds for the given duration.\n */\nexport function durationToMs(duration: Duration): number {\n const daysMs = (duration.days ?? 0) * MS_PER_DAY;\n const hoursMs = (duration.hours ?? 0) * MS_PER_HOUR;\n const minsMs = (duration.minutes ?? 0) * MS_PER_MINUTE;\n const secsMs = (duration.seconds ?? 0) * MS_PER_SECOND;\n const msMs = duration.milliseconds ?? 0;\n\n return daysMs + hoursMs + minsMs + secsMs + msMs;\n}\n\n/**\n * Convenience function to return a duration given an ms or Duration.\n */\nexport function durationOrMsToMs(duration: number | Duration): number {\n return typeof duration === \"number\" ? duration : durationToMs(duration);\n}\n\n/**\n * Format a given Duration object into a string. If the object has no fields,\n * then returns an empty string.\n *\n * @param style Defaults to 'short'\n */\nexport function formatDuration(duration: Duration, style?: DurationStyle) {\n style = style ?? \"short\";\n const stylePlural = getDurationStyleForPlural(style);\n\n const space = getValueAndUnitSeparator(style);\n\n const a: string[] = [];\n\n for (const unit of DURATION_TYPE_SEQUENCE) {\n const value = duration[unit];\n if (value === undefined) continue;\n\n const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];\n const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];\n a.push(value + space + suffix);\n }\n\n const separator = getDurationTypeSeparator(style);\n return a.join(separator);\n}\n\n/**\n * Convert a millisecond duration into a human-readable duration string.\n *\n * @param options.durationTypeForZero - Defaults to 'milliseconds'\n * @param options.style - Defaults to 'short'\n */\nexport function readableDuration(\n ms: number,\n options?: { durationTypeForZero?: DurationType; style?: DurationStyle },\n): string {\n const duration = msToDuration(ms, options?.durationTypeForZero);\n\n return formatDuration(duration, options?.style);\n}\n\n/** A shortened duration string useful for logging timings. */\nexport function elapsed(ms: number): string {\n // Use long format for 1 minute or over.\n if (ms > MS_PER_MINUTE) {\n return readableDuration(ms);\n }\n\n // Use seconds format for over 100ms.\n if (ms > 100) {\n return `${(ms / 1000).toFixed(3)}s`;\n }\n\n // Use milliseconds format.\n return ms + \"ms\";\n}\n"],"mappings":"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","names":["timer_exports","__export","timer","__toCommonJS","DURATION_TYPE_SEQUENCE","DURATION_STYLE_SUFFIX_MAP","getDurationStyleForPlural","style","getValueAndUnitSeparator","getDurationTypeSeparator","msToDuration","ms","durationTypeForZero","duration","seconds","millis","minutes","hours","days","formatDuration","duration","style","stylePlural","getDurationStyleForPlural","space","getValueAndUnitSeparator","a","unit","DURATION_TYPE_SEQUENCE","value","suffixMap","DURATION_STYLE_SUFFIX_MAP","suffix","separator","getDurationTypeSeparator","readableDuration","ms","options","msToDuration","elapsed","timer","obj","elapsed"]}
|
package/timer.min.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
var D=["days","hours","minutes","seconds","milliseconds"],M={days:{short:"day",shorts:"days",long:"day",longs:"days",narrow:"d"},hours:{short:"hr",shorts:"hrs",long:"hour",longs:"hours",narrow:"h"},minutes:{short:"min",shorts:"mins",long:"minute",longs:"minutes",narrow:"m"},seconds:{short:"sec",shorts:"secs",long:"second",longs:"seconds",narrow:"s"},milliseconds:{short:"ms",shorts:"ms",long:"millisecond",longs:"milliseconds",narrow:"ms"}};function h(o){return o=="short"?"shorts":o==="long"?"longs":o}function y(o){return o==="narrow"?"":" "}function g(o){return o==="narrow"?" ":", "}function S(o,r){if(o===0)return r=r??"milliseconds",{[r]:0};let n={};for(let u=0;u<1;u++){let s=Math.floor(o/1e3),a=o-s*1e3;if(a>0&&(n.milliseconds=a),s===0)break;let e=Math.floor(s/60);if(s-=e*60,s>0&&(n.seconds=s),e===0)break;let t=Math.floor(e/60);if(e-=t*60,e>0&&(n.minutes=e),t===0)break;let i=Math.floor(t/24);t-=i*24,t>0&&(n.hours=t),i>0&&(n.days=i)}return n}function x(o,r){r=r??"short";let n=h(r),u=y(r),s=[];for(let e of D){let t=o[e];if(t===void 0)continue;let i=M[e],c=t===1?i[r]:i[n];s.push(t+u+c)}let a=g(r);return s.join(a)}function T(o,r){let n=S(o,r?.durationTypeForZero);return x(n,r?.style)}function l(o){return o>6e4?T(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}function R(){let o={startMs:Date.now(),endMs:0,stop(){o.endMs=Date.now()},restart(){o.endMs=0,o.startMs=Date.now()},elapsedMs(){return(o.endMs||Date.now())-o.startMs},toString(){return l(o.elapsedMs())}};return o}export{R as timer};
|
|
2
2
|
//# sourceMappingURL=timer.min.mjs.map
|
package/timer.min.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/duration.ts","../src/timer.ts"],"sourcesContent":["/**\n * Bunch of miscellaneous constants and utility functions related to handling\n * date and time durations.\n *\n * Note that month and year do not have fixed durations, and hence are excluded\n * from this file. Weeks have fixed durations, but are excluded because we\n * use days as the max duration supported.\n */\n\nimport {\n HOURS_PER_DAY,\n MINUTES_PER_HOUR,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n SECONDS_PER_MINUTE,\n} from \"./timeConstants\";\n\nexport type Duration = {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\n/**\n * One of: days, hours, minutes, seconds, milliseconds\n */\nexport type DurationType = keyof Duration;\n\n/**\n * Order in which the duration type appears in the duration string.\n */\nexport const DURATION_TYPE_SEQUENCE: DurationType[] = [\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\n/**\n * Follows the same format as Intl.DurationFormat.prototype.format().\n *\n * Short: 1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, 9 ns\n * Long: 1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds,\n * 7 milliseconds, 8 microseconds, 9 nanoseconds\n * Narrow: 1y 2mo 3w 3d 4h 5m 6s 7ms 8μs 9ns\n */\nexport type DurationStyle = \"short\" | \"long\" | \"narrow\";\n\nexport type DurationSuffixMap = {\n short: string;\n shorts: string;\n long: string;\n longs: string;\n narrow: string;\n};\n\nexport type DurationSuffixType = keyof DurationSuffixMap;\n\nexport const DURATION_STYLE_SUFFIX_MAP: Record<\n DurationType,\n DurationSuffixMap\n> = {\n days: {\n short: \"day\",\n shorts: \"days\",\n long: \"day\",\n longs: \"days\",\n narrow: \"d\",\n },\n hours: {\n short: \"hr\",\n shorts: \"hrs\",\n long: \"hour\",\n longs: \"hours\",\n narrow: \"h\",\n },\n minutes: {\n short: \"min\",\n shorts: \"mins\",\n long: \"minute\",\n longs: \"minutes\",\n narrow: \"m\",\n },\n seconds: {\n short: \"sec\",\n shorts: \"secs\",\n long: \"second\",\n longs: \"seconds\",\n narrow: \"s\",\n },\n milliseconds: {\n short: \"ms\",\n shorts: \"ms\",\n long: \"millisecond\",\n longs: \"milliseconds\",\n narrow: \"ms\",\n },\n};\n\nfunction getDurationStyleForPlural(style: DurationStyle): DurationSuffixType {\n return style == \"short\" ? \"shorts\" : style === \"long\" ? \"longs\" : style;\n}\n\nfunction getValueAndUnitSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \"\" : \" \";\n}\n\nfunction getDurationTypeSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \" \" : \", \";\n}\n\n/**\n * Convert a milliseconds duration into a Duration object. If the given ms is\n * zero, then return an object with a single field of zero with duration type\n * of durationTypeForZero.\n *\n * @param durationTypeForZero Defaults to 'milliseconds'\n */\nexport function msToDuration(\n ms: number,\n durationTypeForZero?: DurationType,\n): Duration {\n if (ms === 0) {\n durationTypeForZero = durationTypeForZero ?? \"milliseconds\";\n return { [durationTypeForZero]: 0 };\n }\n\n const duration: Duration = {};\n\n for (let i = 0; i < 1; i++) {\n let seconds = Math.floor(ms / MS_PER_SECOND);\n const millis = ms - seconds * MS_PER_SECOND;\n\n if (millis > 0) {\n duration[\"milliseconds\"] = millis;\n }\n\n if (seconds === 0) {\n break;\n }\n\n let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);\n seconds -= minutes * SECONDS_PER_MINUTE;\n\n if (seconds > 0) {\n duration[\"seconds\"] = seconds;\n }\n\n if (minutes === 0) {\n break;\n }\n\n let hours = Math.floor(minutes / MINUTES_PER_HOUR);\n minutes -= hours * MINUTES_PER_HOUR;\n\n if (minutes > 0) {\n duration[\"minutes\"] = minutes;\n }\n\n if (hours === 0) {\n break;\n }\n\n const days = Math.floor(hours / HOURS_PER_DAY);\n hours -= days * HOURS_PER_DAY;\n\n if (hours > 0) {\n duration[\"hours\"] = hours;\n }\n\n if (days > 0) {\n duration[\"days\"] = days;\n }\n }\n\n return duration;\n}\n\n/**\n * Returns the number of milliseconds for the given duration.\n */\nexport function durationToMs(duration: Duration): number {\n const daysMs = (duration.days ?? 0) * MS_PER_DAY;\n const hoursMs = (duration.hours ?? 0) * MS_PER_HOUR;\n const minsMs = (duration.minutes ?? 0) * MS_PER_MINUTE;\n const secsMs = (duration.seconds ?? 0) * MS_PER_SECOND;\n const msMs = duration.milliseconds ?? 0;\n\n return daysMs + hoursMs + minsMs + secsMs + msMs;\n}\n\n/**\n * Convenience function to return a duration given an ms or Duration.\n */\nexport function durationOrMsToMs(duration: number | Duration): number {\n return typeof duration === \"number\" ? duration : durationToMs(duration);\n}\n\n/**\n * Format a given Duration object into a string. If the object has no fields,\n * then returns an empty string.\n *\n * @param style Defaults to 'short'\n */\nexport function formatDuration(duration: Duration, style?: DurationStyle) {\n style = style ?? \"short\";\n const stylePlural = getDurationStyleForPlural(style);\n\n const space = getValueAndUnitSeparator(style);\n\n const a: string[] = [];\n\n for (const unit of DURATION_TYPE_SEQUENCE) {\n const value = duration[unit];\n if (value === undefined) continue;\n\n const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];\n const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];\n a.push(value + space + suffix);\n }\n\n const separator = getDurationTypeSeparator(style);\n return a.join(separator);\n}\n\n/**\n * Convert a millisecond duration into a human-readable duration string.\n *\n * @param options.durationTypeForZero - Defaults to 'milliseconds'\n * @param options.style - Defaults to 'short'\n */\nexport function readableDuration(\n ms: number,\n options?: { durationTypeForZero?: DurationType; style?: DurationStyle },\n): string {\n const duration = msToDuration(ms, options?.durationTypeForZero);\n\n return formatDuration(duration, options?.style);\n}\n\n/** A shortened duration string useful for logging timings. */\nexport function elapsed(ms: number): string {\n // Use long format for 1 minute or over.\n if (ms > MS_PER_MINUTE) {\n return readableDuration(ms);\n }\n\n // Use seconds format for over 100ms.\n if (ms > 100) {\n return `${(ms / 1000).toFixed(3)}s`;\n }\n\n // Use milliseconds format.\n return ms + \"ms\";\n}\n","import { elapsed } from \"./duration\";\n\n/**\n * Create a new timer and starts the timing right away. Returns a closed object\n * instead of a class to make sure the variables are bound correctly.\n */\nexport function timer() {\n const obj = {\n startMs: Date.now(),\n endMs: 0,\n\n stop(): void {\n obj.endMs = Date.now();\n },\n\n restart(): void {\n obj.endMs = 0;\n obj.startMs = Date.now();\n },\n\n elapsedMs(): number {\n const stopMs = obj.endMs || Date.now();\n return stopMs - obj.startMs;\n },\n\n toString(): string {\n return elapsed(obj.elapsedMs());\n },\n };\n\n return obj;\n}\n\n/** Defines the type of the Timer object. */\nexport type Timer = ReturnType<typeof timer>;\n"],"mappings":"AAmCO,IAAMA,EAAyC,CACpD,OACA,QACA,UACA,UACA,cACF,EAsBaC,EAGT,CACF,KAAM,CACJ,MAAO,MACP,OAAQ,OACR,KAAM,MACN,MAAO,OACP,OAAQ,GACV,EACA,MAAO,CACL,MAAO,KACP,OAAQ,MACR,KAAM,OACN,MAAO,QACP,OAAQ,GACV,EACA,QAAS,CACP,MAAO,MACP,OAAQ,OACR,KAAM,SACN,MAAO,UACP,OAAQ,GACV,EACA,QAAS,CACP,MAAO,MACP,OAAQ,OACR,KAAM,SACN,MAAO,UACP,OAAQ,GACV,EACA,aAAc,CACZ,MAAO,KACP,OAAQ,KACR,KAAM,cACN,MAAO,eACP,OAAQ,IACV,CACF,EAEA,SAASC,EAA0BC,EAA0C,CAC3E,OAAOA,GAAS,QAAU,SAAWA,IAAU,OAAS,QAAUA,CACpE,CAEA,SAASC,EAAyBD,EAA8B,CAC9D,OAAOA,IAAU,SAAW,GAAK,GACnC,CAEA,SAASE,EAAyBF,EAA8B,CAC9D,OAAOA,IAAU,SAAW,IAAM,IACpC,CASO,SAASG,EACdC,EACAC,EACU,CACV,GAAID,IAAO,EACT,OAAAC,EAAsBA,GAAuB,eACtC,CAAE,CAACA,CAAmB,EAAG,CAAE,EAGpC,IAAMC,EAAqB,CAAC,EAE5B,QAASC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIC,EAAU,KAAK,MAAMJ,EAAK,GAAa,EACrCK,EAASL,EAAKI,EAAU,IAM9B,GAJIC,EAAS,IACXH,EAAS,aAAkBG,GAGzBD,IAAY,EACd,MAGF,IAAIE,EAAU,KAAK,MAAMF,EAAU,EAAkB,EAOrD,GANAA,GAAWE,EAAU,GAEjBF,EAAU,IACZF,EAAS,QAAaE,GAGpBE,IAAY,EACd,MAGF,IAAIC,EAAQ,KAAK,MAAMD,EAAU,EAAgB,EAOjD,GANAA,GAAWC,EAAQ,GAEfD,EAAU,IACZJ,EAAS,QAAaI,GAGpBC,IAAU,EACZ,MAGF,IAAMC,EAAO,KAAK,MAAMD,EAAQ,EAAa,EAC7CA,GAASC,EAAO,GAEZD,EAAQ,IACVL,EAAS,MAAWK,GAGlBC,EAAO,IACTN,EAAS,KAAUM,EAEvB,CAEA,OAAON,CACT,CA4BO,SAASO,EAAeC,EAAoBC,EAAuB,CACxEA,EAAQA,GAAS,QACjB,IAAMC,EAAcC,EAA0BF,CAAK,EAE7CG,EAAQC,EAAyBJ,CAAK,EAEtCK,EAAc,CAAC,EAErB,QAAWC,KAAQC,EAAwB,CACzC,IAAMC,EAAQT,EAASO,CAAI,EAC3B,GAAIE,IAAU,OAAW,SAEzB,IAAMC,EAAYC,EAA0BJ,CAAI,EAC1CK,EAASH,IAAU,EAAIC,EAAUT,CAAK,EAAIS,EAAUR,CAAW,EACrEI,EAAE,KAAKG,EAAQL,EAAQQ,CAAM,CAC/B,CAEA,IAAMC,EAAYC,EAAyBb,CAAK,EAChD,OAAOK,EAAE,KAAKO,CAAS,CACzB,CAQO,SAASE,EACdC,EACAC,EACQ,CACR,IAAMjB,EAAWkB,EAAaF,EAAIC,GAAS,mBAAmB,EAE9D,OAAOlB,EAAeC,EAAUiB,GAAS,KAAK,CAChD,CAGO,SAASE,EAAQH,EAAoB,CAE1C,OAAIA,EAAK,IACAD,EAAiBC,CAAE,EAIxBA,EAAK,IACA,IAAIA,EAAK,KAAM,QAAQ,CAAC,CAAC,IAI3BA,EAAK,IACd,CC7PO,SAASI,GAAQ,CACtB,IAAMC,EAAM,CACV,QAAS,KAAK,IAAI,EAClB,MAAO,EAEP,MAAa,CACXA,EAAI,MAAQ,KAAK,IAAI,CACvB,EAEA,SAAgB,CACdA,EAAI,MAAQ,EACZA,EAAI,QAAU,KAAK,IAAI,CACzB,EAEA,WAAoB,CAElB,OADeA,EAAI,OAAS,KAAK,IAAI,GACrBA,EAAI,OACtB,EAEA,UAAmB,CACjB,OAAOC,EAAQD,EAAI,UAAU,CAAC,CAChC,CACF,EAEA,OAAOA,CACT","names":["DURATION_TYPE_SEQUENCE","DURATION_STYLE_SUFFIX_MAP","getDurationStyleForPlural","style","getValueAndUnitSeparator","getDurationTypeSeparator","msToDuration","ms","durationTypeForZero","duration","i","seconds","millis","minutes","hours","days","formatDuration","duration","style","stylePlural","getDurationStyleForPlural","space","getValueAndUnitSeparator","a","unit","DURATION_TYPE_SEQUENCE","value","suffixMap","DURATION_STYLE_SUFFIX_MAP","suffix","separator","getDurationTypeSeparator","readableDuration","ms","options","msToDuration","elapsed","timer","obj","elapsed"]}
|
package/timer.mjs
CHANGED
|
@@ -1,11 +1,157 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
// src/timeConstants.ts
|
|
2
|
+
var MS_PER_SECOND = 1e3;
|
|
3
|
+
var MS_PER_MINUTE = 6e4;
|
|
4
|
+
var SECONDS_PER_MINUTE = 60;
|
|
5
|
+
var MINUTES_PER_HOUR = 60;
|
|
6
|
+
var HOURS_PER_DAY = 24;
|
|
7
|
+
|
|
8
|
+
// src/duration.ts
|
|
9
|
+
var DURATION_TYPE_SEQUENCE = [
|
|
10
|
+
"days",
|
|
11
|
+
"hours",
|
|
12
|
+
"minutes",
|
|
13
|
+
"seconds",
|
|
14
|
+
"milliseconds"
|
|
15
|
+
];
|
|
16
|
+
var DURATION_STYLE_SUFFIX_MAP = {
|
|
17
|
+
days: {
|
|
18
|
+
short: "day",
|
|
19
|
+
shorts: "days",
|
|
20
|
+
long: "day",
|
|
21
|
+
longs: "days",
|
|
22
|
+
narrow: "d"
|
|
23
|
+
},
|
|
24
|
+
hours: {
|
|
25
|
+
short: "hr",
|
|
26
|
+
shorts: "hrs",
|
|
27
|
+
long: "hour",
|
|
28
|
+
longs: "hours",
|
|
29
|
+
narrow: "h"
|
|
30
|
+
},
|
|
31
|
+
minutes: {
|
|
32
|
+
short: "min",
|
|
33
|
+
shorts: "mins",
|
|
34
|
+
long: "minute",
|
|
35
|
+
longs: "minutes",
|
|
36
|
+
narrow: "m"
|
|
37
|
+
},
|
|
38
|
+
seconds: {
|
|
39
|
+
short: "sec",
|
|
40
|
+
shorts: "secs",
|
|
41
|
+
long: "second",
|
|
42
|
+
longs: "seconds",
|
|
43
|
+
narrow: "s"
|
|
44
|
+
},
|
|
45
|
+
milliseconds: {
|
|
46
|
+
short: "ms",
|
|
47
|
+
shorts: "ms",
|
|
48
|
+
long: "millisecond",
|
|
49
|
+
longs: "milliseconds",
|
|
50
|
+
narrow: "ms"
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
function getDurationStyleForPlural(style) {
|
|
54
|
+
return style == "short" ? "shorts" : style === "long" ? "longs" : style;
|
|
55
|
+
}
|
|
56
|
+
function getValueAndUnitSeparator(style) {
|
|
57
|
+
return style === "narrow" ? "" : " ";
|
|
58
|
+
}
|
|
59
|
+
function getDurationTypeSeparator(style) {
|
|
60
|
+
return style === "narrow" ? " " : ", ";
|
|
61
|
+
}
|
|
62
|
+
function msToDuration(ms, durationTypeForZero) {
|
|
63
|
+
if (ms === 0) {
|
|
64
|
+
durationTypeForZero = durationTypeForZero ?? "milliseconds";
|
|
65
|
+
return { [durationTypeForZero]: 0 };
|
|
66
|
+
}
|
|
67
|
+
const duration = {};
|
|
68
|
+
for (let i = 0; i < 1; i++) {
|
|
69
|
+
let seconds = Math.floor(ms / MS_PER_SECOND);
|
|
70
|
+
const millis = ms - seconds * MS_PER_SECOND;
|
|
71
|
+
if (millis > 0) {
|
|
72
|
+
duration["milliseconds"] = millis;
|
|
73
|
+
}
|
|
74
|
+
if (seconds === 0) {
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);
|
|
78
|
+
seconds -= minutes * SECONDS_PER_MINUTE;
|
|
79
|
+
if (seconds > 0) {
|
|
80
|
+
duration["seconds"] = seconds;
|
|
81
|
+
}
|
|
82
|
+
if (minutes === 0) {
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
let hours = Math.floor(minutes / MINUTES_PER_HOUR);
|
|
86
|
+
minutes -= hours * MINUTES_PER_HOUR;
|
|
87
|
+
if (minutes > 0) {
|
|
88
|
+
duration["minutes"] = minutes;
|
|
89
|
+
}
|
|
90
|
+
if (hours === 0) {
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
const days = Math.floor(hours / HOURS_PER_DAY);
|
|
94
|
+
hours -= days * HOURS_PER_DAY;
|
|
95
|
+
if (hours > 0) {
|
|
96
|
+
duration["hours"] = hours;
|
|
97
|
+
}
|
|
98
|
+
if (days > 0) {
|
|
99
|
+
duration["days"] = days;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return duration;
|
|
103
|
+
}
|
|
104
|
+
function formatDuration(duration, style) {
|
|
105
|
+
style = style ?? "short";
|
|
106
|
+
const stylePlural = getDurationStyleForPlural(style);
|
|
107
|
+
const space = getValueAndUnitSeparator(style);
|
|
108
|
+
const a = [];
|
|
109
|
+
for (const unit of DURATION_TYPE_SEQUENCE) {
|
|
110
|
+
const value = duration[unit];
|
|
111
|
+
if (value === void 0) continue;
|
|
112
|
+
const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];
|
|
113
|
+
const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];
|
|
114
|
+
a.push(value + space + suffix);
|
|
115
|
+
}
|
|
116
|
+
const separator = getDurationTypeSeparator(style);
|
|
117
|
+
return a.join(separator);
|
|
118
|
+
}
|
|
119
|
+
function readableDuration(ms, options) {
|
|
120
|
+
const duration = msToDuration(ms, options?.durationTypeForZero);
|
|
121
|
+
return formatDuration(duration, options?.style);
|
|
122
|
+
}
|
|
123
|
+
function elapsed(ms) {
|
|
124
|
+
if (ms > MS_PER_MINUTE) {
|
|
125
|
+
return readableDuration(ms);
|
|
126
|
+
}
|
|
127
|
+
if (ms > 100) {
|
|
128
|
+
return `${(ms / 1e3).toFixed(3)}s`;
|
|
129
|
+
}
|
|
130
|
+
return ms + "ms";
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// src/timer.ts
|
|
134
|
+
function timer() {
|
|
135
|
+
const obj = {
|
|
136
|
+
startMs: Date.now(),
|
|
137
|
+
endMs: 0,
|
|
138
|
+
stop() {
|
|
139
|
+
obj.endMs = Date.now();
|
|
140
|
+
},
|
|
141
|
+
restart() {
|
|
142
|
+
obj.endMs = 0;
|
|
143
|
+
obj.startMs = Date.now();
|
|
144
|
+
},
|
|
145
|
+
elapsedMs() {
|
|
146
|
+
const stopMs = obj.endMs || Date.now();
|
|
147
|
+
return stopMs - obj.startMs;
|
|
148
|
+
},
|
|
149
|
+
toString() {
|
|
150
|
+
return elapsed(obj.elapsedMs());
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
return obj;
|
|
154
|
+
}
|
|
9
155
|
export {
|
|
10
156
|
timer
|
|
11
157
|
};
|
package/toReadableString.cjs
CHANGED
|
@@ -1,7 +1,69 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
19
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
20
|
+
// src/toReadableString.ts
|
|
21
|
+
var toReadableString_exports = {};
|
|
22
|
+
__export(toReadableString_exports, {
|
|
23
|
+
toReadableString: () => toReadableString
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(toReadableString_exports);
|
|
26
|
+
function toReadableString(u, options) {
|
|
27
|
+
if (typeof u === "string") {
|
|
28
|
+
return u;
|
|
29
|
+
}
|
|
30
|
+
if (u instanceof Error) {
|
|
31
|
+
const error = u;
|
|
32
|
+
let result = "";
|
|
33
|
+
const errorName = error.name || "Error";
|
|
34
|
+
const errorMessage = error.message || "An error occurred with no message provided.";
|
|
35
|
+
result += `${errorName}: ${errorMessage}`;
|
|
36
|
+
if (options?.includeStack && error.stack) {
|
|
37
|
+
const stack = error.stack.replace(new RegExp(`^${errorName}:.*\\n?`), "").trim();
|
|
38
|
+
if (stack) {
|
|
39
|
+
result += `
|
|
40
|
+
Stack Trace:
|
|
41
|
+
${stack}`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (options?.includeErrorProps) {
|
|
45
|
+
const customProps = error;
|
|
46
|
+
const additionalInfo = Object.keys(customProps).filter(
|
|
47
|
+
(key) => key !== "name" && key !== "message" && key !== "stack" && typeof customProps[key] !== "function" && typeof customProps[key] !== "object"
|
|
48
|
+
).map((key) => `
|
|
49
|
+
- ${key}: ${customProps[key]}`);
|
|
50
|
+
if (additionalInfo.length > 0) {
|
|
51
|
+
result += `
|
|
52
|
+
Additional Data:${additionalInfo.join("")}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
if (u !== null && typeof u === "object" && u.toString !== Object.prototype.toString) {
|
|
58
|
+
return u.toString();
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
return JSON.stringify(u);
|
|
62
|
+
} catch {
|
|
63
|
+
return String(u);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
67
|
+
0 && (module.exports = {
|
|
68
|
+
toReadableString
|
|
69
|
+
});
|
package/toReadableString.min.cjs
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(
|
|
1
|
+
"use strict";var c=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var d=(r,t)=>{for(var n in t)c(r,n,{get:t[n],enumerable:!0})},m=(r,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of g(t))!p.call(r,e)&&e!==n&&c(r,e,{get:()=>t[e],enumerable:!(i=l(t,e))||i.enumerable});return r};var S=r=>m(c({},"__esModule",{value:!0}),r);var b={};d(b,{toReadableString:()=>u});module.exports=S(b);function u(r,t){if(typeof r=="string")return r;if(r instanceof Error){let n=r,i="",e=n.name||"Error",f=n.message||"An error occurred with no message provided.";if(i+=`${e}: ${f}`,t?.includeStack&&n.stack){let a=n.stack.replace(new RegExp(`^${e}:.*\\n?`),"").trim();a&&(i+=`
|
|
2
|
+
Stack Trace:
|
|
3
|
+
${a}`)}if(t?.includeErrorProps){let a=n,s=Object.keys(a).filter(o=>o!=="name"&&o!=="message"&&o!=="stack"&&typeof a[o]!="function"&&typeof a[o]!="object").map(o=>`
|
|
4
|
+
- ${o}: ${a[o]}`);s.length>0&&(i+=`
|
|
5
|
+
Additional Data:${s.join("")}`)}return i}if(r!==null&&typeof r=="object"&&r.toString!==Object.prototype.toString)return r.toString();try{return JSON.stringify(r)}catch{return String(r)}}0&&(module.exports={toReadableString});
|
|
2
6
|
//# sourceMappingURL=toReadableString.min.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["../src/toReadableString.ts"],"sourcesContent":["/**\n * Make the given argument of unknown type into something human-readable.\n * For Error objects, you can specify options to make the string more verbose.\n */\nexport function toReadableString(\n u: unknown,\n options?: { includeStack?: boolean; includeErrorProps?: boolean },\n): string {\n if (typeof u === \"string\") {\n return u;\n }\n\n if (u instanceof Error) {\n const error = u as Error;\n let result = \"\";\n\n // Always include the name and message\n const errorName = error.name || \"Error\";\n const errorMessage =\n error.message || \"An error occurred with no message provided.\";\n\n result += `${errorName}: ${errorMessage}`;\n\n // Optionally include the stack trace\n if (options?.includeStack && error.stack) {\n // Clean up the stack trace to start on a new line,\n // removing potential duplicate header lines if the browser adds them.\n const stack = error.stack\n // Remove the first line if it duplicates the name/message\n .replace(new RegExp(`^${errorName}:.*\\\\n?`), \"\")\n .trim();\n\n if (stack) {\n result += `\\nStack Trace:\\n${stack}`;\n }\n }\n\n // Add any potential custom error properties (e.g., HTTP status code)\n if (options?.includeErrorProps) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const customProps: { [key: string]: unknown } = error as any;\n\n const additionalInfo = Object.keys(customProps)\n .filter(\n (key) =>\n key !== \"name\" &&\n key !== \"message\" &&\n key !== \"stack\" &&\n typeof customProps[key] !== \"function\" &&\n typeof customProps[key] !== \"object\",\n )\n .map((key) => `\\n- ${key}: ${customProps[key]}`);\n\n if (additionalInfo.length > 0) {\n result += `\\nAdditional Data:${additionalInfo.join(\"\")}`;\n }\n }\n\n return result;\n }\n\n // If the object has a custom toString(), then use it.\n if (\n u !== null &&\n typeof u === \"object\" &&\n u.toString !== Object.prototype.toString\n ) {\n return u.toString();\n }\n\n try {\n // Attempt to JSON stringify the object for inspection.\n return JSON.stringify(u);\n } catch {\n // Fallback if the object cannot be stringified (e.g., circular references).\n return String(u);\n }\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAIO,SAASE,EACdE,EACAC,EACQ,CACR,GAAI,OAAOD,GAAM,SACf,OAAOA,EAGT,GAAIA,aAAa,MAAO,CACtB,IAAME,EAAQF,EACVG,EAAS,GAGPC,EAAYF,EAAM,MAAQ,QAC1BG,EACJH,EAAM,SAAW,8CAKnB,GAHAC,GAAU,GAAGC,CAAS,KAAKC,CAAY,GAGnCJ,GAAS,cAAgBC,EAAM,MAAO,CAGxC,IAAMI,EAAQJ,EAAM,MAEjB,QAAQ,IAAI,OAAO,IAAIE,CAAS,SAAS,EAAG,EAAE,EAC9C,KAAK,EAEJE,IACFH,GAAU;AAAA;AAAA,EAAmBG,CAAK,GAEtC,CAGA,GAAIL,GAAS,kBAAmB,CAE9B,IAAMM,EAA0CL,EAE1CM,EAAiB,OAAO,KAAKD,CAAW,EAC3C,OACEE,GACCA,IAAQ,QACRA,IAAQ,WACRA,IAAQ,SACR,OAAOF,EAAYE,CAAG,GAAM,YAC5B,OAAOF,EAAYE,CAAG,GAAM,QAChC,EACC,IAAKA,GAAQ;AAAA,IAAOA,CAAG,KAAKF,EAAYE,CAAG,CAAC,EAAE,EAE7CD,EAAe,OAAS,IAC1BL,GAAU;AAAA,kBAAqBK,EAAe,KAAK,EAAE,CAAC,GAE1D,CAEA,OAAOL,CACT,CAGA,GACEH,IAAM,MACN,OAAOA,GAAM,UACbA,EAAE,WAAa,OAAO,UAAU,SAEhC,OAAOA,EAAE,SAAS,EAGpB,GAAI,CAEF,OAAO,KAAK,UAAUA,CAAC,CACzB,MAAQ,CAEN,OAAO,OAAOA,CAAC,CACjB,CACF","names":["toReadableString_exports","__export","toReadableString","__toCommonJS","u","options","error","result","errorName","errorMessage","stack","customProps","additionalInfo","key"]}
|
package/toReadableString.min.mjs
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
function f(r,i){if(typeof r=="string")return r;if(r instanceof Error){let e=r,o="",a=e.name||"Error",s=e.message||"An error occurred with no message provided.";if(o+=`${a}: ${s}`,i?.includeStack&&e.stack){let n=e.stack.replace(new RegExp(`^${a}:.*\\n?`),"").trim();n&&(o+=`
|
|
2
|
+
Stack Trace:
|
|
3
|
+
${n}`)}if(i?.includeErrorProps){let n=e,c=Object.keys(n).filter(t=>t!=="name"&&t!=="message"&&t!=="stack"&&typeof n[t]!="function"&&typeof n[t]!="object").map(t=>`
|
|
4
|
+
- ${t}: ${n[t]}`);c.length>0&&(o+=`
|
|
5
|
+
Additional Data:${c.join("")}`)}return o}if(r!==null&&typeof r=="object"&&r.toString!==Object.prototype.toString)return r.toString();try{return JSON.stringify(r)}catch{return String(r)}}export{f as toReadableString};
|
|
2
6
|
//# sourceMappingURL=toReadableString.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/toReadableString.ts"],"sourcesContent":["/**\n * Make the given argument of unknown type into something human-readable.\n * For Error objects, you can specify options to make the string more verbose.\n */\nexport function toReadableString(\n u: unknown,\n options?: { includeStack?: boolean; includeErrorProps?: boolean },\n): string {\n if (typeof u === \"string\") {\n return u;\n }\n\n if (u instanceof Error) {\n const error = u as Error;\n let result = \"\";\n\n // Always include the name and message\n const errorName = error.name || \"Error\";\n const errorMessage =\n error.message || \"An error occurred with no message provided.\";\n\n result += `${errorName}: ${errorMessage}`;\n\n // Optionally include the stack trace\n if (options?.includeStack && error.stack) {\n // Clean up the stack trace to start on a new line,\n // removing potential duplicate header lines if the browser adds them.\n const stack = error.stack\n // Remove the first line if it duplicates the name/message\n .replace(new RegExp(`^${errorName}:.*\\\\n?`), \"\")\n .trim();\n\n if (stack) {\n result += `\\nStack Trace:\\n${stack}`;\n }\n }\n\n // Add any potential custom error properties (e.g., HTTP status code)\n if (options?.includeErrorProps) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const customProps: { [key: string]: unknown } = error as any;\n\n const additionalInfo = Object.keys(customProps)\n .filter(\n (key) =>\n key !== \"name\" &&\n key !== \"message\" &&\n key !== \"stack\" &&\n typeof customProps[key] !== \"function\" &&\n typeof customProps[key] !== \"object\",\n )\n .map((key) => `\\n- ${key}: ${customProps[key]}`);\n\n if (additionalInfo.length > 0) {\n result += `\\nAdditional Data:${additionalInfo.join(\"\")}`;\n }\n }\n\n return result;\n }\n\n // If the object has a custom toString(), then use it.\n if (\n u !== null &&\n typeof u === \"object\" &&\n u.toString !== Object.prototype.toString\n ) {\n return u.toString();\n }\n\n try {\n // Attempt to JSON stringify the object for inspection.\n return JSON.stringify(u);\n } catch {\n // Fallback if the object cannot be stringified (e.g., circular references).\n return String(u);\n }\n}\n"],"mappings":"AAIO,SAASA,EACdC,EACAC,EACQ,CACR,GAAI,OAAOD,GAAM,SACf,OAAOA,EAGT,GAAIA,aAAa,MAAO,CACtB,IAAME,EAAQF,EACVG,EAAS,GAGPC,EAAYF,EAAM,MAAQ,QAC1BG,EACJH,EAAM,SAAW,8CAKnB,GAHAC,GAAU,GAAGC,CAAS,KAAKC,CAAY,GAGnCJ,GAAS,cAAgBC,EAAM,MAAO,CAGxC,IAAMI,EAAQJ,EAAM,MAEjB,QAAQ,IAAI,OAAO,IAAIE,CAAS,SAAS,EAAG,EAAE,EAC9C,KAAK,EAEJE,IACFH,GAAU;AAAA;AAAA,EAAmBG,CAAK,GAEtC,CAGA,GAAIL,GAAS,kBAAmB,CAE9B,IAAMM,EAA0CL,EAE1CM,EAAiB,OAAO,KAAKD,CAAW,EAC3C,OACEE,GACCA,IAAQ,QACRA,IAAQ,WACRA,IAAQ,SACR,OAAOF,EAAYE,CAAG,GAAM,YAC5B,OAAOF,EAAYE,CAAG,GAAM,QAChC,EACC,IAAKA,GAAQ;AAAA,IAAOA,CAAG,KAAKF,EAAYE,CAAG,CAAC,EAAE,EAE7CD,EAAe,OAAS,IAC1BL,GAAU;AAAA,kBAAqBK,EAAe,KAAK,EAAE,CAAC,GAE1D,CAEA,OAAOL,CACT,CAGA,GACEH,IAAM,MACN,OAAOA,GAAM,UACbA,EAAE,WAAa,OAAO,UAAU,SAEhC,OAAOA,EAAE,SAAS,EAGpB,GAAI,CAEF,OAAO,KAAK,UAAUA,CAAC,CACzB,MAAQ,CAEN,OAAO,OAAOA,CAAC,CACjB,CACF","names":["toReadableString","u","options","error","result","errorName","errorMessage","stack","customProps","additionalInfo","key"]}
|
package/toReadableString.mjs
CHANGED
|
@@ -1,7 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
// src/toReadableString.ts
|
|
2
|
+
function toReadableString(u, options) {
|
|
3
|
+
if (typeof u === "string") {
|
|
4
|
+
return u;
|
|
5
|
+
}
|
|
6
|
+
if (u instanceof Error) {
|
|
7
|
+
const error = u;
|
|
8
|
+
let result = "";
|
|
9
|
+
const errorName = error.name || "Error";
|
|
10
|
+
const errorMessage = error.message || "An error occurred with no message provided.";
|
|
11
|
+
result += `${errorName}: ${errorMessage}`;
|
|
12
|
+
if (options?.includeStack && error.stack) {
|
|
13
|
+
const stack = error.stack.replace(new RegExp(`^${errorName}:.*\\n?`), "").trim();
|
|
14
|
+
if (stack) {
|
|
15
|
+
result += `
|
|
16
|
+
Stack Trace:
|
|
17
|
+
${stack}`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (options?.includeErrorProps) {
|
|
21
|
+
const customProps = error;
|
|
22
|
+
const additionalInfo = Object.keys(customProps).filter(
|
|
23
|
+
(key) => key !== "name" && key !== "message" && key !== "stack" && typeof customProps[key] !== "function" && typeof customProps[key] !== "object"
|
|
24
|
+
).map((key) => `
|
|
25
|
+
- ${key}: ${customProps[key]}`);
|
|
26
|
+
if (additionalInfo.length > 0) {
|
|
27
|
+
result += `
|
|
28
|
+
Additional Data:${additionalInfo.join("")}`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
if (u !== null && typeof u === "object" && u.toString !== Object.prototype.toString) {
|
|
34
|
+
return u.toString();
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
return JSON.stringify(u);
|
|
38
|
+
} catch {
|
|
39
|
+
return String(u);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
5
42
|
export {
|
|
6
43
|
toReadableString
|
|
7
44
|
};
|
package/chunk-22JDWCOS.min.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk27MBP3ESmincjs = require('./chunk-27MBP3ES.min.cjs');var _chunkGAP2HS5Mmincjs = require('./chunk-GAP2HS5M.min.cjs');var _chunkQNNJNLGKmincjs = require('./chunk-QNNJNLGK.min.cjs');function E(r){Object.assign(S,r)}function M(r){if(!(!r||typeof r!="object"||typeof r.key!="string"||r.value===void 0||typeof r.storedMs!="number"||typeof r.expiryMs!="number"||Date.now()>=r.expiryMs))return r}function f(r,i){return r.onerror=c=>{i(c)},r}function P(r,i){let c,g=_nullishCoalesce(_optionalChain([i, 'optionalAccess', _ => _.dbVersion]), () => (S.dbVersion)),v=_nullishCoalesce(_optionalChain([i, 'optionalAccess', _2 => _2.storeName]), () => (S.storeName)),b=_optionalChain([i, 'optionalAccess', _3 => _3.defaultExpiryMs])?_chunk27MBP3ESmincjs.e.call(void 0, i.defaultExpiryMs):S.expiryMs,p=_optionalChain([i, 'optionalAccess', _4 => _4.gcIntervalMs])?_chunk27MBP3ESmincjs.e.call(void 0, i.gcIntervalMs):S.gcIntervalMs,T=`__kvStore:lastGcMs:${r}:v${g}:${v}`;async function D(){return c||(c=await new Promise((e,t)=>{let n=f(indexedDB.open(r,g),t);n.onupgradeneeded=o=>{o.target.result.createObjectStore(v,{keyPath:"key"}).createIndex("key","key",{unique:!0})},n.onsuccess=o=>{let a=o.target.result;e(a)}})),c}async function y(e,t){let n=await D();return await new Promise((o,a)=>{let d=f(n.transaction(v,e),a);d.onabort=l=>{a(l)};let u=d.objectStore(v);t(u,o,a)})}let s={dbName:r,dbVersion:g,storeName:v,defaultExpiryMs:b,gcIntervalMs:p,gcMsStorageKey:T,async set(e,t,n){let o=Date.now(),a={key:e,value:t,storedMs:o,expiryMs:o+_chunk27MBP3ESmincjs.e.call(void 0, _nullishCoalesce(n, () => (b)))};return await y("readwrite",(d,u,l)=>{let x=f(d.put(a),l);x.onsuccess=()=>{u(t),s.gc()}})},async delete(e){return await y("readwrite",(t,n,o)=>{if(t.transaction.oncomplete=()=>{n()},typeof e=="string")f(t.delete(e),o);else for(let a of e)f(t.delete(a),o)})},async getStoredObject(e){let t=await y("readonly",(n,o,a)=>{let d=f(n.get(e),a);d.onsuccess=()=>{o(d.result)}});if(t)try{let n=M(t);if(!n){await s.delete(e),s.gc();return}return n}catch(n){console.error(`Invalid kv value: ${e}=${JSON.stringify(t)}:`,n),await s.delete(e),s.gc();return}},async get(e){returnawait _asyncOptionalChain([(await s.getStoredObject(e)), 'optionalAccess', async _5 => _5.value])},async forEach(e){await y("readonly",(t,n,o)=>{let a=f(t.openCursor(),o);a.onsuccess=async d=>{let u=d.target.result;if(u){if(u.key){let l=M(u.value);l!==void 0&&await e(String(u.key),l.value,l.expiryMs,l.storedMs)}u.continue()}else n()}})},async size(){let e=0;return await s.forEach(()=>{e++}),e},async clear(){await y("readwrite",(e,t,n)=>{let o=f(e.clear(),n);o.onsuccess=()=>{t()}})},async asMap(){let e=new Map;return await s.forEach((t,n,o,a)=>{e.set(t,{value:n,expiryMs:o,storedMs:a})}),e},getLastGcMs(){let e=localStorage.getItem(T);if(!e)return 0;let t=Number(e);return isNaN(t)?0:t},setLastGcMs(e){localStorage.setItem(T,String(e))},async gc(){let e=s.getLastGcMs();if(!e){s.setLastGcMs(Date.now());return}Date.now()<e+p||await s.gcNow()},async gcNow(){console.log(`Starting kvStore GC on ${r} v${g}...`),s.setLastGcMs(Date.now());let e=[];await s.forEach(async(t,n,o)=>{(n===void 0||Date.now()>=o)&&e.push(t)}),e.length&&await s.delete(e),console.log(`Finished kvStore GC on ${r} v${g} - deleted ${e.length} keys`),s.setLastGcMs(Date.now())},asStorageAdapter(){return s}};return s}function G(r,i,c=K){let g=i&&_chunk27MBP3ESmincjs.e.call(void 0, i);return{key:r,defaultExpiryMs:g,store:c,async set(b,p){await c.set(r,b,_nullishCoalesce(p, () => (g)))},async getStoredObject(){return await c.getStoredObject(r)},async get(){return await c.get(r)},async delete(){await c.delete(r)}}}var S,K,j= exports.f =_chunkQNNJNLGKmincjs.a.call(void 0, ()=>{_chunk27MBP3ESmincjs.i.call(void 0, );S= exports.a ={dbName:"KVStore",dbVersion:1,storeName:"kvStore",expiryMs:864e5*30,gcIntervalMs:864e5};K= exports.d =P(S.dbName)});exports.a = S; exports.b = E; exports.c = P; exports.d = K; exports.e = G; exports.f = j;
|
|
2
|
-
//# sourceMappingURL=chunk-22JDWCOS.min.cjs.map
|