@develia/commons 0.4.13 → 0.4.15

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 (223) hide show
  1. package/dist/cjs/array.js +27 -1
  2. package/dist/cjs/array.js.map +1 -1
  3. package/dist/cjs/async-pool-executor.js +15 -0
  4. package/dist/cjs/async-pool-executor.js.map +1 -1
  5. package/dist/cjs/browser/form-utilities.js +33 -6
  6. package/dist/cjs/browser/form-utilities.js.map +1 -1
  7. package/dist/cjs/browser/geo-location.js +5 -0
  8. package/dist/cjs/browser/geo-location.js.map +1 -1
  9. package/dist/cjs/browser/index.js.map +1 -1
  10. package/dist/cjs/browser/native-bridge.js +9 -0
  11. package/dist/cjs/browser/native-bridge.js.map +1 -1
  12. package/dist/cjs/cancellable-promise.js.map +1 -1
  13. package/dist/cjs/clean-url-search-params.js +1 -0
  14. package/dist/cjs/clean-url-search-params.js.map +1 -1
  15. package/dist/cjs/collections/cache-dictionary.js +39 -0
  16. package/dist/cjs/collections/cache-dictionary.js.map +1 -1
  17. package/dist/cjs/collections/default-map.js +25 -1
  18. package/dist/cjs/collections/default-map.js.map +1 -1
  19. package/dist/cjs/collections/default-weak-map.js +23 -3
  20. package/dist/cjs/collections/default-weak-map.js.map +1 -1
  21. package/dist/cjs/{from.js → collections/from.js} +278 -4
  22. package/dist/cjs/collections/from.js.map +1 -0
  23. package/dist/cjs/collections/index.js +3 -1
  24. package/dist/cjs/collections/index.js.map +1 -1
  25. package/dist/cjs/draft.js +43 -2
  26. package/dist/cjs/draft.js.map +1 -1
  27. package/dist/cjs/event-bus.js +1 -0
  28. package/dist/cjs/event-bus.js.map +1 -1
  29. package/dist/cjs/index.js +14 -3
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/key-value-pair.js +6 -0
  32. package/dist/cjs/key-value-pair.js.map +1 -1
  33. package/dist/cjs/lazy.js +4 -0
  34. package/dist/cjs/lazy.js.map +1 -1
  35. package/dist/cjs/math.js +19 -0
  36. package/dist/cjs/math.js.map +1 -1
  37. package/dist/cjs/order.js.map +1 -1
  38. package/dist/cjs/parse.js +96 -0
  39. package/dist/cjs/parse.js.map +1 -1
  40. package/dist/cjs/patch.js +10 -2
  41. package/dist/cjs/patch.js.map +1 -1
  42. package/dist/cjs/stopwatch.js +10 -0
  43. package/dist/cjs/stopwatch.js.map +1 -1
  44. package/dist/cjs/string.js +62 -0
  45. package/dist/cjs/string.js.map +1 -1
  46. package/dist/cjs/timer.js +7 -0
  47. package/dist/cjs/timer.js.map +1 -1
  48. package/dist/cjs/timespan.js +202 -0
  49. package/dist/cjs/timespan.js.map +1 -1
  50. package/dist/cjs/type-code.js.map +1 -1
  51. package/dist/cjs/type.js +80 -1
  52. package/dist/cjs/type.js.map +1 -1
  53. package/dist/cjs/types.js.map +1 -1
  54. package/dist/cjs/utilities.js +213 -7
  55. package/dist/cjs/utilities.js.map +1 -1
  56. package/dist/esm/array.js +27 -1
  57. package/dist/esm/array.js.map +1 -1
  58. package/dist/esm/async-pool-executor.js +15 -0
  59. package/dist/esm/async-pool-executor.js.map +1 -1
  60. package/dist/esm/browser/form-utilities.js +33 -6
  61. package/dist/esm/browser/form-utilities.js.map +1 -1
  62. package/dist/esm/browser/geo-location.js +5 -0
  63. package/dist/esm/browser/geo-location.js.map +1 -1
  64. package/dist/esm/browser/index.js.map +1 -1
  65. package/dist/esm/browser/native-bridge.js +9 -0
  66. package/dist/esm/browser/native-bridge.js.map +1 -1
  67. package/dist/esm/cancellable-promise.js.map +1 -1
  68. package/dist/esm/clean-url-search-params.js +1 -0
  69. package/dist/esm/clean-url-search-params.js.map +1 -1
  70. package/dist/esm/collections/cache-dictionary.js +39 -0
  71. package/dist/esm/collections/cache-dictionary.js.map +1 -1
  72. package/dist/esm/collections/default-map.js +25 -1
  73. package/dist/esm/collections/default-map.js.map +1 -1
  74. package/dist/esm/collections/default-weak-map.js +22 -2
  75. package/dist/esm/collections/default-weak-map.js.map +1 -1
  76. package/dist/esm/{from.js → collections/from.js} +278 -4
  77. package/dist/esm/collections/from.js.map +1 -0
  78. package/dist/esm/collections/index.js +1 -0
  79. package/dist/esm/collections/index.js.map +1 -1
  80. package/dist/esm/draft.js +43 -2
  81. package/dist/esm/draft.js.map +1 -1
  82. package/dist/esm/event-bus.js +1 -0
  83. package/dist/esm/event-bus.js.map +1 -1
  84. package/dist/esm/index.js +13 -1
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/key-value-pair.js +6 -0
  87. package/dist/esm/key-value-pair.js.map +1 -1
  88. package/dist/esm/lazy.js +4 -0
  89. package/dist/esm/lazy.js.map +1 -1
  90. package/dist/esm/math.js +19 -0
  91. package/dist/esm/math.js.map +1 -1
  92. package/dist/esm/order.js.map +1 -1
  93. package/dist/esm/parse.js +96 -0
  94. package/dist/esm/parse.js.map +1 -1
  95. package/dist/esm/patch.js +10 -2
  96. package/dist/esm/patch.js.map +1 -1
  97. package/dist/esm/stopwatch.js +10 -0
  98. package/dist/esm/stopwatch.js.map +1 -1
  99. package/dist/esm/string.js +62 -0
  100. package/dist/esm/string.js.map +1 -1
  101. package/dist/esm/timer.js +7 -0
  102. package/dist/esm/timer.js.map +1 -1
  103. package/dist/esm/timespan.js +202 -0
  104. package/dist/esm/timespan.js.map +1 -1
  105. package/dist/esm/type-code.js.map +1 -1
  106. package/dist/esm/type.js +80 -1
  107. package/dist/esm/type.js.map +1 -1
  108. package/dist/esm/types.js.map +1 -1
  109. package/dist/esm/utilities.js +212 -7
  110. package/dist/esm/utilities.js.map +1 -1
  111. package/dist/types/array.d.ts +26 -0
  112. package/dist/types/array.d.ts.map +1 -1
  113. package/dist/types/async-pool-executor.d.ts +15 -0
  114. package/dist/types/async-pool-executor.d.ts.map +1 -1
  115. package/dist/types/browser/form-utilities.d.ts +13 -0
  116. package/dist/types/browser/form-utilities.d.ts.map +1 -1
  117. package/dist/types/browser/index.d.ts.map +1 -1
  118. package/dist/types/browser/native-bridge.d.ts +6 -0
  119. package/dist/types/browser/native-bridge.d.ts.map +1 -1
  120. package/dist/types/collections/cache-dictionary.d.ts +39 -0
  121. package/dist/types/collections/cache-dictionary.d.ts.map +1 -1
  122. package/dist/types/collections/default-map.d.ts +23 -0
  123. package/dist/types/collections/default-map.d.ts.map +1 -1
  124. package/dist/types/collections/default-weak-map.d.ts +20 -1
  125. package/dist/types/collections/default-weak-map.d.ts.map +1 -1
  126. package/dist/types/collections/from.d.ts +333 -0
  127. package/dist/types/collections/from.d.ts.map +1 -0
  128. package/dist/types/collections/index.d.ts +1 -0
  129. package/dist/types/collections/index.d.ts.map +1 -1
  130. package/dist/types/draft.d.ts +68 -0
  131. package/dist/types/draft.d.ts.map +1 -1
  132. package/dist/types/index.d.ts +4 -1
  133. package/dist/types/index.d.ts.map +1 -1
  134. package/dist/types/key-value-pair.d.ts +6 -0
  135. package/dist/types/key-value-pair.d.ts.map +1 -1
  136. package/dist/types/lazy.d.ts +4 -0
  137. package/dist/types/lazy.d.ts.map +1 -1
  138. package/dist/types/math.d.ts +19 -0
  139. package/dist/types/math.d.ts.map +1 -1
  140. package/dist/types/parse.d.ts +121 -0
  141. package/dist/types/parse.d.ts.map +1 -1
  142. package/dist/types/string.d.ts +51 -0
  143. package/dist/types/string.d.ts.map +1 -1
  144. package/dist/types/timer.d.ts +7 -0
  145. package/dist/types/timer.d.ts.map +1 -1
  146. package/dist/types/timespan.d.ts +202 -0
  147. package/dist/types/timespan.d.ts.map +1 -1
  148. package/dist/types/type.d.ts +40 -0
  149. package/dist/types/type.d.ts.map +1 -1
  150. package/dist/types/utilities.d.ts +174 -2
  151. package/dist/types/utilities.d.ts.map +1 -1
  152. package/dist/web/array.js +27 -1
  153. package/dist/web/array.js.map +1 -1
  154. package/dist/web/async-pool-executor.js +15 -0
  155. package/dist/web/async-pool-executor.js.map +1 -1
  156. package/dist/web/browser/form-utilities.js +33 -6
  157. package/dist/web/browser/form-utilities.js.map +1 -1
  158. package/dist/web/browser/geo-location.js +5 -0
  159. package/dist/web/browser/geo-location.js.map +1 -1
  160. package/dist/web/browser/index.js.map +1 -1
  161. package/dist/web/browser/native-bridge.js +9 -0
  162. package/dist/web/browser/native-bridge.js.map +1 -1
  163. package/dist/web/cancellable-promise.js.map +1 -1
  164. package/dist/web/clean-url-search-params.js +1 -0
  165. package/dist/web/clean-url-search-params.js.map +1 -1
  166. package/dist/web/collections/cache-dictionary.js +39 -0
  167. package/dist/web/collections/cache-dictionary.js.map +1 -1
  168. package/dist/web/collections/default-map.js +25 -1
  169. package/dist/web/collections/default-map.js.map +1 -1
  170. package/dist/web/collections/default-weak-map.js +22 -2
  171. package/dist/web/collections/default-weak-map.js.map +1 -1
  172. package/dist/web/{from.js → collections/from.js} +279 -5
  173. package/dist/web/collections/from.js.map +1 -0
  174. package/dist/web/collections/index.js +1 -0
  175. package/dist/web/collections/index.js.map +1 -1
  176. package/dist/web/draft.js +43 -2
  177. package/dist/web/draft.js.map +1 -1
  178. package/dist/web/event-bus.js +1 -0
  179. package/dist/web/event-bus.js.map +1 -1
  180. package/dist/web/index.js +13 -1
  181. package/dist/web/index.js.map +1 -1
  182. package/dist/web/key-value-pair.js +6 -0
  183. package/dist/web/key-value-pair.js.map +1 -1
  184. package/dist/web/lazy.js +4 -0
  185. package/dist/web/lazy.js.map +1 -1
  186. package/dist/web/math.js +19 -0
  187. package/dist/web/math.js.map +1 -1
  188. package/dist/web/order.js.map +1 -1
  189. package/dist/web/parse.js +96 -0
  190. package/dist/web/parse.js.map +1 -1
  191. package/dist/web/patch.js +10 -2
  192. package/dist/web/patch.js.map +1 -1
  193. package/dist/web/stopwatch.js +10 -0
  194. package/dist/web/stopwatch.js.map +1 -1
  195. package/dist/web/string.js +62 -0
  196. package/dist/web/string.js.map +1 -1
  197. package/dist/web/timer.js +7 -0
  198. package/dist/web/timer.js.map +1 -1
  199. package/dist/web/timespan.js +202 -0
  200. package/dist/web/timespan.js.map +1 -1
  201. package/dist/web/type-code.js.map +1 -1
  202. package/dist/web/type.js +80 -1
  203. package/dist/web/type.js.map +1 -1
  204. package/dist/web/types.js.map +1 -1
  205. package/dist/web/utilities.js +212 -7
  206. package/dist/web/utilities.js.map +1 -1
  207. package/package.json +1 -1
  208. package/src/browser/form-utilities.ts +7 -6
  209. package/src/browser/index.ts +2 -2
  210. package/src/collections/cache-dictionary.ts +39 -1
  211. package/src/collections/default-map.ts +15 -9
  212. package/src/collections/default-weak-map.ts +14 -12
  213. package/src/{from.ts → collections/from.ts} +285 -15
  214. package/src/collections/index.ts +4 -3
  215. package/src/draft.ts +6 -2
  216. package/src/index.ts +1 -1
  217. package/src/timespan.ts +199 -20
  218. package/src/utilities.ts +53 -9
  219. package/dist/cjs/from.js.map +0 -1
  220. package/dist/esm/from.js.map +0 -1
  221. package/dist/types/from.d.ts +0 -59
  222. package/dist/types/from.d.ts.map +0 -1
  223. package/dist/web/from.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["// parse.ts\r\n/**\r\n * Options for {@link parseBoolean}.\r\n */\r\nexport interface ParseBooleanOptions {\r\n /**\r\n * Additional strings to consider as `true`.\r\n * These are matched case-insensitively.\r\n * @example [\"oui\", \"ja\"]\r\n */\r\n extraTruthy?: string[];\r\n\r\n /**\r\n * Additional strings to consider as `false`.\r\n * These are matched case-insensitively.\r\n * @example [\"non\", \"nein\"]\r\n */\r\n extraFalsy?: string[];\r\n}\r\n\r\n/**\r\n * Options for {@link parseInteger}.\r\n */\r\nexport interface ParseIntegerOptions {\r\n /**\r\n * Numeric base for conversion.\r\n * @default 10\r\n */\r\n radix?: number;\r\n\r\n /**\r\n * Thousands separator to strip before parsing.\r\n * @example \".\" for \"1.234.567\" → 1234567\r\n * @example \",\" for \"1,234,567\" → 1234567\r\n */\r\n thousandsSeparator?: string;\r\n}\r\n\r\n/**\r\n * Options for {@link parseDecimal}.\r\n */\r\nexport interface ParseDecimalOptions {\r\n /**\r\n * Character used as decimal point.\r\n * @default \".\"\r\n */\r\n decimalSeparator?: \".\" | \",\";\r\n\r\n /**\r\n * Thousands separator to strip before parsing.\r\n * @example \".\" for \"1.234,56\" (EU format)\r\n * @example \",\" for \"1,234.56\" (US format)\r\n */\r\n thousandsSeparator?: string;\r\n}\r\n\r\n// ============================================\r\n// HELPERS\r\n// ============================================\r\n\r\nfunction stripThousands(value: string, separator?: string): string {\r\n if (!separator) return value;\r\n return value.split(separator).join(\"\");\r\n}\r\n\r\n// ============================================\r\n// parseInteger\r\n// ============================================\r\n\r\n/**\r\n * Safely parses a value into an integer.\r\n * Returns `null` if the value cannot be parsed.\r\n *\r\n * - `null` or `undefined` → `null`\r\n * - `number` → returned as-is (floats are truncated)\r\n * - `string` → parsed with the given options\r\n *\r\n * @param value - The value to parse.\r\n * @param options - Optional parsing configuration.\r\n * @returns The parsed integer, or `null` on failure.\r\n *\r\n * @example\r\n * ```ts\r\n * parseInteger(42) // 42\r\n * parseInteger(3.7) // 3\r\n * parseInteger(null) // null\r\n * parseInteger(undefined) // null\r\n * parseInteger(\"42\") // 42\r\n * parseInteger(\"1.234.567\", { thousandsSeparator: \".\" }) // 1234567\r\n * parseInteger(\"FF\", { radix: 16 }) // 255\r\n * parseInteger(\"abc\") // null\r\n * ```\r\n */\r\nexport function parseInteger(\r\n value: string | number | null | undefined,\r\n options: ParseIntegerOptions = {}\r\n): number | null {\r\n if (value === null || value === undefined) return null;\r\n\r\n if (typeof value === \"number\") {\r\n return Number.isFinite(value) ? Math.trunc(value) : null;\r\n }\r\n\r\n const { radix = 10, thousandsSeparator } = options;\r\n\r\n const cleaned = stripThousands(value.trim(), thousandsSeparator);\r\n\r\n if (cleaned === \"\") return null;\r\n if (radix === 10 && !/^[+-]?\\d+$/.test(cleaned)) return null;\r\n\r\n const parsed = Number.parseInt(cleaned, radix);\r\n\r\n return Number.isNaN(parsed) ? null : parsed;\r\n}\r\n\r\n// ============================================\r\n// parseDecimal\r\n// ============================================\r\n\r\n/**\r\n * Safely parses a value into a floating-point number.\r\n * Returns `null` if the value cannot be parsed.\r\n *\r\n * - `null` or `undefined` → `null`\r\n * - `number` → returned as-is (if finite)\r\n * - `string` → parsed with the given options\r\n *\r\n * Supports custom decimal and thousands separators, making it suitable\r\n * for both US (`1,234.56`) and EU (`1.234,56`) number formats.\r\n *\r\n * @param value - The value to parse.\r\n * @param options - Optional parsing configuration.\r\n * @returns The parsed float, or `null` on failure.\r\n *\r\n * @example\r\n * ```ts\r\n * parseDecimal(3.14) // 3.14\r\n * parseDecimal(null) // null\r\n * parseDecimal(undefined) // null\r\n * parseDecimal(\"3.14\") // 3.14\r\n * parseDecimal(\"3,14\", { decimalSeparator: \",\" }) // 3.14\r\n * parseDecimal(\"1.234,56\", { decimalSeparator: \",\", thousandsSeparator: \".\" }) // 1234.56\r\n * parseDecimal(\"abc\") // null\r\n * ```\r\n */\r\nexport function parseDecimal(\r\n value: string | number | null | undefined,\r\n options: ParseDecimalOptions = {}\r\n): number | null {\r\n if (value === null || value === undefined) return null;\r\n\r\n if (typeof value === \"number\") {\r\n return Number.isFinite(value) ? value : null;\r\n }\r\n\r\n const { decimalSeparator = \".\", thousandsSeparator } = options;\r\n\r\n let cleaned = stripThousands(value.trim(), thousandsSeparator);\r\n\r\n if (cleaned === \"\") return null;\r\n\r\n if (decimalSeparator === \",\") {\r\n const commaCount = (cleaned.match(/,/g) || []).length;\r\n if (commaCount > 1) return null;\r\n cleaned = cleaned.replace(\",\", \".\");\r\n }\r\n\r\n if (!/^[+-]?\\d+(\\.\\d+)?$/.test(cleaned)) return null;\r\n\r\n const parsed = Number.parseFloat(cleaned);\r\n\r\n return Number.isNaN(parsed) || !Number.isFinite(parsed) ? null : parsed;\r\n}\r\n\r\n// ============================================\r\n// parseBoolean\r\n// ============================================\r\n\r\nconst DEFAULT_TRUTHY = [\"true\", \"1\", \"yes\", \"si\", \"sí\", \"on\"];\r\nconst DEFAULT_FALSY = [\"false\", \"0\", \"no\", \"off\"];\r\n\r\n/**\r\n * Safely parses a value into a boolean.\r\n * Returns `null` if the value cannot be interpreted as boolean.\r\n *\r\n * - `null` or `undefined` → `null`\r\n * - `boolean` → returned as-is\r\n * - `number` → `0` is `false`, any other finite number is `true`\r\n * - `string` → matched case-insensitively against known truthy/falsy values\r\n *\r\n * Default truthy: `\"true\"`, `\"1\"`, `\"yes\"`, `\"si\"`, `\"sí\"`, `\"on\"`\r\n * Default falsy: `\"false\"`, `\"0\"`, `\"no\"`, `\"off\"`\r\n *\r\n * @param value - The value to parse.\r\n * @param options - Optional parsing configuration.\r\n * @returns The parsed boolean, or `null` on failure.\r\n *\r\n * @example\r\n * ```ts\r\n * parseBoolean(true) // true\r\n * parseBoolean(false) // false\r\n * parseBoolean(1) // true\r\n * parseBoolean(0) // false\r\n * parseBoolean(null) // null\r\n * parseBoolean(undefined) // null\r\n * parseBoolean(\"yes\") // true\r\n * parseBoolean(\"no\") // false\r\n * parseBoolean(\"sí\") // true\r\n * parseBoolean(\"TRUE\") // true\r\n * parseBoolean(\"oui\") // null\r\n * parseBoolean(\"oui\", { extraTruthy: [\"oui\"] }) // true\r\n * parseBoolean(\"nein\", { extraFalsy: [\"nein\"] }) // false\r\n * parseBoolean(\"whatever\") // null\r\n * ```\r\n */\r\nexport function parseBoolean(\r\n value: string | number | boolean | null | undefined,\r\n options: ParseBooleanOptions = {}\r\n): boolean | null {\r\n if (value === null || value === undefined) return null;\r\n\r\n if (typeof value === \"boolean\") return value;\r\n\r\n if (typeof value === \"number\") {\r\n return Number.isFinite(value) ? value !== 0 : null;\r\n }\r\n\r\n const { extraTruthy = [], extraFalsy = [] } = options;\r\n\r\n const normalized = value.trim().toLowerCase();\r\n\r\n if (normalized === \"\") return null;\r\n\r\n const truthy = [...DEFAULT_TRUTHY, ...extraTruthy.map((s) => s.toLowerCase())];\r\n const falsy = [...DEFAULT_FALSY, ...extraFalsy.map((s) => s.toLowerCase())];\r\n\r\n if (truthy.includes(normalized)) return true;\r\n if (falsy.includes(normalized)) return false;\r\n\r\n return null;\r\n}"]}
package/dist/cjs/patch.js CHANGED
@@ -2,6 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.patch = patch;
4
4
  exports.unpatch = unpatch;
5
+ /**
6
+ * Devuelve un Map donde:
7
+ * - clave -> null (método añadido nuevo)
8
+ * - clave -> descriptorOriginal (método sustituido)
9
+ */
5
10
  function patch(targetOrCtor, fns) {
6
11
  const target = typeof targetOrCtor === "function" ? targetOrCtor.prototype : targetOrCtor;
7
12
  const result = new Map();
@@ -20,11 +25,14 @@ function patch(targetOrCtor, fns) {
20
25
  });
21
26
  result.set(key, prev ?? null);
22
27
  }
23
- catch {
28
+ catch { /* ignorar */
24
29
  }
25
30
  }
26
31
  return result;
27
32
  }
33
+ /**
34
+ * Revierte un patch a partir del mapa devuelto por `patch`.
35
+ */
28
36
  function unpatch(targetOrCtor, changes) {
29
37
  const target = typeof targetOrCtor === "function" ? targetOrCtor.prototype : targetOrCtor;
30
38
  for (const [key, prev] of changes) {
@@ -37,7 +45,7 @@ function unpatch(targetOrCtor, changes) {
37
45
  Object.defineProperty(target, key, prev);
38
46
  }
39
47
  }
40
- catch {
48
+ catch { /* ignorar */
41
49
  }
42
50
  }
43
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":";;AAyBA,sBA2BC;AAeD,0BAYC;AAtDD,SAAgB,KAAK,CACjB,YAAiB,EACjB,GAAmB;IAEnB,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAE1F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0C,CAAC;IACjE,MAAM,OAAO,GACT,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAQ,CAAC;IAEzE,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,UAAyB,GAAG,IAAe;YACtD,OAAQ,EAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,IAAI,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC/B,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;QACT,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAeD,SAAgB,OAAO,CAAC,YAAiB,EAAE,OAAoD;IAC3F,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1F,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAChB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;oBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9E,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;QACT,CAAC;IACL,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":";;AAyBA,sBA2BC;AAeD,0BAYC;AA3DD;;;;GAIG;AACH,SAAgB,KAAK,CACjB,YAAiB,EACjB,GAAmB;IAEnB,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAE1F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0C,CAAC;IACjE,MAAM,OAAO,GACT,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAQ,CAAC;IAEzE,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,UAAyB,GAAG,IAAe;YACtD,OAAQ,EAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,IAAI,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC/B,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC,CAAC,aAAa;QACvB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAYD;;GAEG;AACH,SAAgB,OAAO,CAAC,YAAiB,EAAE,OAAoD;IAC3F,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1F,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAChB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;oBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9E,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,aAAa;QACvB,CAAC;IACL,CAAC;AACL,CAAC","sourcesContent":["import type {Constructor} from \"./types.js\";\r\n\r\nexport type PureMethod<T extends object, A extends any[] = any[], R = any> =\r\n (obj: T, ...args: A) => R;\r\n\r\nexport type PatchSpec<T extends object> =\r\n | Record<string, PureMethod<T, any[], any>>\r\n | Map<PropertyKey, PureMethod<T, any[], any>>;\r\n\r\n\r\nexport function patch<C extends Constructor<any>>(\r\n targetOrCtor: C,\r\n fns: PatchSpec<InstanceType<C>>\r\n): Map<PropertyKey, PropertyDescriptor | null>;\r\n\r\nexport function patch<T extends object>(\r\n targetOrCtor: T,\r\n fns: PatchSpec<T>\r\n): Map<PropertyKey, PropertyDescriptor | null>;\r\n\r\n/**\r\n * Devuelve un Map donde:\r\n * - clave -> null (método añadido nuevo)\r\n * - clave -> descriptorOriginal (método sustituido)\r\n */\r\nexport function patch(\r\n targetOrCtor: any,\r\n fns: PatchSpec<any>\r\n): Map<PropertyKey, PropertyDescriptor | null> {\r\n const target = typeof targetOrCtor === \"function\" ? targetOrCtor.prototype : targetOrCtor;\r\n\r\n const result = new Map<PropertyKey, PropertyDescriptor | null>();\r\n const entries: Array<[PropertyKey, PureMethod<any>]> =\r\n fns instanceof Map ? [...fns.entries()] : Object.entries(fns) as any;\r\n\r\n for (const [key, fn] of entries) {\r\n const prev = Object.getOwnPropertyDescriptor(target, key);\r\n const method = function (this: unknown, ...args: unknown[]) {\r\n return (fn as any)(this, ...args);\r\n };\r\n try {\r\n Object.defineProperty(target, key, {\r\n value: method,\r\n writable: true,\r\n configurable: true,\r\n enumerable: false,\r\n });\r\n result.set(key, prev ?? null);\r\n } catch { /* ignorar */\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n// Overloads unpatch\r\nexport function unpatch<C extends Constructor<any>>(\r\n targetOrCtor: C,\r\n changes: Map<PropertyKey, PropertyDescriptor | null>\r\n): void;\r\nexport function unpatch<T extends object>(\r\n targetOrCtor: T,\r\n changes: Map<PropertyKey, PropertyDescriptor | null>\r\n): void;\r\n\r\n/**\r\n * Revierte un patch a partir del mapa devuelto por `patch`.\r\n */\r\nexport function unpatch(targetOrCtor: any, changes: Map<PropertyKey, PropertyDescriptor | null>): void {\r\n const target = typeof targetOrCtor === \"function\" ? targetOrCtor.prototype : targetOrCtor;\r\n for (const [key, prev] of changes) {\r\n try {\r\n if (prev === null) {\r\n if (Object.prototype.hasOwnProperty.call(target, key)) delete target[key];\r\n } else {\r\n Object.defineProperty(target, key, prev);\r\n }\r\n } catch { /* ignorar */\r\n }\r\n }\r\n}"]}
@@ -9,6 +9,16 @@ class Stopwatch {
9
9
  this.startTime = null;
10
10
  this.elapsedTime = null;
11
11
  }
12
+ /*static measure<T>(callback: () => T, measure: { value: TimeSpan | null }): T {
13
+ const stopwatch = new Stopwatch();
14
+ stopwatch.start();
15
+ try {
16
+ return callback();
17
+ } finally {
18
+ stopwatch.stop();
19
+ measure.value = stopwatch.getElapsedTime();
20
+ }
21
+ }*/
12
22
  start() {
13
23
  this.startTime = performance.now();
14
24
  this.elapsedTime = null;
@@ -1 +1 @@
1
- {"version":3,"file":"stopwatch.js","sourceRoot":"","sources":["../../src/stopwatch.ts"],"names":[],"mappings":";;;;;AAAA,gEAAqC;AAErC,MAAqB,SAAS;IAA9B;QACY,cAAS,GAAkB,IAAI,CAAC;QAChC,gBAAW,GAAkB,IAAI,CAAC;IAsC9C,CAAC;IAzBG,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,qBAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,qBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IAC9D,CAAC;CACJ;AAxCD,4BAwCC"}
1
+ {"version":3,"file":"stopwatch.js","sourceRoot":"","sources":["../../src/stopwatch.ts"],"names":[],"mappings":";;;;;AAAA,gEAAqC;AAErC,MAAqB,SAAS;IAA9B;QACY,cAAS,GAAkB,IAAI,CAAC;QAChC,gBAAW,GAAkB,IAAI,CAAC;IAsC9C,CAAC;IApCG;;;;;;;;;OASG;IAEH,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,qBAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,qBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IAC9D,CAAC;CACJ;AAxCD,4BAwCC","sourcesContent":["import TimeSpan from \"./timespan.js\";\r\n\r\nexport default class Stopwatch {\r\n private startTime: number | null = null;\r\n private elapsedTime: number | null = null;\r\n\r\n /*static measure<T>(callback: () => T, measure: { value: TimeSpan | null }): T {\r\n const stopwatch = new Stopwatch();\r\n stopwatch.start();\r\n try {\r\n return callback();\r\n } finally {\r\n stopwatch.stop();\r\n measure.value = stopwatch.getElapsedTime();\r\n }\r\n }*/\r\n\r\n start(): void {\r\n this.startTime = performance.now();\r\n this.elapsedTime = null;\r\n }\r\n\r\n stop(): void {\r\n if (this.startTime !== null) {\r\n this.elapsedTime = performance.now() - this.startTime;\r\n this.startTime = null;\r\n }\r\n }\r\n\r\n resume(): void {\r\n if (this.elapsedTime !== null) {\r\n this.startTime = performance.now() - this.elapsedTime;\r\n this.elapsedTime = null;\r\n }\r\n }\r\n\r\n getElapsedTime(): TimeSpan {\r\n if (this.startTime !== null) {\r\n return TimeSpan.fromMilliseconds(performance.now() - this.startTime);\r\n }\r\n return TimeSpan.fromMilliseconds(this.elapsedTime ?? 0.0);\r\n }\r\n}\r\n"]}
@@ -8,16 +8,37 @@ exports.toKebabCase = toKebabCase;
8
8
  exports.toCamelCase = toCamelCase;
9
9
  exports.toPascalCase = toPascalCase;
10
10
  exports.toConstantCase = toConstantCase;
11
+ /**
12
+ * Ensures that a given string has a specific prefix.
13
+ *
14
+ * @param {string} str - The string to ensure the prefix on.
15
+ * @param {string} prefix - The prefix to ensure on the string.
16
+ * @return {string} - The resulting string with the ensured prefix.
17
+ */
11
18
  function ensurePrefix(str, prefix) {
12
19
  if (!str.startsWith(prefix))
13
20
  return prefix + str;
14
21
  return str;
15
22
  }
23
+ /**
24
+ * Ensures that a string ends with a specified suffix.
25
+ *
26
+ * @param {string} str - The original string.
27
+ * @param {string} suffix - The suffix to ensure.
28
+ * @return {string} - The modified string with the suffix added if it was not already present.
29
+ */
16
30
  function ensureSuffix(str, suffix) {
17
31
  if (!str.endsWith(suffix))
18
32
  return str + suffix;
19
33
  return str;
20
34
  }
35
+ /**
36
+ * Formats a string using a template and provided arguments.
37
+ *
38
+ * @param {string} template - The template string containing placeholders.
39
+ * @param {any[]} args - Optional arguments to replace the placeholders in the template.
40
+ * @return {string} The formatted string.
41
+ */
21
42
  function format(template, ...args) {
22
43
  let regex;
23
44
  if (args.length === 1 && typeof args[0] === 'object') {
@@ -31,24 +52,53 @@ function format(template, ...args) {
31
52
  return typeof args[key] !== 'undefined' ? args[key] : "";
32
53
  });
33
54
  }
55
+ /**
56
+ * Splits a string into its constituent words, regardless of the original case
57
+ * style (camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE,
58
+ * space-separated, etc.).
59
+ *
60
+ * @param {string} str - The string to split into words.
61
+ * @return {string[]} - The list of lowercase words extracted from the input.
62
+ */
34
63
  function toWords(str) {
35
64
  if (!str)
36
65
  return [];
37
66
  return str
67
+ // Insert a space between a lowercase/digit and an uppercase letter (camelCase -> camel Case)
38
68
  .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
69
+ // Insert a space between consecutive uppercase letters followed by a lowercase letter (XMLParser -> XML Parser)
39
70
  .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
71
+ // Replace any non-alphanumeric character with a space
40
72
  .replace(/[^a-zA-Z0-9]+/g, ' ')
41
73
  .trim()
42
74
  .toLowerCase()
43
75
  .split(/\s+/)
44
76
  .filter(Boolean);
45
77
  }
78
+ /**
79
+ * Converts a string to snake_case.
80
+ *
81
+ * @param {string} str - The string to convert.
82
+ * @return {string} - The string converted to snake_case.
83
+ */
46
84
  function toSnakeCase(str) {
47
85
  return toWords(str).join('_');
48
86
  }
87
+ /**
88
+ * Converts a string to kebab-case.
89
+ *
90
+ * @param {string} str - The string to convert.
91
+ * @return {string} - The string converted to kebab-case.
92
+ */
49
93
  function toKebabCase(str) {
50
94
  return toWords(str).join('-');
51
95
  }
96
+ /**
97
+ * Converts a string to camelCase.
98
+ *
99
+ * @param {string} str - The string to convert.
100
+ * @return {string} - The string converted to camelCase.
101
+ */
52
102
  function toCamelCase(str) {
53
103
  const words = toWords(str);
54
104
  if (words.length === 0)
@@ -57,11 +107,23 @@ function toCamelCase(str) {
57
107
  .map((word, i) => i === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1))
58
108
  .join('');
59
109
  }
110
+ /**
111
+ * Converts a string to PascalCase.
112
+ *
113
+ * @param {string} str - The string to convert.
114
+ * @return {string} - The string converted to PascalCase.
115
+ */
60
116
  function toPascalCase(str) {
61
117
  return toWords(str)
62
118
  .map(word => word.charAt(0).toUpperCase() + word.slice(1))
63
119
  .join('');
64
120
  }
121
+ /**
122
+ * Converts a string to CONSTANT_CASE (a.k.a. SCREAMING_SNAKE_CASE).
123
+ *
124
+ * @param {string} str - The string to convert.
125
+ * @return {string} - The string converted to CONSTANT_CASE.
126
+ */
65
127
  function toConstantCase(str) {
66
128
  return toWords(str).join('_').toUpperCase();
67
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/string.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/string.ts"],"names":[],"mappings":";;AAQA,oCAIC;AAUD,oCAIC;AASD,wBAaC;AAgCD,kCAEC;AAQD,kCAEC;AAQD,kCAMC;AAQD,oCAIC;AAQD,wCAEC;AA/HD;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,GAAW,EAAE,MAAc;IACpD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,OAAO,MAAM,GAAG,GAAG,CAAA;IACvB,OAAO,GAAG,CAAA;AACd,CAAC;AAGD;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,GAAW,EAAE,MAAc;IACpD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,OAAO,GAAG,GAAG,MAAM,CAAA;IACvB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,MAAM,CAAC,QAAgB,EAAE,GAAG,IAAW;IAEnD,IAAI,KAAa,CAAC;IAClB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,KAAK,GAAG,UAAU,CAAC;IACvB,CAAC;SAAM,CAAC;QACJ,KAAK,GAAG,WAAW,CAAC;IACxB,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,OAAO,CAAC,GAAW;IACxB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,OAAO,GAAG;QACN,6FAA6F;SAC5F,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;QACvC,gHAAgH;SAC/G,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;QAC1C,sDAAsD;SACrD,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,IAAI,EAAE;SACN,WAAW,EAAE;SACb,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAW;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAW;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,KAAK;SACP,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC/E,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,GAAW;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC;SACd,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,GAAW;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC","sourcesContent":["\n/**\n * Ensures that a given string has a specific prefix.\n *\n * @param {string} str - The string to ensure the prefix on.\n * @param {string} prefix - The prefix to ensure on the string.\n * @return {string} - The resulting string with the ensured prefix.\n */\nexport function ensurePrefix(str: string, prefix: string): string {\n if (!str.startsWith(prefix))\n return prefix + str\n return str\n}\n\n\n/**\n * Ensures that a string ends with a specified suffix.\n *\n * @param {string} str - The original string.\n * @param {string} suffix - The suffix to ensure.\n * @return {string} - The modified string with the suffix added if it was not already present.\n */\nexport function ensureSuffix(str: string, suffix: string): string {\n if (!str.endsWith(suffix))\n return str + suffix\n return str\n}\n\n/**\n * Formats a string using a template and provided arguments.\n *\n * @param {string} template - The template string containing placeholders.\n * @param {any[]} args - Optional arguments to replace the placeholders in the template.\n * @return {string} The formatted string.\n */\nexport function format(template: string, ...args: any[]): string {\n\n let regex: RegExp;\n if (args.length === 1 && typeof args[0] === 'object') {\n args = args[0];\n regex = /{(.+?)}/g;\n } else {\n regex = /{(\\d+?)}/g;\n }\n\n return template.replace(regex, (match, key) => {\n return typeof args[key] !== 'undefined' ? args[key] : \"\";\n });\n}\n\n/**\n * Splits a string into its constituent words, regardless of the original case\n * style (camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE,\n * space-separated, etc.).\n *\n * @param {string} str - The string to split into words.\n * @return {string[]} - The list of lowercase words extracted from the input.\n */\nfunction toWords(str: string): string[] {\n if (!str) return [];\n\n return str\n // Insert a space between a lowercase/digit and an uppercase letter (camelCase -> camel Case)\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n // Insert a space between consecutive uppercase letters followed by a lowercase letter (XMLParser -> XML Parser)\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n // Replace any non-alphanumeric character with a space\n .replace(/[^a-zA-Z0-9]+/g, ' ')\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter(Boolean);\n}\n\n/**\n * Converts a string to snake_case.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to snake_case.\n */\nexport function toSnakeCase(str: string): string {\n return toWords(str).join('_');\n}\n\n/**\n * Converts a string to kebab-case.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to kebab-case.\n */\nexport function toKebabCase(str: string): string {\n return toWords(str).join('-');\n}\n\n/**\n * Converts a string to camelCase.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to camelCase.\n */\nexport function toCamelCase(str: string): string {\n const words = toWords(str);\n if (words.length === 0) return '';\n return words\n .map((word, i) => i === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Converts a string to PascalCase.\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to PascalCase.\n */\nexport function toPascalCase(str: string): string {\n return toWords(str)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Converts a string to CONSTANT_CASE (a.k.a. SCREAMING_SNAKE_CASE).\n *\n * @param {string} str - The string to convert.\n * @return {string} - The string converted to CONSTANT_CASE.\n */\nexport function toConstantCase(str: string): string {\n return toWords(str).join('_').toUpperCase();\n}"]}
package/dist/cjs/timer.js CHANGED
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * A class representing a timer that executes a callback function at a specified interval.
5
+ */
3
6
  class Timer {
7
+ /**
8
+ * @param callback Callback
9
+ * @param interval Seconds between calls
10
+ */
4
11
  constructor(callback, interval) {
5
12
  this._callback = callback;
6
13
  this._interval = interval;
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../src/timer.ts"],"names":[],"mappings":";;AAGA,MAAqB,KAAK;IAUtB,YAAY,QAAoB,EAAE,QAAgB;QAC9C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAGD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;IACvE,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACtB,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAiB;QAC1B,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACL,CAAC;IAGD,KAAK;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;gBAChC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;oBACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ;AAhED,wBAgEC"}
1
+ {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../src/timer.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,MAAqB,KAAK;IAMtB;;;OAGG;IACH,YAAY,QAAoB,EAAE,QAAgB;QAC9C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAGD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;IACvE,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACtB,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAiB;QAC1B,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACL,CAAC;IAGD,KAAK;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;gBAChC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;oBACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ;AAhED,wBAgEC","sourcesContent":["/**\r\n * A class representing a timer that executes a callback function at a specified interval.\r\n */\r\nexport default class Timer {\r\n\r\n private _callback: () => void;\r\n private _interval: number;\r\n private _intervalId: any | null;\r\n\r\n /**\r\n * @param callback Callback\r\n * @param interval Seconds between calls\r\n */\r\n constructor(callback: () => void, interval: number) {\r\n this._callback = callback;\r\n this._interval = interval;\r\n this._intervalId = null;\r\n }\r\n\r\n \r\n get running(): boolean {\r\n return this._intervalId !== null && this._intervalId !== undefined;\r\n }\r\n\r\n get interval(): number {\r\n return this._interval;\r\n }\r\n\r\n set interval(value: number) {\r\n if (value != this._interval) {\r\n this._interval = value;\r\n if (this.running)\r\n this.restart();\r\n }\r\n }\r\n\r\n get callback(): () => void {\r\n return this._callback;\r\n }\r\n\r\n set callback(value: () => void) {\r\n if (value != this._callback) {\r\n this._callback = value;\r\n }\r\n }\r\n\r\n\r\n start(): void {\r\n if (this._intervalId === null) {\r\n this._intervalId = setInterval(() => {\r\n if (this._callback != null)\r\n this._callback();\r\n }, this._interval);\r\n }\r\n }\r\n\r\n stop(): void {\r\n if (this._intervalId !== null) {\r\n clearInterval(this._intervalId);\r\n this._intervalId = null;\r\n }\r\n }\r\n\r\n restart(): void {\r\n this.stop();\r\n this.start();\r\n }\r\n}"]}
@@ -1,93 +1,238 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Represents a duration of time in milliseconds.
5
+ */
3
6
  class TimeSpan {
4
7
  constructor(milliseconds) {
5
8
  this.milliseconds = milliseconds;
6
9
  }
10
+ /**
11
+ * Gets the time interval in seconds.
12
+ * @returns {number} The duration in seconds.
13
+ */
7
14
  seconds() {
8
15
  return this.milliseconds / 1000;
9
16
  }
17
+ /**
18
+ * Gets the time interval in minutes.
19
+ * @returns {number} The duration in minutes.
20
+ */
10
21
  minutes() {
11
22
  return this.milliseconds / (1000 * 60);
12
23
  }
24
+ /**
25
+ * Gets the time interval in hours.
26
+ * @returns {number} The duration in hours.
27
+ */
13
28
  hours() {
14
29
  return this.milliseconds / (1000 * 60 * 60);
15
30
  }
31
+ /**
32
+ * Gets the time interval in days.
33
+ * @returns {number} The duration in days.
34
+ */
16
35
  days() {
17
36
  return this.milliseconds / (1000 * 60 * 60 * 24);
18
37
  }
38
+ /**
39
+ * Gets the time interval in weeks.
40
+ * @returns {number} The duration in weeks.
41
+ */
19
42
  weeks() {
20
43
  return this.milliseconds / (1000 * 60 * 60 * 24 * 7);
21
44
  }
45
+ /**
46
+ * Creates a TimeSpan from a specified number of milliseconds.
47
+ * @param {number} milliseconds - The number of milliseconds.
48
+ * @returns {TimeSpan} A new TimeSpan instance.
49
+ */
22
50
  static fromMilliseconds(milliseconds) {
23
51
  return new TimeSpan(milliseconds);
24
52
  }
53
+ /**
54
+ * Creates a TimeSpan from a specified number of seconds.
55
+ * @param {number} seconds - The number of seconds.
56
+ * @returns {TimeSpan} A new TimeSpan instance.
57
+ */
25
58
  static fromSeconds(seconds) {
26
59
  return new TimeSpan(seconds * 1000);
27
60
  }
61
+ /**
62
+ * Creates a TimeSpan from a specified number of minutes.
63
+ * @param {number} minutes - The number of minutes.
64
+ * @returns {TimeSpan} A new TimeSpan instance.
65
+ */
28
66
  static fromMinutes(minutes) {
29
67
  return new TimeSpan(minutes * 1000 * 60);
30
68
  }
69
+ /**
70
+ * Creates a TimeSpan from a specified number of hours.
71
+ * @param {number} hours - The number of hours.
72
+ * @returns {TimeSpan} A new TimeSpan instance.
73
+ */
31
74
  static fromHours(hours) {
32
75
  return new TimeSpan(hours * 1000 * 60 * 60);
33
76
  }
77
+ /**
78
+ * Creates a TimeSpan from a specified number of days.
79
+ * @param {number} days - The number of days.
80
+ * @returns {TimeSpan} A new TimeSpan instance.
81
+ */
34
82
  static fromDays(days) {
35
83
  return new TimeSpan(days * 1000 * 60 * 60 * 24);
36
84
  }
85
+ /**
86
+ * Creates a TimeSpan from a specified number of weeks.
87
+ * @param {number} weeks - The number of weeks.
88
+ * @returns {TimeSpan} A new TimeSpan instance.
89
+ */
37
90
  static fromWeeks(weeks) {
38
91
  return new TimeSpan(weeks * 1000 * 60 * 60 * 24 * 7);
39
92
  }
93
+ /**
94
+ * Returns a new TimeSpan that adds the specified number of milliseconds to this instance.
95
+ * @param {number} milliseconds - The milliseconds to add.
96
+ * @returns {TimeSpan} A new TimeSpan instance.
97
+ */
40
98
  addMilliseconds(milliseconds) {
41
99
  return new TimeSpan(this.milliseconds + milliseconds);
42
100
  }
101
+ /**
102
+ * Returns a new TimeSpan that adds the specified number of seconds to this instance.
103
+ * @param {number} seconds - The seconds to add.
104
+ * @returns {TimeSpan} A new TimeSpan instance.
105
+ */
43
106
  addSeconds(seconds) {
44
107
  return this.addMilliseconds(seconds * 1000);
45
108
  }
109
+ /**
110
+ * Returns a new TimeSpan that adds the specified number of minutes to this instance.
111
+ * @param {number} minutes - The minutes to add.
112
+ * @returns {TimeSpan} A new TimeSpan instance.
113
+ */
46
114
  addMinutes(minutes) {
47
115
  return this.addMilliseconds(minutes * 1000 * 60);
48
116
  }
117
+ /**
118
+ * Returns a new TimeSpan that adds the specified number of hours to this instance.
119
+ * @param {number} hours - The hours to add.
120
+ * @returns {TimeSpan} A new TimeSpan instance.
121
+ */
49
122
  addHours(hours) {
50
123
  return this.addMilliseconds(hours * 1000 * 60 * 60);
51
124
  }
125
+ /**
126
+ * Returns a new TimeSpan that adds the specified number of days to this instance.
127
+ * @param {number} days - The days to add.
128
+ * @returns {TimeSpan} A new TimeSpan instance.
129
+ */
52
130
  addDays(days) {
53
131
  return this.addMilliseconds(days * 1000 * 60 * 60 * 24);
54
132
  }
133
+ /**
134
+ * Returns a new TimeSpan that adds the specified number of weeks to this instance.
135
+ * @param {number} weeks - The weeks to add.
136
+ * @returns {TimeSpan} A new TimeSpan instance.
137
+ */
55
138
  addWeeks(weeks) {
56
139
  return this.addMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);
57
140
  }
141
+ /**
142
+ * Returns a new TimeSpan that subtracts the specified number of milliseconds from this instance.
143
+ * @param {number} milliseconds - The milliseconds to subtract.
144
+ * @returns {TimeSpan} A new TimeSpan instance.
145
+ */
58
146
  subtractMilliseconds(milliseconds) {
59
147
  return new TimeSpan(this.milliseconds - milliseconds);
60
148
  }
149
+ /**
150
+ * Returns a new TimeSpan that subtracts the specified number of seconds from this instance.
151
+ * @param {number} seconds - The seconds to subtract.
152
+ * @returns {TimeSpan} A new TimeSpan instance.
153
+ */
61
154
  subtractSeconds(seconds) {
62
155
  return this.subtractMilliseconds(seconds * 1000);
63
156
  }
157
+ /**
158
+ * Returns a new TimeSpan that subtracts the specified number of minutes from this instance.
159
+ * @param {number} minutes - The minutes to subtract.
160
+ * @returns {TimeSpan} A new TimeSpan instance.
161
+ */
64
162
  subtractMinutes(minutes) {
65
163
  return this.subtractMilliseconds(minutes * 1000 * 60);
66
164
  }
165
+ /**
166
+ * Returns a new TimeSpan that subtracts the specified number of hours from this instance.
167
+ * @param {number} hours - The hours to subtract.
168
+ * @returns {TimeSpan} A new TimeSpan instance.
169
+ */
67
170
  subtractHours(hours) {
68
171
  return this.subtractMilliseconds(hours * 1000 * 60 * 60);
69
172
  }
173
+ /**
174
+ * Returns a new TimeSpan that subtracts the specified number of days from this instance.
175
+ * @param {number} days - The days to subtract.
176
+ * @returns {TimeSpan} A new TimeSpan instance.
177
+ */
70
178
  subtractDays(days) {
71
179
  return this.subtractMilliseconds(days * 1000 * 60 * 60 * 24);
72
180
  }
181
+ /**
182
+ * Returns a new TimeSpan that subtracts the specified number of weeks from this instance.
183
+ * @param {number} weeks - The weeks to subtract.
184
+ * @returns {TimeSpan} A new TimeSpan instance.
185
+ */
73
186
  subtractWeeks(weeks) {
74
187
  return this.subtractMilliseconds(weeks * 1000 * 60 * 60 * 24 * 7);
75
188
  }
189
+ /**
190
+ * Returns a new TimeSpan that adds the specified TimeSpan to this instance.
191
+ * @param {TimeSpan} other - The TimeSpan to add.
192
+ * @returns {TimeSpan} A new TimeSpan instance.
193
+ */
76
194
  add(other) {
77
195
  return new TimeSpan(this.milliseconds + other.milliseconds);
78
196
  }
197
+ /**
198
+ * Returns a new TimeSpan that subtracts the specified TimeSpan from this instance.
199
+ * @param {TimeSpan} other - The TimeSpan to subtract.
200
+ * @returns {TimeSpan} A new TimeSpan instance.
201
+ */
79
202
  subtract(other) {
80
203
  return new TimeSpan(this.milliseconds - other.milliseconds);
81
204
  }
205
+ /**
206
+ * Adds this TimeSpan to a specified Date.
207
+ * @param {Date} date - The date to add to.
208
+ * @returns {Date} A new Date instance.
209
+ */
82
210
  addTo(date) {
83
211
  return new Date(date.getTime() + this.milliseconds);
84
212
  }
213
+ /**
214
+ * Subtracts this TimeSpan from a specified Date.
215
+ * @param {Date} date - The date to subtract from.
216
+ * @returns {Date} A new Date instance.
217
+ */
85
218
  subtractFrom(date) {
86
219
  return new Date(date.getTime() - this.milliseconds);
87
220
  }
221
+ /**
222
+ * Creates a TimeSpan from the difference between two dates.
223
+ * @param {Date} earlierDate - The earlier date.
224
+ * @param {Date} laterDate - The later date.
225
+ * @returns {TimeSpan} A new TimeSpan instance representing the difference.
226
+ */
88
227
  static fromDifference(earlierDate, laterDate) {
89
228
  return new TimeSpan(laterDate.getTime() - earlierDate.getTime());
90
229
  }
230
+ /**
231
+ * Formats the TimeSpan as a string.
232
+ * Supported tokens: hh, h, mm, m, ss, s.
233
+ * @param {string} format - The format string (default: 'hh:mm:ss').
234
+ * @returns {string} The formatted string.
235
+ */
91
236
  format(format = 'hh:mm:ss') {
92
237
  const formatLower = format.toLowerCase();
93
238
  const hasHours = formatLower.includes("h");
@@ -112,41 +257,98 @@ class TimeSpan {
112
257
  .replace('ss', secondsPadded)
113
258
  .replace('s', seconds.toString());
114
259
  }
260
+ /**
261
+ * Checks if this TimeSpan is equal to another.
262
+ * @param {TimeSpan} other - The other TimeSpan.
263
+ * @returns {boolean} True if equal.
264
+ */
115
265
  eq(other) {
116
266
  return this.milliseconds === other.milliseconds;
117
267
  }
268
+ /**
269
+ * Checks if this TimeSpan is less than or equal to another.
270
+ * @param {TimeSpan} other - The other TimeSpan.
271
+ * @returns {boolean} True if less than or equal.
272
+ */
118
273
  le(other) {
119
274
  return this.milliseconds <= other.milliseconds;
120
275
  }
276
+ /**
277
+ * Checks if this TimeSpan is less than another.
278
+ * @param {TimeSpan} other - The other TimeSpan.
279
+ * @returns {boolean} True if less than.
280
+ */
121
281
  lt(other) {
122
282
  return this.milliseconds < other.milliseconds;
123
283
  }
284
+ /**
285
+ * Checks if this TimeSpan is greater than or equal to another.
286
+ * @param {TimeSpan} other - The other TimeSpan.
287
+ * @returns {boolean} True if greater than or equal.
288
+ */
124
289
  ge(other) {
125
290
  return this.milliseconds >= other.milliseconds;
126
291
  }
292
+ /**
293
+ * Checks if this TimeSpan is greater than another.
294
+ * @param {TimeSpan} other - The other TimeSpan.
295
+ * @returns {boolean} True if greater than.
296
+ */
127
297
  gt(other) {
128
298
  return this.milliseconds > other.milliseconds;
129
299
  }
300
+ /**
301
+ * Multiplies the TimeSpan by a number.
302
+ * @param {number} number - The multiplier.
303
+ * @returns {TimeSpan} A new TimeSpan instance.
304
+ */
130
305
  multiply(number) {
131
306
  return new TimeSpan(this.milliseconds * number);
132
307
  }
308
+ /**
309
+ * Divides the TimeSpan by a number.
310
+ * @param {number} number - The divisor.
311
+ * @returns {TimeSpan} A new TimeSpan instance.
312
+ */
133
313
  divide(number) {
134
314
  return new TimeSpan(this.milliseconds / number);
135
315
  }
316
+ /**
317
+ * Returns the absolute value of the TimeSpan.
318
+ * @returns {TimeSpan} A new TimeSpan instance.
319
+ */
136
320
  abs() {
137
321
  return new TimeSpan(Math.abs(this.milliseconds));
138
322
  }
323
+ /**
324
+ * Checks if the TimeSpan is infinite.
325
+ * @returns {boolean} True if infinite.
326
+ */
139
327
  isInfinite() {
140
328
  return this.milliseconds === Number.POSITIVE_INFINITY || this.milliseconds === Number.NEGATIVE_INFINITY;
141
329
  }
330
+ /**
331
+ * Checks if the TimeSpan is positive infinite.
332
+ * @returns {boolean} True if positive infinite.
333
+ */
142
334
  isPositiveInfinite() {
143
335
  return this.milliseconds === Number.POSITIVE_INFINITY;
144
336
  }
337
+ /**
338
+ * Checks if the TimeSpan is negative infinite.
339
+ * @returns {boolean} True if negative infinite.
340
+ */
145
341
  isNegativeInfinite() {
146
342
  return this.milliseconds === Number.NEGATIVE_INFINITY;
147
343
  }
148
344
  }
345
+ /**
346
+ * Infinite duration.
347
+ */
149
348
  TimeSpan.INFINITE = new TimeSpan(Number.POSITIVE_INFINITY);
349
+ /**
350
+ * Negative infinite duration.
351
+ */
150
352
  TimeSpan.NEGATIVE_INFINITE = new TimeSpan(Number.NEGATIVE_INFINITY);
151
353
  exports.default = TimeSpan;
152
354
  //# sourceMappingURL=timespan.js.map