@choksheak/ts-utils 0.3.4 → 0.3.6
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 +9 -3
- package/arrayBuffer.cjs +10 -39
- 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 +7 -10
- package/asNumber.cjs +6 -38
- package/asNumber.d.mts +1 -1
- package/asNumber.d.ts +1 -1
- 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 +4 -11
- package/assert.cjs +4 -27
- 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 +2 -0
- package/base64Url.cjs +5 -29
- 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 +2 -0
- package/capLength.cjs +7 -71
- package/capLength.min.cjs +1 -5
- package/capLength.min.cjs.map +1 -1
- package/capLength.min.mjs +1 -5
- package/capLength.min.mjs.map +1 -1
- package/capLength.mjs +4 -41
- package/chunk-22JDWCOS.min.cjs +2 -0
- package/chunk-22JDWCOS.min.cjs.map +1 -0
- package/chunk-244NBT4Q.min.mjs +2 -0
- package/chunk-244NBT4Q.min.mjs.map +1 -0
- package/chunk-27MBP3ES.min.cjs +2 -0
- package/chunk-27MBP3ES.min.cjs.map +1 -0
- package/chunk-34ENP2B3.min.mjs +438 -0
- package/chunk-34ENP2B3.min.mjs.map +1 -0
- package/chunk-3EBQ2GO2.min.cjs +2 -0
- package/chunk-3EBQ2GO2.min.cjs.map +1 -0
- package/chunk-4GLOLTJ5.cjs +167 -0
- package/chunk-6TQBMXTL.min.cjs +2 -0
- package/chunk-6TQBMXTL.min.cjs.map +1 -0
- package/chunk-AWZBCFMG.min.cjs +2 -0
- package/chunk-AWZBCFMG.min.cjs.map +1 -0
- package/chunk-AXNETZET.cjs +20 -0
- package/chunk-BKZM6NWX.min.cjs +2 -0
- package/chunk-BKZM6NWX.min.cjs.map +1 -0
- package/chunk-BZKQXX3A.cjs +40 -0
- package/chunk-CERFUU5I.cjs +93 -0
- package/chunk-CSTKFJ6G.mjs +239 -0
- package/chunk-DUN4UY2Q.cjs +239 -0
- package/chunk-EDJJUP4K.min.cjs +6 -0
- package/chunk-EDJJUP4K.min.cjs.map +1 -0
- package/chunk-FFNQBZH5.cjs +14 -0
- package/chunk-FZZRSHSH.min.mjs +6 -0
- package/chunk-FZZRSHSH.min.mjs.map +1 -0
- package/chunk-GAP2HS5M.min.cjs +2 -0
- package/chunk-GAP2HS5M.min.cjs.map +1 -0
- package/chunk-GLYMAPS4.min.mjs +2 -0
- package/chunk-GLYMAPS4.min.mjs.map +1 -0
- package/chunk-I65KPVMO.min.cjs +438 -0
- package/chunk-I65KPVMO.min.cjs.map +1 -0
- package/chunk-ILGTU46T.cjs +39 -0
- package/chunk-IOKRXHKE.min.mjs +2 -0
- package/chunk-IOKRXHKE.min.mjs.map +1 -0
- package/chunk-ISP4SMRC.min.cjs +2 -0
- package/chunk-ISP4SMRC.min.cjs.map +1 -0
- package/chunk-KETP5HBF.cjs +24 -0
- package/chunk-KLHNGJ4Y.min.mjs +2 -0
- package/chunk-KLHNGJ4Y.min.mjs.map +1 -0
- package/chunk-KMNTU3DJ.mjs +45 -0
- package/chunk-LDVEXETI.cjs +45 -0
- package/chunk-LZENHV35.min.cjs +2 -0
- package/chunk-LZENHV35.min.cjs.map +1 -0
- package/chunk-M5PIM2HB.mjs +42 -0
- package/chunk-M6PYQYOX.mjs +39 -0
- package/chunk-MN5EYNZN.min.mjs +2 -0
- package/chunk-MN5EYNZN.min.mjs.map +1 -0
- package/chunk-NRIBJ2OJ.mjs +16031 -0
- package/chunk-NVLYXWLX.cjs +32 -0
- package/chunk-O352F2MT.mjs +24 -0
- package/chunk-O6B2TKFK.min.mjs +2 -0
- package/chunk-O6B2TKFK.min.mjs.map +1 -0
- package/chunk-OGF34H4T.min.cjs +2 -0
- package/chunk-OGF34H4T.min.cjs.map +1 -0
- package/chunk-OXSWWWOM.min.mjs +2 -0
- package/chunk-OXSWWWOM.min.mjs.map +1 -0
- package/chunk-PRUGHVRT.mjs +14 -0
- package/chunk-Q4WCMSOW.min.mjs +2 -0
- package/chunk-Q4WCMSOW.min.mjs.map +1 -0
- package/chunk-QH74JZCK.mjs +9 -0
- package/chunk-QNNJNLGK.min.cjs +2 -0
- package/chunk-QNNJNLGK.min.cjs.map +1 -0
- package/chunk-QWCFN7ZM.mjs +15 -0
- package/chunk-SDM2OPT6.mjs +32 -0
- package/chunk-SHKRZCF2.cjs +16031 -0
- package/chunk-SJDJDNDN.min.cjs +2 -0
- package/chunk-SJDJDNDN.min.cjs.map +1 -0
- package/chunk-SULNMALN.cjs +328 -0
- package/chunk-SV35RBZ7.min.mjs +2 -0
- package/chunk-SV35RBZ7.min.mjs.map +1 -0
- package/chunk-TJFYGFOW.mjs +328 -0
- package/chunk-UHRYBUUX.min.mjs +2 -0
- package/chunk-UHRYBUUX.min.mjs.map +1 -0
- package/chunk-UOU6IP3S.min.mjs +2 -0
- package/chunk-UOU6IP3S.min.mjs.map +1 -0
- package/chunk-V76XVNZ5.mjs +20 -0
- package/chunk-VFYQ7I5V.min.mjs +2 -0
- package/chunk-VFYQ7I5V.min.mjs.map +1 -0
- package/chunk-VG7VV7J2.mjs +167 -0
- package/chunk-VJCV56DO.cjs +15 -0
- package/chunk-VREA6AKG.cjs +9 -0
- package/chunk-W5I6Y5FK.min.mjs +2 -0
- package/chunk-W5I6Y5FK.min.mjs.map +1 -0
- package/chunk-Y7MC73BZ.cjs +42 -0
- package/chunk-YVWROQKU.mjs +40 -0
- package/chunk-ZKIZ5SWK.min.cjs +2 -0
- package/chunk-ZKIZ5SWK.min.cjs.map +1 -0
- package/chunk-ZZZB7NJX.mjs +93 -0
- package/concatIterators.cjs +4 -27
- 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 +2 -0
- package/dateTimeStr.cjs +31 -119
- 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 +17 -69
- package/duration.cjs +24 -188
- 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 +14 -144
- package/getEnv.cjs +20 -0
- package/getEnv.d.mts +11 -0
- package/getEnv.d.ts +11 -0
- package/getEnv.min.cjs +2 -0
- package/getEnv.min.cjs.map +1 -0
- package/getEnv.min.mjs +2 -0
- package/getEnv.min.mjs.map +1 -0
- package/getEnv.mjs +20 -0
- package/isEmpty.cjs +8 -46
- 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 +6 -19
- package/isPromise.cjs +5 -29
- 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 +2 -0
- package/kvStore.cjs +15 -362
- package/kvStore.d.mts +142 -44
- package/kvStore.d.ts +142 -44
- 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 +13 -328
- package/localStore.cjs +15 -263
- package/localStore.d.mts +135 -34
- package/localStore.d.ts +135 -34
- 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 +13 -229
- package/magic-string.es-4UY437WL.min.mjs +14 -0
- package/magic-string.es-4UY437WL.min.mjs.map +1 -0
- package/magic-string.es-OAQWZQTY.mjs +1323 -0
- package/magic-string.es-UE2UVQEL.cjs +1323 -0
- package/magic-string.es-X6DNUB6Y.min.cjs +14 -0
- package/magic-string.es-X6DNUB6Y.min.cjs.map +1 -0
- package/mean.cjs +8 -48
- 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 +5 -18
- package/median.cjs +7 -41
- 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 +5 -12
- package/nonEmpty.cjs +8 -48
- 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 +6 -19
- package/nonNil.cjs +4 -27
- 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 +2 -0
- package/package.json +274 -34
- package/round.cjs +6 -32
- 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 +4 -5
- package/roundToString.cjs +7 -35
- 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 +4 -5
- package/safeBtoa.cjs +4 -27
- package/safeBtoa.d.mts +7 -0
- package/safeBtoa.d.ts +7 -0
- 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 +2 -0
- package/sha256.cjs +8 -34
- 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 +6 -7
- package/sleep.cjs +4 -27
- 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 +2 -0
- package/storageAdapter.cjs +1 -18
- package/storageAdapter.min.cjs +1 -2
- package/storageAdapter.min.cjs.map +1 -1
- package/sum.cjs +5 -45
- 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 +5 -18
- package/timeConstants.cjs +35 -69
- 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 +19 -15
- package/timer.cjs +7 -185
- package/timer.d.mts +9 -6
- package/timer.d.ts +9 -6
- 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 +8 -158
- package/toReadableString.cjs +6 -68
- package/toReadableString.min.cjs +1 -5
- package/toReadableString.min.cjs.map +1 -1
- package/toReadableString.min.mjs +1 -5
- package/toReadableString.min.mjs.map +1 -1
- package/toReadableString.mjs +4 -41
- package/safeParseFloat.cjs +0 -33
- package/safeParseFloat.d.mts +0 -6
- package/safeParseFloat.d.ts +0 -6
- package/safeParseFloat.min.cjs +0 -2
- package/safeParseFloat.min.cjs.map +0 -1
- package/safeParseFloat.min.mjs +0 -2
- package/safeParseFloat.min.mjs.map +0 -1
- package/safeParseFloat.mjs +0 -8
- package/safeParseInt.cjs +0 -33
- package/safeParseInt.d.mts +0 -6
- package/safeParseInt.d.ts +0 -6
- package/safeParseInt.min.cjs +0 -2
- package/safeParseInt.min.cjs.map +0 -1
- package/safeParseInt.min.mjs +0 -2
- package/safeParseInt.min.mjs.map +0 -1
- package/safeParseInt.mjs +0 -8
|
@@ -0,0 +1,239 @@
|
|
|
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; }
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunk4GLOLTJ5cjs = require('./chunk-4GLOLTJ5.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkY7MC73BZcjs = require('./chunk-Y7MC73BZ.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var _chunkILGTU46Tcjs = require('./chunk-ILGTU46T.cjs');
|
|
12
|
+
|
|
13
|
+
// src/localStore.ts
|
|
14
|
+
function configureLocalStore(config) {
|
|
15
|
+
Object.assign(LocalStoreConfig, config);
|
|
16
|
+
}
|
|
17
|
+
function validateStoredObject(obj) {
|
|
18
|
+
if (!obj || typeof obj !== "object" || obj.value === void 0 || typeof obj.storedMs !== "number" || typeof obj.expiryMs !== "number" || Date.now() >= obj.expiryMs) {
|
|
19
|
+
return void 0;
|
|
20
|
+
}
|
|
21
|
+
return obj;
|
|
22
|
+
}
|
|
23
|
+
function createLocalStore(storeName, options) {
|
|
24
|
+
const keyPrefix = storeName + ":";
|
|
25
|
+
const defaultExpiryMs = _optionalChain([options, 'optionalAccess', _ => _.defaultExpiryMs]) ? _chunk4GLOLTJ5cjs.durationOrMsToMs.call(void 0, options.defaultExpiryMs) : LocalStoreConfig.expiryMs;
|
|
26
|
+
const gcIntervalMs = _optionalChain([options, 'optionalAccess', _2 => _2.gcIntervalMs]) ? _chunk4GLOLTJ5cjs.durationOrMsToMs.call(void 0, options.gcIntervalMs) : LocalStoreConfig.gcIntervalMs;
|
|
27
|
+
const gcMsStorageKey = `__localStore:lastGcMs:${storeName}`;
|
|
28
|
+
const obj = {
|
|
29
|
+
/** Input name for the store. */
|
|
30
|
+
storeName,
|
|
31
|
+
/**
|
|
32
|
+
* The prefix string for the local storage key which identifies items
|
|
33
|
+
* belonging to this namespace.
|
|
34
|
+
*/
|
|
35
|
+
keyPrefix,
|
|
36
|
+
/** Default expiry to use if not specified in set(). */
|
|
37
|
+
defaultExpiryMs,
|
|
38
|
+
/** Time interval for when GC's occur. */
|
|
39
|
+
gcIntervalMs,
|
|
40
|
+
/** Local storage key name for the last GC completed timestamp. */
|
|
41
|
+
gcMsStorageKey,
|
|
42
|
+
/** Set a value in the store. */
|
|
43
|
+
set(key, value, expiryDeltaMs) {
|
|
44
|
+
const nowMs = Date.now();
|
|
45
|
+
const stored = {
|
|
46
|
+
value,
|
|
47
|
+
storedMs: nowMs,
|
|
48
|
+
expiryMs: nowMs + _chunk4GLOLTJ5cjs.durationOrMsToMs.call(void 0, _nullishCoalesce(expiryDeltaMs, () => ( defaultExpiryMs)))
|
|
49
|
+
};
|
|
50
|
+
localStorage.setItem(keyPrefix + key, JSON.stringify(stored));
|
|
51
|
+
obj.gc();
|
|
52
|
+
return value;
|
|
53
|
+
},
|
|
54
|
+
/** Delete one or multiple keys. */
|
|
55
|
+
delete(key) {
|
|
56
|
+
if (typeof key === "string") {
|
|
57
|
+
localStorage.removeItem(keyPrefix + key);
|
|
58
|
+
} else {
|
|
59
|
+
for (const k of key) {
|
|
60
|
+
localStorage.removeItem(keyPrefix + k);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
/** Mainly used to get the expiration timestamp of an object. */
|
|
65
|
+
getStoredObject(key) {
|
|
66
|
+
const k = keyPrefix + key;
|
|
67
|
+
const stored = localStorage.getItem(k);
|
|
68
|
+
if (!stored) {
|
|
69
|
+
return void 0;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const parsed = JSON.parse(stored);
|
|
73
|
+
const valid = validateStoredObject(parsed);
|
|
74
|
+
if (!valid) {
|
|
75
|
+
obj.delete(k);
|
|
76
|
+
obj.gc();
|
|
77
|
+
return void 0;
|
|
78
|
+
}
|
|
79
|
+
return valid;
|
|
80
|
+
} catch (e) {
|
|
81
|
+
console.error(`Invalid local value: ${k}=${stored}:`, e);
|
|
82
|
+
obj.delete(k);
|
|
83
|
+
obj.gc();
|
|
84
|
+
return void 0;
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
/** Get a value by key, or undefined if it does not exist. */
|
|
88
|
+
get(key) {
|
|
89
|
+
const stored = obj.getStoredObject(key);
|
|
90
|
+
return _optionalChain([stored, 'optionalAccess', _3 => _3.value]);
|
|
91
|
+
},
|
|
92
|
+
/** Generic way to iterate through all entries. */
|
|
93
|
+
forEach(callback) {
|
|
94
|
+
for (const k of Object.keys(localStorage)) {
|
|
95
|
+
if (!k.startsWith(keyPrefix)) continue;
|
|
96
|
+
const key = k.slice(keyPrefix.length);
|
|
97
|
+
const stored = obj.getStoredObject(key);
|
|
98
|
+
if (!stored) continue;
|
|
99
|
+
callback(key, stored.value, stored.expiryMs, stored.storedMs);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
/**
|
|
103
|
+
* Returns the number of items in the store. Note that getting the size
|
|
104
|
+
* requires iterating through the entire store because the items could expire
|
|
105
|
+
* at any time, and hence the size is a dynamic number.
|
|
106
|
+
*/
|
|
107
|
+
size() {
|
|
108
|
+
let count = 0;
|
|
109
|
+
obj.forEach(() => {
|
|
110
|
+
count++;
|
|
111
|
+
});
|
|
112
|
+
return count;
|
|
113
|
+
},
|
|
114
|
+
/** Remove all items from the store. */
|
|
115
|
+
clear() {
|
|
116
|
+
for (const key of Object.keys(localStorage)) {
|
|
117
|
+
if (key.startsWith(keyPrefix)) {
|
|
118
|
+
localStorage.removeItem(key);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
/**
|
|
123
|
+
* Returns all items as map of key to value, mainly used for debugging dumps.
|
|
124
|
+
* The type T is applied to all values, even though they might not be of type
|
|
125
|
+
* T (in the case when you store different data types in the same store).
|
|
126
|
+
*/
|
|
127
|
+
asMap() {
|
|
128
|
+
const map = /* @__PURE__ */ new Map();
|
|
129
|
+
obj.forEach(
|
|
130
|
+
(key, value, expiryMs, storedMs) => {
|
|
131
|
+
map.set(key, { value, expiryMs, storedMs });
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
return map;
|
|
135
|
+
},
|
|
136
|
+
/** Returns the ms timestamp for the last GC (garbage collection). */
|
|
137
|
+
getLastGcMs() {
|
|
138
|
+
const lastGcMsStr = localStorage.getItem(gcMsStorageKey);
|
|
139
|
+
if (!lastGcMsStr) return 0;
|
|
140
|
+
const ms = Number(lastGcMsStr);
|
|
141
|
+
return isNaN(ms) ? 0 : ms;
|
|
142
|
+
},
|
|
143
|
+
/** Set the ms timestamp for the last GC (garbage collection). */
|
|
144
|
+
setLastGcMs(ms) {
|
|
145
|
+
localStorage.setItem(gcMsStorageKey, String(ms));
|
|
146
|
+
},
|
|
147
|
+
/** Perform garbage-collection if due, else do nothing. */
|
|
148
|
+
gc() {
|
|
149
|
+
const lastGcMs = obj.getLastGcMs();
|
|
150
|
+
if (!lastGcMs) {
|
|
151
|
+
obj.setLastGcMs(Date.now());
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (Date.now() < lastGcMs + gcIntervalMs) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
obj.gcNow();
|
|
158
|
+
},
|
|
159
|
+
/**
|
|
160
|
+
* Perform garbage collection immediately without checking whether we are
|
|
161
|
+
* due for the next GC or not.
|
|
162
|
+
*/
|
|
163
|
+
gcNow() {
|
|
164
|
+
console.log(`Starting localStore GC on ${storeName}`);
|
|
165
|
+
obj.setLastGcMs(Date.now());
|
|
166
|
+
let count = 0;
|
|
167
|
+
obj.forEach((key, value, expiryMs) => {
|
|
168
|
+
if (Date.now() >= expiryMs) {
|
|
169
|
+
obj.delete(key);
|
|
170
|
+
count++;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
console.log(
|
|
174
|
+
`Finished localStore GC on ${storeName} - deleted ${count} keys`
|
|
175
|
+
);
|
|
176
|
+
obj.setLastGcMs(Date.now());
|
|
177
|
+
},
|
|
178
|
+
/** Returns `this` casted into a StorageAdapter<T>. */
|
|
179
|
+
asStorageAdapter() {
|
|
180
|
+
return obj;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
return obj;
|
|
184
|
+
}
|
|
185
|
+
function localStoreItem(key, expiryMs, store = localStore) {
|
|
186
|
+
const defaultExpiryMs = expiryMs && _chunk4GLOLTJ5cjs.durationOrMsToMs.call(void 0, expiryMs);
|
|
187
|
+
const obj = {
|
|
188
|
+
key,
|
|
189
|
+
defaultExpiryMs,
|
|
190
|
+
store,
|
|
191
|
+
/** Set a value in the store. */
|
|
192
|
+
set(value, expiryDeltaMs) {
|
|
193
|
+
store.set(key, value, _nullishCoalesce(expiryDeltaMs, () => ( defaultExpiryMs)));
|
|
194
|
+
},
|
|
195
|
+
/**
|
|
196
|
+
* Example usage:
|
|
197
|
+
*
|
|
198
|
+
* const { value, storedMs, expiryMs, storedMs } =
|
|
199
|
+
* await myLocalItem.getStoredObject();
|
|
200
|
+
*/
|
|
201
|
+
getStoredObject() {
|
|
202
|
+
return store.getStoredObject(key);
|
|
203
|
+
},
|
|
204
|
+
/** Get a value by key, or undefined if it does not exist. */
|
|
205
|
+
get() {
|
|
206
|
+
return store.get(key);
|
|
207
|
+
},
|
|
208
|
+
/** Delete this key from the store. */
|
|
209
|
+
delete() {
|
|
210
|
+
store.delete(key);
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
return obj;
|
|
214
|
+
}
|
|
215
|
+
var LocalStoreConfig, localStore;
|
|
216
|
+
var init_localStore = _chunkILGTU46Tcjs.__esm.call(void 0, {
|
|
217
|
+
"src/localStore.ts"() {
|
|
218
|
+
_chunk4GLOLTJ5cjs.init_duration.call(void 0, );
|
|
219
|
+
_chunkY7MC73BZcjs.init_timeConstants.call(void 0, );
|
|
220
|
+
LocalStoreConfig = exports.LocalStoreConfig = {
|
|
221
|
+
/** All items with the same store name will share the same storage space. */
|
|
222
|
+
storeName: "ts-utils",
|
|
223
|
+
/** 30 days in ms. */
|
|
224
|
+
expiryMs: _chunkY7MC73BZcjs.MS_PER_DAY * 30,
|
|
225
|
+
/** Do GC once per day. */
|
|
226
|
+
gcIntervalMs: _chunkY7MC73BZcjs.MS_PER_DAY
|
|
227
|
+
};
|
|
228
|
+
localStore = exports.localStore = createLocalStore(LocalStoreConfig.storeName);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
exports.LocalStoreConfig = LocalStoreConfig; exports.configureLocalStore = configureLocalStore; exports.createLocalStore = createLocalStore; exports.localStore = localStore; exports.localStoreItem = localStoreItem; exports.init_localStore = init_localStore;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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; }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}`,_optionalChain([i, 'optionalAccess', _ => _.includeStack])&&e.stack){let n=e.stack.replace(new RegExp(`^${a}:.*\\n?`),"").trim();n&&(o+=`
|
|
2
|
+
Stack Trace:
|
|
3
|
+
${n}`)}if(_optionalChain([i, 'optionalAccess', _2 => _2.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 (e2){return String(r)}}exports.a = f;
|
|
6
|
+
//# sourceMappingURL=chunk-EDJJUP4K.min.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/toReadableString.ts"],"names":["toReadableString","u","options","error","result","errorName","errorMessage"],"mappings":"AAIO,slBAASA,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACQ,CACR,EAAA,CAAI,OAAOD,CAAAA,EAAM,QAAA,CACf,OAAOA,CAAAA,CAGT,EAAA,CAAIA,EAAAA,WAAa,KAAA,CAAO,CACtB,IAAME,CAAAA,CAAQF,CAAAA,CACVG,CAAAA,CAAS,EAAA,CAGPC,CAAAA,CAAYF,CAAAA,CAAM,IAAA,EAAQ,OAAA,CAC1BG,CAAAA,CACJH,CAAAA,CAAM,OAAA,EAAW,6CAAA,CAKnB,EAAA,CAHAC,CAAAA,EAAU,CAAA,EAAA;AAYI;AAkBI;AAGJ,EAAA;AAmBR,gBAAA","file":"/Users/choksheaklau/src/ts-utils/dist/chunk-EDJJUP4K.min.cjs","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"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkVJCV56DOcjs = require('./chunk-VJCV56DO.cjs');
|
|
4
|
+
|
|
5
|
+
// src/sum.ts
|
|
6
|
+
function sum(numbers) {
|
|
7
|
+
return numbers.reduce((accumulated, current) => {
|
|
8
|
+
return accumulated + _chunkVJCV56DOcjs.asNumber.call(void 0, current);
|
|
9
|
+
}, 0);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
exports.sum = sum;
|
|
@@ -0,0 +1,6 @@
|
|
|
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 a};
|
|
6
|
+
//# sourceMappingURL=chunk-FZZRSHSH.min.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkQNNJNLGKmincjs = require('./chunk-QNNJNLGK.min.cjs');var o,t,R,S,c,e,n,p,r,s,x,P,M,N,E= exports.o =_chunkQNNJNLGKmincjs.a.call(void 0, ()=>{o= exports.a =1e3,t= exports.b =6e4,R= exports.c =36e5,S= exports.d =864e5,c= exports.e =6048e5,e= exports.f =60,n= exports.g =3600,p= exports.h =86400,r= exports.i =604800,s= exports.j =60,x= exports.k =1440,P= exports.l =10080,M= exports.m =24,N= exports.n =168});exports.a = o; exports.b = t; exports.c = R; exports.d = S; exports.e = c; exports.f = e; exports.g = n; exports.h = p; exports.i = r; exports.j = s; exports.k = x; exports.l = P; exports.m = M; exports.n = N; exports.o = E;
|
|
2
|
+
//# sourceMappingURL=chunk-GAP2HS5M.min.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/choksheaklau/src/ts-utils/dist/chunk-GAP2HS5M.min.cjs","../src/timeConstants.ts"],"names":["MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_DAY","MS_PER_WEEK","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","SECONDS_PER_WEEK","MINUTES_PER_HOUR","MINUTES_PER_DAY","MINUTES_PER_WEEK","HOURS_PER_DAY","HOURS_PER_WEEK","init_timeConstants","__esmMin"],"mappings":"AAAA,wIAA4C,ICK/BA,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAEAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAEAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAEAC,CAAAA,CACAC,CAAAA,CArBbC,CAAAA,aAAAC,oCAAAA,CAAA,CAAA,EAAA,CAKaf,CAAAA,aAAgB,GAAA,CAChBC,CAAAA,aAAgB,GAAA,CAChBC,CAAAA,aAAc,IAAA,CACdC,CAAAA,aAAa,KAAA,CACbC,CAAAA,aAAc,MAAA,CAEdC,CAAAA,aAAqB,EAAA,CACrBC,CAAAA,aAAmB,IAAA,CACnBC,CAAAA,aAAkB,KAAA,CAClBC,CAAAA,aAAmB,MAAA,CAEnBC,CAAAA,aAAmB,EAAA,CACnBC,CAAAA,aAAkB,IAAA,CAClBC,CAAAA,aAAmB,KAAA,CAEnBC,CAAAA,aAAgB,EAAA,CAChBC,CAAAA,aAAiB,GAAA,CAAA,CAAA,CAAA,gOAAA","file":"/Users/choksheaklau/src/ts-utils/dist/chunk-GAP2HS5M.min.cjs","sourcesContent":[null,"/**\n * Note that month and year do not have fixed durations, and hence are excluded\n * from this file.\n */\n\nexport const MS_PER_SECOND = 1000;\nexport const MS_PER_MINUTE = 60_000;\nexport const MS_PER_HOUR = 3_600_000;\nexport const MS_PER_DAY = 86_400_000;\nexport const MS_PER_WEEK = 604_800_000;\n\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 3_600;\nexport const SECONDS_PER_DAY = 86_400;\nexport const SECONDS_PER_WEEK = 604_800;\n\nexport const MINUTES_PER_HOUR = 60;\nexport const MINUTES_PER_DAY = 1440;\nexport const MINUTES_PER_WEEK = 10_080;\n\nexport const HOURS_PER_DAY = 24;\nexport const HOURS_PER_WEEK = 168;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as o}from"./chunk-UOU6IP3S.min.mjs";function f(r){let t=new Uint8Array(r);return Array.from(t).map(n=>n.toString(16).padStart(2,"0")).join("")}function i(r){let t=new Uint8Array(r),n=Array.from(t).map(a=>String.fromCodePoint(a)).join("");return btoa(n)}var e=o(()=>{});export{f as a,i as b,e as c};
|
|
2
|
+
//# sourceMappingURL=chunk-GLYMAPS4.min.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/arrayBuffer.ts"],"sourcesContent":["/**\n * Encode an input ArrayBuffer into a hex string.\n */\nexport function arrayBufferToHex(buffer: ArrayBuffer): string {\n // Create a Uint8Array view of the ArrayBuffer\n const byteArray = new Uint8Array(buffer);\n\n // Convert each byte to a two-character hexadecimal string\n return Array.from(byteArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\n/**\n * Encode an input ArrayBuffer into a base64 string.\n */\nexport function arrayBufferToBase64(buffer: ArrayBuffer): string {\n // Convert the ArrayBuffer to a Uint8Array\n const byteArray = new Uint8Array(buffer);\n\n // Create a binary string from the byte array\n const binaryString = Array.from(byteArray)\n .map((byte) => String.fromCodePoint(byte))\n .join(\"\");\n\n // Encode the binary string to base64. No need to use safeBtoa because we\n // already simplified the binary input above.\n return btoa(binaryString);\n}\n"],"mappings":"6CAGO,SAASA,EAAiBC,EAA6B,CAE5D,IAAMC,EAAY,IAAI,WAAWD,CAAM,EAGvC,OAAO,MAAM,KAAKC,CAAS,EACxB,IAAKC,GAASA,EAAK,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAChD,KAAK,EAAE,CACZ,CAKO,SAASC,EAAoBH,EAA6B,CAE/D,IAAMC,EAAY,IAAI,WAAWD,CAAM,EAGjCI,EAAe,MAAM,KAAKH,CAAS,EACtC,IAAKC,GAAS,OAAO,cAAcA,CAAI,CAAC,EACxC,KAAK,EAAE,EAIV,OAAO,KAAKE,CAAY,CAC1B,CA5BA,IAAAC,EAAAC,EAAA","names":["arrayBufferToHex","buffer","byteArray","byte","arrayBufferToBase64","binaryString","init_arrayBuffer","__esmMin"]}
|