@choksheak/ts-utils 0.3.4 → 0.3.5

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 (72) hide show
  1. package/README.md +9 -3
  2. package/asNumber.cjs +3 -3
  3. package/asNumber.d.mts +1 -1
  4. package/asNumber.d.ts +1 -1
  5. package/asNumber.min.cjs +1 -1
  6. package/asNumber.min.cjs.map +1 -1
  7. package/asNumber.min.mjs +1 -1
  8. package/asNumber.min.mjs.map +1 -1
  9. package/asNumber.mjs +3 -3
  10. package/kvStore.cjs +230 -239
  11. package/kvStore.d.mts +142 -44
  12. package/kvStore.d.ts +142 -44
  13. package/kvStore.min.cjs +1 -1
  14. package/kvStore.min.cjs.map +1 -1
  15. package/kvStore.min.mjs +1 -1
  16. package/kvStore.min.mjs.map +1 -1
  17. package/kvStore.mjs +229 -237
  18. package/localStore.cjs +187 -186
  19. package/localStore.d.mts +135 -34
  20. package/localStore.d.ts +135 -34
  21. package/localStore.min.cjs +1 -1
  22. package/localStore.min.cjs.map +1 -1
  23. package/localStore.min.mjs +1 -1
  24. package/localStore.min.mjs.map +1 -1
  25. package/localStore.mjs +186 -184
  26. package/mean.cjs +3 -3
  27. package/mean.min.cjs +1 -1
  28. package/mean.min.cjs.map +1 -1
  29. package/mean.min.mjs +1 -1
  30. package/mean.min.mjs.map +1 -1
  31. package/mean.mjs +3 -3
  32. package/median.cjs +4 -4
  33. package/median.min.cjs +1 -1
  34. package/median.min.cjs.map +1 -1
  35. package/median.min.mjs +1 -1
  36. package/median.min.mjs.map +1 -1
  37. package/median.mjs +4 -4
  38. package/package.json +2 -34
  39. package/safeBtoa.d.mts +7 -0
  40. package/safeBtoa.d.ts +7 -0
  41. package/safeBtoa.min.cjs.map +1 -1
  42. package/safeBtoa.min.mjs.map +1 -1
  43. package/sum.cjs +3 -3
  44. package/sum.min.cjs +1 -1
  45. package/sum.min.cjs.map +1 -1
  46. package/sum.min.mjs +1 -1
  47. package/sum.min.mjs.map +1 -1
  48. package/sum.mjs +3 -3
  49. package/timer.cjs +19 -24
  50. package/timer.d.mts +9 -6
  51. package/timer.d.ts +9 -6
  52. package/timer.min.cjs +1 -1
  53. package/timer.min.cjs.map +1 -1
  54. package/timer.min.mjs +1 -1
  55. package/timer.min.mjs.map +1 -1
  56. package/timer.mjs +19 -23
  57. package/safeParseFloat.cjs +0 -33
  58. package/safeParseFloat.d.mts +0 -6
  59. package/safeParseFloat.d.ts +0 -6
  60. package/safeParseFloat.min.cjs +0 -2
  61. package/safeParseFloat.min.cjs.map +0 -1
  62. package/safeParseFloat.min.mjs +0 -2
  63. package/safeParseFloat.min.mjs.map +0 -1
  64. package/safeParseFloat.mjs +0 -8
  65. package/safeParseInt.cjs +0 -33
  66. package/safeParseInt.d.mts +0 -6
  67. package/safeParseInt.d.ts +0 -6
  68. package/safeParseInt.min.cjs +0 -2
  69. package/safeParseInt.min.cjs.map +0 -1
  70. package/safeParseInt.min.mjs +0 -2
  71. package/safeParseInt.min.mjs.map +0 -1
  72. package/safeParseInt.mjs +0 -8
package/safeBtoa.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  /**
2
2
  * Base 64 encode the given input string, but safely.
3
+ *
4
+ * Why using btoa() directly might not always work:
5
+ * btoa() expects a "binary string" where each character is represented by a
6
+ * single byte (0-255). Modern JavaScript strings, however, are encoded in
7
+ * UTF-16 and can contain characters that require more than one byte (i.e.,
8
+ * characters outside the Latin-1 range, such as those with code points greater
9
+ * than 255).
3
10
  */
4
11
  declare function safeBtoa(input: string): string;
5
12
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/safeBtoa.ts"],"sourcesContent":["/**\n * Base 64 encode the given input string, but safely.\n */\nexport function safeBtoa(input: string): string {\n // Convert the string to a UTF-8 encoded binary-safe string\n const utf8Bytes = new TextEncoder().encode(input);\n\n // Convert the binary data to a string for btoa\n const binaryString = Array.from(utf8Bytes)\n .map((byte) => String.fromCodePoint(byte))\n .join(\"\");\n\n // Use btoa to encode the binary-safe string\n return btoa(binaryString);\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,IAAA,eAAAC,EAAAH,GAGO,SAASE,EAASE,EAAuB,CAE9C,IAAMC,EAAY,IAAI,YAAY,EAAE,OAAOD,CAAK,EAG1CE,EAAe,MAAM,KAAKD,CAAS,EACtC,IAAKE,GAAS,OAAO,cAAcA,CAAI,CAAC,EACxC,KAAK,EAAE,EAGV,OAAO,KAAKD,CAAY,CAC1B","names":["safeBtoa_exports","__export","safeBtoa","__toCommonJS","input","utf8Bytes","binaryString","byte"]}
1
+ {"version":3,"sources":["../src/safeBtoa.ts"],"sourcesContent":["/**\n * Base 64 encode the given input string, but safely.\n *\n * Why using btoa() directly might not always work:\n * btoa() expects a \"binary string\" where each character is represented by a\n * single byte (0-255). Modern JavaScript strings, however, are encoded in\n * UTF-16 and can contain characters that require more than one byte (i.e.,\n * characters outside the Latin-1 range, such as those with code points greater\n * than 255).\n */\nexport function safeBtoa(input: string): string {\n // Convert the string to a UTF-8 encoded binary-safe string\n const utf8Bytes = new TextEncoder().encode(input);\n\n // Convert the binary data to a string for btoa\n const binaryString = Array.from(utf8Bytes)\n .map((byte) => String.fromCodePoint(byte))\n .join(\"\");\n\n // Use btoa to encode the binary-safe string\n return btoa(binaryString);\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,IAAA,eAAAC,EAAAH,GAUO,SAASE,EAASE,EAAuB,CAE9C,IAAMC,EAAY,IAAI,YAAY,EAAE,OAAOD,CAAK,EAG1CE,EAAe,MAAM,KAAKD,CAAS,EACtC,IAAKE,GAAS,OAAO,cAAcA,CAAI,CAAC,EACxC,KAAK,EAAE,EAGV,OAAO,KAAKD,CAAY,CAC1B","names":["safeBtoa_exports","__export","safeBtoa","__toCommonJS","input","utf8Bytes","binaryString","byte"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/safeBtoa.ts"],"sourcesContent":["/**\n * Base 64 encode the given input string, but safely.\n */\nexport function safeBtoa(input: string): string {\n // Convert the string to a UTF-8 encoded binary-safe string\n const utf8Bytes = new TextEncoder().encode(input);\n\n // Convert the binary data to a string for btoa\n const binaryString = Array.from(utf8Bytes)\n .map((byte) => String.fromCodePoint(byte))\n .join(\"\");\n\n // Use btoa to encode the binary-safe string\n return btoa(binaryString);\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAuB,CAE9C,IAAMC,EAAY,IAAI,YAAY,EAAE,OAAOD,CAAK,EAG1CE,EAAe,MAAM,KAAKD,CAAS,EACtC,IAAKE,GAAS,OAAO,cAAcA,CAAI,CAAC,EACxC,KAAK,EAAE,EAGV,OAAO,KAAKD,CAAY,CAC1B","names":["safeBtoa","input","utf8Bytes","binaryString","byte"]}
1
+ {"version":3,"sources":["../src/safeBtoa.ts"],"sourcesContent":["/**\n * Base 64 encode the given input string, but safely.\n *\n * Why using btoa() directly might not always work:\n * btoa() expects a \"binary string\" where each character is represented by a\n * single byte (0-255). Modern JavaScript strings, however, are encoded in\n * UTF-16 and can contain characters that require more than one byte (i.e.,\n * characters outside the Latin-1 range, such as those with code points greater\n * than 255).\n */\nexport function safeBtoa(input: string): string {\n // Convert the string to a UTF-8 encoded binary-safe string\n const utf8Bytes = new TextEncoder().encode(input);\n\n // Convert the binary data to a string for btoa\n const binaryString = Array.from(utf8Bytes)\n .map((byte) => String.fromCodePoint(byte))\n .join(\"\");\n\n // Use btoa to encode the binary-safe string\n return btoa(binaryString);\n}\n"],"mappings":"AAUO,SAASA,EAASC,EAAuB,CAE9C,IAAMC,EAAY,IAAI,YAAY,EAAE,OAAOD,CAAK,EAG1CE,EAAe,MAAM,KAAKD,CAAS,EACtC,IAAKE,GAAS,OAAO,cAAcA,CAAI,CAAC,EACxC,KAAK,EAAE,EAGV,OAAO,KAAKD,CAAY,CAC1B","names":["safeBtoa","input","utf8Bytes","binaryString","byte"]}
package/sum.cjs CHANGED
@@ -25,15 +25,15 @@ __export(sum_exports, {
25
25
  module.exports = __toCommonJS(sum_exports);
26
26
 
27
27
  // src/asNumber.ts
28
- function asNumber(u) {
28
+ function asNumber(u, defaultValue = 0) {
29
29
  if (typeof u === "number") {
30
- return isFinite(u) ? u : 0;
30
+ return isFinite(u) ? u : defaultValue;
31
31
  }
32
32
  u = Number(u);
33
33
  if (typeof u === "number" && isFinite(u)) {
34
34
  return u;
35
35
  }
36
- return 0;
36
+ return defaultValue;
37
37
  }
38
38
 
39
39
  // src/sum.ts
package/sum.min.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var u=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var p=(n,r)=>{for(var e in r)u(n,e,{get:r[e],enumerable:!0})},s=(n,r,e,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of b(r))!f.call(n,t)&&t!==e&&u(n,t,{get:()=>r[t],enumerable:!(i=o(r,t))||i.enumerable});return n};var c=n=>s(u({},"__esModule",{value:!0}),n);var w={};p(w,{sum:()=>k});module.exports=c(w);function m(n){return typeof n=="number"?isFinite(n)?n:0:(n=Number(n),typeof n=="number"&&isFinite(n)?n:0)}function k(n){return n.reduce((r,e)=>r+m(e),0)}0&&(module.exports={sum});
1
+ "use strict";var i=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var p=(n,r)=>{for(var e in r)i(n,e,{get:r[e],enumerable:!0})},s=(n,r,e,m)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of b(r))!f.call(n,t)&&t!==e&&i(n,t,{get:()=>r[t],enumerable:!(m=u(r,t))||m.enumerable});return n};var c=n=>s(i({},"__esModule",{value:!0}),n);var w={};p(w,{sum:()=>k});module.exports=c(w);function o(n,r=0){return typeof n=="number"?isFinite(n)?n:r:(n=Number(n),typeof n=="number"&&isFinite(n)?n:r)}function k(n){return n.reduce((r,e)=>r+o(e),0)}0&&(module.exports={sum});
2
2
  //# sourceMappingURL=sum.min.cjs.map
package/sum.min.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sum.ts","../src/asNumber.ts"],"sourcesContent":["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","/**\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,SAAAE,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,EAAIC,EAA4B,CAC9C,OAAOA,EAAQ,OAAO,CAACC,EAAqBC,IACnCD,EAAcE,EAASD,CAAO,EACpC,CAAC,CACN","names":["sum_exports","__export","sum","__toCommonJS","asNumber","u","sum","numbers","accumulated","current","asNumber"]}
1
+ {"version":3,"sources":["../src/sum.ts","../src/asNumber.ts"],"sourcesContent":["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","/**\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"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,SAAAE,IAAA,eAAAC,EAAAH,GCGO,SAASI,EAASC,EAAYC,EAAe,EAAW,CAE7D,OAAI,OAAOD,GAAM,SACR,SAASA,CAAC,EAAIA,EAAIC,GAI3BD,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKFC,EACT,CDdO,SAASC,EAAIC,EAA4B,CAC9C,OAAOA,EAAQ,OAAO,CAACC,EAAqBC,IACnCD,EAAcE,EAASD,CAAO,EACpC,CAAC,CACN","names":["sum_exports","__export","sum","__toCommonJS","asNumber","u","defaultValue","sum","numbers","accumulated","current","asNumber"]}
package/sum.min.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function r(n){return typeof n=="number"?isFinite(n)?n:0:(n=Number(n),typeof n=="number"&&isFinite(n)?n:0)}function m(n){return n.reduce((e,t)=>e+r(t),0)}export{m as sum};
1
+ function e(n,r=0){return typeof n=="number"?isFinite(n)?n:r:(n=Number(n),typeof n=="number"&&isFinite(n)?n:r)}function o(n){return n.reduce((r,t)=>r+e(t),0)}export{o as sum};
2
2
  //# sourceMappingURL=sum.min.mjs.map
package/sum.min.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/asNumber.ts","../src/sum.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"],"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","names":["asNumber","u","sum","numbers","accumulated","current","asNumber"]}
1
+ {"version":3,"sources":["../src/asNumber.ts","../src/sum.ts"],"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","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":"AAGO,SAASA,EAASC,EAAYC,EAAe,EAAW,CAE7D,OAAI,OAAOD,GAAM,SACR,SAASA,CAAC,EAAIA,EAAIC,GAI3BD,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKFC,EACT,CCdO,SAASC,EAAIC,EAA4B,CAC9C,OAAOA,EAAQ,OAAO,CAACC,EAAqBC,IACnCD,EAAcE,EAASD,CAAO,EACpC,CAAC,CACN","names":["asNumber","u","defaultValue","sum","numbers","accumulated","current","asNumber"]}
package/sum.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  // src/asNumber.ts
2
- function asNumber(u) {
2
+ function asNumber(u, defaultValue = 0) {
3
3
  if (typeof u === "number") {
4
- return isFinite(u) ? u : 0;
4
+ return isFinite(u) ? u : defaultValue;
5
5
  }
6
6
  u = Number(u);
7
7
  if (typeof u === "number" && isFinite(u)) {
8
8
  return u;
9
9
  }
10
- return 0;
10
+ return defaultValue;
11
11
  }
12
12
 
13
13
  // src/sum.ts
package/timer.cjs CHANGED
@@ -20,7 +20,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/timer.ts
21
21
  var timer_exports = {};
22
22
  __export(timer_exports, {
23
- Timer: () => Timer,
24
23
  timer: () => timer
25
24
  });
26
25
  module.exports = __toCommonJS(timer_exports);
@@ -158,32 +157,28 @@ function elapsed(ms) {
158
157
  }
159
158
 
160
159
  // src/timer.ts
161
- var Timer = class {
162
- startMs;
163
- endMs = 0;
164
- constructor() {
165
- this.startMs = Date.now();
166
- }
167
- stop() {
168
- this.endMs = Date.now();
169
- }
170
- restart() {
171
- this.endMs = 0;
172
- this.startMs = Date.now();
173
- }
174
- elapsedMs() {
175
- const stopMs = this.endMs || Date.now();
176
- return stopMs - this.startMs;
177
- }
178
- toString() {
179
- return elapsed(this.elapsedMs());
180
- }
181
- };
182
160
  function timer() {
183
- return new Timer();
161
+ const obj = {
162
+ startMs: Date.now(),
163
+ endMs: 0,
164
+ stop() {
165
+ obj.endMs = Date.now();
166
+ },
167
+ restart() {
168
+ obj.endMs = 0;
169
+ obj.startMs = Date.now();
170
+ },
171
+ elapsedMs() {
172
+ const stopMs = obj.endMs || Date.now();
173
+ return stopMs - obj.startMs;
174
+ },
175
+ toString() {
176
+ return elapsed(obj.elapsedMs());
177
+ }
178
+ };
179
+ return obj;
184
180
  }
185
181
  // Annotate the CommonJS export names for ESM import in node:
186
182
  0 && (module.exports = {
187
- Timer,
188
183
  timer
189
184
  });
package/timer.d.mts CHANGED
@@ -1,13 +1,16 @@
1
- declare class Timer {
1
+ /**
2
+ * Create a new timer and starts the timing right away. Returns a closed object
3
+ * instead of a class to make sure the variables are bound correctly.
4
+ */
5
+ declare function timer(): {
2
6
  startMs: number;
3
7
  endMs: number;
4
- constructor();
5
8
  stop(): void;
6
9
  restart(): void;
7
10
  elapsedMs(): number;
8
11
  toString(): string;
9
- }
10
- /** Shorthand for `new Timer()` to make this easier to use. */
11
- declare function timer(): Timer;
12
+ };
13
+ /** Defines the type of the Timer object. */
14
+ type Timer = ReturnType<typeof timer>;
12
15
 
13
- export { Timer, timer };
16
+ export { type Timer, timer };
package/timer.d.ts CHANGED
@@ -1,13 +1,16 @@
1
- declare class Timer {
1
+ /**
2
+ * Create a new timer and starts the timing right away. Returns a closed object
3
+ * instead of a class to make sure the variables are bound correctly.
4
+ */
5
+ declare function timer(): {
2
6
  startMs: number;
3
7
  endMs: number;
4
- constructor();
5
8
  stop(): void;
6
9
  restart(): void;
7
10
  elapsedMs(): number;
8
11
  toString(): string;
9
- }
10
- /** Shorthand for `new Timer()` to make this easier to use. */
11
- declare function timer(): Timer;
12
+ };
13
+ /** Defines the type of the Timer object. */
14
+ type Timer = ReturnType<typeof timer>;
12
15
 
13
- export { Timer, timer };
16
+ export { type Timer, timer };
package/timer.min.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var D=(t,r)=>{for(var o in r)c(t,o,{get:r[o],enumerable:!0})},M=(t,r,o,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of m(r))!h.call(t,n)&&n!==o&&c(t,n,{get:()=>r[n],enumerable:!(i=d(r,n))||i.enumerable});return t};var g=t=>M(c({},"__esModule",{value:!0}),t);var A={};D(A,{Timer:()=>l,timer:()=>O});module.exports=g(A);var _=["days","hours","minutes","seconds","milliseconds"],T={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 E(t){return t=="short"?"shorts":t==="long"?"longs":t}function w(t){return t==="narrow"?"":" "}function R(t){return t==="narrow"?" ":", "}function P(t,r){if(t===0)return r=r??"milliseconds",{[r]:0};let o={};for(let i=0;i<1;i++){let n=Math.floor(t/1e3),a=t-n*1e3;if(a>0&&(o.milliseconds=a),n===0)break;let e=Math.floor(n/60);if(n-=e*60,n>0&&(o.seconds=n),e===0)break;let s=Math.floor(e/60);if(e-=s*60,e>0&&(o.minutes=e),s===0)break;let u=Math.floor(s/24);s-=u*24,s>0&&(o.hours=s),u>0&&(o.days=u)}return o}function U(t,r){r=r??"short";let o=E(r),i=w(r),n=[];for(let e of _){let s=t[e];if(s===void 0)continue;let u=T[e],f=s===1?u[r]:u[o];n.push(s+i+f)}let a=R(r);return n.join(a)}function N(t,r){let o=P(t,r?.durationTypeForZero);return U(o,r?.style)}function p(t){return t>6e4?N(t):t>100?`${(t/1e3).toFixed(3)}s`:t+"ms"}var l=class{startMs;endMs=0;constructor(){this.startMs=Date.now()}stop(){this.endMs=Date.now()}restart(){this.endMs=0,this.startMs=Date.now()}elapsedMs(){return(this.endMs||Date.now())-this.startMs}toString(){return p(this.elapsedMs())}};function O(){return new l}0&&(module.exports={Timer,timer});
1
+ "use strict";var l=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var D=(o,r)=>{for(var n in r)l(o,n,{get:r[n],enumerable:!0})},M=(o,r,n,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of d(r))!m.call(o,t)&&t!==n&&l(o,t,{get:()=>r[t],enumerable:!(i=p(r,t))||i.enumerable});return o};var h=o=>M(l({},"__esModule",{value:!0}),o);var O={};D(O,{timer:()=>N});module.exports=h(O);var T=["days","hours","minutes","seconds","milliseconds"],_={days:{short:"day",shorts:"days",long:"day",longs:"days",narrow:"d"},hours:{short:"hr",shorts:"hrs",long:"hour",longs:"hours",narrow:"h"},minutes:{short:"min",shorts:"mins",long:"minute",longs:"minutes",narrow:"m"},seconds:{short:"sec",shorts:"secs",long:"second",longs:"seconds",narrow:"s"},milliseconds:{short:"ms",shorts:"ms",long:"millisecond",longs:"milliseconds",narrow:"ms"}};function b(o){return o=="short"?"shorts":o==="long"?"longs":o}function E(o){return o==="narrow"?"":" "}function R(o){return o==="narrow"?" ":", "}function w(o,r){if(o===0)return r=r??"milliseconds",{[r]:0};let n={};for(let i=0;i<1;i++){let t=Math.floor(o/1e3),a=o-t*1e3;if(a>0&&(n.milliseconds=a),t===0)break;let e=Math.floor(t/60);if(t-=e*60,t>0&&(n.seconds=t),e===0)break;let s=Math.floor(e/60);if(e-=s*60,e>0&&(n.minutes=e),s===0)break;let u=Math.floor(s/24);s-=u*24,s>0&&(n.hours=s),u>0&&(n.days=u)}return n}function P(o,r){r=r??"short";let n=b(r),i=E(r),t=[];for(let e of T){let s=o[e];if(s===void 0)continue;let u=_[e],f=s===1?u[r]:u[n];t.push(s+i+f)}let a=R(r);return t.join(a)}function U(o,r){let n=w(o,r?.durationTypeForZero);return P(n,r?.style)}function c(o){return o>6e4?U(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}function N(){let o={startMs:Date.now(),endMs:0,stop(){o.endMs=Date.now()},restart(){o.endMs=0,o.startMs=Date.now()},elapsedMs(){return(o.endMs||Date.now())-o.startMs},toString(){return c(o.elapsedMs())}};return o}0&&(module.exports={timer});
2
2
  //# sourceMappingURL=timer.min.cjs.map
package/timer.min.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/timer.ts","../src/duration.ts"],"sourcesContent":["import { elapsed } from \"./duration\";\n\nexport class Timer {\n public startMs: number;\n public endMs = 0;\n\n public constructor() {\n this.startMs = Date.now();\n }\n\n public stop(): void {\n this.endMs = Date.now();\n }\n\n public restart(): void {\n this.endMs = 0;\n this.startMs = Date.now();\n }\n\n public elapsedMs(): number {\n const stopMs = this.endMs || Date.now();\n return stopMs - this.startMs;\n }\n\n public toString(): string {\n return elapsed(this.elapsedMs());\n }\n}\n\n/** Shorthand for `new Timer()` to make this easier to use. */\nexport function timer(): Timer {\n return new Timer();\n}\n","/**\n * Bunch of miscellaneous constants and utility functions related to handling\n * date and time durations.\n *\n * Note that month and year do not have fixed durations, and hence are excluded\n * from this file. Weeks have fixed durations, but are excluded because we\n * use days as the max duration supported.\n */\n\nimport {\n HOURS_PER_DAY,\n MINUTES_PER_HOUR,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n SECONDS_PER_MINUTE,\n} from \"./timeConstants\";\n\nexport type Duration = {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\n/**\n * One of: days, hours, minutes, seconds, milliseconds\n */\nexport type DurationType = keyof Duration;\n\n/**\n * Order in which the duration type appears in the duration string.\n */\nexport const DURATION_TYPE_SEQUENCE: DurationType[] = [\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\n/**\n * Follows the same format as Intl.DurationFormat.prototype.format().\n *\n * Short: 1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, 9 ns\n * Long: 1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds,\n * 7 milliseconds, 8 microseconds, 9 nanoseconds\n * Narrow: 1y 2mo 3w 3d 4h 5m 6s 7ms 8μs 9ns\n */\nexport type DurationStyle = \"short\" | \"long\" | \"narrow\";\n\nexport type DurationSuffixMap = {\n short: string;\n shorts: string;\n long: string;\n longs: string;\n narrow: string;\n};\n\nexport type DurationSuffixType = keyof DurationSuffixMap;\n\nexport const DURATION_STYLE_SUFFIX_MAP: Record<\n DurationType,\n DurationSuffixMap\n> = {\n days: {\n short: \"day\",\n shorts: \"days\",\n long: \"day\",\n longs: \"days\",\n narrow: \"d\",\n },\n hours: {\n short: \"hr\",\n shorts: \"hrs\",\n long: \"hour\",\n longs: \"hours\",\n narrow: \"h\",\n },\n minutes: {\n short: \"min\",\n shorts: \"mins\",\n long: \"minute\",\n longs: \"minutes\",\n narrow: \"m\",\n },\n seconds: {\n short: \"sec\",\n shorts: \"secs\",\n long: \"second\",\n longs: \"seconds\",\n narrow: \"s\",\n },\n milliseconds: {\n short: \"ms\",\n shorts: \"ms\",\n long: \"millisecond\",\n longs: \"milliseconds\",\n narrow: \"ms\",\n },\n};\n\nfunction getDurationStyleForPlural(style: DurationStyle): DurationSuffixType {\n return style == \"short\" ? \"shorts\" : style === \"long\" ? \"longs\" : style;\n}\n\nfunction getValueAndUnitSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \"\" : \" \";\n}\n\nfunction getDurationTypeSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \" \" : \", \";\n}\n\n/**\n * Convert a milliseconds duration into a Duration object. If the given ms is\n * zero, then return an object with a single field of zero with duration type\n * of durationTypeForZero.\n *\n * @param durationTypeForZero Defaults to 'milliseconds'\n */\nexport function msToDuration(\n ms: number,\n durationTypeForZero?: DurationType,\n): Duration {\n if (ms === 0) {\n durationTypeForZero = durationTypeForZero ?? \"milliseconds\";\n return { [durationTypeForZero]: 0 };\n }\n\n const duration: Duration = {};\n\n for (let i = 0; i < 1; i++) {\n let seconds = Math.floor(ms / MS_PER_SECOND);\n const millis = ms - seconds * MS_PER_SECOND;\n\n if (millis > 0) {\n duration[\"milliseconds\"] = millis;\n }\n\n if (seconds === 0) {\n break;\n }\n\n let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);\n seconds -= minutes * SECONDS_PER_MINUTE;\n\n if (seconds > 0) {\n duration[\"seconds\"] = seconds;\n }\n\n if (minutes === 0) {\n break;\n }\n\n let hours = Math.floor(minutes / MINUTES_PER_HOUR);\n minutes -= hours * MINUTES_PER_HOUR;\n\n if (minutes > 0) {\n duration[\"minutes\"] = minutes;\n }\n\n if (hours === 0) {\n break;\n }\n\n const days = Math.floor(hours / HOURS_PER_DAY);\n hours -= days * HOURS_PER_DAY;\n\n if (hours > 0) {\n duration[\"hours\"] = hours;\n }\n\n if (days > 0) {\n duration[\"days\"] = days;\n }\n }\n\n return duration;\n}\n\n/**\n * Returns the number of milliseconds for the given duration.\n */\nexport function durationToMs(duration: Duration): number {\n const daysMs = (duration.days ?? 0) * MS_PER_DAY;\n const hoursMs = (duration.hours ?? 0) * MS_PER_HOUR;\n const minsMs = (duration.minutes ?? 0) * MS_PER_MINUTE;\n const secsMs = (duration.seconds ?? 0) * MS_PER_SECOND;\n const msMs = duration.milliseconds ?? 0;\n\n return daysMs + hoursMs + minsMs + secsMs + msMs;\n}\n\n/**\n * Convenience function to return a duration given an ms or Duration.\n */\nexport function durationOrMsToMs(duration: number | Duration): number {\n return typeof duration === \"number\" ? duration : durationToMs(duration);\n}\n\n/**\n * Format a given Duration object into a string. If the object has no fields,\n * then returns an empty string.\n *\n * @param style Defaults to 'short'\n */\nexport function formatDuration(duration: Duration, style?: DurationStyle) {\n style = style ?? \"short\";\n const stylePlural = getDurationStyleForPlural(style);\n\n const space = getValueAndUnitSeparator(style);\n\n const a: string[] = [];\n\n for (const unit of DURATION_TYPE_SEQUENCE) {\n const value = duration[unit];\n if (value === undefined) continue;\n\n const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];\n const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];\n a.push(value + space + suffix);\n }\n\n const separator = getDurationTypeSeparator(style);\n return a.join(separator);\n}\n\n/**\n * Convert a millisecond duration into a human-readable duration string.\n *\n * @param options.durationTypeForZero - Defaults to 'milliseconds'\n * @param options.style - Defaults to 'short'\n */\nexport function readableDuration(\n ms: number,\n options?: { durationTypeForZero?: DurationType; style?: DurationStyle },\n): string {\n const duration = msToDuration(ms, options?.durationTypeForZero);\n\n return formatDuration(duration, options?.style);\n}\n\n/** A shortened duration string useful for logging timings. */\nexport function elapsed(ms: number): string {\n // Use long format for 1 minute or over.\n if (ms > MS_PER_MINUTE) {\n return readableDuration(ms);\n }\n\n // Use seconds format for over 100ms.\n if (ms > 100) {\n return `${(ms / 1000).toFixed(3)}s`;\n }\n\n // Use milliseconds format.\n return ms + \"ms\";\n}\n"],"mappings":"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","names":["timer_exports","__export","Timer","timer","__toCommonJS","DURATION_TYPE_SEQUENCE","DURATION_STYLE_SUFFIX_MAP","getDurationStyleForPlural","style","getValueAndUnitSeparator","getDurationTypeSeparator","msToDuration","ms","durationTypeForZero","duration","seconds","millis","minutes","hours","days","formatDuration","duration","style","stylePlural","getDurationStyleForPlural","space","getValueAndUnitSeparator","a","unit","DURATION_TYPE_SEQUENCE","value","suffixMap","DURATION_STYLE_SUFFIX_MAP","suffix","separator","getDurationTypeSeparator","readableDuration","ms","options","msToDuration","elapsed","Timer","elapsed","timer"]}
1
+ {"version":3,"sources":["../src/timer.ts","../src/duration.ts"],"sourcesContent":["import { elapsed } from \"./duration\";\n\n/**\n * Create a new timer and starts the timing right away. Returns a closed object\n * instead of a class to make sure the variables are bound correctly.\n */\nexport function timer() {\n const obj = {\n startMs: Date.now(),\n endMs: 0,\n\n stop(): void {\n obj.endMs = Date.now();\n },\n\n restart(): void {\n obj.endMs = 0;\n obj.startMs = Date.now();\n },\n\n elapsedMs(): number {\n const stopMs = obj.endMs || Date.now();\n return stopMs - obj.startMs;\n },\n\n toString(): string {\n return elapsed(obj.elapsedMs());\n },\n };\n\n return obj;\n}\n\n/** Defines the type of the Timer object. */\nexport type Timer = ReturnType<typeof timer>;\n","/**\n * Bunch of miscellaneous constants and utility functions related to handling\n * date and time durations.\n *\n * Note that month and year do not have fixed durations, and hence are excluded\n * from this file. Weeks have fixed durations, but are excluded because we\n * use days as the max duration supported.\n */\n\nimport {\n HOURS_PER_DAY,\n MINUTES_PER_HOUR,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n SECONDS_PER_MINUTE,\n} from \"./timeConstants\";\n\nexport type Duration = {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\n/**\n * One of: days, hours, minutes, seconds, milliseconds\n */\nexport type DurationType = keyof Duration;\n\n/**\n * Order in which the duration type appears in the duration string.\n */\nexport const DURATION_TYPE_SEQUENCE: DurationType[] = [\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\n/**\n * Follows the same format as Intl.DurationFormat.prototype.format().\n *\n * Short: 1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, 9 ns\n * Long: 1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds,\n * 7 milliseconds, 8 microseconds, 9 nanoseconds\n * Narrow: 1y 2mo 3w 3d 4h 5m 6s 7ms 8μs 9ns\n */\nexport type DurationStyle = \"short\" | \"long\" | \"narrow\";\n\nexport type DurationSuffixMap = {\n short: string;\n shorts: string;\n long: string;\n longs: string;\n narrow: string;\n};\n\nexport type DurationSuffixType = keyof DurationSuffixMap;\n\nexport const DURATION_STYLE_SUFFIX_MAP: Record<\n DurationType,\n DurationSuffixMap\n> = {\n days: {\n short: \"day\",\n shorts: \"days\",\n long: \"day\",\n longs: \"days\",\n narrow: \"d\",\n },\n hours: {\n short: \"hr\",\n shorts: \"hrs\",\n long: \"hour\",\n longs: \"hours\",\n narrow: \"h\",\n },\n minutes: {\n short: \"min\",\n shorts: \"mins\",\n long: \"minute\",\n longs: \"minutes\",\n narrow: \"m\",\n },\n seconds: {\n short: \"sec\",\n shorts: \"secs\",\n long: \"second\",\n longs: \"seconds\",\n narrow: \"s\",\n },\n milliseconds: {\n short: \"ms\",\n shorts: \"ms\",\n long: \"millisecond\",\n longs: \"milliseconds\",\n narrow: \"ms\",\n },\n};\n\nfunction getDurationStyleForPlural(style: DurationStyle): DurationSuffixType {\n return style == \"short\" ? \"shorts\" : style === \"long\" ? \"longs\" : style;\n}\n\nfunction getValueAndUnitSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \"\" : \" \";\n}\n\nfunction getDurationTypeSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \" \" : \", \";\n}\n\n/**\n * Convert a milliseconds duration into a Duration object. If the given ms is\n * zero, then return an object with a single field of zero with duration type\n * of durationTypeForZero.\n *\n * @param durationTypeForZero Defaults to 'milliseconds'\n */\nexport function msToDuration(\n ms: number,\n durationTypeForZero?: DurationType,\n): Duration {\n if (ms === 0) {\n durationTypeForZero = durationTypeForZero ?? \"milliseconds\";\n return { [durationTypeForZero]: 0 };\n }\n\n const duration: Duration = {};\n\n for (let i = 0; i < 1; i++) {\n let seconds = Math.floor(ms / MS_PER_SECOND);\n const millis = ms - seconds * MS_PER_SECOND;\n\n if (millis > 0) {\n duration[\"milliseconds\"] = millis;\n }\n\n if (seconds === 0) {\n break;\n }\n\n let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);\n seconds -= minutes * SECONDS_PER_MINUTE;\n\n if (seconds > 0) {\n duration[\"seconds\"] = seconds;\n }\n\n if (minutes === 0) {\n break;\n }\n\n let hours = Math.floor(minutes / MINUTES_PER_HOUR);\n minutes -= hours * MINUTES_PER_HOUR;\n\n if (minutes > 0) {\n duration[\"minutes\"] = minutes;\n }\n\n if (hours === 0) {\n break;\n }\n\n const days = Math.floor(hours / HOURS_PER_DAY);\n hours -= days * HOURS_PER_DAY;\n\n if (hours > 0) {\n duration[\"hours\"] = hours;\n }\n\n if (days > 0) {\n duration[\"days\"] = days;\n }\n }\n\n return duration;\n}\n\n/**\n * Returns the number of milliseconds for the given duration.\n */\nexport function durationToMs(duration: Duration): number {\n const daysMs = (duration.days ?? 0) * MS_PER_DAY;\n const hoursMs = (duration.hours ?? 0) * MS_PER_HOUR;\n const minsMs = (duration.minutes ?? 0) * MS_PER_MINUTE;\n const secsMs = (duration.seconds ?? 0) * MS_PER_SECOND;\n const msMs = duration.milliseconds ?? 0;\n\n return daysMs + hoursMs + minsMs + secsMs + msMs;\n}\n\n/**\n * Convenience function to return a duration given an ms or Duration.\n */\nexport function durationOrMsToMs(duration: number | Duration): number {\n return typeof duration === \"number\" ? duration : durationToMs(duration);\n}\n\n/**\n * Format a given Duration object into a string. If the object has no fields,\n * then returns an empty string.\n *\n * @param style Defaults to 'short'\n */\nexport function formatDuration(duration: Duration, style?: DurationStyle) {\n style = style ?? \"short\";\n const stylePlural = getDurationStyleForPlural(style);\n\n const space = getValueAndUnitSeparator(style);\n\n const a: string[] = [];\n\n for (const unit of DURATION_TYPE_SEQUENCE) {\n const value = duration[unit];\n if (value === undefined) continue;\n\n const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];\n const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];\n a.push(value + space + suffix);\n }\n\n const separator = getDurationTypeSeparator(style);\n return a.join(separator);\n}\n\n/**\n * Convert a millisecond duration into a human-readable duration string.\n *\n * @param options.durationTypeForZero - Defaults to 'milliseconds'\n * @param options.style - Defaults to 'short'\n */\nexport function readableDuration(\n ms: number,\n options?: { durationTypeForZero?: DurationType; style?: DurationStyle },\n): string {\n const duration = msToDuration(ms, options?.durationTypeForZero);\n\n return formatDuration(duration, options?.style);\n}\n\n/** A shortened duration string useful for logging timings. */\nexport function elapsed(ms: number): string {\n // Use long format for 1 minute or over.\n if (ms > MS_PER_MINUTE) {\n return readableDuration(ms);\n }\n\n // Use seconds format for over 100ms.\n if (ms > 100) {\n return `${(ms / 1000).toFixed(3)}s`;\n }\n\n // Use milliseconds format.\n return ms + \"ms\";\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,WAAAE,IAAA,eAAAC,EAAAH,GCmCO,IAAMI,EAAyC,CACpD,OACA,QACA,UACA,UACA,cACF,EAsBaC,EAGT,CACF,KAAM,CACJ,MAAO,MACP,OAAQ,OACR,KAAM,MACN,MAAO,OACP,OAAQ,GACV,EACA,MAAO,CACL,MAAO,KACP,OAAQ,MACR,KAAM,OACN,MAAO,QACP,OAAQ,GACV,EACA,QAAS,CACP,MAAO,MACP,OAAQ,OACR,KAAM,SACN,MAAO,UACP,OAAQ,GACV,EACA,QAAS,CACP,MAAO,MACP,OAAQ,OACR,KAAM,SACN,MAAO,UACP,OAAQ,GACV,EACA,aAAc,CACZ,MAAO,KACP,OAAQ,KACR,KAAM,cACN,MAAO,eACP,OAAQ,IACV,CACF,EAEA,SAASC,EAA0BC,EAA0C,CAC3E,OAAOA,GAAS,QAAU,SAAWA,IAAU,OAAS,QAAUA,CACpE,CAEA,SAASC,EAAyBD,EAA8B,CAC9D,OAAOA,IAAU,SAAW,GAAK,GACnC,CAEA,SAASE,EAAyBF,EAA8B,CAC9D,OAAOA,IAAU,SAAW,IAAM,IACpC,CASO,SAASG,EACdC,EACAC,EACU,CACV,GAAID,IAAO,EACT,OAAAC,EAAsBA,GAAuB,eACtC,CAAE,CAACA,CAAmB,EAAG,CAAE,EAGpC,IAAMC,EAAqB,CAAC,EAE5B,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,IAAIC,EAAU,KAAK,MAAMH,EAAK,GAAa,EACrCI,EAASJ,EAAKG,EAAU,IAM9B,GAJIC,EAAS,IACXF,EAAS,aAAkBE,GAGzBD,IAAY,EACd,MAGF,IAAIE,EAAU,KAAK,MAAMF,EAAU,EAAkB,EAOrD,GANAA,GAAWE,EAAU,GAEjBF,EAAU,IACZD,EAAS,QAAaC,GAGpBE,IAAY,EACd,MAGF,IAAIC,EAAQ,KAAK,MAAMD,EAAU,EAAgB,EAOjD,GANAA,GAAWC,EAAQ,GAEfD,EAAU,IACZH,EAAS,QAAaG,GAGpBC,IAAU,EACZ,MAGF,IAAMC,EAAO,KAAK,MAAMD,EAAQ,EAAa,EAC7CA,GAASC,EAAO,GAEZD,EAAQ,IACVJ,EAAS,MAAWI,GAGlBC,EAAO,IACTL,EAAS,KAAUK,EAEvB,CAEA,OAAOL,CACT,CA4BO,SAASM,EAAeC,EAAoBC,EAAuB,CACxEA,EAAQA,GAAS,QACjB,IAAMC,EAAcC,EAA0BF,CAAK,EAE7CG,EAAQC,EAAyBJ,CAAK,EAEtCK,EAAc,CAAC,EAErB,QAAWC,KAAQC,EAAwB,CACzC,IAAMC,EAAQT,EAASO,CAAI,EAC3B,GAAIE,IAAU,OAAW,SAEzB,IAAMC,EAAYC,EAA0BJ,CAAI,EAC1CK,EAASH,IAAU,EAAIC,EAAUT,CAAK,EAAIS,EAAUR,CAAW,EACrEI,EAAE,KAAKG,EAAQL,EAAQQ,CAAM,CAC/B,CAEA,IAAMC,EAAYC,EAAyBb,CAAK,EAChD,OAAOK,EAAE,KAAKO,CAAS,CACzB,CAQO,SAASE,EACdC,EACAC,EACQ,CACR,IAAMjB,EAAWkB,EAAaF,EAAIC,GAAS,mBAAmB,EAE9D,OAAOlB,EAAeC,EAAUiB,GAAS,KAAK,CAChD,CAGO,SAASE,EAAQH,EAAoB,CAE1C,OAAIA,EAAK,IACAD,EAAiBC,CAAE,EAIxBA,EAAK,IACA,IAAIA,EAAK,KAAM,QAAQ,CAAC,CAAC,IAI3BA,EAAK,IACd,CD7PO,SAASI,GAAQ,CACtB,IAAMC,EAAM,CACV,QAAS,KAAK,IAAI,EAClB,MAAO,EAEP,MAAa,CACXA,EAAI,MAAQ,KAAK,IAAI,CACvB,EAEA,SAAgB,CACdA,EAAI,MAAQ,EACZA,EAAI,QAAU,KAAK,IAAI,CACzB,EAEA,WAAoB,CAElB,OADeA,EAAI,OAAS,KAAK,IAAI,GACrBA,EAAI,OACtB,EAEA,UAAmB,CACjB,OAAOC,EAAQD,EAAI,UAAU,CAAC,CAChC,CACF,EAEA,OAAOA,CACT","names":["timer_exports","__export","timer","__toCommonJS","DURATION_TYPE_SEQUENCE","DURATION_STYLE_SUFFIX_MAP","getDurationStyleForPlural","style","getValueAndUnitSeparator","getDurationTypeSeparator","msToDuration","ms","durationTypeForZero","duration","seconds","millis","minutes","hours","days","formatDuration","duration","style","stylePlural","getDurationStyleForPlural","space","getValueAndUnitSeparator","a","unit","DURATION_TYPE_SEQUENCE","value","suffixMap","DURATION_STYLE_SUFFIX_MAP","suffix","separator","getDurationTypeSeparator","readableDuration","ms","options","msToDuration","elapsed","timer","obj","elapsed"]}
package/timer.min.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var D=["days","hours","minutes","seconds","milliseconds"],M={days:{short:"day",shorts:"days",long:"day",longs:"days",narrow:"d"},hours:{short:"hr",shorts:"hrs",long:"hour",longs:"hours",narrow:"h"},minutes:{short:"min",shorts:"mins",long:"minute",longs:"minutes",narrow:"m"},seconds:{short:"sec",shorts:"secs",long:"second",longs:"seconds",narrow:"s"},milliseconds:{short:"ms",shorts:"ms",long:"millisecond",longs:"milliseconds",narrow:"ms"}};function g(t){return t=="short"?"shorts":t==="long"?"longs":t}function y(t){return t==="narrow"?"":" "}function S(t){return t==="narrow"?" ":", "}function b(t,r){if(t===0)return r=r??"milliseconds",{[r]:0};let o={};for(let u=0;u<1;u++){let s=Math.floor(t/1e3),a=t-s*1e3;if(a>0&&(o.milliseconds=a),s===0)break;let e=Math.floor(s/60);if(s-=e*60,s>0&&(o.seconds=s),e===0)break;let n=Math.floor(e/60);if(e-=n*60,e>0&&(o.minutes=e),n===0)break;let i=Math.floor(n/24);n-=i*24,n>0&&(o.hours=n),i>0&&(o.days=i)}return o}function x(t,r){r=r??"short";let o=g(r),u=y(r),s=[];for(let e of D){let n=t[e];if(n===void 0)continue;let i=M[e],p=n===1?i[r]:i[o];s.push(n+u+p)}let a=S(r);return s.join(a)}function _(t,r){let o=b(t,r?.durationTypeForZero);return x(o,r?.style)}function c(t){return t>6e4?_(t):t>100?`${(t/1e3).toFixed(3)}s`:t+"ms"}var l=class{startMs;endMs=0;constructor(){this.startMs=Date.now()}stop(){this.endMs=Date.now()}restart(){this.endMs=0,this.startMs=Date.now()}elapsedMs(){return(this.endMs||Date.now())-this.startMs}toString(){return c(this.elapsedMs())}};function R(){return new l}export{l as Timer,R as timer};
1
+ var D=["days","hours","minutes","seconds","milliseconds"],M={days:{short:"day",shorts:"days",long:"day",longs:"days",narrow:"d"},hours:{short:"hr",shorts:"hrs",long:"hour",longs:"hours",narrow:"h"},minutes:{short:"min",shorts:"mins",long:"minute",longs:"minutes",narrow:"m"},seconds:{short:"sec",shorts:"secs",long:"second",longs:"seconds",narrow:"s"},milliseconds:{short:"ms",shorts:"ms",long:"millisecond",longs:"milliseconds",narrow:"ms"}};function h(o){return o=="short"?"shorts":o==="long"?"longs":o}function y(o){return o==="narrow"?"":" "}function g(o){return o==="narrow"?" ":", "}function S(o,r){if(o===0)return r=r??"milliseconds",{[r]:0};let n={};for(let u=0;u<1;u++){let s=Math.floor(o/1e3),a=o-s*1e3;if(a>0&&(n.milliseconds=a),s===0)break;let e=Math.floor(s/60);if(s-=e*60,s>0&&(n.seconds=s),e===0)break;let t=Math.floor(e/60);if(e-=t*60,e>0&&(n.minutes=e),t===0)break;let i=Math.floor(t/24);t-=i*24,t>0&&(n.hours=t),i>0&&(n.days=i)}return n}function x(o,r){r=r??"short";let n=h(r),u=y(r),s=[];for(let e of D){let t=o[e];if(t===void 0)continue;let i=M[e],c=t===1?i[r]:i[n];s.push(t+u+c)}let a=g(r);return s.join(a)}function T(o,r){let n=S(o,r?.durationTypeForZero);return x(n,r?.style)}function l(o){return o>6e4?T(o):o>100?`${(o/1e3).toFixed(3)}s`:o+"ms"}function R(){let o={startMs:Date.now(),endMs:0,stop(){o.endMs=Date.now()},restart(){o.endMs=0,o.startMs=Date.now()},elapsedMs(){return(o.endMs||Date.now())-o.startMs},toString(){return l(o.elapsedMs())}};return o}export{R as timer};
2
2
  //# sourceMappingURL=timer.min.mjs.map
package/timer.min.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/duration.ts","../src/timer.ts"],"sourcesContent":["/**\n * Bunch of miscellaneous constants and utility functions related to handling\n * date and time durations.\n *\n * Note that month and year do not have fixed durations, and hence are excluded\n * from this file. Weeks have fixed durations, but are excluded because we\n * use days as the max duration supported.\n */\n\nimport {\n HOURS_PER_DAY,\n MINUTES_PER_HOUR,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n SECONDS_PER_MINUTE,\n} from \"./timeConstants\";\n\nexport type Duration = {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\n/**\n * One of: days, hours, minutes, seconds, milliseconds\n */\nexport type DurationType = keyof Duration;\n\n/**\n * Order in which the duration type appears in the duration string.\n */\nexport const DURATION_TYPE_SEQUENCE: DurationType[] = [\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\n/**\n * Follows the same format as Intl.DurationFormat.prototype.format().\n *\n * Short: 1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, 9 ns\n * Long: 1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds,\n * 7 milliseconds, 8 microseconds, 9 nanoseconds\n * Narrow: 1y 2mo 3w 3d 4h 5m 6s 7ms 8μs 9ns\n */\nexport type DurationStyle = \"short\" | \"long\" | \"narrow\";\n\nexport type DurationSuffixMap = {\n short: string;\n shorts: string;\n long: string;\n longs: string;\n narrow: string;\n};\n\nexport type DurationSuffixType = keyof DurationSuffixMap;\n\nexport const DURATION_STYLE_SUFFIX_MAP: Record<\n DurationType,\n DurationSuffixMap\n> = {\n days: {\n short: \"day\",\n shorts: \"days\",\n long: \"day\",\n longs: \"days\",\n narrow: \"d\",\n },\n hours: {\n short: \"hr\",\n shorts: \"hrs\",\n long: \"hour\",\n longs: \"hours\",\n narrow: \"h\",\n },\n minutes: {\n short: \"min\",\n shorts: \"mins\",\n long: \"minute\",\n longs: \"minutes\",\n narrow: \"m\",\n },\n seconds: {\n short: \"sec\",\n shorts: \"secs\",\n long: \"second\",\n longs: \"seconds\",\n narrow: \"s\",\n },\n milliseconds: {\n short: \"ms\",\n shorts: \"ms\",\n long: \"millisecond\",\n longs: \"milliseconds\",\n narrow: \"ms\",\n },\n};\n\nfunction getDurationStyleForPlural(style: DurationStyle): DurationSuffixType {\n return style == \"short\" ? \"shorts\" : style === \"long\" ? \"longs\" : style;\n}\n\nfunction getValueAndUnitSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \"\" : \" \";\n}\n\nfunction getDurationTypeSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \" \" : \", \";\n}\n\n/**\n * Convert a milliseconds duration into a Duration object. If the given ms is\n * zero, then return an object with a single field of zero with duration type\n * of durationTypeForZero.\n *\n * @param durationTypeForZero Defaults to 'milliseconds'\n */\nexport function msToDuration(\n ms: number,\n durationTypeForZero?: DurationType,\n): Duration {\n if (ms === 0) {\n durationTypeForZero = durationTypeForZero ?? \"milliseconds\";\n return { [durationTypeForZero]: 0 };\n }\n\n const duration: Duration = {};\n\n for (let i = 0; i < 1; i++) {\n let seconds = Math.floor(ms / MS_PER_SECOND);\n const millis = ms - seconds * MS_PER_SECOND;\n\n if (millis > 0) {\n duration[\"milliseconds\"] = millis;\n }\n\n if (seconds === 0) {\n break;\n }\n\n let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);\n seconds -= minutes * SECONDS_PER_MINUTE;\n\n if (seconds > 0) {\n duration[\"seconds\"] = seconds;\n }\n\n if (minutes === 0) {\n break;\n }\n\n let hours = Math.floor(minutes / MINUTES_PER_HOUR);\n minutes -= hours * MINUTES_PER_HOUR;\n\n if (minutes > 0) {\n duration[\"minutes\"] = minutes;\n }\n\n if (hours === 0) {\n break;\n }\n\n const days = Math.floor(hours / HOURS_PER_DAY);\n hours -= days * HOURS_PER_DAY;\n\n if (hours > 0) {\n duration[\"hours\"] = hours;\n }\n\n if (days > 0) {\n duration[\"days\"] = days;\n }\n }\n\n return duration;\n}\n\n/**\n * Returns the number of milliseconds for the given duration.\n */\nexport function durationToMs(duration: Duration): number {\n const daysMs = (duration.days ?? 0) * MS_PER_DAY;\n const hoursMs = (duration.hours ?? 0) * MS_PER_HOUR;\n const minsMs = (duration.minutes ?? 0) * MS_PER_MINUTE;\n const secsMs = (duration.seconds ?? 0) * MS_PER_SECOND;\n const msMs = duration.milliseconds ?? 0;\n\n return daysMs + hoursMs + minsMs + secsMs + msMs;\n}\n\n/**\n * Convenience function to return a duration given an ms or Duration.\n */\nexport function durationOrMsToMs(duration: number | Duration): number {\n return typeof duration === \"number\" ? duration : durationToMs(duration);\n}\n\n/**\n * Format a given Duration object into a string. If the object has no fields,\n * then returns an empty string.\n *\n * @param style Defaults to 'short'\n */\nexport function formatDuration(duration: Duration, style?: DurationStyle) {\n style = style ?? \"short\";\n const stylePlural = getDurationStyleForPlural(style);\n\n const space = getValueAndUnitSeparator(style);\n\n const a: string[] = [];\n\n for (const unit of DURATION_TYPE_SEQUENCE) {\n const value = duration[unit];\n if (value === undefined) continue;\n\n const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];\n const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];\n a.push(value + space + suffix);\n }\n\n const separator = getDurationTypeSeparator(style);\n return a.join(separator);\n}\n\n/**\n * Convert a millisecond duration into a human-readable duration string.\n *\n * @param options.durationTypeForZero - Defaults to 'milliseconds'\n * @param options.style - Defaults to 'short'\n */\nexport function readableDuration(\n ms: number,\n options?: { durationTypeForZero?: DurationType; style?: DurationStyle },\n): string {\n const duration = msToDuration(ms, options?.durationTypeForZero);\n\n return formatDuration(duration, options?.style);\n}\n\n/** A shortened duration string useful for logging timings. */\nexport function elapsed(ms: number): string {\n // Use long format for 1 minute or over.\n if (ms > MS_PER_MINUTE) {\n return readableDuration(ms);\n }\n\n // Use seconds format for over 100ms.\n if (ms > 100) {\n return `${(ms / 1000).toFixed(3)}s`;\n }\n\n // Use milliseconds format.\n return ms + \"ms\";\n}\n","import { elapsed } from \"./duration\";\n\nexport class Timer {\n public startMs: number;\n public endMs = 0;\n\n public constructor() {\n this.startMs = Date.now();\n }\n\n public stop(): void {\n this.endMs = Date.now();\n }\n\n public restart(): void {\n this.endMs = 0;\n this.startMs = Date.now();\n }\n\n public elapsedMs(): number {\n const stopMs = this.endMs || Date.now();\n return stopMs - this.startMs;\n }\n\n public toString(): string {\n return elapsed(this.elapsedMs());\n }\n}\n\n/** Shorthand for `new Timer()` to make this easier to use. */\nexport function timer(): Timer {\n return new Timer();\n}\n"],"mappings":"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","names":["DURATION_TYPE_SEQUENCE","DURATION_STYLE_SUFFIX_MAP","getDurationStyleForPlural","style","getValueAndUnitSeparator","getDurationTypeSeparator","msToDuration","ms","durationTypeForZero","duration","i","seconds","millis","minutes","hours","days","formatDuration","duration","style","stylePlural","getDurationStyleForPlural","space","getValueAndUnitSeparator","a","unit","DURATION_TYPE_SEQUENCE","value","suffixMap","DURATION_STYLE_SUFFIX_MAP","suffix","separator","getDurationTypeSeparator","readableDuration","ms","options","msToDuration","elapsed","Timer","elapsed","timer"]}
1
+ {"version":3,"sources":["../src/duration.ts","../src/timer.ts"],"sourcesContent":["/**\n * Bunch of miscellaneous constants and utility functions related to handling\n * date and time durations.\n *\n * Note that month and year do not have fixed durations, and hence are excluded\n * from this file. Weeks have fixed durations, but are excluded because we\n * use days as the max duration supported.\n */\n\nimport {\n HOURS_PER_DAY,\n MINUTES_PER_HOUR,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n MS_PER_SECOND,\n SECONDS_PER_MINUTE,\n} from \"./timeConstants\";\n\nexport type Duration = {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\n/**\n * One of: days, hours, minutes, seconds, milliseconds\n */\nexport type DurationType = keyof Duration;\n\n/**\n * Order in which the duration type appears in the duration string.\n */\nexport const DURATION_TYPE_SEQUENCE: DurationType[] = [\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\n/**\n * Follows the same format as Intl.DurationFormat.prototype.format().\n *\n * Short: 1 yr, 2 mths, 3 wks, 3 days, 4 hr, 5 min, 6 sec, 7 ms, 8 μs, 9 ns\n * Long: 1 year, 2 months, 3 weeks, 3 days, 4 hours, 5 minutes, 6 seconds,\n * 7 milliseconds, 8 microseconds, 9 nanoseconds\n * Narrow: 1y 2mo 3w 3d 4h 5m 6s 7ms 8μs 9ns\n */\nexport type DurationStyle = \"short\" | \"long\" | \"narrow\";\n\nexport type DurationSuffixMap = {\n short: string;\n shorts: string;\n long: string;\n longs: string;\n narrow: string;\n};\n\nexport type DurationSuffixType = keyof DurationSuffixMap;\n\nexport const DURATION_STYLE_SUFFIX_MAP: Record<\n DurationType,\n DurationSuffixMap\n> = {\n days: {\n short: \"day\",\n shorts: \"days\",\n long: \"day\",\n longs: \"days\",\n narrow: \"d\",\n },\n hours: {\n short: \"hr\",\n shorts: \"hrs\",\n long: \"hour\",\n longs: \"hours\",\n narrow: \"h\",\n },\n minutes: {\n short: \"min\",\n shorts: \"mins\",\n long: \"minute\",\n longs: \"minutes\",\n narrow: \"m\",\n },\n seconds: {\n short: \"sec\",\n shorts: \"secs\",\n long: \"second\",\n longs: \"seconds\",\n narrow: \"s\",\n },\n milliseconds: {\n short: \"ms\",\n shorts: \"ms\",\n long: \"millisecond\",\n longs: \"milliseconds\",\n narrow: \"ms\",\n },\n};\n\nfunction getDurationStyleForPlural(style: DurationStyle): DurationSuffixType {\n return style == \"short\" ? \"shorts\" : style === \"long\" ? \"longs\" : style;\n}\n\nfunction getValueAndUnitSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \"\" : \" \";\n}\n\nfunction getDurationTypeSeparator(style: DurationStyle): string {\n return style === \"narrow\" ? \" \" : \", \";\n}\n\n/**\n * Convert a milliseconds duration into a Duration object. If the given ms is\n * zero, then return an object with a single field of zero with duration type\n * of durationTypeForZero.\n *\n * @param durationTypeForZero Defaults to 'milliseconds'\n */\nexport function msToDuration(\n ms: number,\n durationTypeForZero?: DurationType,\n): Duration {\n if (ms === 0) {\n durationTypeForZero = durationTypeForZero ?? \"milliseconds\";\n return { [durationTypeForZero]: 0 };\n }\n\n const duration: Duration = {};\n\n for (let i = 0; i < 1; i++) {\n let seconds = Math.floor(ms / MS_PER_SECOND);\n const millis = ms - seconds * MS_PER_SECOND;\n\n if (millis > 0) {\n duration[\"milliseconds\"] = millis;\n }\n\n if (seconds === 0) {\n break;\n }\n\n let minutes = Math.floor(seconds / SECONDS_PER_MINUTE);\n seconds -= minutes * SECONDS_PER_MINUTE;\n\n if (seconds > 0) {\n duration[\"seconds\"] = seconds;\n }\n\n if (minutes === 0) {\n break;\n }\n\n let hours = Math.floor(minutes / MINUTES_PER_HOUR);\n minutes -= hours * MINUTES_PER_HOUR;\n\n if (minutes > 0) {\n duration[\"minutes\"] = minutes;\n }\n\n if (hours === 0) {\n break;\n }\n\n const days = Math.floor(hours / HOURS_PER_DAY);\n hours -= days * HOURS_PER_DAY;\n\n if (hours > 0) {\n duration[\"hours\"] = hours;\n }\n\n if (days > 0) {\n duration[\"days\"] = days;\n }\n }\n\n return duration;\n}\n\n/**\n * Returns the number of milliseconds for the given duration.\n */\nexport function durationToMs(duration: Duration): number {\n const daysMs = (duration.days ?? 0) * MS_PER_DAY;\n const hoursMs = (duration.hours ?? 0) * MS_PER_HOUR;\n const minsMs = (duration.minutes ?? 0) * MS_PER_MINUTE;\n const secsMs = (duration.seconds ?? 0) * MS_PER_SECOND;\n const msMs = duration.milliseconds ?? 0;\n\n return daysMs + hoursMs + minsMs + secsMs + msMs;\n}\n\n/**\n * Convenience function to return a duration given an ms or Duration.\n */\nexport function durationOrMsToMs(duration: number | Duration): number {\n return typeof duration === \"number\" ? duration : durationToMs(duration);\n}\n\n/**\n * Format a given Duration object into a string. If the object has no fields,\n * then returns an empty string.\n *\n * @param style Defaults to 'short'\n */\nexport function formatDuration(duration: Duration, style?: DurationStyle) {\n style = style ?? \"short\";\n const stylePlural = getDurationStyleForPlural(style);\n\n const space = getValueAndUnitSeparator(style);\n\n const a: string[] = [];\n\n for (const unit of DURATION_TYPE_SEQUENCE) {\n const value = duration[unit];\n if (value === undefined) continue;\n\n const suffixMap = DURATION_STYLE_SUFFIX_MAP[unit];\n const suffix = value === 1 ? suffixMap[style] : suffixMap[stylePlural];\n a.push(value + space + suffix);\n }\n\n const separator = getDurationTypeSeparator(style);\n return a.join(separator);\n}\n\n/**\n * Convert a millisecond duration into a human-readable duration string.\n *\n * @param options.durationTypeForZero - Defaults to 'milliseconds'\n * @param options.style - Defaults to 'short'\n */\nexport function readableDuration(\n ms: number,\n options?: { durationTypeForZero?: DurationType; style?: DurationStyle },\n): string {\n const duration = msToDuration(ms, options?.durationTypeForZero);\n\n return formatDuration(duration, options?.style);\n}\n\n/** A shortened duration string useful for logging timings. */\nexport function elapsed(ms: number): string {\n // Use long format for 1 minute or over.\n if (ms > MS_PER_MINUTE) {\n return readableDuration(ms);\n }\n\n // Use seconds format for over 100ms.\n if (ms > 100) {\n return `${(ms / 1000).toFixed(3)}s`;\n }\n\n // Use milliseconds format.\n return ms + \"ms\";\n}\n","import { elapsed } from \"./duration\";\n\n/**\n * Create a new timer and starts the timing right away. Returns a closed object\n * instead of a class to make sure the variables are bound correctly.\n */\nexport function timer() {\n const obj = {\n startMs: Date.now(),\n endMs: 0,\n\n stop(): void {\n obj.endMs = Date.now();\n },\n\n restart(): void {\n obj.endMs = 0;\n obj.startMs = Date.now();\n },\n\n elapsedMs(): number {\n const stopMs = obj.endMs || Date.now();\n return stopMs - obj.startMs;\n },\n\n toString(): string {\n return elapsed(obj.elapsedMs());\n },\n };\n\n return obj;\n}\n\n/** Defines the type of the Timer object. */\nexport type Timer = ReturnType<typeof timer>;\n"],"mappings":"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","names":["DURATION_TYPE_SEQUENCE","DURATION_STYLE_SUFFIX_MAP","getDurationStyleForPlural","style","getValueAndUnitSeparator","getDurationTypeSeparator","msToDuration","ms","durationTypeForZero","duration","i","seconds","millis","minutes","hours","days","formatDuration","duration","style","stylePlural","getDurationStyleForPlural","space","getValueAndUnitSeparator","a","unit","DURATION_TYPE_SEQUENCE","value","suffixMap","DURATION_STYLE_SUFFIX_MAP","suffix","separator","getDurationTypeSeparator","readableDuration","ms","options","msToDuration","elapsed","timer","obj","elapsed"]}
package/timer.mjs CHANGED
@@ -131,31 +131,27 @@ function elapsed(ms) {
131
131
  }
132
132
 
133
133
  // src/timer.ts
134
- var Timer = class {
135
- startMs;
136
- endMs = 0;
137
- constructor() {
138
- this.startMs = Date.now();
139
- }
140
- stop() {
141
- this.endMs = Date.now();
142
- }
143
- restart() {
144
- this.endMs = 0;
145
- this.startMs = Date.now();
146
- }
147
- elapsedMs() {
148
- const stopMs = this.endMs || Date.now();
149
- return stopMs - this.startMs;
150
- }
151
- toString() {
152
- return elapsed(this.elapsedMs());
153
- }
154
- };
155
134
  function timer() {
156
- return new Timer();
135
+ const obj = {
136
+ startMs: Date.now(),
137
+ endMs: 0,
138
+ stop() {
139
+ obj.endMs = Date.now();
140
+ },
141
+ restart() {
142
+ obj.endMs = 0;
143
+ obj.startMs = Date.now();
144
+ },
145
+ elapsedMs() {
146
+ const stopMs = obj.endMs || Date.now();
147
+ return stopMs - obj.startMs;
148
+ },
149
+ toString() {
150
+ return elapsed(obj.elapsedMs());
151
+ }
152
+ };
153
+ return obj;
157
154
  }
158
155
  export {
159
- Timer,
160
156
  timer
161
157
  };
@@ -1,33 +0,0 @@
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/safeParseFloat.ts
21
- var safeParseFloat_exports = {};
22
- __export(safeParseFloat_exports, {
23
- safeParseFloat: () => safeParseFloat
24
- });
25
- module.exports = __toCommonJS(safeParseFloat_exports);
26
- function safeParseFloat(s, defaultValue = 0) {
27
- const i = Number(s);
28
- return isNaN(i) ? defaultValue : i;
29
- }
30
- // Annotate the CommonJS export names for ESM import in node:
31
- 0 && (module.exports = {
32
- safeParseFloat
33
- });
@@ -1,6 +0,0 @@
1
- /**
2
- * Returns 0 or the given defaultValue if the string is not a valid number.
3
- */
4
- declare function safeParseFloat<T>(s: string, defaultValue?: T | number): T | number;
5
-
6
- export { safeParseFloat };
@@ -1,6 +0,0 @@
1
- /**
2
- * Returns 0 or the given defaultValue if the string is not a valid number.
3
- */
4
- declare function safeParseFloat<T>(s: string, defaultValue?: T | number): T | number;
5
-
6
- export { safeParseFloat };
@@ -1,2 +0,0 @@
1
- "use strict";var s=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var b=(e,r)=>{for(var n in r)s(e,n,{get:r[n],enumerable:!0})},m=(e,r,n,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of i(r))!o.call(e,t)&&t!==n&&s(e,t,{get:()=>r[t],enumerable:!(u=a(r,t))||u.enumerable});return e};var N=e=>m(s({},"__esModule",{value:!0}),e);var c={};b(c,{safeParseFloat:()=>T});module.exports=N(c);function T(e,r=0){let n=Number(e);return isNaN(n)?r:n}0&&(module.exports={safeParseFloat});
2
- //# sourceMappingURL=safeParseFloat.min.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/safeParseFloat.ts"],"sourcesContent":["/**\n * Returns 0 or the given defaultValue if the string is not a valid number.\n */\nexport function safeParseFloat<T>(\n s: string,\n defaultValue: T | number = 0,\n): T | number {\n const i = Number(s);\n return isNaN(i) ? defaultValue : i;\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAGO,SAASE,EACdE,EACAC,EAA2B,EACf,CACZ,IAAMC,EAAI,OAAOF,CAAC,EAClB,OAAO,MAAME,CAAC,EAAID,EAAeC,CACnC","names":["safeParseFloat_exports","__export","safeParseFloat","__toCommonJS","s","defaultValue","i"]}
@@ -1,2 +0,0 @@
1
- function t(e,n=0){let r=Number(e);return isNaN(r)?n:r}export{t as safeParseFloat};
2
- //# sourceMappingURL=safeParseFloat.min.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/safeParseFloat.ts"],"sourcesContent":["/**\n * Returns 0 or the given defaultValue if the string is not a valid number.\n */\nexport function safeParseFloat<T>(\n s: string,\n defaultValue: T | number = 0,\n): T | number {\n const i = Number(s);\n return isNaN(i) ? defaultValue : i;\n}\n"],"mappings":"AAGO,SAASA,EACdC,EACAC,EAA2B,EACf,CACZ,IAAMC,EAAI,OAAOF,CAAC,EAClB,OAAO,MAAME,CAAC,EAAID,EAAeC,CACnC","names":["safeParseFloat","s","defaultValue","i"]}
@@ -1,8 +0,0 @@
1
- // src/safeParseFloat.ts
2
- function safeParseFloat(s, defaultValue = 0) {
3
- const i = Number(s);
4
- return isNaN(i) ? defaultValue : i;
5
- }
6
- export {
7
- safeParseFloat
8
- };
package/safeParseInt.cjs DELETED
@@ -1,33 +0,0 @@
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/safeParseInt.ts
21
- var safeParseInt_exports = {};
22
- __export(safeParseInt_exports, {
23
- safeParseInt: () => safeParseInt
24
- });
25
- module.exports = __toCommonJS(safeParseInt_exports);
26
- function safeParseInt(s, defaultValue = 0) {
27
- const i = Number(s);
28
- return isNaN(i) ? defaultValue : Math.floor(i);
29
- }
30
- // Annotate the CommonJS export names for ESM import in node:
31
- 0 && (module.exports = {
32
- safeParseInt
33
- });
@@ -1,6 +0,0 @@
1
- /**
2
- * Returns 0 or the given defaultValue if the string is not a valid number.
3
- */
4
- declare function safeParseInt<T>(s: string, defaultValue?: T | number): T | number;
5
-
6
- export { safeParseInt };
package/safeParseInt.d.ts DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * Returns 0 or the given defaultValue if the string is not a valid number.
3
- */
4
- declare function safeParseInt<T>(s: string, defaultValue?: T | number): T | number;
5
-
6
- export { safeParseInt };
@@ -1,2 +0,0 @@
1
- "use strict";var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var b=(n,r)=>{for(var e in r)o(n,e,{get:r[e],enumerable:!0})},f=(n,r,e,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of a(r))!i.call(n,t)&&t!==e&&o(n,t,{get:()=>r[t],enumerable:!(s=u(r,t))||s.enumerable});return n};var m=n=>f(o({},"__esModule",{value:!0}),n);var T={};b(T,{safeParseInt:()=>N});module.exports=m(T);function N(n,r=0){let e=Number(n);return isNaN(e)?r:Math.floor(e)}0&&(module.exports={safeParseInt});
2
- //# sourceMappingURL=safeParseInt.min.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/safeParseInt.ts"],"sourcesContent":["/**\n * Returns 0 or the given defaultValue if the string is not a valid number.\n */\nexport function safeParseInt<T>(\n s: string,\n defaultValue: T | number = 0,\n): T | number {\n const i = Number(s);\n return isNaN(i) ? defaultValue : Math.floor(i);\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAGO,SAASE,EACdE,EACAC,EAA2B,EACf,CACZ,IAAMC,EAAI,OAAOF,CAAC,EAClB,OAAO,MAAME,CAAC,EAAID,EAAe,KAAK,MAAMC,CAAC,CAC/C","names":["safeParseInt_exports","__export","safeParseInt","__toCommonJS","s","defaultValue","i"]}
@@ -1,2 +0,0 @@
1
- function t(n,e=0){let r=Number(n);return isNaN(r)?e:Math.floor(r)}export{t as safeParseInt};
2
- //# sourceMappingURL=safeParseInt.min.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/safeParseInt.ts"],"sourcesContent":["/**\n * Returns 0 or the given defaultValue if the string is not a valid number.\n */\nexport function safeParseInt<T>(\n s: string,\n defaultValue: T | number = 0,\n): T | number {\n const i = Number(s);\n return isNaN(i) ? defaultValue : Math.floor(i);\n}\n"],"mappings":"AAGO,SAASA,EACdC,EACAC,EAA2B,EACf,CACZ,IAAMC,EAAI,OAAOF,CAAC,EAClB,OAAO,MAAME,CAAC,EAAID,EAAe,KAAK,MAAMC,CAAC,CAC/C","names":["safeParseInt","s","defaultValue","i"]}
package/safeParseInt.mjs DELETED
@@ -1,8 +0,0 @@
1
- // src/safeParseInt.ts
2
- function safeParseInt(s, defaultValue = 0) {
3
- const i = Number(s);
4
- return isNaN(i) ? defaultValue : Math.floor(i);
5
- }
6
- export {
7
- safeParseInt
8
- };