@choksheak/ts-utils 0.3.3 → 0.3.4

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 (90) hide show
  1. package/asNumber.cjs +4 -4
  2. package/asNumber.min.cjs +1 -1
  3. package/asNumber.min.cjs.map +1 -1
  4. package/asNumber.min.mjs +1 -1
  5. package/asNumber.min.mjs.map +1 -1
  6. package/asNumber.mjs +4 -4
  7. package/capLength.cjs +80 -0
  8. package/capLength.d.mts +3 -0
  9. package/capLength.d.ts +3 -0
  10. package/capLength.min.cjs +6 -0
  11. package/capLength.min.cjs.map +1 -0
  12. package/capLength.min.mjs +6 -0
  13. package/capLength.min.mjs.map +1 -0
  14. package/capLength.mjs +53 -0
  15. package/{iterators.cjs → concatIterators.cjs} +4 -4
  16. package/{iterators.min.cjs → concatIterators.min.cjs} +1 -1
  17. package/concatIterators.min.cjs.map +1 -0
  18. package/{iterators.min.mjs → concatIterators.min.mjs} +1 -1
  19. package/concatIterators.min.mjs.map +1 -0
  20. package/{iterators.mjs → concatIterators.mjs} +1 -1
  21. package/duration.min.cjs +1 -1
  22. package/duration.min.mjs +1 -1
  23. package/kvStore.min.cjs +1 -1
  24. package/kvStore.min.mjs +1 -1
  25. package/localStore.min.cjs +1 -1
  26. package/localStore.min.mjs +1 -1
  27. package/mean.cjs +4 -4
  28. package/mean.min.cjs +1 -1
  29. package/mean.min.cjs.map +1 -1
  30. package/mean.min.mjs +1 -1
  31. package/mean.min.mjs.map +1 -1
  32. package/mean.mjs +4 -4
  33. package/median.cjs +4 -4
  34. package/median.min.cjs +1 -1
  35. package/median.min.cjs.map +1 -1
  36. package/median.min.mjs +1 -1
  37. package/median.min.mjs.map +1 -1
  38. package/median.mjs +4 -4
  39. package/package.json +66 -49
  40. package/round.cjs +2 -10
  41. package/round.d.mts +2 -8
  42. package/round.d.ts +2 -8
  43. package/round.min.cjs +1 -1
  44. package/round.min.cjs.map +1 -1
  45. package/round.min.mjs +1 -1
  46. package/round.min.mjs.map +1 -1
  47. package/round.mjs +1 -8
  48. package/{logging.cjs → roundToString.cjs} +18 -22
  49. package/roundToString.d.mts +8 -0
  50. package/roundToString.d.ts +8 -0
  51. package/roundToString.min.cjs +2 -0
  52. package/roundToString.min.cjs.map +1 -0
  53. package/roundToString.min.mjs +2 -0
  54. package/roundToString.min.mjs.map +1 -0
  55. package/roundToString.mjs +16 -0
  56. package/sum.cjs +4 -4
  57. package/sum.min.cjs +1 -1
  58. package/sum.min.cjs.map +1 -1
  59. package/sum.min.mjs +1 -1
  60. package/sum.min.mjs.map +1 -1
  61. package/sum.mjs +4 -4
  62. package/timer.min.cjs +1 -1
  63. package/timer.min.mjs +1 -1
  64. package/toReadableString.cjs +69 -0
  65. package/toReadableString.d.mts +10 -0
  66. package/toReadableString.d.ts +10 -0
  67. package/toReadableString.min.cjs +6 -0
  68. package/toReadableString.min.cjs.map +1 -0
  69. package/toReadableString.min.mjs +6 -0
  70. package/toReadableString.min.mjs.map +1 -0
  71. package/toReadableString.mjs +44 -0
  72. package/average.cjs +0 -55
  73. package/average.d.mts +0 -7
  74. package/average.d.ts +0 -7
  75. package/average.min.cjs +0 -2
  76. package/average.min.cjs.map +0 -1
  77. package/average.min.mjs +0 -2
  78. package/average.min.mjs.map +0 -1
  79. package/average.mjs +0 -28
  80. package/iterators.min.cjs.map +0 -1
  81. package/iterators.min.mjs.map +0 -1
  82. package/logging.d.mts +0 -4
  83. package/logging.d.ts +0 -4
  84. package/logging.min.cjs +0 -2
  85. package/logging.min.cjs.map +0 -1
  86. package/logging.min.mjs +0 -2
  87. package/logging.min.mjs.map +0 -1
  88. package/logging.mjs +0 -21
  89. /package/{iterators.d.mts → concatIterators.d.mts} +0 -0
  90. /package/{iterators.d.ts → concatIterators.d.ts} +0 -0
package/asNumber.cjs CHANGED
@@ -24,13 +24,13 @@ __export(asNumber_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(asNumber_exports);
26
26
  function asNumber(u) {
27
+ if (typeof u === "number") {
28
+ return isFinite(u) ? u : 0;
29
+ }
30
+ u = Number(u);
27
31
  if (typeof u === "number" && isFinite(u)) {
28
32
  return u;
29
33
  }
30
- const n = Number(u);
31
- if (typeof n === "number" && isFinite(n)) {
32
- return n;
33
- }
34
34
  return 0;
35
35
  }
36
36
  // Annotate the CommonJS export names for ESM import in node:
package/asNumber.min.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var m=(e,n)=>{for(var t in n)i(e,t,{get:n[t],enumerable:!0})},s=(e,n,t,u)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of b(n))!f.call(e,r)&&r!==t&&i(e,r,{get:()=>n[r],enumerable:!(u=o(n,r))||u.enumerable});return e};var p=e=>s(i({},"__esModule",{value:!0}),e);var y={};m(y,{asNumber:()=>c});module.exports=p(y);function c(e){if(typeof e=="number"&&isFinite(e))return e;let n=Number(e);return typeof n=="number"&&isFinite(n)?n:0}0&&(module.exports={asNumber});
1
+ "use strict";var t=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var p=(e,n)=>{for(var i in n)t(e,i,{get:n[i],enumerable:!0})},s=(e,n,i,b)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of m(n))!o.call(e,r)&&r!==i&&t(e,r,{get:()=>n[r],enumerable:!(b=f(n,r))||b.enumerable});return e};var u=e=>s(t({},"__esModule",{value:!0}),e);var F={};p(F,{asNumber:()=>y});module.exports=u(F);function y(e){return typeof e=="number"?isFinite(e)?e:0:(e=Number(e),typeof e=="number"&&isFinite(e)?e:0)}0&&(module.exports={asNumber});
2
2
  //# sourceMappingURL=asNumber.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/asNumber.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // No transformation needed if u is already a number.\n if (typeof u === \"number\" && isFinite(u)) {\n return u;\n }\n\n // Try to make into a number if possible.\n const n = Number(u);\n if (typeof n === \"number\" && isFinite(n)) {\n return n;\n }\n\n // Return 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,IAAA,eAAAC,EAAAH,GAGO,SAASE,EAASE,EAAoB,CAE3C,GAAI,OAAOA,GAAM,UAAY,SAASA,CAAC,EACrC,OAAOA,EAIT,IAAM,EAAI,OAAOA,CAAC,EAClB,OAAI,OAAO,GAAM,UAAY,SAAS,CAAC,EAC9B,EAKF,CACT","names":["asNumber_exports","__export","asNumber","__toCommonJS","u"]}
1
+ {"version":3,"sources":["../src/asNumber.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // If u is a valid number, return it.\n if (typeof u === \"number\") {\n return isFinite(u) ? u : 0;\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 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,IAAA,eAAAC,EAAAH,GAGO,SAASE,EAASE,EAAoB,CAE3C,OAAI,OAAOA,GAAM,SACR,SAASA,CAAC,EAAIA,EAAI,GAI3BA,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,EACT","names":["asNumber_exports","__export","asNumber","__toCommonJS","u"]}
package/asNumber.min.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function r(n){if(typeof n=="number"&&isFinite(n))return n;let e=Number(n);return typeof e=="number"&&isFinite(e)?e:0}export{r as asNumber};
1
+ function n(e){return typeof e=="number"?isFinite(e)?e:0:(e=Number(e),typeof e=="number"&&isFinite(e)?e:0)}export{n as asNumber};
2
2
  //# sourceMappingURL=asNumber.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/asNumber.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // No transformation needed if u is already a number.\n if (typeof u === \"number\" && isFinite(u)) {\n return u;\n }\n\n // Try to make into a number if possible.\n const n = Number(u);\n if (typeof n === \"number\" && isFinite(n)) {\n return n;\n }\n\n // Return 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAoB,CAE3C,GAAI,OAAOA,GAAM,UAAY,SAASA,CAAC,EACrC,OAAOA,EAIT,IAAMC,EAAI,OAAOD,CAAC,EAClB,OAAI,OAAOC,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,CACT","names":["asNumber","u","n"]}
1
+ {"version":3,"sources":["../src/asNumber.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // If u is a valid number, return it.\n if (typeof u === \"number\") {\n return isFinite(u) ? u : 0;\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 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAoB,CAE3C,OAAI,OAAOA,GAAM,SACR,SAASA,CAAC,EAAIA,EAAI,GAI3BA,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,EACT","names":["asNumber","u"]}
package/asNumber.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  // src/asNumber.ts
2
2
  function asNumber(u) {
3
+ if (typeof u === "number") {
4
+ return isFinite(u) ? u : 0;
5
+ }
6
+ u = Number(u);
3
7
  if (typeof u === "number" && isFinite(u)) {
4
8
  return u;
5
9
  }
6
- const n = Number(u);
7
- if (typeof n === "number" && isFinite(n)) {
8
- return n;
9
- }
10
10
  return 0;
11
11
  }
12
12
  export {
package/capLength.cjs ADDED
@@ -0,0 +1,80 @@
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);
19
+
20
+ // src/capLength.ts
21
+ var capLength_exports = {};
22
+ __export(capLength_exports, {
23
+ capLength: () => capLength
24
+ });
25
+ module.exports = __toCommonJS(capLength_exports);
26
+
27
+ // src/toReadableString.ts
28
+ function toReadableString(u, options) {
29
+ if (typeof u === "string") {
30
+ return u;
31
+ }
32
+ if (u instanceof Error) {
33
+ const error = u;
34
+ let result = "";
35
+ const errorName = error.name || "Error";
36
+ const errorMessage = error.message || "An error occurred with no message provided.";
37
+ result += `${errorName}: ${errorMessage}`;
38
+ if (options?.includeStack && error.stack) {
39
+ const stack = error.stack.replace(new RegExp(`^${errorName}:.*\\n?`), "").trim();
40
+ if (stack) {
41
+ result += `
42
+ Stack Trace:
43
+ ${stack}`;
44
+ }
45
+ }
46
+ if (options?.includeErrorProps) {
47
+ const customProps = error;
48
+ const additionalInfo = Object.keys(customProps).filter(
49
+ (key) => key !== "name" && key !== "message" && key !== "stack" && typeof customProps[key] !== "function" && typeof customProps[key] !== "object"
50
+ ).map((key) => `
51
+ - ${key}: ${customProps[key]}`);
52
+ if (additionalInfo.length > 0) {
53
+ result += `
54
+ Additional Data:${additionalInfo.join("")}`;
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ if (u !== null && typeof u === "object" && u.toString !== Object.prototype.toString) {
60
+ return u.toString();
61
+ }
62
+ try {
63
+ return JSON.stringify(u);
64
+ } catch {
65
+ return String(u);
66
+ }
67
+ }
68
+
69
+ // src/capLength.ts
70
+ function capLength(u, maxLength = 400) {
71
+ const s = toReadableString(u);
72
+ if (s.length <= maxLength) {
73
+ return s;
74
+ }
75
+ return s.slice(0, maxLength) + ` ... (${s.length - maxLength} more)`;
76
+ }
77
+ // Annotate the CommonJS export names for ESM import in node:
78
+ 0 && (module.exports = {
79
+ capLength
80
+ });
@@ -0,0 +1,3 @@
1
+ declare function capLength(u: unknown, maxLength?: number): string;
2
+
3
+ export { capLength };
package/capLength.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare function capLength(u: unknown, maxLength?: number): string;
2
+
3
+ export { capLength };
@@ -0,0 +1,6 @@
1
+ "use strict";var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var u=(r,t)=>{for(var n in t)s(r,n,{get:t[n],enumerable:!0})},m=(r,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of p(t))!d.call(r,e)&&e!==n&&s(r,e,{get:()=>t[e],enumerable:!(i=g(t,e))||i.enumerable});return r};var S=r=>m(s({},"__esModule",{value:!0}),r);var $={};u($,{capLength:()=>b});module.exports=S($);function f(r,t){if(typeof r=="string")return r;if(r instanceof Error){let n=r,i="",e=n.name||"Error",l=n.message||"An error occurred with no message provided.";if(i+=`${e}: ${l}`,t?.includeStack&&n.stack){let c=n.stack.replace(new RegExp(`^${e}:.*\\n?`),"").trim();c&&(i+=`
2
+ Stack Trace:
3
+ ${c}`)}if(t?.includeErrorProps){let c=n,a=Object.keys(c).filter(o=>o!=="name"&&o!=="message"&&o!=="stack"&&typeof c[o]!="function"&&typeof c[o]!="object").map(o=>`
4
+ - ${o}: ${c[o]}`);a.length>0&&(i+=`
5
+ Additional Data:${a.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)}}function b(r,t=400){let n=f(r);return n.length<=t?n:n.slice(0,t)+` ... (${n.length-t} more)`}0&&(module.exports={capLength});
6
+ //# sourceMappingURL=capLength.min.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/capLength.ts","../src/toReadableString.ts"],"sourcesContent":["import { toReadableString } from \"./toReadableString\";\n\nexport function capLength(u: unknown, maxLength = 400): string {\n const s = toReadableString(u);\n\n if (s.length <= maxLength) {\n return s;\n }\n\n return s.slice(0, maxLength) + ` ... (${s.length - maxLength} more)`;\n}\n","/**\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,eAAAE,IAAA,eAAAC,EAAAH,GCIO,SAASI,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,CD3EO,SAASU,EAAUC,EAAYC,EAAY,IAAa,CAC7D,IAAMC,EAAIC,EAAiBH,CAAC,EAE5B,OAAIE,EAAE,QAAUD,EACPC,EAGFA,EAAE,MAAM,EAAGD,CAAS,EAAI,SAASC,EAAE,OAASD,CAAS,QAC9D","names":["capLength_exports","__export","capLength","__toCommonJS","toReadableString","u","options","error","result","errorName","errorMessage","stack","customProps","additionalInfo","key","capLength","u","maxLength","s","toReadableString"]}
@@ -0,0 +1,6 @@
1
+ function a(r,o){if(typeof r=="string")return r;if(r instanceof Error){let t=r,i="",c=t.name||"Error",f=t.message||"An error occurred with no message provided.";if(i+=`${c}: ${f}`,o?.includeStack&&t.stack){let e=t.stack.replace(new RegExp(`^${c}:.*\\n?`),"").trim();e&&(i+=`
2
+ Stack Trace:
3
+ ${e}`)}if(o?.includeErrorProps){let e=t,s=Object.keys(e).filter(n=>n!=="name"&&n!=="message"&&n!=="stack"&&typeof e[n]!="function"&&typeof e[n]!="object").map(n=>`
4
+ - ${n}: ${e[n]}`);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)}}function p(r,o=400){let t=a(r);return t.length<=o?t:t.slice(0,o)+` ... (${t.length-o} more)`}export{p as capLength};
6
+ //# sourceMappingURL=capLength.min.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/toReadableString.ts","../src/capLength.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","import { toReadableString } from \"./toReadableString\";\n\nexport function capLength(u: unknown, maxLength = 400): string {\n const s = toReadableString(u);\n\n if (s.length <= maxLength) {\n return s;\n }\n\n return s.slice(0, maxLength) + ` ... (${s.length - maxLength} more)`;\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,CC3EO,SAASU,EAAUC,EAAYC,EAAY,IAAa,CAC7D,IAAMC,EAAIC,EAAiBH,CAAC,EAE5B,OAAIE,EAAE,QAAUD,EACPC,EAGFA,EAAE,MAAM,EAAGD,CAAS,EAAI,SAASC,EAAE,OAASD,CAAS,QAC9D","names":["toReadableString","u","options","error","result","errorName","errorMessage","stack","customProps","additionalInfo","key","capLength","u","maxLength","s","toReadableString"]}
package/capLength.mjs ADDED
@@ -0,0 +1,53 @@
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
+ }
42
+
43
+ // src/capLength.ts
44
+ function capLength(u, maxLength = 400) {
45
+ const s = toReadableString(u);
46
+ if (s.length <= maxLength) {
47
+ return s;
48
+ }
49
+ return s.slice(0, maxLength) + ` ... (${s.length - maxLength} more)`;
50
+ }
51
+ export {
52
+ capLength
53
+ };
@@ -17,12 +17,12 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
- // src/iterators.ts
21
- var iterators_exports = {};
22
- __export(iterators_exports, {
20
+ // src/concatIterators.ts
21
+ var concatIterators_exports = {};
22
+ __export(concatIterators_exports, {
23
23
  concatIterators: () => concatIterators
24
24
  });
25
- module.exports = __toCommonJS(iterators_exports);
25
+ module.exports = __toCommonJS(concatIterators_exports);
26
26
  function* concatIterators(...iterators) {
27
27
  for (const iterator of iterators) {
28
28
  yield* iterator;
@@ -1,2 +1,2 @@
1
1
  "use strict";var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var s=(t,o)=>{for(var e in o)n(t,e,{get:o[e],enumerable:!0})},T=(t,o,e,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of f(o))!i.call(t,r)&&r!==e&&n(t,r,{get:()=>o[r],enumerable:!(a=c(o,r))||a.enumerable});return t};var d=t=>T(n({},"__esModule",{value:!0}),t);var p={};s(p,{concatIterators:()=>l});module.exports=d(p);function*l(...t){for(let o of t)yield*o}0&&(module.exports={concatIterators});
2
- //# sourceMappingURL=iterators.min.cjs.map
2
+ //# sourceMappingURL=concatIterators.min.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/concatIterators.ts"],"sourcesContent":["/** Memory-efficient way to concat two or more iterators. */\nexport function* concatIterators<T>(...iterators: Generator<T>[]) {\n for (const iterator of iterators) {\n yield* iterator;\n }\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GACO,SAAUE,KAAsBE,EAA2B,CAChE,QAAWC,KAAYD,EACrB,MAAOC,CAEX","names":["concatIterators_exports","__export","concatIterators","__toCommonJS","iterators","iterator"]}
@@ -1,2 +1,2 @@
1
1
  function*r(...o){for(let t of o)yield*t}export{r as concatIterators};
2
- //# sourceMappingURL=iterators.min.mjs.map
2
+ //# sourceMappingURL=concatIterators.min.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/concatIterators.ts"],"sourcesContent":["/** Memory-efficient way to concat two or more iterators. */\nexport function* concatIterators<T>(...iterators: Generator<T>[]) {\n for (const iterator of iterators) {\n yield* iterator;\n }\n}\n"],"mappings":"AACO,SAAUA,KAAsBC,EAA2B,CAChE,QAAWC,KAAYD,EACrB,MAAOC,CAEX","names":["concatIterators","iterators","iterator"]}
@@ -1,4 +1,4 @@
1
- // src/iterators.ts
1
+ // src/concatIterators.ts
2
2
  function* concatIterators(...iterators) {
3
3
  for (const iterator of iterators) {
4
4
  yield* iterator;
package/duration.min.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var P=(o,n)=>{for(var t in n)c(o,t,{get:n[t],enumerable:!0})},T=(o,n,t,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of y(n))!g.call(o,r)&&r!==t&&c(o,r,{get:()=>n[r],enumerable:!(e=R(n,r))||e.enumerable});return o};var U=o=>T(c({},"__esModule",{value:!0}),o);var H={};P(H,{DURATION_STYLE_SUFFIX_MAP:()=>D,DURATION_TYPE_SEQUENCE:()=>S,durationOrMsToMs:()=>w,durationToMs:()=>x,elapsed:()=>C,formatDuration:()=>M,msToDuration:()=>m,readableDuration:()=>d});module.exports=U(H);var S=["days","hours","minutes","seconds","milliseconds"],D={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 I(o){return o==="narrow"?"":" "}function A(o){return o==="narrow"?" ":", "}function m(o,n){if(o===0)return n=n??"milliseconds",{[n]:0};let t={};for(let e=0;e<1;e++){let r=Math.floor(o/1e3),u=o-r*1e3;if(u>0&&(t.milliseconds=u),r===0)break;let i=Math.floor(r/60);if(r-=i*60,r>0&&(t.seconds=r),i===0)break;let s=Math.floor(i/60);if(i-=s*60,i>0&&(t.minutes=i),s===0)break;let a=Math.floor(s/24);s-=a*24,s>0&&(t.hours=s),a>0&&(t.days=a)}return t}function x(o){let n=(o.days??0)*864e5,t=(o.hours??0)*36e5,e=(o.minutes??0)*6e4,r=(o.seconds??0)*1e3,u=o.milliseconds??0;return n+t+e+r+u}function w(o){return typeof o=="number"?o:x(o)}function M(o,n){n=n??"short";let t=b(n),e=I(n),r=[];for(let i of S){let s=o[i];if(s===void 0)continue;let a=D[i],h=s===1?a[n]:a[t];r.push(s+e+h)}let u=A(n);return r.join(u)}function d(o,n){let t=m(o,n?.durationTypeForZero);return M(t,n?.style)}function C(o){return o>6e4?d(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}0&&(module.exports={DURATION_STYLE_SUFFIX_MAP,DURATION_TYPE_SEQUENCE,durationOrMsToMs,durationToMs,elapsed,formatDuration,msToDuration,readableDuration});
1
+ "use strict";var l=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var x=(o,n)=>{for(var r in n)l(o,r,{get:n[r],enumerable:!0})},_=(o,n,r,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of S(n))!M.call(o,t)&&t!==r&&l(o,t,{get:()=>n[t],enumerable:!(e=g(n,t))||e.enumerable});return o};var T=o=>_(l({},"__esModule",{value:!0}),o);var I={};x(I,{DURATION_STYLE_SUFFIX_MAP:()=>p,DURATION_TYPE_SEQUENCE:()=>f,durationOrMsToMs:()=>O,durationToMs:()=>D,elapsed:()=>A,formatDuration:()=>d,msToDuration:()=>m,readableDuration:()=>h});module.exports=T(I);var f=["days","hours","minutes","seconds","milliseconds"],p={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 U(o){return o=="short"?"shorts":o==="long"?"longs":o}function w(o){return o==="narrow"?"":" "}function N(o){return o==="narrow"?" ":", "}function m(o,n){if(o===0)return n=n??"milliseconds",{[n]:0};let r={};for(let e=0;e<1;e++){let t=Math.floor(o/1e3),u=o-t*1e3;if(u>0&&(r.milliseconds=u),t===0)break;let i=Math.floor(t/60);if(t-=i*60,t>0&&(r.seconds=t),i===0)break;let s=Math.floor(i/60);if(i-=s*60,i>0&&(r.minutes=i),s===0)break;let a=Math.floor(s/24);s-=a*24,s>0&&(r.hours=s),a>0&&(r.days=a)}return r}function D(o){let n=(o.days??0)*864e5,r=(o.hours??0)*36e5,e=(o.minutes??0)*6e4,t=(o.seconds??0)*1e3,u=o.milliseconds??0;return n+r+e+t+u}function O(o){return typeof o=="number"?o:D(o)}function d(o,n){n=n??"short";let r=U(n),e=w(n),t=[];for(let i of f){let s=o[i];if(s===void 0)continue;let a=p[i],y=s===1?a[n]:a[r];t.push(s+e+y)}let u=N(n);return t.join(u)}function h(o,n){let r=m(o,n?.durationTypeForZero);return d(r,n?.style)}function A(o){return o>6e4?h(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}0&&(module.exports={DURATION_STYLE_SUFFIX_MAP,DURATION_TYPE_SEQUENCE,durationOrMsToMs,durationToMs,elapsed,formatDuration,msToDuration,readableDuration});
2
2
  //# sourceMappingURL=duration.min.cjs.map
package/duration.min.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var m=["days","hours","minutes","seconds","milliseconds"],x={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 M(o){return o=="short"?"shorts":o==="long"?"longs":o}function d(o){return o==="narrow"?"":" "}function h(o){return o==="narrow"?" ":", "}function R(o,n){if(o===0)return n=n??"milliseconds",{[n]:0};let t={};for(let i=0;i<1;i++){let r=Math.floor(o/1e3),u=o-r*1e3;if(u>0&&(t.milliseconds=u),r===0)break;let e=Math.floor(r/60);if(r-=e*60,r>0&&(t.seconds=r),e===0)break;let s=Math.floor(e/60);if(e-=s*60,e>0&&(t.minutes=e),s===0)break;let a=Math.floor(s/24);s-=a*24,s>0&&(t.hours=s),a>0&&(t.days=a)}return t}function y(o){let n=(o.days??0)*864e5,t=(o.hours??0)*36e5,i=(o.minutes??0)*6e4,r=(o.seconds??0)*1e3,u=o.milliseconds??0;return n+t+i+r+u}function N(o){return typeof o=="number"?o:y(o)}function g(o,n){n=n??"short";let t=M(n),i=d(n),r=[];for(let e of m){let s=o[e];if(s===void 0)continue;let a=x[e],f=s===1?a[n]:a[t];r.push(s+i+f)}let u=h(n);return r.join(u)}function P(o,n){let t=R(o,n?.durationTypeForZero);return g(t,n?.style)}function O(o){return o>6e4?P(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}export{x as DURATION_STYLE_SUFFIX_MAP,m as DURATION_TYPE_SEQUENCE,N as durationOrMsToMs,y as durationToMs,O as elapsed,g as formatDuration,R as msToDuration,P as readableDuration};
1
+ var d=["days","hours","minutes","seconds","milliseconds"],h={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 y(o){return o=="short"?"shorts":o==="long"?"longs":o}function g(o){return o==="narrow"?"":" "}function S(o){return o==="narrow"?" ":", "}function M(o,n){if(o===0)return n=n??"milliseconds",{[n]:0};let r={};for(let i=0;i<1;i++){let t=Math.floor(o/1e3),u=o-t*1e3;if(u>0&&(r.milliseconds=u),t===0)break;let e=Math.floor(t/60);if(t-=e*60,t>0&&(r.seconds=t),e===0)break;let s=Math.floor(e/60);if(e-=s*60,e>0&&(r.minutes=e),s===0)break;let a=Math.floor(s/24);s-=a*24,s>0&&(r.hours=s),a>0&&(r.days=a)}return r}function x(o){let n=(o.days??0)*864e5,r=(o.hours??0)*36e5,i=(o.minutes??0)*6e4,t=(o.seconds??0)*1e3,u=o.milliseconds??0;return n+r+i+t+u}function R(o){return typeof o=="number"?o:x(o)}function _(o,n){n=n??"short";let r=y(n),i=g(n),t=[];for(let e of d){let s=o[e];if(s===void 0)continue;let a=h[e],c=s===1?a[n]:a[r];t.push(s+i+c)}let u=S(n);return t.join(u)}function T(o,n){let r=M(o,n?.durationTypeForZero);return _(r,n?.style)}function P(o){return o>6e4?T(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}export{h as DURATION_STYLE_SUFFIX_MAP,d as DURATION_TYPE_SEQUENCE,R as durationOrMsToMs,x as durationToMs,P as elapsed,_ as formatDuration,M as msToDuration,T as readableDuration};
2
2
  //# sourceMappingURL=duration.min.mjs.map
package/kvStore.min.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var f=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var T=(r,t)=>{for(var e in t)f(r,e,{get:t[e],enumerable:!0})},E=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of M(t))!D.call(r,n)&&n!==e&&f(r,n,{get:()=>t[n],enumerable:!(s=S(t,n))||s.enumerable});return r};var _=r=>E(f({},"__esModule",{value:!0}),r);var R={};T(R,{KvStore:()=>b,KvStoreConfig:()=>l,KvStoreItem:()=>g,configureKvStore:()=>O,kvStore:()=>h,kvStoreItem:()=>N});module.exports=_(R);function P(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,n=(r.seconds??0)*1e3,o=r.milliseconds??0;return t+e+s+n+o}function d(r){return typeof r=="number"?r:P(r)}var l={dbName:"KVStore",dbVersion:1,storeName:"kvStore",expiryMs:864e5*30,gcIntervalMs:864e5};function O(r){Object.assign(l,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 c(r,t){return r.onerror=e=>{t(e)},r}var b=class{constructor(t,e){this.dbName=t;this.dbVersion=e?.dbVersion??l.dbVersion,this.storeName=e?.storeName??l.storeName,this.defaultExpiryMs=e?.defaultExpiryMs?d(e.defaultExpiryMs):l.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?d(e.gcIntervalMs):l.gcIntervalMs,this.gcMsStorageKey=`__kvStore:lastGcMs:${t}:v${this.dbVersion}:${this.storeName}`}db;gcMsStorageKey;dbVersion;storeName;defaultExpiryMs;gcIntervalMs;async getOrCreateDb(){return this.db||(this.db=await new Promise((t,e)=>{let s=c(globalThis.indexedDB.open(this.dbName,this.dbVersion),e);s.onupgradeneeded=n=>{n.target.result.createObjectStore(this.storeName,{keyPath:"key"}).createIndex("key","key",{unique:!0})},s.onsuccess=n=>{let o=n.target.result;t(o)}})),this.db}async transact(t,e){let s=await this.getOrCreateDb();return await new Promise((n,o)=>{let i=c(s.transaction(this.storeName,t),o);i.onabort=u=>{o(u)};let a=i.objectStore(this.storeName);e(a,n,o)})}async set(t,e,s=this.defaultExpiryMs){let n=Date.now(),o={key:t,value:e,storedMs:n,expiryMs:n+d(s)};return await this.transact("readwrite",(i,a,u)=>{let y=c(i.put(o),u);y.onsuccess=()=>{a(e),this.gc()}})}async delete(t){return await this.transact("readwrite",(e,s,n)=>{if(e.transaction.oncomplete=()=>{s()},typeof t=="string")c(e.delete(t),n);else for(let o of t)c(e.delete(o),n)})}async getStoredObject(t){let e=await this.transact("readonly",(s,n,o)=>{let i=c(s.get(t),o);i.onsuccess=()=>{n(i.result)}});if(e)try{let s=m(e);if(!s){await this.delete(t),this.gc();return}return s}catch(s){console.error(`Invalid kv value: ${t}=${JSON.stringify(e)}:`,s),await this.delete(t),this.gc();return}}async get(t){return(await this.getStoredObject(t))?.value}async forEach(t){await this.transact("readonly",(e,s,n)=>{let o=c(e.openCursor(),n);o.onsuccess=async i=>{let a=i.target.result;if(a){if(a.key){let u=m(a.value);u!==void 0&&await t(String(a.key),u.value,u.expiryMs,u.storedMs)}a.continue()}else s()}})}async size(){let t=0;return await this.forEach(()=>{t++}),t}async clear(){await this.transact("readwrite",(t,e,s)=>{let n=c(t.clear(),s);n.onsuccess=()=>{e()}})}async asMap(){let t=new Map;return await this.forEach((e,s,n,o)=>{t.set(e,{value:s,expiryMs:n,storedMs:o})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}async gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||await this.gcNow()}async gcNow(){console.log(`Starting kvStore GC on ${this.dbName} v${this.dbVersion}...`),this.lastGcMs=Date.now();let t=[];await this.forEach(async(e,s,n)=>{(s===void 0||Date.now()>=n)&&t.push(e)}),t.length&&await this.delete(t),console.log(`Finished kvStore GC on ${this.dbName} v${this.dbVersion} - deleted ${t.length} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},h=new b(l.dbName),g=class{constructor(t,e=l.expiryMs,s=h){this.key=t;this.store=s;this.defaultExpiryMs=e&&d(e)}defaultExpiryMs;async set(t,e=this.defaultExpiryMs){await this.store.set(this.key,t,e)}async getStoredObject(){return await this.store.getStoredObject(this.key)}async get(){return await this.store.get(this.key)}async delete(){await this.store.delete(this.key)}};function N(r,t,e=h){return t=t&&d(t),new g(r,t,e)}0&&(module.exports={KvStore,KvStoreConfig,KvStoreItem,configureKvStore,kvStore,kvStoreItem});
1
+ "use strict";var g=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var T=(r,t)=>{for(var e in t)g(r,e,{get:t[e],enumerable:!0})},v=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of M(t))!D.call(r,n)&&n!==e&&g(r,n,{get:()=>t[n],enumerable:!(s=S(t,n))||s.enumerable});return r};var w=r=>v(g({},"__esModule",{value:!0}),r);var E={};T(E,{KvStore:()=>b,KvStoreConfig:()=>l,KvStoreItem:()=>p,configureKvStore:()=>O,kvStore:()=>f,kvStoreItem:()=>P});module.exports=w(E);function x(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,n=(r.seconds??0)*1e3,o=r.milliseconds??0;return t+e+s+n+o}function d(r){return typeof r=="number"?r:x(r)}var l={dbName:"KVStore",dbVersion:1,storeName:"kvStore",expiryMs:864e5*30,gcIntervalMs:864e5};function O(r){Object.assign(l,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 c(r,t){return r.onerror=e=>{t(e)},r}var b=class{constructor(t,e){this.dbName=t;this.dbVersion=e?.dbVersion??l.dbVersion,this.storeName=e?.storeName??l.storeName,this.defaultExpiryMs=e?.defaultExpiryMs?d(e.defaultExpiryMs):l.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?d(e.gcIntervalMs):l.gcIntervalMs,this.gcMsStorageKey=`__kvStore:lastGcMs:${t}:v${this.dbVersion}:${this.storeName}`}db;gcMsStorageKey;dbVersion;storeName;defaultExpiryMs;gcIntervalMs;async getOrCreateDb(){return this.db||(this.db=await new Promise((t,e)=>{let s=c(globalThis.indexedDB.open(this.dbName,this.dbVersion),e);s.onupgradeneeded=n=>{n.target.result.createObjectStore(this.storeName,{keyPath:"key"}).createIndex("key","key",{unique:!0})},s.onsuccess=n=>{let o=n.target.result;t(o)}})),this.db}async transact(t,e){let s=await this.getOrCreateDb();return await new Promise((n,o)=>{let i=c(s.transaction(this.storeName,t),o);i.onabort=u=>{o(u)};let a=i.objectStore(this.storeName);e(a,n,o)})}async set(t,e,s=this.defaultExpiryMs){let n=Date.now(),o={key:t,value:e,storedMs:n,expiryMs:n+d(s)};return await this.transact("readwrite",(i,a,u)=>{let y=c(i.put(o),u);y.onsuccess=()=>{a(e),this.gc()}})}async delete(t){return await this.transact("readwrite",(e,s,n)=>{if(e.transaction.oncomplete=()=>{s()},typeof t=="string")c(e.delete(t),n);else for(let o of t)c(e.delete(o),n)})}async getStoredObject(t){let e=await this.transact("readonly",(s,n,o)=>{let i=c(s.get(t),o);i.onsuccess=()=>{n(i.result)}});if(e)try{let s=m(e);if(!s){await this.delete(t),this.gc();return}return s}catch(s){console.error(`Invalid kv value: ${t}=${JSON.stringify(e)}:`,s),await this.delete(t),this.gc();return}}async get(t){return(await this.getStoredObject(t))?.value}async forEach(t){await this.transact("readonly",(e,s,n)=>{let o=c(e.openCursor(),n);o.onsuccess=async i=>{let a=i.target.result;if(a){if(a.key){let u=m(a.value);u!==void 0&&await t(String(a.key),u.value,u.expiryMs,u.storedMs)}a.continue()}else s()}})}async size(){let t=0;return await this.forEach(()=>{t++}),t}async clear(){await this.transact("readwrite",(t,e,s)=>{let n=c(t.clear(),s);n.onsuccess=()=>{e()}})}async asMap(){let t=new Map;return await this.forEach((e,s,n,o)=>{t.set(e,{value:s,expiryMs:n,storedMs:o})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}async gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||await this.gcNow()}async gcNow(){console.log(`Starting kvStore GC on ${this.dbName} v${this.dbVersion}...`),this.lastGcMs=Date.now();let t=[];await this.forEach(async(e,s,n)=>{(s===void 0||Date.now()>=n)&&t.push(e)}),t.length&&await this.delete(t),console.log(`Finished kvStore GC on ${this.dbName} v${this.dbVersion} - deleted ${t.length} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},f=new b(l.dbName),p=class{constructor(t,e=l.expiryMs,s=f){this.key=t;this.store=s;this.defaultExpiryMs=e&&d(e)}defaultExpiryMs;async set(t,e=this.defaultExpiryMs){await this.store.set(this.key,t,e)}async getStoredObject(){return await this.store.getStoredObject(this.key)}async get(){return await this.store.get(this.key)}async delete(){await this.store.delete(this.key)}};function P(r,t,e=f){return t=t&&d(t),new p(r,t,e)}0&&(module.exports={KvStore,KvStoreConfig,KvStoreItem,configureKvStore,kvStore,kvStoreItem});
2
2
  //# sourceMappingURL=kvStore.min.cjs.map
package/kvStore.min.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function D(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,n=(r.seconds??0)*1e3,o=r.milliseconds??0;return t+e+s+n+o}function d(r){return typeof r=="number"?r:D(r)}var l={dbName:"KVStore",dbVersion:1,storeName:"kvStore",expiryMs:864e5*30,gcIntervalMs:864e5};function R(r){Object.assign(l,r)}function f(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 c(r,t){return r.onerror=e=>{t(e)},r}var b=class{constructor(t,e){this.dbName=t;this.dbVersion=e?.dbVersion??l.dbVersion,this.storeName=e?.storeName??l.storeName,this.defaultExpiryMs=e?.defaultExpiryMs?d(e.defaultExpiryMs):l.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?d(e.gcIntervalMs):l.gcIntervalMs,this.gcMsStorageKey=`__kvStore:lastGcMs:${t}:v${this.dbVersion}:${this.storeName}`}db;gcMsStorageKey;dbVersion;storeName;defaultExpiryMs;gcIntervalMs;async getOrCreateDb(){return this.db||(this.db=await new Promise((t,e)=>{let s=c(globalThis.indexedDB.open(this.dbName,this.dbVersion),e);s.onupgradeneeded=n=>{n.target.result.createObjectStore(this.storeName,{keyPath:"key"}).createIndex("key","key",{unique:!0})},s.onsuccess=n=>{let o=n.target.result;t(o)}})),this.db}async transact(t,e){let s=await this.getOrCreateDb();return await new Promise((n,o)=>{let i=c(s.transaction(this.storeName,t),o);i.onabort=u=>{o(u)};let a=i.objectStore(this.storeName);e(a,n,o)})}async set(t,e,s=this.defaultExpiryMs){let n=Date.now(),o={key:t,value:e,storedMs:n,expiryMs:n+d(s)};return await this.transact("readwrite",(i,a,u)=>{let m=c(i.put(o),u);m.onsuccess=()=>{a(e),this.gc()}})}async delete(t){return await this.transact("readwrite",(e,s,n)=>{if(e.transaction.oncomplete=()=>{s()},typeof t=="string")c(e.delete(t),n);else for(let o of t)c(e.delete(o),n)})}async getStoredObject(t){let e=await this.transact("readonly",(s,n,o)=>{let i=c(s.get(t),o);i.onsuccess=()=>{n(i.result)}});if(e)try{let s=f(e);if(!s){await this.delete(t),this.gc();return}return s}catch(s){console.error(`Invalid kv value: ${t}=${JSON.stringify(e)}:`,s),await this.delete(t),this.gc();return}}async get(t){return(await this.getStoredObject(t))?.value}async forEach(t){await this.transact("readonly",(e,s,n)=>{let o=c(e.openCursor(),n);o.onsuccess=async i=>{let a=i.target.result;if(a){if(a.key){let u=f(a.value);u!==void 0&&await t(String(a.key),u.value,u.expiryMs,u.storedMs)}a.continue()}else s()}})}async size(){let t=0;return await this.forEach(()=>{t++}),t}async clear(){await this.transact("readwrite",(t,e,s)=>{let n=c(t.clear(),s);n.onsuccess=()=>{e()}})}async asMap(){let t=new Map;return await this.forEach((e,s,n,o)=>{t.set(e,{value:s,expiryMs:n,storedMs:o})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}async gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||await this.gcNow()}async gcNow(){console.log(`Starting kvStore GC on ${this.dbName} v${this.dbVersion}...`),this.lastGcMs=Date.now();let t=[];await this.forEach(async(e,s,n)=>{(s===void 0||Date.now()>=n)&&t.push(e)}),t.length&&await this.delete(t),console.log(`Finished kvStore GC on ${this.dbName} v${this.dbVersion} - deleted ${t.length} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},h=new b(l.dbName),g=class{constructor(t,e=l.expiryMs,s=h){this.key=t;this.store=s;this.defaultExpiryMs=e&&d(e)}defaultExpiryMs;async set(t,e=this.defaultExpiryMs){await this.store.set(this.key,t,e)}async getStoredObject(){return await this.store.getStoredObject(this.key)}async get(){return await this.store.get(this.key)}async delete(){await this.store.delete(this.key)}};function I(r,t,e=h){return t=t&&d(t),new g(r,t,e)}export{b as KvStore,l as KvStoreConfig,g as KvStoreItem,R as configureKvStore,h as kvStore,I as kvStoreItem};
1
+ function y(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,n=(r.seconds??0)*1e3,o=r.milliseconds??0;return t+e+s+n+o}function d(r){return typeof r=="number"?r:y(r)}var l={dbName:"KVStore",dbVersion:1,storeName:"kvStore",expiryMs:864e5*30,gcIntervalMs:864e5};function x(r){Object.assign(l,r)}function f(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 c(r,t){return r.onerror=e=>{t(e)},r}var b=class{constructor(t,e){this.dbName=t;this.dbVersion=e?.dbVersion??l.dbVersion,this.storeName=e?.storeName??l.storeName,this.defaultExpiryMs=e?.defaultExpiryMs?d(e.defaultExpiryMs):l.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?d(e.gcIntervalMs):l.gcIntervalMs,this.gcMsStorageKey=`__kvStore:lastGcMs:${t}:v${this.dbVersion}:${this.storeName}`}db;gcMsStorageKey;dbVersion;storeName;defaultExpiryMs;gcIntervalMs;async getOrCreateDb(){return this.db||(this.db=await new Promise((t,e)=>{let s=c(globalThis.indexedDB.open(this.dbName,this.dbVersion),e);s.onupgradeneeded=n=>{n.target.result.createObjectStore(this.storeName,{keyPath:"key"}).createIndex("key","key",{unique:!0})},s.onsuccess=n=>{let o=n.target.result;t(o)}})),this.db}async transact(t,e){let s=await this.getOrCreateDb();return await new Promise((n,o)=>{let i=c(s.transaction(this.storeName,t),o);i.onabort=u=>{o(u)};let a=i.objectStore(this.storeName);e(a,n,o)})}async set(t,e,s=this.defaultExpiryMs){let n=Date.now(),o={key:t,value:e,storedMs:n,expiryMs:n+d(s)};return await this.transact("readwrite",(i,a,u)=>{let m=c(i.put(o),u);m.onsuccess=()=>{a(e),this.gc()}})}async delete(t){return await this.transact("readwrite",(e,s,n)=>{if(e.transaction.oncomplete=()=>{s()},typeof t=="string")c(e.delete(t),n);else for(let o of t)c(e.delete(o),n)})}async getStoredObject(t){let e=await this.transact("readonly",(s,n,o)=>{let i=c(s.get(t),o);i.onsuccess=()=>{n(i.result)}});if(e)try{let s=f(e);if(!s){await this.delete(t),this.gc();return}return s}catch(s){console.error(`Invalid kv value: ${t}=${JSON.stringify(e)}:`,s),await this.delete(t),this.gc();return}}async get(t){return(await this.getStoredObject(t))?.value}async forEach(t){await this.transact("readonly",(e,s,n)=>{let o=c(e.openCursor(),n);o.onsuccess=async i=>{let a=i.target.result;if(a){if(a.key){let u=f(a.value);u!==void 0&&await t(String(a.key),u.value,u.expiryMs,u.storedMs)}a.continue()}else s()}})}async size(){let t=0;return await this.forEach(()=>{t++}),t}async clear(){await this.transact("readwrite",(t,e,s)=>{let n=c(t.clear(),s);n.onsuccess=()=>{e()}})}async asMap(){let t=new Map;return await this.forEach((e,s,n,o)=>{t.set(e,{value:s,expiryMs:n,storedMs:o})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}async gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||await this.gcNow()}async gcNow(){console.log(`Starting kvStore GC on ${this.dbName} v${this.dbVersion}...`),this.lastGcMs=Date.now();let t=[];await this.forEach(async(e,s,n)=>{(s===void 0||Date.now()>=n)&&t.push(e)}),t.length&&await this.delete(t),console.log(`Finished kvStore GC on ${this.dbName} v${this.dbVersion} - deleted ${t.length} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},h=new b(l.dbName),p=class{constructor(t,e=l.expiryMs,s=h){this.key=t;this.store=s;this.defaultExpiryMs=e&&d(e)}defaultExpiryMs;async set(t,e=this.defaultExpiryMs){await this.store.set(this.key,t,e)}async getStoredObject(){return await this.store.getStoredObject(this.key)}async get(){return await this.store.get(this.key)}async delete(){await this.store.delete(this.key)}};function O(r,t,e=h){return t=t&&d(t),new p(r,t,e)}export{b as KvStore,l as KvStoreConfig,p as KvStoreItem,x as configureKvStore,h as kvStore,O as kvStoreItem};
2
2
  //# sourceMappingURL=kvStore.min.mjs.map
@@ -1,2 +1,2 @@
1
- "use strict";var d=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var h=(r,t)=>{for(var e in t)d(r,e,{get:t[e],enumerable:!0})},y=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of g(t))!S.call(r,o)&&o!==e&&d(r,o,{get:()=>t[o],enumerable:!(s=f(t,o))||s.enumerable});return r};var b=r=>y(d({},"__esModule",{value:!0}),r);var O={};h(O,{LocalStore:()=>c,LocalStoreConfig:()=>a,LocalStoreItem:()=>l,configureLocalStore:()=>_,localStore:()=>p,localStoreItem:()=>T});module.exports=b(O);function E(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,o=(r.seconds??0)*1e3,n=r.milliseconds??0;return t+e+s+o+n}function i(r){return typeof r=="number"?r:E(r)}var a={storeName:"ts-utils",expiryMs:864e5*30,gcIntervalMs:864e5};function _(r){Object.assign(a,r)}function D(r){if(!(!r||typeof r!="object"||r.value===void 0||typeof r.storedMs!="number"||typeof r.expiryMs!="number"||Date.now()>=r.expiryMs))return r}var c=class{constructor(t,e){this.storeName=t;this.keyPrefix=t+":",this.defaultExpiryMs=e?.defaultExpiryMs?i(e.defaultExpiryMs):a.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?i(e.gcIntervalMs):a.gcIntervalMs,this.gcMsStorageKey=`__localStore:lastGcMs:${t}`}keyPrefix;gcMsStorageKey;defaultExpiryMs;gcIntervalMs;set(t,e,s=this.defaultExpiryMs){let o=Date.now(),n={value:e,storedMs:o,expiryMs:o+i(s)};return localStorage.setItem(this.keyPrefix+t,JSON.stringify(n)),this.gc(),e}delete(t){if(typeof t=="string")localStorage.removeItem(this.keyPrefix+t);else for(let e of t)localStorage.removeItem(this.keyPrefix+e)}getStoredObject(t){let e=this.keyPrefix+t,s=localStorage.getItem(e);if(s)try{let o=JSON.parse(s),n=D(o);if(!n){this.delete(e),this.gc();return}return n}catch(o){console.error(`Invalid local value: ${e}=${s}:`,o),this.delete(e),this.gc();return}}get(t){return this.getStoredObject(t)?.value}forEach(t){for(let e of Object.keys(localStorage)){if(!e.startsWith(this.keyPrefix))continue;let s=e.slice(this.keyPrefix.length),o=this.getStoredObject(s);o&&t(s,o.value,o.expiryMs,o.storedMs)}}size(){let t=0;return this.forEach(()=>{t++}),t}clear(){for(let t of Object.keys(localStorage))t.startsWith(this.keyPrefix)&&localStorage.removeItem(t)}asMap(){let t=new Map;return this.forEach((e,s,o,n)=>{t.set(e,{value:s,expiryMs:o,storedMs:n})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||this.gcNow()}gcNow(){console.log(`Starting localStore GC on ${this.storeName}`),this.lastGcMs=Date.now();let t=0;this.forEach((e,s,o)=>{Date.now()>=o&&(this.delete(e),t++)}),console.log(`Finished localStore GC on ${this.storeName} - deleted ${t} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},p=new c(a.storeName),l=class{constructor(t,e=a.expiryMs,s=p){this.key=t;this.store=s;this.defaultExpiryMs=e&&i(e)}defaultExpiryMs;set(t,e=this.defaultExpiryMs){this.store.set(this.key,t,e)}getStoredObject(){return this.store.getStoredObject(this.key)}get(){return this.store.get(this.key)}delete(){this.store.delete(this.key)}};function T(r,t,e=p){return t=t&&i(t),new l(r,t,e)}0&&(module.exports={LocalStore,LocalStoreConfig,LocalStoreItem,configureLocalStore,localStore,localStoreItem});
1
+ "use strict";var l=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var y=(r,t)=>{for(var e in t)l(r,e,{get:t[e],enumerable:!0})},b=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of p(t))!h.call(r,o)&&o!==e&&l(r,o,{get:()=>t[o],enumerable:!(s=g(t,o))||s.enumerable});return r};var m=r=>b(l({},"__esModule",{value:!0}),r);var D={};y(D,{LocalStore:()=>u,LocalStoreConfig:()=>a,LocalStoreItem:()=>c,configureLocalStore:()=>M,localStore:()=>d,localStoreItem:()=>x});module.exports=m(D);function S(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,o=(r.seconds??0)*1e3,n=r.milliseconds??0;return t+e+s+o+n}function i(r){return typeof r=="number"?r:S(r)}var a={storeName:"ts-utils",expiryMs:864e5*30,gcIntervalMs:864e5};function M(r){Object.assign(a,r)}function T(r){if(!(!r||typeof r!="object"||r.value===void 0||typeof r.storedMs!="number"||typeof r.expiryMs!="number"||Date.now()>=r.expiryMs))return r}var u=class{constructor(t,e){this.storeName=t;this.keyPrefix=t+":",this.defaultExpiryMs=e?.defaultExpiryMs?i(e.defaultExpiryMs):a.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?i(e.gcIntervalMs):a.gcIntervalMs,this.gcMsStorageKey=`__localStore:lastGcMs:${t}`}keyPrefix;gcMsStorageKey;defaultExpiryMs;gcIntervalMs;set(t,e,s=this.defaultExpiryMs){let o=Date.now(),n={value:e,storedMs:o,expiryMs:o+i(s)};return localStorage.setItem(this.keyPrefix+t,JSON.stringify(n)),this.gc(),e}delete(t){if(typeof t=="string")localStorage.removeItem(this.keyPrefix+t);else for(let e of t)localStorage.removeItem(this.keyPrefix+e)}getStoredObject(t){let e=this.keyPrefix+t,s=localStorage.getItem(e);if(s)try{let o=JSON.parse(s),n=T(o);if(!n){this.delete(e),this.gc();return}return n}catch(o){console.error(`Invalid local value: ${e}=${s}:`,o),this.delete(e),this.gc();return}}get(t){return this.getStoredObject(t)?.value}forEach(t){for(let e of Object.keys(localStorage)){if(!e.startsWith(this.keyPrefix))continue;let s=e.slice(this.keyPrefix.length),o=this.getStoredObject(s);o&&t(s,o.value,o.expiryMs,o.storedMs)}}size(){let t=0;return this.forEach(()=>{t++}),t}clear(){for(let t of Object.keys(localStorage))t.startsWith(this.keyPrefix)&&localStorage.removeItem(t)}asMap(){let t=new Map;return this.forEach((e,s,o,n)=>{t.set(e,{value:s,expiryMs:o,storedMs:n})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||this.gcNow()}gcNow(){console.log(`Starting localStore GC on ${this.storeName}`),this.lastGcMs=Date.now();let t=0;this.forEach((e,s,o)=>{Date.now()>=o&&(this.delete(e),t++)}),console.log(`Finished localStore GC on ${this.storeName} - deleted ${t} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},d=new u(a.storeName),c=class{constructor(t,e=a.expiryMs,s=d){this.key=t;this.store=s;this.defaultExpiryMs=e&&i(e)}defaultExpiryMs;set(t,e=this.defaultExpiryMs){this.store.set(this.key,t,e)}getStoredObject(){return this.store.getStoredObject(this.key)}get(){return this.store.get(this.key)}delete(){this.store.delete(this.key)}};function x(r,t,e=d){return t=t&&i(t),new c(r,t,e)}0&&(module.exports={LocalStore,LocalStoreConfig,LocalStoreItem,configureLocalStore,localStore,localStoreItem});
2
2
  //# sourceMappingURL=localStore.min.cjs.map
@@ -1,2 +1,2 @@
1
- function S(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,o=(r.seconds??0)*1e3,n=r.milliseconds??0;return t+e+s+o+n}function i(r){return typeof r=="number"?r:S(r)}var a={storeName:"ts-utils",expiryMs:864e5*30,gcIntervalMs:864e5};function O(r){Object.assign(a,r)}function h(r){if(!(!r||typeof r!="object"||r.value===void 0||typeof r.storedMs!="number"||typeof r.expiryMs!="number"||Date.now()>=r.expiryMs))return r}var c=class{constructor(t,e){this.storeName=t;this.keyPrefix=t+":",this.defaultExpiryMs=e?.defaultExpiryMs?i(e.defaultExpiryMs):a.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?i(e.gcIntervalMs):a.gcIntervalMs,this.gcMsStorageKey=`__localStore:lastGcMs:${t}`}keyPrefix;gcMsStorageKey;defaultExpiryMs;gcIntervalMs;set(t,e,s=this.defaultExpiryMs){let o=Date.now(),n={value:e,storedMs:o,expiryMs:o+i(s)};return localStorage.setItem(this.keyPrefix+t,JSON.stringify(n)),this.gc(),e}delete(t){if(typeof t=="string")localStorage.removeItem(this.keyPrefix+t);else for(let e of t)localStorage.removeItem(this.keyPrefix+e)}getStoredObject(t){let e=this.keyPrefix+t,s=localStorage.getItem(e);if(s)try{let o=JSON.parse(s),n=h(o);if(!n){this.delete(e),this.gc();return}return n}catch(o){console.error(`Invalid local value: ${e}=${s}:`,o),this.delete(e),this.gc();return}}get(t){return this.getStoredObject(t)?.value}forEach(t){for(let e of Object.keys(localStorage)){if(!e.startsWith(this.keyPrefix))continue;let s=e.slice(this.keyPrefix.length),o=this.getStoredObject(s);o&&t(s,o.value,o.expiryMs,o.storedMs)}}size(){let t=0;return this.forEach(()=>{t++}),t}clear(){for(let t of Object.keys(localStorage))t.startsWith(this.keyPrefix)&&localStorage.removeItem(t)}asMap(){let t=new Map;return this.forEach((e,s,o,n)=>{t.set(e,{value:s,expiryMs:o,storedMs:n})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||this.gcNow()}gcNow(){console.log(`Starting localStore GC on ${this.storeName}`),this.lastGcMs=Date.now();let t=0;this.forEach((e,s,o)=>{Date.now()>=o&&(this.delete(e),t++)}),console.log(`Finished localStore GC on ${this.storeName} - deleted ${t} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},d=new c(a.storeName),l=class{constructor(t,e=a.expiryMs,s=d){this.key=t;this.store=s;this.defaultExpiryMs=e&&i(e)}defaultExpiryMs;set(t,e=this.defaultExpiryMs){this.store.set(this.key,t,e)}getStoredObject(){return this.store.getStoredObject(this.key)}get(){return this.store.get(this.key)}delete(){this.store.delete(this.key)}};function P(r,t,e=d){return t=t&&i(t),new l(r,t,e)}export{c as LocalStore,a as LocalStoreConfig,l as LocalStoreItem,O as configureLocalStore,d as localStore,P as localStoreItem};
1
+ function f(r){let t=(r.days??0)*864e5,e=(r.hours??0)*36e5,s=(r.minutes??0)*6e4,o=(r.seconds??0)*1e3,n=r.milliseconds??0;return t+e+s+o+n}function i(r){return typeof r=="number"?r:f(r)}var a={storeName:"ts-utils",expiryMs:864e5*30,gcIntervalMs:864e5};function M(r){Object.assign(a,r)}function g(r){if(!(!r||typeof r!="object"||r.value===void 0||typeof r.storedMs!="number"||typeof r.expiryMs!="number"||Date.now()>=r.expiryMs))return r}var u=class{constructor(t,e){this.storeName=t;this.keyPrefix=t+":",this.defaultExpiryMs=e?.defaultExpiryMs?i(e.defaultExpiryMs):a.expiryMs,this.gcIntervalMs=e?.gcIntervalMs?i(e.gcIntervalMs):a.gcIntervalMs,this.gcMsStorageKey=`__localStore:lastGcMs:${t}`}keyPrefix;gcMsStorageKey;defaultExpiryMs;gcIntervalMs;set(t,e,s=this.defaultExpiryMs){let o=Date.now(),n={value:e,storedMs:o,expiryMs:o+i(s)};return localStorage.setItem(this.keyPrefix+t,JSON.stringify(n)),this.gc(),e}delete(t){if(typeof t=="string")localStorage.removeItem(this.keyPrefix+t);else for(let e of t)localStorage.removeItem(this.keyPrefix+e)}getStoredObject(t){let e=this.keyPrefix+t,s=localStorage.getItem(e);if(s)try{let o=JSON.parse(s),n=g(o);if(!n){this.delete(e),this.gc();return}return n}catch(o){console.error(`Invalid local value: ${e}=${s}:`,o),this.delete(e),this.gc();return}}get(t){return this.getStoredObject(t)?.value}forEach(t){for(let e of Object.keys(localStorage)){if(!e.startsWith(this.keyPrefix))continue;let s=e.slice(this.keyPrefix.length),o=this.getStoredObject(s);o&&t(s,o.value,o.expiryMs,o.storedMs)}}size(){let t=0;return this.forEach(()=>{t++}),t}clear(){for(let t of Object.keys(localStorage))t.startsWith(this.keyPrefix)&&localStorage.removeItem(t)}asMap(){let t=new Map;return this.forEach((e,s,o,n)=>{t.set(e,{value:s,expiryMs:o,storedMs:n})}),t}get lastGcMs(){let t=globalThis.localStorage.getItem(this.gcMsStorageKey);if(!t)return 0;let e=Number(t);return isNaN(e)?0:e}set lastGcMs(t){globalThis.localStorage.setItem(this.gcMsStorageKey,String(t))}gc(){let t=this.lastGcMs;if(!t){this.lastGcMs=Date.now();return}Date.now()<t+this.gcIntervalMs||this.gcNow()}gcNow(){console.log(`Starting localStore GC on ${this.storeName}`),this.lastGcMs=Date.now();let t=0;this.forEach((e,s,o)=>{Date.now()>=o&&(this.delete(e),t++)}),console.log(`Finished localStore GC on ${this.storeName} - deleted ${t} keys`),this.lastGcMs=Date.now()}asStorageAdapter(){return this}},d=new u(a.storeName),c=class{constructor(t,e=a.expiryMs,s=d){this.key=t;this.store=s;this.defaultExpiryMs=e&&i(e)}defaultExpiryMs;set(t,e=this.defaultExpiryMs){this.store.set(this.key,t,e)}getStoredObject(){return this.store.getStoredObject(this.key)}get(){return this.store.get(this.key)}delete(){this.store.delete(this.key)}};function T(r,t,e=d){return t=t&&i(t),new c(r,t,e)}export{u as LocalStore,a as LocalStoreConfig,c as LocalStoreItem,M as configureLocalStore,d as localStore,T as localStoreItem};
2
2
  //# sourceMappingURL=localStore.min.mjs.map
package/mean.cjs CHANGED
@@ -26,13 +26,13 @@ module.exports = __toCommonJS(mean_exports);
26
26
 
27
27
  // src/asNumber.ts
28
28
  function asNumber(u) {
29
+ if (typeof u === "number") {
30
+ return isFinite(u) ? u : 0;
31
+ }
32
+ u = Number(u);
29
33
  if (typeof u === "number" && isFinite(u)) {
30
34
  return u;
31
35
  }
32
- const n = Number(u);
33
- if (typeof n === "number" && isFinite(n)) {
34
- return n;
35
- }
36
36
  return 0;
37
37
  }
38
38
 
package/mean.min.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var u=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(n,r)=>{for(var e in r)u(n,e,{get:r[e],enumerable:!0})},s=(n,r,e,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of b(r))!p.call(n,t)&&t!==e&&u(n,t,{get:()=>r[t],enumerable:!(o=f(r,t))||o.enumerable});return n};var k=n=>s(u({},"__esModule",{value:!0}),n);var a={};c(a,{mean:()=>w});module.exports=k(a);function m(n){if(typeof n=="number"&&isFinite(n))return n;let r=Number(n);return typeof r=="number"&&isFinite(r)?r:0}function i(n){return n.reduce((r,e)=>r+m(e),0)}function w(n){return n.length>0?i(n)/n.length:0}0&&(module.exports={mean});
1
+ "use strict";var o=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(n,r)=>{for(var e in r)o(n,e,{get:r[e],enumerable:!0})},k=(n,r,e,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of b(r))!p.call(n,t)&&t!==e&&o(n,t,{get:()=>r[t],enumerable:!(u=f(r,t))||u.enumerable});return n};var s=n=>k(o({},"__esModule",{value:!0}),n);var a={};c(a,{mean:()=>w});module.exports=s(a);function m(n){return typeof n=="number"?isFinite(n)?n:0:(n=Number(n),typeof n=="number"&&isFinite(n)?n:0)}function i(n){return n.reduce((r,e)=>r+m(e),0)}function w(n){return n.length>0?i(n)/n.length:0}0&&(module.exports={mean});
2
2
  //# sourceMappingURL=mean.min.cjs.map
package/mean.min.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mean.ts","../src/asNumber.ts","../src/sum.ts"],"sourcesContent":["import { sum } from \"./sum\";\n\n/**\n * Compute the mean (average) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function mean(numbers: unknown[]): number {\n return numbers.length > 0 ? sum(numbers) / numbers.length : 0;\n}\n","/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // No transformation needed if u is already a number.\n if (typeof u === \"number\" && isFinite(u)) {\n return u;\n }\n\n // Try to make into a number if possible.\n const n = Number(u);\n if (typeof n === \"number\" && isFinite(n)) {\n return n;\n }\n\n // Return 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n","import { asNumber } from \"./asNumber\";\n\n/**\n * Add all the numbers together in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function sum(numbers: unknown[]): number {\n return numbers.reduce((accumulated: number, current: unknown) => {\n return accumulated + asNumber(current);\n }, 0);\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,IAAA,eAAAC,EAAAH,GCGO,SAASI,EAASC,EAAoB,CAE3C,GAAI,OAAOA,GAAM,UAAY,SAASA,CAAC,EACrC,OAAOA,EAIT,IAAMC,EAAI,OAAOD,CAAC,EAClB,OAAI,OAAOC,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,CACT,CCZO,SAASC,EAAIC,EAA4B,CAC9C,OAAOA,EAAQ,OAAO,CAACC,EAAqBC,IACnCD,EAAcE,EAASD,CAAO,EACpC,CAAC,CACN,CFJO,SAASE,EAAKC,EAA4B,CAC/C,OAAOA,EAAQ,OAAS,EAAIC,EAAID,CAAO,EAAIA,EAAQ,OAAS,CAC9D","names":["mean_exports","__export","mean","__toCommonJS","asNumber","u","n","sum","numbers","accumulated","current","asNumber","mean","numbers","sum"]}
1
+ {"version":3,"sources":["../src/mean.ts","../src/asNumber.ts","../src/sum.ts"],"sourcesContent":["import { sum } from \"./sum\";\n\n/**\n * Compute the mean (average) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function mean(numbers: unknown[]): number {\n return numbers.length > 0 ? sum(numbers) / numbers.length : 0;\n}\n","/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // If u is a valid number, return it.\n if (typeof u === \"number\") {\n return isFinite(u) ? u : 0;\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 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n","import { asNumber } from \"./asNumber\";\n\n/**\n * Add all the numbers together in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function sum(numbers: unknown[]): number {\n return numbers.reduce((accumulated: number, current: unknown) => {\n return accumulated + asNumber(current);\n }, 0);\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,IAAA,eAAAC,EAAAH,GCGO,SAASI,EAASC,EAAoB,CAE3C,OAAI,OAAOA,GAAM,SACR,SAASA,CAAC,EAAIA,EAAI,GAI3BA,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,EACT,CCdO,SAASC,EAAIC,EAA4B,CAC9C,OAAOA,EAAQ,OAAO,CAACC,EAAqBC,IACnCD,EAAcE,EAASD,CAAO,EACpC,CAAC,CACN,CFJO,SAASE,EAAKC,EAA4B,CAC/C,OAAOA,EAAQ,OAAS,EAAIC,EAAID,CAAO,EAAIA,EAAQ,OAAS,CAC9D","names":["mean_exports","__export","mean","__toCommonJS","asNumber","u","sum","numbers","accumulated","current","asNumber","mean","numbers","sum"]}
package/mean.min.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function e(n){if(typeof n=="number"&&isFinite(n))return n;let r=Number(n);return typeof r=="number"&&isFinite(r)?r:0}function t(n){return n.reduce((r,u)=>r+e(u),0)}function b(n){return n.length>0?t(n)/n.length:0}export{b as mean};
1
+ function r(n){return typeof n=="number"?isFinite(n)?n:0:(n=Number(n),typeof n=="number"&&isFinite(n)?n:0)}function e(n){return n.reduce((t,o)=>t+r(o),0)}function b(n){return n.length>0?e(n)/n.length:0}export{b as mean};
2
2
  //# sourceMappingURL=mean.min.mjs.map
package/mean.min.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/asNumber.ts","../src/sum.ts","../src/mean.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // No transformation needed if u is already a number.\n if (typeof u === \"number\" && isFinite(u)) {\n return u;\n }\n\n // Try to make into a number if possible.\n const n = Number(u);\n if (typeof n === \"number\" && isFinite(n)) {\n return n;\n }\n\n // Return 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n","import { asNumber } from \"./asNumber\";\n\n/**\n * Add all the numbers together in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function sum(numbers: unknown[]): number {\n return numbers.reduce((accumulated: number, current: unknown) => {\n return accumulated + asNumber(current);\n }, 0);\n}\n","import { sum } from \"./sum\";\n\n/**\n * Compute the mean (average) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function mean(numbers: unknown[]): number {\n return numbers.length > 0 ? sum(numbers) / numbers.length : 0;\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAoB,CAE3C,GAAI,OAAOA,GAAM,UAAY,SAASA,CAAC,EACrC,OAAOA,EAIT,IAAMC,EAAI,OAAOD,CAAC,EAClB,OAAI,OAAOC,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,CACT,CCZO,SAASC,EAAIC,EAA4B,CAC9C,OAAOA,EAAQ,OAAO,CAACC,EAAqBC,IACnCD,EAAcE,EAASD,CAAO,EACpC,CAAC,CACN,CCJO,SAASE,EAAKC,EAA4B,CAC/C,OAAOA,EAAQ,OAAS,EAAIC,EAAID,CAAO,EAAIA,EAAQ,OAAS,CAC9D","names":["asNumber","u","n","sum","numbers","accumulated","current","asNumber","mean","numbers","sum"]}
1
+ {"version":3,"sources":["../src/asNumber.ts","../src/sum.ts","../src/mean.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // If u is a valid number, return it.\n if (typeof u === \"number\") {\n return isFinite(u) ? u : 0;\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 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n","import { asNumber } from \"./asNumber\";\n\n/**\n * Add all the numbers together in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function sum(numbers: unknown[]): number {\n return numbers.reduce((accumulated: number, current: unknown) => {\n return accumulated + asNumber(current);\n }, 0);\n}\n","import { sum } from \"./sum\";\n\n/**\n * Compute the mean (average) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function mean(numbers: unknown[]): number {\n return numbers.length > 0 ? sum(numbers) / numbers.length : 0;\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAoB,CAE3C,OAAI,OAAOA,GAAM,SACR,SAASA,CAAC,EAAIA,EAAI,GAI3BA,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,EACT,CCdO,SAASC,EAAIC,EAA4B,CAC9C,OAAOA,EAAQ,OAAO,CAACC,EAAqBC,IACnCD,EAAcE,EAASD,CAAO,EACpC,CAAC,CACN,CCJO,SAASE,EAAKC,EAA4B,CAC/C,OAAOA,EAAQ,OAAS,EAAIC,EAAID,CAAO,EAAIA,EAAQ,OAAS,CAC9D","names":["asNumber","u","sum","numbers","accumulated","current","asNumber","mean","numbers","sum"]}
package/mean.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  // src/asNumber.ts
2
2
  function asNumber(u) {
3
+ if (typeof u === "number") {
4
+ return isFinite(u) ? u : 0;
5
+ }
6
+ u = Number(u);
3
7
  if (typeof u === "number" && isFinite(u)) {
4
8
  return u;
5
9
  }
6
- const n = Number(u);
7
- if (typeof n === "number" && isFinite(n)) {
8
- return n;
9
- }
10
10
  return 0;
11
11
  }
12
12
 
package/median.cjs CHANGED
@@ -26,13 +26,13 @@ module.exports = __toCommonJS(median_exports);
26
26
 
27
27
  // src/asNumber.ts
28
28
  function asNumber(u) {
29
+ if (typeof u === "number") {
30
+ return isFinite(u) ? u : 0;
31
+ }
32
+ u = Number(u);
29
33
  if (typeof u === "number" && isFinite(u)) {
30
34
  return u;
31
35
  }
32
- const n = Number(u);
33
- if (typeof n === "number" && isFinite(n)) {
34
- return n;
35
- }
36
36
  return 0;
37
37
  }
38
38
 
package/median.min.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var c=(e,n)=>{for(var t in n)i(e,t,{get:n[t],enumerable:!0})},l=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of s(n))!f.call(e,r)&&r!==t&&i(e,r,{get:()=>n[r],enumerable:!(o=m(n,r))||o.enumerable});return e};var a=e=>l(i({},"__esModule",{value:!0}),e);var p={};c(p,{median:()=>b});module.exports=a(p);function u(e){if(typeof e=="number"&&isFinite(e))return e;let n=Number(e);return typeof n=="number"&&isFinite(n)?n:0}function b(e){if(e.length===0)return 0;let n=e.map(u).slice().sort(),t=Math.floor(n.length/2);if(n.length%2===1)return n[t];let o=n[t-1],r=n[t];return(o+r)/2}0&&(module.exports={median});
1
+ "use strict";var i=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var l=(n,e)=>{for(var r in e)i(n,r,{get:e[r],enumerable:!0})},a=(n,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of f(e))!s.call(n,t)&&t!==r&&i(n,t,{get:()=>e[t],enumerable:!(o=u(e,t))||o.enumerable});return n};var c=n=>a(i({},"__esModule",{value:!0}),n);var p={};l(p,{median:()=>b});module.exports=c(p);function m(n){return typeof n=="number"?isFinite(n)?n:0:(n=Number(n),typeof n=="number"&&isFinite(n)?n:0)}function b(n){if(n.length===0)return 0;let e=n.map(m).slice().sort(),r=Math.floor(e.length/2);if(e.length%2===1)return e[r];let o=e[r-1],t=e[r];return(o+t)/2}0&&(module.exports={median});
2
2
  //# sourceMappingURL=median.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/median.ts","../src/asNumber.ts"],"sourcesContent":["import { asNumber } from \"./asNumber\";\n\n/**\n * Compute the median (middle number) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function median(numbers: unknown[]): number {\n if (numbers.length === 0) {\n return 0;\n }\n\n // Create a copy with slice() to avoid mutating the original array.\n const sorted = numbers.map(asNumber).slice().sort();\n\n const middleIndex = Math.floor(sorted.length / 2);\n\n // Is odd length -> return middle number.\n if (sorted.length % 2 === 1) {\n return sorted[middleIndex];\n }\n\n // Is even length -> return mean of middle 2 numbers.\n const value1 = sorted[middleIndex - 1];\n const value2 = sorted[middleIndex];\n return (value1 + value2) / 2;\n}\n","/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // No transformation needed if u is already a number.\n if (typeof u === \"number\" && isFinite(u)) {\n return u;\n }\n\n // Try to make into a number if possible.\n const n = Number(u);\n if (typeof n === \"number\" && isFinite(n)) {\n return n;\n }\n\n // Return 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,IAAA,eAAAC,EAAAH,GCGO,SAASI,EAASC,EAAoB,CAE3C,GAAI,OAAOA,GAAM,UAAY,SAASA,CAAC,EACrC,OAAOA,EAIT,IAAM,EAAI,OAAOA,CAAC,EAClB,OAAI,OAAO,GAAM,UAAY,SAAS,CAAC,EAC9B,EAKF,CACT,CDZO,SAASC,EAAOC,EAA4B,CACjD,GAAIA,EAAQ,SAAW,EACrB,MAAO,GAIT,IAAMC,EAASD,EAAQ,IAAIE,CAAQ,EAAE,MAAM,EAAE,KAAK,EAE5CC,EAAc,KAAK,MAAMF,EAAO,OAAS,CAAC,EAGhD,GAAIA,EAAO,OAAS,IAAM,EACxB,OAAOA,EAAOE,CAAW,EAI3B,IAAMC,EAASH,EAAOE,EAAc,CAAC,EAC/BE,EAASJ,EAAOE,CAAW,EACjC,OAAQC,EAASC,GAAU,CAC7B","names":["median_exports","__export","median","__toCommonJS","asNumber","u","median","numbers","sorted","asNumber","middleIndex","value1","value2"]}
1
+ {"version":3,"sources":["../src/median.ts","../src/asNumber.ts"],"sourcesContent":["import { asNumber } from \"./asNumber\";\n\n/**\n * Compute the median (middle number) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function median(numbers: unknown[]): number {\n if (numbers.length === 0) {\n return 0;\n }\n\n // Create a copy with slice() to avoid mutating the original array.\n const sorted = numbers.map(asNumber).slice().sort();\n\n const middleIndex = Math.floor(sorted.length / 2);\n\n // Is odd length -> return middle number.\n if (sorted.length % 2 === 1) {\n return sorted[middleIndex];\n }\n\n // Is even length -> return mean of middle 2 numbers.\n const value1 = sorted[middleIndex - 1];\n const value2 = sorted[middleIndex];\n return (value1 + value2) / 2;\n}\n","/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // If u is a valid number, return it.\n if (typeof u === \"number\") {\n return isFinite(u) ? u : 0;\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 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,IAAA,eAAAC,EAAAH,GCGO,SAASI,EAASC,EAAoB,CAE3C,OAAI,OAAOA,GAAM,SACR,SAASA,CAAC,EAAIA,EAAI,GAI3BA,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,EACT,CDdO,SAASC,EAAOC,EAA4B,CACjD,GAAIA,EAAQ,SAAW,EACrB,MAAO,GAIT,IAAMC,EAASD,EAAQ,IAAIE,CAAQ,EAAE,MAAM,EAAE,KAAK,EAE5CC,EAAc,KAAK,MAAMF,EAAO,OAAS,CAAC,EAGhD,GAAIA,EAAO,OAAS,IAAM,EACxB,OAAOA,EAAOE,CAAW,EAI3B,IAAMC,EAASH,EAAOE,EAAc,CAAC,EAC/BE,EAASJ,EAAOE,CAAW,EACjC,OAAQC,EAASC,GAAU,CAC7B","names":["median_exports","__export","median","__toCommonJS","asNumber","u","median","numbers","sorted","asNumber","middleIndex","value1","value2"]}
package/median.min.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function r(e){if(typeof e=="number"&&isFinite(e))return e;let n=Number(e);return typeof n=="number"&&isFinite(n)?n:0}function s(e){if(e.length===0)return 0;let n=e.map(r).slice().sort(),t=Math.floor(n.length/2);if(n.length%2===1)return n[t];let o=n[t-1],i=n[t];return(o+i)/2}export{s as median};
1
+ function t(n){return typeof n=="number"?isFinite(n)?n:0:(n=Number(n),typeof n=="number"&&isFinite(n)?n:0)}function f(n){if(n.length===0)return 0;let e=n.map(t).slice().sort(),r=Math.floor(e.length/2);if(e.length%2===1)return e[r];let o=e[r-1],i=e[r];return(o+i)/2}export{f as median};
2
2
  //# sourceMappingURL=median.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/asNumber.ts","../src/median.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // No transformation needed if u is already a number.\n if (typeof u === \"number\" && isFinite(u)) {\n return u;\n }\n\n // Try to make into a number if possible.\n const n = Number(u);\n if (typeof n === \"number\" && isFinite(n)) {\n return n;\n }\n\n // Return 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n","import { asNumber } from \"./asNumber\";\n\n/**\n * Compute the median (middle number) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function median(numbers: unknown[]): number {\n if (numbers.length === 0) {\n return 0;\n }\n\n // Create a copy with slice() to avoid mutating the original array.\n const sorted = numbers.map(asNumber).slice().sort();\n\n const middleIndex = Math.floor(sorted.length / 2);\n\n // Is odd length -> return middle number.\n if (sorted.length % 2 === 1) {\n return sorted[middleIndex];\n }\n\n // Is even length -> return mean of middle 2 numbers.\n const value1 = sorted[middleIndex - 1];\n const value2 = sorted[middleIndex];\n return (value1 + value2) / 2;\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAoB,CAE3C,GAAI,OAAOA,GAAM,UAAY,SAASA,CAAC,EACrC,OAAOA,EAIT,IAAM,EAAI,OAAOA,CAAC,EAClB,OAAI,OAAO,GAAM,UAAY,SAAS,CAAC,EAC9B,EAKF,CACT,CCZO,SAASC,EAAOC,EAA4B,CACjD,GAAIA,EAAQ,SAAW,EACrB,MAAO,GAIT,IAAMC,EAASD,EAAQ,IAAIE,CAAQ,EAAE,MAAM,EAAE,KAAK,EAE5CC,EAAc,KAAK,MAAMF,EAAO,OAAS,CAAC,EAGhD,GAAIA,EAAO,OAAS,IAAM,EACxB,OAAOA,EAAOE,CAAW,EAI3B,IAAMC,EAASH,EAAOE,EAAc,CAAC,EAC/BE,EAASJ,EAAOE,CAAW,EACjC,OAAQC,EAASC,GAAU,CAC7B","names":["asNumber","u","median","numbers","sorted","asNumber","middleIndex","value1","value2"]}
1
+ {"version":3,"sources":["../src/asNumber.ts","../src/median.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown): number {\n // If u is a valid number, return it.\n if (typeof u === \"number\") {\n return isFinite(u) ? u : 0;\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 0 for everything else. This is usually ok if want to just ignore\n // all other noise.\n return 0;\n}\n","import { asNumber } from \"./asNumber\";\n\n/**\n * Compute the median (middle number) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function median(numbers: unknown[]): number {\n if (numbers.length === 0) {\n return 0;\n }\n\n // Create a copy with slice() to avoid mutating the original array.\n const sorted = numbers.map(asNumber).slice().sort();\n\n const middleIndex = Math.floor(sorted.length / 2);\n\n // Is odd length -> return middle number.\n if (sorted.length % 2 === 1) {\n return sorted[middleIndex];\n }\n\n // Is even length -> return mean of middle 2 numbers.\n const value1 = sorted[middleIndex - 1];\n const value2 = sorted[middleIndex];\n return (value1 + value2) / 2;\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAoB,CAE3C,OAAI,OAAOA,GAAM,SACR,SAASA,CAAC,EAAIA,EAAI,GAI3BA,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKF,EACT,CCdO,SAASC,EAAOC,EAA4B,CACjD,GAAIA,EAAQ,SAAW,EACrB,MAAO,GAIT,IAAMC,EAASD,EAAQ,IAAIE,CAAQ,EAAE,MAAM,EAAE,KAAK,EAE5CC,EAAc,KAAK,MAAMF,EAAO,OAAS,CAAC,EAGhD,GAAIA,EAAO,OAAS,IAAM,EACxB,OAAOA,EAAOE,CAAW,EAI3B,IAAMC,EAASH,EAAOE,EAAc,CAAC,EAC/BE,EAASJ,EAAOE,CAAW,EACjC,OAAQC,EAASC,GAAU,CAC7B","names":["asNumber","u","median","numbers","sorted","asNumber","middleIndex","value1","value2"]}
package/median.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  // src/asNumber.ts
2
2
  function asNumber(u) {
3
+ if (typeof u === "number") {
4
+ return isFinite(u) ? u : 0;
5
+ }
6
+ u = Number(u);
3
7
  if (typeof u === "number" && isFinite(u)) {
4
8
  return u;
5
9
  }
6
- const n = Number(u);
7
- if (typeof n === "number" && isFinite(n)) {
8
- return n;
9
- }
10
10
  return 0;
11
11
  }
12
12