@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.
Files changed (285) hide show
  1. package/README.md +9 -3
  2. package/arrayBuffer.cjs +10 -39
  3. package/arrayBuffer.min.cjs +1 -1
  4. package/arrayBuffer.min.cjs.map +1 -1
  5. package/arrayBuffer.min.mjs +1 -1
  6. package/arrayBuffer.min.mjs.map +1 -1
  7. package/arrayBuffer.mjs +7 -10
  8. package/asNumber.cjs +6 -38
  9. package/asNumber.d.mts +1 -1
  10. package/asNumber.d.ts +1 -1
  11. package/asNumber.min.cjs +1 -1
  12. package/asNumber.min.cjs.map +1 -1
  13. package/asNumber.min.mjs +1 -1
  14. package/asNumber.min.mjs.map +1 -1
  15. package/asNumber.mjs +4 -11
  16. package/assert.cjs +4 -27
  17. package/assert.min.cjs +1 -1
  18. package/assert.min.cjs.map +1 -1
  19. package/assert.min.mjs +1 -1
  20. package/assert.min.mjs.map +1 -1
  21. package/assert.mjs +2 -0
  22. package/base64Url.cjs +5 -29
  23. package/base64Url.min.cjs +1 -1
  24. package/base64Url.min.cjs.map +1 -1
  25. package/base64Url.min.mjs +1 -1
  26. package/base64Url.min.mjs.map +1 -1
  27. package/base64Url.mjs +2 -0
  28. package/capLength.cjs +7 -71
  29. package/capLength.min.cjs +1 -5
  30. package/capLength.min.cjs.map +1 -1
  31. package/capLength.min.mjs +1 -5
  32. package/capLength.min.mjs.map +1 -1
  33. package/capLength.mjs +4 -41
  34. package/chunk-22JDWCOS.min.cjs +2 -0
  35. package/chunk-22JDWCOS.min.cjs.map +1 -0
  36. package/chunk-244NBT4Q.min.mjs +2 -0
  37. package/chunk-244NBT4Q.min.mjs.map +1 -0
  38. package/chunk-27MBP3ES.min.cjs +2 -0
  39. package/chunk-27MBP3ES.min.cjs.map +1 -0
  40. package/chunk-34ENP2B3.min.mjs +438 -0
  41. package/chunk-34ENP2B3.min.mjs.map +1 -0
  42. package/chunk-3EBQ2GO2.min.cjs +2 -0
  43. package/chunk-3EBQ2GO2.min.cjs.map +1 -0
  44. package/chunk-4GLOLTJ5.cjs +167 -0
  45. package/chunk-6TQBMXTL.min.cjs +2 -0
  46. package/chunk-6TQBMXTL.min.cjs.map +1 -0
  47. package/chunk-AWZBCFMG.min.cjs +2 -0
  48. package/chunk-AWZBCFMG.min.cjs.map +1 -0
  49. package/chunk-AXNETZET.cjs +20 -0
  50. package/chunk-BKZM6NWX.min.cjs +2 -0
  51. package/chunk-BKZM6NWX.min.cjs.map +1 -0
  52. package/chunk-BZKQXX3A.cjs +40 -0
  53. package/chunk-CERFUU5I.cjs +93 -0
  54. package/chunk-CSTKFJ6G.mjs +239 -0
  55. package/chunk-DUN4UY2Q.cjs +239 -0
  56. package/chunk-EDJJUP4K.min.cjs +6 -0
  57. package/chunk-EDJJUP4K.min.cjs.map +1 -0
  58. package/chunk-FFNQBZH5.cjs +14 -0
  59. package/chunk-FZZRSHSH.min.mjs +6 -0
  60. package/chunk-FZZRSHSH.min.mjs.map +1 -0
  61. package/chunk-GAP2HS5M.min.cjs +2 -0
  62. package/chunk-GAP2HS5M.min.cjs.map +1 -0
  63. package/chunk-GLYMAPS4.min.mjs +2 -0
  64. package/chunk-GLYMAPS4.min.mjs.map +1 -0
  65. package/chunk-I65KPVMO.min.cjs +438 -0
  66. package/chunk-I65KPVMO.min.cjs.map +1 -0
  67. package/chunk-ILGTU46T.cjs +39 -0
  68. package/chunk-IOKRXHKE.min.mjs +2 -0
  69. package/chunk-IOKRXHKE.min.mjs.map +1 -0
  70. package/chunk-ISP4SMRC.min.cjs +2 -0
  71. package/chunk-ISP4SMRC.min.cjs.map +1 -0
  72. package/chunk-KETP5HBF.cjs +24 -0
  73. package/chunk-KLHNGJ4Y.min.mjs +2 -0
  74. package/chunk-KLHNGJ4Y.min.mjs.map +1 -0
  75. package/chunk-KMNTU3DJ.mjs +45 -0
  76. package/chunk-LDVEXETI.cjs +45 -0
  77. package/chunk-LZENHV35.min.cjs +2 -0
  78. package/chunk-LZENHV35.min.cjs.map +1 -0
  79. package/chunk-M5PIM2HB.mjs +42 -0
  80. package/chunk-M6PYQYOX.mjs +39 -0
  81. package/chunk-MN5EYNZN.min.mjs +2 -0
  82. package/chunk-MN5EYNZN.min.mjs.map +1 -0
  83. package/chunk-NRIBJ2OJ.mjs +16031 -0
  84. package/chunk-NVLYXWLX.cjs +32 -0
  85. package/chunk-O352F2MT.mjs +24 -0
  86. package/chunk-O6B2TKFK.min.mjs +2 -0
  87. package/chunk-O6B2TKFK.min.mjs.map +1 -0
  88. package/chunk-OGF34H4T.min.cjs +2 -0
  89. package/chunk-OGF34H4T.min.cjs.map +1 -0
  90. package/chunk-OXSWWWOM.min.mjs +2 -0
  91. package/chunk-OXSWWWOM.min.mjs.map +1 -0
  92. package/chunk-PRUGHVRT.mjs +14 -0
  93. package/chunk-Q4WCMSOW.min.mjs +2 -0
  94. package/chunk-Q4WCMSOW.min.mjs.map +1 -0
  95. package/chunk-QH74JZCK.mjs +9 -0
  96. package/chunk-QNNJNLGK.min.cjs +2 -0
  97. package/chunk-QNNJNLGK.min.cjs.map +1 -0
  98. package/chunk-QWCFN7ZM.mjs +15 -0
  99. package/chunk-SDM2OPT6.mjs +32 -0
  100. package/chunk-SHKRZCF2.cjs +16031 -0
  101. package/chunk-SJDJDNDN.min.cjs +2 -0
  102. package/chunk-SJDJDNDN.min.cjs.map +1 -0
  103. package/chunk-SULNMALN.cjs +328 -0
  104. package/chunk-SV35RBZ7.min.mjs +2 -0
  105. package/chunk-SV35RBZ7.min.mjs.map +1 -0
  106. package/chunk-TJFYGFOW.mjs +328 -0
  107. package/chunk-UHRYBUUX.min.mjs +2 -0
  108. package/chunk-UHRYBUUX.min.mjs.map +1 -0
  109. package/chunk-UOU6IP3S.min.mjs +2 -0
  110. package/chunk-UOU6IP3S.min.mjs.map +1 -0
  111. package/chunk-V76XVNZ5.mjs +20 -0
  112. package/chunk-VFYQ7I5V.min.mjs +2 -0
  113. package/chunk-VFYQ7I5V.min.mjs.map +1 -0
  114. package/chunk-VG7VV7J2.mjs +167 -0
  115. package/chunk-VJCV56DO.cjs +15 -0
  116. package/chunk-VREA6AKG.cjs +9 -0
  117. package/chunk-W5I6Y5FK.min.mjs +2 -0
  118. package/chunk-W5I6Y5FK.min.mjs.map +1 -0
  119. package/chunk-Y7MC73BZ.cjs +42 -0
  120. package/chunk-YVWROQKU.mjs +40 -0
  121. package/chunk-ZKIZ5SWK.min.cjs +2 -0
  122. package/chunk-ZKIZ5SWK.min.cjs.map +1 -0
  123. package/chunk-ZZZB7NJX.mjs +93 -0
  124. package/concatIterators.cjs +4 -27
  125. package/concatIterators.min.cjs +1 -1
  126. package/concatIterators.min.cjs.map +1 -1
  127. package/concatIterators.min.mjs +1 -1
  128. package/concatIterators.min.mjs.map +1 -1
  129. package/concatIterators.mjs +2 -0
  130. package/dateTimeStr.cjs +31 -119
  131. package/dateTimeStr.min.cjs +1 -1
  132. package/dateTimeStr.min.cjs.map +1 -1
  133. package/dateTimeStr.min.mjs +1 -1
  134. package/dateTimeStr.min.mjs.map +1 -1
  135. package/dateTimeStr.mjs +17 -69
  136. package/duration.cjs +24 -188
  137. package/duration.min.cjs +1 -1
  138. package/duration.min.cjs.map +1 -1
  139. package/duration.min.mjs +1 -1
  140. package/duration.min.mjs.map +1 -1
  141. package/duration.mjs +14 -144
  142. package/getEnv.cjs +20 -0
  143. package/getEnv.d.mts +11 -0
  144. package/getEnv.d.ts +11 -0
  145. package/getEnv.min.cjs +2 -0
  146. package/getEnv.min.cjs.map +1 -0
  147. package/getEnv.min.mjs +2 -0
  148. package/getEnv.min.mjs.map +1 -0
  149. package/getEnv.mjs +20 -0
  150. package/isEmpty.cjs +8 -46
  151. package/isEmpty.min.cjs +1 -1
  152. package/isEmpty.min.cjs.map +1 -1
  153. package/isEmpty.min.mjs +1 -1
  154. package/isEmpty.min.mjs.map +1 -1
  155. package/isEmpty.mjs +6 -19
  156. package/isPromise.cjs +5 -29
  157. package/isPromise.min.cjs +1 -1
  158. package/isPromise.min.cjs.map +1 -1
  159. package/isPromise.min.mjs +1 -1
  160. package/isPromise.min.mjs.map +1 -1
  161. package/isPromise.mjs +2 -0
  162. package/kvStore.cjs +15 -362
  163. package/kvStore.d.mts +142 -44
  164. package/kvStore.d.ts +142 -44
  165. package/kvStore.min.cjs +1 -1
  166. package/kvStore.min.cjs.map +1 -1
  167. package/kvStore.min.mjs +1 -1
  168. package/kvStore.min.mjs.map +1 -1
  169. package/kvStore.mjs +13 -328
  170. package/localStore.cjs +15 -263
  171. package/localStore.d.mts +135 -34
  172. package/localStore.d.ts +135 -34
  173. package/localStore.min.cjs +1 -1
  174. package/localStore.min.cjs.map +1 -1
  175. package/localStore.min.mjs +1 -1
  176. package/localStore.min.mjs.map +1 -1
  177. package/localStore.mjs +13 -229
  178. package/magic-string.es-4UY437WL.min.mjs +14 -0
  179. package/magic-string.es-4UY437WL.min.mjs.map +1 -0
  180. package/magic-string.es-OAQWZQTY.mjs +1323 -0
  181. package/magic-string.es-UE2UVQEL.cjs +1323 -0
  182. package/magic-string.es-X6DNUB6Y.min.cjs +14 -0
  183. package/magic-string.es-X6DNUB6Y.min.cjs.map +1 -0
  184. package/mean.cjs +8 -48
  185. package/mean.min.cjs +1 -1
  186. package/mean.min.cjs.map +1 -1
  187. package/mean.min.mjs +1 -1
  188. package/mean.min.mjs.map +1 -1
  189. package/mean.mjs +5 -18
  190. package/median.cjs +7 -41
  191. package/median.min.cjs +1 -1
  192. package/median.min.cjs.map +1 -1
  193. package/median.min.mjs +1 -1
  194. package/median.min.mjs.map +1 -1
  195. package/median.mjs +5 -12
  196. package/nonEmpty.cjs +8 -48
  197. package/nonEmpty.min.cjs +1 -1
  198. package/nonEmpty.min.cjs.map +1 -1
  199. package/nonEmpty.min.mjs +1 -1
  200. package/nonEmpty.min.mjs.map +1 -1
  201. package/nonEmpty.mjs +6 -19
  202. package/nonNil.cjs +4 -27
  203. package/nonNil.min.cjs +1 -1
  204. package/nonNil.min.cjs.map +1 -1
  205. package/nonNil.min.mjs +1 -1
  206. package/nonNil.min.mjs.map +1 -1
  207. package/nonNil.mjs +2 -0
  208. package/package.json +274 -34
  209. package/round.cjs +6 -32
  210. package/round.min.cjs +1 -1
  211. package/round.min.cjs.map +1 -1
  212. package/round.min.mjs +1 -1
  213. package/round.min.mjs.map +1 -1
  214. package/round.mjs +4 -5
  215. package/roundToString.cjs +7 -35
  216. package/roundToString.min.cjs +1 -1
  217. package/roundToString.min.cjs.map +1 -1
  218. package/roundToString.min.mjs +1 -1
  219. package/roundToString.min.mjs.map +1 -1
  220. package/roundToString.mjs +4 -5
  221. package/safeBtoa.cjs +4 -27
  222. package/safeBtoa.d.mts +7 -0
  223. package/safeBtoa.d.ts +7 -0
  224. package/safeBtoa.min.cjs +1 -1
  225. package/safeBtoa.min.cjs.map +1 -1
  226. package/safeBtoa.min.mjs +1 -1
  227. package/safeBtoa.min.mjs.map +1 -1
  228. package/safeBtoa.mjs +2 -0
  229. package/sha256.cjs +8 -34
  230. package/sha256.min.cjs +1 -1
  231. package/sha256.min.cjs.map +1 -1
  232. package/sha256.min.mjs +1 -1
  233. package/sha256.min.mjs.map +1 -1
  234. package/sha256.mjs +6 -7
  235. package/sleep.cjs +4 -27
  236. package/sleep.min.cjs +1 -1
  237. package/sleep.min.cjs.map +1 -1
  238. package/sleep.min.mjs +1 -1
  239. package/sleep.min.mjs.map +1 -1
  240. package/sleep.mjs +2 -0
  241. package/storageAdapter.cjs +1 -18
  242. package/storageAdapter.min.cjs +1 -2
  243. package/storageAdapter.min.cjs.map +1 -1
  244. package/sum.cjs +5 -45
  245. package/sum.min.cjs +1 -1
  246. package/sum.min.cjs.map +1 -1
  247. package/sum.min.mjs +1 -1
  248. package/sum.min.mjs.map +1 -1
  249. package/sum.mjs +5 -18
  250. package/timeConstants.cjs +35 -69
  251. package/timeConstants.min.cjs +1 -1
  252. package/timeConstants.min.cjs.map +1 -1
  253. package/timeConstants.min.mjs +1 -1
  254. package/timeConstants.min.mjs.map +1 -1
  255. package/timeConstants.mjs +19 -15
  256. package/timer.cjs +7 -185
  257. package/timer.d.mts +9 -6
  258. package/timer.d.ts +9 -6
  259. package/timer.min.cjs +1 -1
  260. package/timer.min.cjs.map +1 -1
  261. package/timer.min.mjs +1 -1
  262. package/timer.min.mjs.map +1 -1
  263. package/timer.mjs +8 -158
  264. package/toReadableString.cjs +6 -68
  265. package/toReadableString.min.cjs +1 -5
  266. package/toReadableString.min.cjs.map +1 -1
  267. package/toReadableString.min.mjs +1 -5
  268. package/toReadableString.min.mjs.map +1 -1
  269. package/toReadableString.mjs +4 -41
  270. package/safeParseFloat.cjs +0 -33
  271. package/safeParseFloat.d.mts +0 -6
  272. package/safeParseFloat.d.ts +0 -6
  273. package/safeParseFloat.min.cjs +0 -2
  274. package/safeParseFloat.min.cjs.map +0 -1
  275. package/safeParseFloat.min.mjs +0 -2
  276. package/safeParseFloat.min.mjs.map +0 -1
  277. package/safeParseFloat.mjs +0 -8
  278. package/safeParseInt.cjs +0 -33
  279. package/safeParseInt.d.mts +0 -6
  280. package/safeParseInt.d.ts +0 -6
  281. package/safeParseInt.min.cjs +0 -2
  282. package/safeParseInt.min.cjs.map +0 -1
  283. package/safeParseInt.min.mjs +0 -2
  284. package/safeParseInt.min.mjs.map +0 -1
  285. package/safeParseInt.mjs +0 -8
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkQNNJNLGKmincjs = require('./chunk-QNNJNLGK.min.cjs');async function c(r){let e=new TextEncoder().encode(r);return await crypto.subtle.digest("SHA-256",e)}var t=_chunkQNNJNLGKmincjs.a.call(void 0, ()=>{});exports.a = c; exports.b = t;
2
+ //# sourceMappingURL=chunk-3EBQ2GO2.min.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/choksheaklau/src/ts-utils/dist/chunk-3EBQ2GO2.min.cjs","../src/sha256.ts"],"names":["sha256","input","uint8Array","init_sha256","__esmMin"],"mappings":"AAAA,wIAA4C,MCG5C,SAAsBA,CAAAA,CAAOC,CAAAA,CAAqC,CAGhE,IAAMC,CAAAA,CADU,IAAI,WAAA,CAAY,CAAA,CACL,MAAA,CAAOD,CAAK,CAAA,CAKvC,OAFoB,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAWC,CAAU,CAGtE,CAZA,IAAAC,CAAAA,CAAAC,oCAAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,6BAAA","file":"/Users/choksheaklau/src/ts-utils/dist/chunk-3EBQ2GO2.min.cjs","sourcesContent":[null,"/**\n * SHA-256 hash an input string into an ArrayBuffer.\n */\nexport async function sha256(input: string): Promise<ArrayBuffer> {\n // Encode the input string as a Uint8Array\n const encoder = new TextEncoder();\n const uint8Array = encoder.encode(input);\n\n // Compute the SHA-256 hash using the SubtleCrypto API\n const arrayBuffer = await crypto.subtle.digest(\"SHA-256\", uint8Array);\n\n return arrayBuffer;\n}\n"]}
@@ -0,0 +1,167 @@
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
+
5
+
6
+
7
+
8
+
9
+
10
+ var _chunkY7MC73BZcjs = require('./chunk-Y7MC73BZ.cjs');
11
+
12
+
13
+ var _chunkILGTU46Tcjs = require('./chunk-ILGTU46T.cjs');
14
+
15
+ // src/duration.ts
16
+ function getDurationStyleForPlural(style) {
17
+ return style == "short" ? "shorts" : style === "long" ? "longs" : style;
18
+ }
19
+ function getValueAndUnitSeparator(style) {
20
+ return style === "narrow" ? "" : " ";
21
+ }
22
+ function getDurationTypeSeparator(style) {
23
+ return style === "narrow" ? " " : ", ";
24
+ }
25
+ function msToDuration(ms, durationTypeForZero) {
26
+ if (ms === 0) {
27
+ durationTypeForZero = _nullishCoalesce(durationTypeForZero, () => ( "milliseconds"));
28
+ return { [durationTypeForZero]: 0 };
29
+ }
30
+ const duration = {};
31
+ for (let i = 0; i < 1; i++) {
32
+ let seconds = Math.floor(ms / _chunkY7MC73BZcjs.MS_PER_SECOND);
33
+ const millis = ms - seconds * _chunkY7MC73BZcjs.MS_PER_SECOND;
34
+ if (millis > 0) {
35
+ duration["milliseconds"] = millis;
36
+ }
37
+ if (seconds === 0) {
38
+ break;
39
+ }
40
+ let minutes = Math.floor(seconds / _chunkY7MC73BZcjs.SECONDS_PER_MINUTE);
41
+ seconds -= minutes * _chunkY7MC73BZcjs.SECONDS_PER_MINUTE;
42
+ if (seconds > 0) {
43
+ duration["seconds"] = seconds;
44
+ }
45
+ if (minutes === 0) {
46
+ break;
47
+ }
48
+ let hours = Math.floor(minutes / _chunkY7MC73BZcjs.MINUTES_PER_HOUR);
49
+ minutes -= hours * _chunkY7MC73BZcjs.MINUTES_PER_HOUR;
50
+ if (minutes > 0) {
51
+ duration["minutes"] = minutes;
52
+ }
53
+ if (hours === 0) {
54
+ break;
55
+ }
56
+ const days = Math.floor(hours / _chunkY7MC73BZcjs.HOURS_PER_DAY);
57
+ hours -= days * _chunkY7MC73BZcjs.HOURS_PER_DAY;
58
+ if (hours > 0) {
59
+ duration["hours"] = hours;
60
+ }
61
+ if (days > 0) {
62
+ duration["days"] = days;
63
+ }
64
+ }
65
+ return duration;
66
+ }
67
+ function durationToMs(duration) {
68
+ const daysMs = (_nullishCoalesce(duration.days, () => ( 0))) * _chunkY7MC73BZcjs.MS_PER_DAY;
69
+ const hoursMs = (_nullishCoalesce(duration.hours, () => ( 0))) * _chunkY7MC73BZcjs.MS_PER_HOUR;
70
+ const minsMs = (_nullishCoalesce(duration.minutes, () => ( 0))) * _chunkY7MC73BZcjs.MS_PER_MINUTE;
71
+ const secsMs = (_nullishCoalesce(duration.seconds, () => ( 0))) * _chunkY7MC73BZcjs.MS_PER_SECOND;
72
+ const msMs = _nullishCoalesce(duration.milliseconds, () => ( 0));
73
+ return daysMs + hoursMs + minsMs + secsMs + msMs;
74
+ }
75
+ function durationOrMsToMs(duration) {
76
+ return typeof duration === "number" ? duration : durationToMs(duration);
77
+ }
78
+ function formatDuration(duration, style) {
79
+ style = _nullishCoalesce(style, () => ( "short"));
80
+ const stylePlural = getDurationStyleForPlural(style);
81
+ const space = getValueAndUnitSeparator(style);
82
+ const a = [];
83
+ for (const unit of DURATION_TYPE_SEQUENCE) {
84
+ const value = duration[unit];
85
+ if (value === void 0) continue;
86
+ const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];
87
+ const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];
88
+ a.push(value + space + suffix);
89
+ }
90
+ const separator = getDurationTypeSeparator(style);
91
+ return a.join(separator);
92
+ }
93
+ function readableDuration(ms, options) {
94
+ const duration = msToDuration(ms, _optionalChain([options, 'optionalAccess', _ => _.durationTypeForZero]));
95
+ return formatDuration(duration, _optionalChain([options, 'optionalAccess', _2 => _2.style]));
96
+ }
97
+ function elapsed(ms) {
98
+ if (ms > _chunkY7MC73BZcjs.MS_PER_MINUTE) {
99
+ return readableDuration(ms);
100
+ }
101
+ if (ms > 100) {
102
+ return `${(ms / 1e3).toFixed(3)}s`;
103
+ }
104
+ return ms + "ms";
105
+ }
106
+ var DURATION_TYPE_SEQUENCE, DURATION_STYLE_SUFFIX_MAP;
107
+ var init_duration = _chunkILGTU46Tcjs.__esm.call(void 0, {
108
+ "src/duration.ts"() {
109
+ _chunkY7MC73BZcjs.init_timeConstants.call(void 0, );
110
+ DURATION_TYPE_SEQUENCE = exports.DURATION_TYPE_SEQUENCE = [
111
+ "days",
112
+ "hours",
113
+ "minutes",
114
+ "seconds",
115
+ "milliseconds"
116
+ ];
117
+ DURATION_STYLE_SUFFIX_MAP = exports.DURATION_STYLE_SUFFIX_MAP = {
118
+ days: {
119
+ short: "day",
120
+ shorts: "days",
121
+ long: "day",
122
+ longs: "days",
123
+ narrow: "d"
124
+ },
125
+ hours: {
126
+ short: "hr",
127
+ shorts: "hrs",
128
+ long: "hour",
129
+ longs: "hours",
130
+ narrow: "h"
131
+ },
132
+ minutes: {
133
+ short: "min",
134
+ shorts: "mins",
135
+ long: "minute",
136
+ longs: "minutes",
137
+ narrow: "m"
138
+ },
139
+ seconds: {
140
+ short: "sec",
141
+ shorts: "secs",
142
+ long: "second",
143
+ longs: "seconds",
144
+ narrow: "s"
145
+ },
146
+ milliseconds: {
147
+ short: "ms",
148
+ shorts: "ms",
149
+ long: "millisecond",
150
+ longs: "milliseconds",
151
+ narrow: "ms"
152
+ }
153
+ };
154
+ }
155
+ });
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ exports.DURATION_TYPE_SEQUENCE = DURATION_TYPE_SEQUENCE; exports.DURATION_STYLE_SUFFIX_MAP = DURATION_STYLE_SUFFIX_MAP; exports.msToDuration = msToDuration; exports.durationToMs = durationToMs; exports.durationOrMsToMs = durationOrMsToMs; exports.formatDuration = formatDuration; exports.readableDuration = readableDuration; exports.elapsed = elapsed; exports.init_duration = init_duration;
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkQNNJNLGKmincjs = require('./chunk-QNNJNLGK.min.cjs');function t(e){if(!e)return!0;if(typeof e!="object")return!1;if("length"in e)return e.length===0;if("size"in e)return e.size===0;for(let i in e)return!1;return!0}var r=_chunkQNNJNLGKmincjs.a.call(void 0, ()=>{});exports.a = t; exports.b = r;
2
+ //# sourceMappingURL=chunk-6TQBMXTL.min.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/choksheaklau/src/ts-utils/dist/chunk-6TQBMXTL.min.cjs","../src/isEmpty.ts"],"names":["isEmpty","t","k","init_isEmpty","__esmMin"],"mappings":"AAAA,wIAA4C,SCG5BA,CAAAA,CAAQC,CAAAA,CAAqB,CAE3C,EAAA,CAAI,CAACA,CAAAA,CACH,MAAO,CAAA,CAAA,CAIT,EAAA,CAAI,OAAOA,CAAAA,EAAM,QAAA,CACf,MAAO,CAAA,CAAA,CAIT,EAAA,CAAI,QAAA,GAAYA,CAAAA,CACd,OAAOA,CAAAA,CAAE,MAAA,GAAW,CAAA,CAItB,EAAA,CAAI,MAAA,GAAUA,CAAAA,CACZ,OAAOA,CAAAA,CAAE,IAAA,GAAS,CAAA,CAKpB,GAAA,CAAA,IAAWC,EAAAA,GAAKD,CAAAA,CACd,MAAO,CAAA,CAAA,CAGT,MAAO,CAAA,CACT,CA/BA,IAAAE,CAAAA,CAAAC,oCAAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,6BAAA","file":"/Users/choksheaklau/src/ts-utils/dist/chunk-6TQBMXTL.min.cjs","sourcesContent":[null,"/**\n * Returns true if `t` is empty.\n */\nexport function isEmpty(t: unknown): boolean {\n // Anything falsy is considered empty.\n if (!t) {\n return true;\n }\n\n // Arrays are also of type `object`.\n if (typeof t !== \"object\") {\n return false;\n }\n\n // `length` includes arrays as well.\n if (\"length\" in t) {\n return t.length === 0;\n }\n\n // `size` is for Set, Map, Blob etc.\n if (\"size\" in t) {\n return t.size === 0;\n }\n\n // Super fast check for object emptiness.\n // https://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object\n for (const k in t) {\n return false;\n }\n\n return true;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});function e(n,r=0){return typeof n=="number"?isFinite(n)?n:r:(n=Number(n),typeof n=="number"&&isFinite(n)?n:r)}exports.a = e;
2
+ //# sourceMappingURL=chunk-AWZBCFMG.min.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/asNumber.ts"],"names":["asNumber","u","defaultValue"],"mappings":"AAGO,kFAASA,CAAAA,CAASC,CAAAA,CAAYC,CAAAA,CAAe,CAAA,CAAW,CAE7D,OAAI,OAAOD,CAAAA,EAAM,QAAA,CACR,QAAA,CAASA,CAAC,CAAA,CAAIA,CAAAA,CAAIC,CAAAA,CAAAA,CAI3BD,CAAAA,CAAI,MAAA,CAAOA,CAAC,CAAA,CAGR,OAAOA,CAAAA,EAAM,QAAA,EAAY,QAAA,CAASA,CAAC,CAAA,CAC9BA,CAAAA,CAKFC,CAAAA,CACT,CAAA,cAAA","file":"/Users/choksheaklau/src/ts-utils/dist/chunk-AWZBCFMG.min.cjs","sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown, defaultValue = 0): number {\n // If u is a valid number, return it.\n if (typeof u === \"number\") {\n return isFinite(u) ? u : defaultValue;\n }\n\n // Try to make into a number if not already a number.\n u = Number(u);\n\n // If u is a valid number, return it.\n if (typeof u === \"number\" && isFinite(u)) {\n return u;\n }\n\n // Return `defaultValue` for everything else. This is usually ok if want to\n // just ignore all other noise.\n return defaultValue;\n}\n"]}
@@ -0,0 +1,20 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkILGTU46Tcjs = require('./chunk-ILGTU46T.cjs');
4
+
5
+ // src/sha256.ts
6
+ async function sha256(input) {
7
+ const encoder = new TextEncoder();
8
+ const uint8Array = encoder.encode(input);
9
+ const arrayBuffer = await crypto.subtle.digest("SHA-256", uint8Array);
10
+ return arrayBuffer;
11
+ }
12
+ var init_sha256 = _chunkILGTU46Tcjs.__esm.call(void 0, {
13
+ "src/sha256.ts"() {
14
+ }
15
+ });
16
+
17
+
18
+
19
+
20
+ exports.sha256 = sha256; exports.init_sha256 = init_sha256;
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});function u(r,t=0){let n=Math.pow(10,t);return Math.round(r*n)/n}exports.a = u;
2
+ //# sourceMappingURL=chunk-BKZM6NWX.min.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/round.ts"],"names":["round","n","numDecimalPlaces","multipler"],"mappings":"AAMO,kFAASA,CAAAA,CAAMC,CAAAA,CAAWC,CAAAA,CAAmB,CAAA,CAAW,CAC7D,IAAMC,CAAAA,CAAY,IAAA,CAAK,GAAA,CAAI,EAAA,CAAID,CAAgB,CAAA,CAC/C,OAAO,IAAA,CAAK,KAAA,CAAMD,CAAAA,CAAIE,CAAS,CAAA,CAAIA,CACrC,CAAA,cAAA","file":"/Users/choksheaklau/src/ts-utils/dist/chunk-BKZM6NWX.min.cjs","sourcesContent":["/**\n * Simplifies rounding of floating point numbers. Note that if your number ends\n * with zeros, and you convert the number to string, you will lose the zeroes\n * at the end. To show the exact number of decimal places, you'll need to use\n * roundToString() or toFixed(). E.g. round(1.20, 2).toFixed(2).\n */\nexport function round(n: number, numDecimalPlaces = 0): number {\n const multipler = Math.pow(10, numDecimalPlaces);\n return Math.round(n * multipler) / multipler;\n}\n"]}
@@ -0,0 +1,40 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+ var _chunk4GLOLTJ5cjs = require('./chunk-4GLOLTJ5.cjs');
5
+
6
+
7
+ var _chunkILGTU46Tcjs = require('./chunk-ILGTU46T.cjs');
8
+
9
+ // src/timer.ts
10
+ function timer() {
11
+ const obj = {
12
+ startMs: Date.now(),
13
+ endMs: 0,
14
+ stop() {
15
+ obj.endMs = Date.now();
16
+ },
17
+ restart() {
18
+ obj.endMs = 0;
19
+ obj.startMs = Date.now();
20
+ },
21
+ elapsedMs() {
22
+ const stopMs = obj.endMs || Date.now();
23
+ return stopMs - obj.startMs;
24
+ },
25
+ toString() {
26
+ return _chunk4GLOLTJ5cjs.elapsed.call(void 0, obj.elapsedMs());
27
+ }
28
+ };
29
+ return obj;
30
+ }
31
+ var init_timer = _chunkILGTU46Tcjs.__esm.call(void 0, {
32
+ "src/timer.ts"() {
33
+ _chunk4GLOLTJ5cjs.init_duration.call(void 0, );
34
+ }
35
+ });
36
+
37
+
38
+
39
+
40
+ exports.timer = timer; exports.init_timer = init_timer;
@@ -0,0 +1,93 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkILGTU46Tcjs = require('./chunk-ILGTU46T.cjs');
4
+
5
+ // src/dateTimeStr.ts
6
+ function isAllDigits(str) {
7
+ return /^\d+$/.test(str);
8
+ }
9
+ function toDate(ts) {
10
+ if (typeof ts === "number") {
11
+ if (ts < 1e11) {
12
+ return new Date(ts * 1e3);
13
+ }
14
+ return new Date(ts);
15
+ }
16
+ if (typeof ts === "string") {
17
+ if (isAllDigits(ts)) {
18
+ return toDate(Number(ts));
19
+ }
20
+ return new Date(ts);
21
+ }
22
+ return ts;
23
+ }
24
+ function yyyyMm(dt = /* @__PURE__ */ new Date(), separator = "-") {
25
+ const yr = dt.getFullYear();
26
+ const mth = dt.getMonth() + 1;
27
+ return yr + separator + (mth < 10 ? "0" + mth : mth);
28
+ }
29
+ function yyyyMmDd(dt = /* @__PURE__ */ new Date(), separator = "-") {
30
+ const day = dt.getDate();
31
+ return yyyyMm(dt, separator) + separator + (day < 10 ? "0" + day : day);
32
+ }
33
+ function hhMm(dt = /* @__PURE__ */ new Date(), separator = ":") {
34
+ const hr = dt.getHours();
35
+ const min = dt.getMinutes();
36
+ return (hr < 10 ? "0" + hr : hr) + separator + (min < 10 ? "0" + min : min);
37
+ }
38
+ function hhMmSs(dt = /* @__PURE__ */ new Date(), separator = ":") {
39
+ const sec = dt.getSeconds();
40
+ return hhMm(dt, separator) + separator + (sec < 10 ? "0" + sec : sec);
41
+ }
42
+ function hhMmSsMs(dt = /* @__PURE__ */ new Date(), timeSeparator = ":", msSeparator = ".") {
43
+ const ms = dt.getMilliseconds();
44
+ return hhMmSs(dt, timeSeparator) + msSeparator + (ms < 10 ? "00" + ms : ms < 100 ? "0" + ms : ms);
45
+ }
46
+ function tzShort(dt = /* @__PURE__ */ new Date()) {
47
+ if (dt.getTimezoneOffset() === 0) {
48
+ return "Z";
49
+ }
50
+ const tzHours = dt.getTimezoneOffset() / 60;
51
+ return tzHours >= 0 ? "+" + tzHours : String(tzHours);
52
+ }
53
+ function getLongMonthNameZeroIndexed(month, locales = "default") {
54
+ return new Date(2024, month, 15).toLocaleString(locales, {
55
+ month: "long"
56
+ });
57
+ }
58
+ function getLongMonthNameOneIndexed(month, locales = "default") {
59
+ return getLongMonthNameZeroIndexed(month - 1, locales);
60
+ }
61
+ function getShortMonthNameZeroIndexed(month, locales = "default") {
62
+ return new Date(2e3, month, 15).toLocaleString(locales, {
63
+ month: "short"
64
+ });
65
+ }
66
+ function getShortMonthNameOneIndexed(month, locales = "default") {
67
+ return getShortMonthNameZeroIndexed(month - 1, locales);
68
+ }
69
+ function getDisplayDateTime(ts) {
70
+ const iso = toDate(ts).toISOString();
71
+ const noMs = iso.slice(0, 19) + "Z";
72
+ return noMs.replace("T", " ");
73
+ }
74
+ var init_dateTimeStr = _chunkILGTU46Tcjs.__esm.call(void 0, {
75
+ "src/dateTimeStr.ts"() {
76
+ }
77
+ });
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ exports.toDate = toDate; exports.yyyyMm = yyyyMm; exports.yyyyMmDd = yyyyMmDd; exports.hhMm = hhMm; exports.hhMmSs = hhMmSs; exports.hhMmSsMs = hhMmSsMs; exports.tzShort = tzShort; exports.getLongMonthNameZeroIndexed = getLongMonthNameZeroIndexed; exports.getLongMonthNameOneIndexed = getLongMonthNameOneIndexed; exports.getShortMonthNameZeroIndexed = getShortMonthNameZeroIndexed; exports.getShortMonthNameOneIndexed = getShortMonthNameOneIndexed; exports.getDisplayDateTime = getDisplayDateTime; exports.init_dateTimeStr = init_dateTimeStr;
@@ -0,0 +1,239 @@
1
+ import {
2
+ durationOrMsToMs,
3
+ init_duration
4
+ } from "./chunk-VG7VV7J2.mjs";
5
+ import {
6
+ MS_PER_DAY,
7
+ init_timeConstants
8
+ } from "./chunk-M5PIM2HB.mjs";
9
+ import {
10
+ __esm
11
+ } from "./chunk-M6PYQYOX.mjs";
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 = options?.defaultExpiryMs ? durationOrMsToMs(options.defaultExpiryMs) : LocalStoreConfig.expiryMs;
26
+ const gcIntervalMs = options?.gcIntervalMs ? durationOrMsToMs(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 + durationOrMsToMs(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 stored?.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 && durationOrMsToMs(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, 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 = __esm({
217
+ "src/localStore.ts"() {
218
+ init_duration();
219
+ init_timeConstants();
220
+ 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: MS_PER_DAY * 30,
225
+ /** Do GC once per day. */
226
+ gcIntervalMs: MS_PER_DAY
227
+ };
228
+ localStore = createLocalStore(LocalStoreConfig.storeName);
229
+ }
230
+ });
231
+
232
+ export {
233
+ LocalStoreConfig,
234
+ configureLocalStore,
235
+ createLocalStore,
236
+ localStore,
237
+ localStoreItem,
238
+ init_localStore
239
+ };