yummies 7.11.0 → 7.12.0

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 (146) hide show
  1. package/async.cjs +162 -48
  2. package/async.cjs.map +1 -1
  3. package/async.d.ts +108 -7
  4. package/async.js +163 -54
  5. package/async.js.map +1 -1
  6. package/chunk-CVq3Gv4J.cjs +50 -0
  7. package/chunk-YKewjYmz.js +37 -0
  8. package/common.cjs +48 -8
  9. package/common.cjs.map +1 -1
  10. package/common.d.ts +35 -2
  11. package/common.js +49 -11
  12. package/common.js.map +1 -1
  13. package/complex.cjs +275 -128
  14. package/complex.cjs.map +1 -1
  15. package/complex.js +275 -133
  16. package/complex.js.map +1 -1
  17. package/cookie.cjs +17 -7
  18. package/cookie.cjs.map +1 -1
  19. package/cookie.d.ts +8 -0
  20. package/cookie.js +18 -9
  21. package/cookie.js.map +1 -1
  22. package/css.cjs +147 -39
  23. package/css.cjs.map +1 -1
  24. package/css.d.ts +98 -6
  25. package/css.js +143 -41
  26. package/css.js.map +1 -1
  27. package/data.cjs +90 -55
  28. package/data.cjs.map +1 -1
  29. package/data.d.ts +32 -0
  30. package/data.js +91 -61
  31. package/data.js.map +1 -1
  32. package/date-time.cjs +578 -412
  33. package/date-time.cjs.map +1 -1
  34. package/date-time.d.ts +88 -0
  35. package/date-time.js +575 -421
  36. package/date-time.js.map +1 -1
  37. package/device.cjs +48 -23
  38. package/device.cjs.map +1 -1
  39. package/device.d.ts +32 -0
  40. package/device.js +49 -31
  41. package/device.js.map +1 -1
  42. package/encodings.cjs +275 -266
  43. package/encodings.cjs.map +1 -1
  44. package/encodings.d.ts +8 -0
  45. package/encodings.js +276 -268
  46. package/encodings.js.map +1 -1
  47. package/errors.cjs +20 -18
  48. package/errors.cjs.map +1 -1
  49. package/errors.js +19 -19
  50. package/errors.js.map +1 -1
  51. package/file.cjs +42 -24
  52. package/file.cjs.map +1 -1
  53. package/file.d.ts +16 -0
  54. package/file.js +43 -27
  55. package/file.js.map +1 -1
  56. package/format.cjs +125 -83
  57. package/format.cjs.map +1 -1
  58. package/format.js +118 -82
  59. package/format.js.map +1 -1
  60. package/html.cjs +226 -137
  61. package/html.cjs.map +1 -1
  62. package/html.d.ts +64 -0
  63. package/html.js +223 -150
  64. package/html.js.map +1 -1
  65. package/id.cjs +74 -17
  66. package/id.cjs.map +1 -1
  67. package/id.js +73 -24
  68. package/id.js.map +1 -1
  69. package/imports.cjs +41 -29
  70. package/imports.cjs.map +1 -1
  71. package/imports.d.ts +8 -0
  72. package/imports.js +40 -31
  73. package/imports.js.map +1 -1
  74. package/math.cjs +32 -6
  75. package/math.cjs.map +1 -1
  76. package/math.d.ts +16 -0
  77. package/math.js +33 -10
  78. package/math.js.map +1 -1
  79. package/media.cjs +275 -84
  80. package/media.cjs.map +1 -1
  81. package/media.d.ts +188 -2
  82. package/media.js +274 -93
  83. package/media.js.map +1 -1
  84. package/mobx.cjs +353 -193
  85. package/mobx.cjs.map +1 -1
  86. package/mobx.d.ts +7 -0
  87. package/mobx.js +351 -200
  88. package/mobx.js.map +1 -1
  89. package/ms.cjs +21 -10
  90. package/ms.cjs.map +1 -1
  91. package/ms.js +22 -13
  92. package/ms.js.map +1 -1
  93. package/number.cjs +13 -7
  94. package/number.cjs.map +1 -1
  95. package/number.js +14 -9
  96. package/number.js.map +1 -1
  97. package/package.json +10 -2
  98. package/parser.cjs +117 -64
  99. package/parser.cjs.map +1 -1
  100. package/parser.js +111 -64
  101. package/parser.js.map +1 -1
  102. package/price.cjs +24 -18
  103. package/price.cjs.map +1 -1
  104. package/price.d.ts +8 -0
  105. package/price.js +25 -20
  106. package/price.js.map +1 -1
  107. package/random.cjs +79 -13
  108. package/random.cjs.map +1 -1
  109. package/random.d.ts +64 -0
  110. package/random.js +80 -22
  111. package/random.js.map +1 -1
  112. package/react.cjs +673 -214
  113. package/react.cjs.map +1 -1
  114. package/react.d.ts +21 -0
  115. package/react.js +674 -239
  116. package/react.js.map +1 -1
  117. package/sound.cjs +14 -9
  118. package/sound.cjs.map +1 -1
  119. package/sound.js +15 -11
  120. package/sound.js.map +1 -1
  121. package/storage.cjs +49 -50
  122. package/storage.cjs.map +1 -1
  123. package/storage.d.ts +8 -0
  124. package/storage.js +50 -53
  125. package/storage.js.map +1 -1
  126. package/text.cjs +51 -34
  127. package/text.cjs.map +1 -1
  128. package/text.js +52 -37
  129. package/text.js.map +1 -1
  130. package/type-guard.cjs +292 -72
  131. package/type-guard.cjs.map +1 -1
  132. package/type-guard.js +288 -73
  133. package/type-guard.js.map +1 -1
  134. package/types.cjs +0 -2
  135. package/types.global.cjs +0 -2
  136. package/types.global.js +0 -2
  137. package/types.js +0 -2
  138. package/vibrate.cjs +31 -6
  139. package/vibrate.cjs.map +1 -1
  140. package/vibrate.d.ts +23 -1
  141. package/vibrate.js +32 -8
  142. package/vibrate.js.map +1 -1
  143. package/types.cjs.map +0 -1
  144. package/types.global.cjs.map +0 -1
  145. package/types.global.js.map +0 -1
  146. package/types.js.map +0 -1
package/ms.cjs CHANGED
@@ -1,14 +1,25 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const unitsToMs = {
4
- ms: 1,
5
- sec: 1e3,
6
- min: 1e3 * 60,
7
- hour: 1e3 * 60 * 60,
8
- day: 1e3 * 60 * 60 * 24,
9
- week: 1e3 * 60 * 60 * 24 * 7
2
+ //#region src/ms.ts
3
+ var unitsToMs = {
4
+ ms: 1,
5
+ sec: 1e3,
6
+ min: 1e3 * 60,
7
+ hour: 1e3 * 60 * 60,
8
+ day: 1e3 * 60 * 60 * 24,
9
+ week: 1e3 * 60 * 60 * 24 * 7
10
10
  };
11
- const ms = (value, unit = "ms") => value * unitsToMs[unit];
11
+ /**
12
+ * Converts a value in the specified unit to milliseconds.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * ms(1, 'min') // 60_000
17
+ * ms(30, 'sec') // 30_000
18
+ * ```
19
+ */
20
+ var ms = (value, unit = "ms") => value * unitsToMs[unit];
21
+ //#endregion
12
22
  exports.ms = ms;
13
23
  exports.unitsToMs = unitsToMs;
14
- //# sourceMappingURL=ms.cjs.map
24
+
25
+ //# sourceMappingURL=ms.cjs.map
package/ms.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ms.cjs","sources":["../src/ms.ts"],"sourcesContent":["export const unitsToMs = {\n ms: 1,\n sec: 1000,\n min: 1000 * 60,\n hour: 1000 * 60 * 60,\n day: 1000 * 60 * 60 * 24,\n week: 1000 * 60 * 60 * 24 * 7,\n} as const;\n\n/**\n * Converts a value in the specified unit to milliseconds.\n *\n * @example\n * ```ts\n * ms(1, 'min') // 60_000\n * ms(30, 'sec') // 30_000\n * ```\n */\nexport const ms = (value: number, unit: keyof typeof unitsToMs = 'ms') =>\n value * unitsToMs[unit];\n"],"names":[],"mappings":";;AAAO,MAAM,YAAY;AAAA,EACvB,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK,MAAO;AAAA,EACZ,MAAM,MAAO,KAAK;AAAA,EAClB,KAAK,MAAO,KAAK,KAAK;AAAA,EACtB,MAAM,MAAO,KAAK,KAAK,KAAK;AAC9B;AAWO,MAAM,KAAK,CAAC,OAAe,OAA+B,SAC/D,QAAQ,UAAU,IAAI;;;"}
1
+ {"version":3,"file":"ms.cjs","names":[],"sources":["../src/ms.ts"],"sourcesContent":["export const unitsToMs = {\n ms: 1,\n sec: 1000,\n min: 1000 * 60,\n hour: 1000 * 60 * 60,\n day: 1000 * 60 * 60 * 24,\n week: 1000 * 60 * 60 * 24 * 7,\n} as const;\n\n/**\n * Converts a value in the specified unit to milliseconds.\n *\n * @example\n * ```ts\n * ms(1, 'min') // 60_000\n * ms(30, 'sec') // 30_000\n * ```\n */\nexport const ms = (value: number, unit: keyof typeof unitsToMs = 'ms') =>\n value * unitsToMs[unit];\n"],"mappings":";;AAAA,IAAa,YAAY;CACvB,IAAI;CACJ,KAAK;CACL,KAAK,MAAO;CACZ,MAAM,MAAO,KAAK;CAClB,KAAK,MAAO,KAAK,KAAK;CACtB,MAAM,MAAO,KAAK,KAAK,KAAK;CAC7B;;;;;;;;;;AAWD,IAAa,MAAM,OAAe,OAA+B,SAC/D,QAAQ,UAAU"}
package/ms.js CHANGED
@@ -1,14 +1,23 @@
1
- const unitsToMs = {
2
- ms: 1,
3
- sec: 1e3,
4
- min: 1e3 * 60,
5
- hour: 1e3 * 60 * 60,
6
- day: 1e3 * 60 * 60 * 24,
7
- week: 1e3 * 60 * 60 * 24 * 7
1
+ //#region src/ms.ts
2
+ var unitsToMs = {
3
+ ms: 1,
4
+ sec: 1e3,
5
+ min: 1e3 * 60,
6
+ hour: 1e3 * 60 * 60,
7
+ day: 1e3 * 60 * 60 * 24,
8
+ week: 1e3 * 60 * 60 * 24 * 7
8
9
  };
9
- const ms = (value, unit = "ms") => value * unitsToMs[unit];
10
- export {
11
- ms,
12
- unitsToMs
13
- };
14
- //# sourceMappingURL=ms.js.map
10
+ /**
11
+ * Converts a value in the specified unit to milliseconds.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * ms(1, 'min') // 60_000
16
+ * ms(30, 'sec') // 30_000
17
+ * ```
18
+ */
19
+ var ms = (value, unit = "ms") => value * unitsToMs[unit];
20
+ //#endregion
21
+ export { ms, unitsToMs };
22
+
23
+ //# sourceMappingURL=ms.js.map
package/ms.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ms.js","sources":["../src/ms.ts"],"sourcesContent":["export const unitsToMs = {\n ms: 1,\n sec: 1000,\n min: 1000 * 60,\n hour: 1000 * 60 * 60,\n day: 1000 * 60 * 60 * 24,\n week: 1000 * 60 * 60 * 24 * 7,\n} as const;\n\n/**\n * Converts a value in the specified unit to milliseconds.\n *\n * @example\n * ```ts\n * ms(1, 'min') // 60_000\n * ms(30, 'sec') // 30_000\n * ```\n */\nexport const ms = (value: number, unit: keyof typeof unitsToMs = 'ms') =>\n value * unitsToMs[unit];\n"],"names":[],"mappings":"AAAO,MAAM,YAAY;AAAA,EACvB,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK,MAAO;AAAA,EACZ,MAAM,MAAO,KAAK;AAAA,EAClB,KAAK,MAAO,KAAK,KAAK;AAAA,EACtB,MAAM,MAAO,KAAK,KAAK,KAAK;AAC9B;AAWO,MAAM,KAAK,CAAC,OAAe,OAA+B,SAC/D,QAAQ,UAAU,IAAI;"}
1
+ {"version":3,"file":"ms.js","names":[],"sources":["../src/ms.ts"],"sourcesContent":["export const unitsToMs = {\n ms: 1,\n sec: 1000,\n min: 1000 * 60,\n hour: 1000 * 60 * 60,\n day: 1000 * 60 * 60 * 24,\n week: 1000 * 60 * 60 * 24 * 7,\n} as const;\n\n/**\n * Converts a value in the specified unit to milliseconds.\n *\n * @example\n * ```ts\n * ms(1, 'min') // 60_000\n * ms(30, 'sec') // 30_000\n * ```\n */\nexport const ms = (value: number, unit: keyof typeof unitsToMs = 'ms') =>\n value * unitsToMs[unit];\n"],"mappings":";AAAA,IAAa,YAAY;CACvB,IAAI;CACJ,KAAK;CACL,KAAK,MAAO;CACZ,MAAM,MAAO,KAAK;CAClB,KAAK,MAAO,KAAK,KAAK;CACtB,MAAM,MAAO,KAAK,KAAK,KAAK;CAC7B;;;;;;;;;;AAWD,IAAa,MAAM,OAAe,OAA+B,SAC/D,QAAQ,UAAU"}
package/number.cjs CHANGED
@@ -1,11 +1,17 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/number.ts
3
+ /**
4
+ * Works like `parseFloat(number.toFixed(4))` but performance better
5
+ *
6
+ * @example
7
+ * round(191.212999999999999999999999, 4) // 191.213
8
+ */
3
9
  function round(value, decimalPlaces = 0) {
4
- if (!decimalPlaces) {
5
- return Math.round(value);
6
- }
7
- const factor = 10 ** decimalPlaces;
8
- return Math.round(value * factor) / factor;
10
+ if (!decimalPlaces) return Math.round(value);
11
+ const factor = 10 ** decimalPlaces;
12
+ return Math.round(value * factor) / factor;
9
13
  }
14
+ //#endregion
10
15
  exports.round = round;
11
- //# sourceMappingURL=number.cjs.map
16
+
17
+ //# sourceMappingURL=number.cjs.map
package/number.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"number.cjs","sources":["../src/number.ts"],"sourcesContent":["/**\n * Works like `parseFloat(number.toFixed(4))` but performance better\n *\n * @example\n * round(191.212999999999999999999999, 4) // 191.213\n */\nexport function round(value: number, decimalPlaces: number = 0): number {\n if (!decimalPlaces) {\n return Math.round(value);\n }\n\n const factor = 10 ** decimalPlaces;\n return Math.round(value * factor) / factor;\n}\n"],"names":[],"mappings":";;AAMO,SAAS,MAAM,OAAe,gBAAwB,GAAW;AACtE,MAAI,CAAC,eAAe;AAClB,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AAEA,QAAM,SAAS,MAAM;AACrB,SAAO,KAAK,MAAM,QAAQ,MAAM,IAAI;AACtC;;"}
1
+ {"version":3,"file":"number.cjs","names":[],"sources":["../src/number.ts"],"sourcesContent":["/**\n * Works like `parseFloat(number.toFixed(4))` but performance better\n *\n * @example\n * round(191.212999999999999999999999, 4) // 191.213\n */\nexport function round(value: number, decimalPlaces: number = 0): number {\n if (!decimalPlaces) {\n return Math.round(value);\n }\n\n const factor = 10 ** decimalPlaces;\n return Math.round(value * factor) / factor;\n}\n"],"mappings":";;;;;;;;AAMA,SAAgB,MAAM,OAAe,gBAAwB,GAAW;AACtE,KAAI,CAAC,cACH,QAAO,KAAK,MAAM,MAAM;CAG1B,MAAM,SAAS,MAAM;AACrB,QAAO,KAAK,MAAM,QAAQ,OAAO,GAAG"}
package/number.js CHANGED
@@ -1,11 +1,16 @@
1
+ //#region src/number.ts
2
+ /**
3
+ * Works like `parseFloat(number.toFixed(4))` but performance better
4
+ *
5
+ * @example
6
+ * round(191.212999999999999999999999, 4) // 191.213
7
+ */
1
8
  function round(value, decimalPlaces = 0) {
2
- if (!decimalPlaces) {
3
- return Math.round(value);
4
- }
5
- const factor = 10 ** decimalPlaces;
6
- return Math.round(value * factor) / factor;
9
+ if (!decimalPlaces) return Math.round(value);
10
+ const factor = 10 ** decimalPlaces;
11
+ return Math.round(value * factor) / factor;
7
12
  }
8
- export {
9
- round
10
- };
11
- //# sourceMappingURL=number.js.map
13
+ //#endregion
14
+ export { round };
15
+
16
+ //# sourceMappingURL=number.js.map
package/number.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sources":["../src/number.ts"],"sourcesContent":["/**\n * Works like `parseFloat(number.toFixed(4))` but performance better\n *\n * @example\n * round(191.212999999999999999999999, 4) // 191.213\n */\nexport function round(value: number, decimalPlaces: number = 0): number {\n if (!decimalPlaces) {\n return Math.round(value);\n }\n\n const factor = 10 ** decimalPlaces;\n return Math.round(value * factor) / factor;\n}\n"],"names":[],"mappings":"AAMO,SAAS,MAAM,OAAe,gBAAwB,GAAW;AACtE,MAAI,CAAC,eAAe;AAClB,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AAEA,QAAM,SAAS,MAAM;AACrB,SAAO,KAAK,MAAM,QAAQ,MAAM,IAAI;AACtC;"}
1
+ {"version":3,"file":"number.js","names":[],"sources":["../src/number.ts"],"sourcesContent":["/**\n * Works like `parseFloat(number.toFixed(4))` but performance better\n *\n * @example\n * round(191.212999999999999999999999, 4) // 191.213\n */\nexport function round(value: number, decimalPlaces: number = 0): number {\n if (!decimalPlaces) {\n return Math.round(value);\n }\n\n const factor = 10 ** decimalPlaces;\n return Math.round(value * factor) / factor;\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,MAAM,OAAe,gBAAwB,GAAW;AACtE,KAAI,CAAC,cACH,QAAO,KAAK,MAAM,MAAM;CAG1B,MAAM,SAAS,MAAM;AACrB,QAAO,KAAK,MAAM,QAAQ,OAAO,GAAG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yummies",
3
- "version": "7.11.0",
3
+ "version": "7.12.0",
4
4
  "keywords": [
5
5
  "javascript",
6
6
  "typescript",
@@ -35,7 +35,7 @@
35
35
  "clsx": "^2.1.1",
36
36
  "dayjs": "^1.11.20",
37
37
  "dompurify": "^3.3.3",
38
- "nanoid": "^5.1.6",
38
+ "nanoid": "^5.1.7",
39
39
  "tailwind-merge": "^3.5.0"
40
40
  },
41
41
  "type": "module",
@@ -46,6 +46,14 @@
46
46
  "require": "./async.cjs",
47
47
  "default": "./async.js"
48
48
  },
49
+ "./chunk-CVq3Gv4J": {
50
+ "require": "./chunk-CVq3Gv4J.cjs",
51
+ "default": "./chunk-CVq3Gv4J.cjs"
52
+ },
53
+ "./chunk-YKewjYmz": {
54
+ "import": "./chunk-YKewjYmz.js",
55
+ "default": "./chunk-YKewjYmz.js"
56
+ },
49
57
  "./common": {
50
58
  "types": "./common.d.ts",
51
59
  "import": "./common.js",
package/parser.cjs CHANGED
@@ -1,69 +1,122 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const format = require("yummies/format");
4
- const typeGuard = require("yummies/type-guard");
5
- const number = (input, userSettings) => {
6
- const settings = {
7
- ...number.defaultSettings,
8
- ...userSettings
9
- };
10
- const fallback = "fallback" in settings ? settings.fallback : 0;
11
- let result;
12
- if (typeGuard.typeGuard.isNumber(input)) {
13
- result = input;
14
- } else if (typeGuard.typeGuard.isString(input)) {
15
- const formattedInput = format.format.skipSpaces(input).replace(",", ".");
16
- if (formattedInput === "") {
17
- result = fallback;
18
- } else {
19
- result = Number(formattedInput);
20
- }
21
- } else {
22
- result = fallback;
23
- }
24
- if (typeGuard.typeGuard.isNumber(result)) {
25
- if (settings?.clamped != null) {
26
- result = Math.max(
27
- settings.clamped[0] ?? -Infinity,
28
- Math.min(result, settings.clamped[1] ?? Infinity)
29
- );
30
- }
31
- if (settings?.ceil != null) {
32
- result = Math.ceil(result);
33
- }
34
- if (settings?.floor != null) {
35
- result = Math.floor(result);
36
- }
37
- if (settings?.digits != null) {
38
- result = +result.toFixed(settings.digits);
39
- }
40
- return result;
41
- } else {
42
- return fallback;
43
- }
2
+ const require_chunk = require("./chunk-CVq3Gv4J.cjs");
3
+ let yummies_type_guard = require("yummies/type-guard");
4
+ let yummies_format = require("yummies/format");
5
+ //#region src/parser/number.ts
6
+ /**
7
+ * Parses a number from raw input and optionally clamps, rounds or limits
8
+ * fractional digits.
9
+ *
10
+ * Strings are normalized by removing spaces and replacing `,` with `.` before
11
+ * parsing. Invalid inputs return the configured fallback.
12
+ *
13
+ * @template TFallback Fallback value type returned when parsing fails.
14
+ * @param input Raw value to parse.
15
+ * @param userSettings Parser settings merged with `number.defaultSettings`.
16
+ * @returns Parsed number or fallback value.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * number('1 234,5'); // 1234.5
21
+ * ```
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * number('bad', { fallback: 0 }); // 0
26
+ * ```
27
+ */
28
+ var number = (input, userSettings) => {
29
+ const settings = {
30
+ ...number.defaultSettings,
31
+ ...userSettings
32
+ };
33
+ const fallback = "fallback" in settings ? settings.fallback : 0;
34
+ let result;
35
+ if (yummies_type_guard.typeGuard.isNumber(input)) result = input;
36
+ else if (yummies_type_guard.typeGuard.isString(input)) {
37
+ const formattedInput = yummies_format.format.skipSpaces(input).replace(",", ".");
38
+ if (formattedInput === "") result = fallback;
39
+ else result = Number(formattedInput);
40
+ } else result = fallback;
41
+ if (yummies_type_guard.typeGuard.isNumber(result)) {
42
+ if (settings?.clamped != null) result = Math.max(settings.clamped[0] ?? -Infinity, Math.min(result, settings.clamped[1] ?? Infinity));
43
+ if (settings?.ceil != null) result = Math.ceil(result);
44
+ if (settings?.floor != null) result = Math.floor(result);
45
+ if (settings?.digits != null) result = +result.toFixed(settings.digits);
46
+ return result;
47
+ } else return fallback;
44
48
  };
45
49
  number.defaultSettings = {};
46
- const percent = (value, maxValue, settings) => {
47
- return number(Number(value) / Number(maxValue) * 100, settings);
50
+ //#endregion
51
+ //#region src/parser/percent.ts
52
+ /**
53
+ * Converts a value into a percentage of `maxValue` and parses the result with
54
+ * the shared numeric parser.
55
+ *
56
+ * @template TFallback Fallback value type returned when parsing fails.
57
+ * @param value Current value.
58
+ * @param maxValue Maximum value representing `100%`.
59
+ * @param settings Numeric parser settings for the computed percentage.
60
+ * @returns Parsed percentage or fallback value.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * percent(25, 200); // 12.5
65
+ * ```
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * percent('bad', 100, { fallback: 0 }); // 0
70
+ * ```
71
+ */
72
+ var percent = (value, maxValue, settings) => {
73
+ return number(Number(value) / Number(maxValue) * 100, settings);
48
74
  };
49
- const string = (input, settings) => {
50
- const fallback = settings && "fallback" in settings ? settings.fallback : "";
51
- if (input == null) {
52
- return fallback;
53
- }
54
- if (typeGuard.typeGuard.isObject(input)) {
55
- if (settings?.prettyJson) {
56
- return JSON.stringify(input, null, 2);
57
- }
58
- return JSON.stringify(input);
59
- }
60
- return String(input);
75
+ //#endregion
76
+ //#region src/parser/string.ts
77
+ /**
78
+ * Converts arbitrary input into a string representation.
79
+ *
80
+ * Objects are serialized with `JSON.stringify`, optionally pretty-printed, and
81
+ * nullish values resolve to the configured fallback.
82
+ *
83
+ * @template TFallback Fallback value type returned for nullish input.
84
+ * @param input Raw value to stringify.
85
+ * @param settings String conversion settings.
86
+ * @returns Stringified input or fallback value.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * string(123); // '123'
91
+ * ```
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * string({ id: 1 }, { prettyJson: true });
96
+ * ```
97
+ */
98
+ var string = (input, settings) => {
99
+ const fallback = settings && "fallback" in settings ? settings.fallback : "";
100
+ if (input == null) return fallback;
101
+ if (yummies_type_guard.typeGuard.isObject(input)) {
102
+ if (settings?.prettyJson) return JSON.stringify(input, null, 2);
103
+ return JSON.stringify(input);
104
+ }
105
+ return String(input);
61
106
  };
62
- const _exports = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
63
- __proto__: null,
64
- number,
65
- percent,
66
- string
67
- }, Symbol.toStringTag, { value: "Module" }));
68
- exports.parser = _exports;
69
- //# sourceMappingURL=parser.cjs.map
107
+ //#endregion
108
+ //#region src/parser/_exports.ts
109
+ var _exports_exports = /* @__PURE__ */ require_chunk.__exportAll({
110
+ number: () => number,
111
+ percent: () => percent,
112
+ string: () => string
113
+ });
114
+ //#endregion
115
+ Object.defineProperty(exports, "parser", {
116
+ enumerable: true,
117
+ get: function() {
118
+ return _exports_exports;
119
+ }
120
+ });
121
+
122
+ //# sourceMappingURL=parser.cjs.map
package/parser.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parser.cjs","sources":["../src/parser/number.ts","../src/parser/percent.ts","../src/parser/string.ts"],"sourcesContent":["import { format } from 'yummies/format';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface NumberParserSettings<TFallback = number> {\n digits?: number;\n fallback?: TFallback;\n /**\n * Round to upper boundary\n * 5.1 -> 6\n */\n ceil?: boolean;\n /**\n * Round to bottom boundary\n * 5.9 -> 5\n */\n floor?: boolean;\n clamped?: [min?: Maybe<number>, max?: Maybe<number>];\n}\n\n/**\n * Parses a number from raw input and optionally clamps, rounds or limits\n * fractional digits.\n *\n * Strings are normalized by removing spaces and replacing `,` with `.` before\n * parsing. Invalid inputs return the configured fallback.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param input Raw value to parse.\n * @param userSettings Parser settings merged with `number.defaultSettings`.\n * @returns Parsed number or fallback value.\n *\n * @example\n * ```ts\n * number('1 234,5'); // 1234.5\n * ```\n *\n * @example\n * ```ts\n * number('bad', { fallback: 0 }); // 0\n * ```\n */\nexport const number = <TFallback = number>(\n input: Maybe<unknown>,\n userSettings?: Maybe<NumberParserSettings<TFallback>>,\n): number | TFallback => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const fallback = (\n 'fallback' in settings ? settings.fallback : 0\n ) as TFallback;\n\n let result: number;\n\n if (typeGuard.isNumber(input)) {\n result = input;\n } else if (typeGuard.isString(input)) {\n const formattedInput = format.skipSpaces(input).replace(',', '.');\n if (formattedInput === '') {\n result = fallback as any;\n } else {\n result = Number(formattedInput);\n }\n } else {\n result = fallback as any;\n }\n\n if (typeGuard.isNumber(result)) {\n if (settings?.clamped != null) {\n result = Math.max(\n settings.clamped[0] ?? -Infinity,\n Math.min(result, settings.clamped[1] ?? Infinity),\n );\n }\n\n if (settings?.ceil != null) {\n result = Math.ceil(result);\n }\n\n if (settings?.floor != null) {\n result = Math.floor(result);\n }\n\n if (settings?.digits != null) {\n result = +result.toFixed(settings.digits);\n }\n\n return result;\n } else {\n return fallback;\n }\n};\n\nnumber.defaultSettings = {} as NumberParserSettings;\n","import type { Maybe } from 'yummies/types';\n\nimport { type NumberParserSettings, number } from './number.js';\n\n/**\n * Converts a value into a percentage of `maxValue` and parses the result with\n * the shared numeric parser.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param value Current value.\n * @param maxValue Maximum value representing `100%`.\n * @param settings Numeric parser settings for the computed percentage.\n * @returns Parsed percentage or fallback value.\n *\n * @example\n * ```ts\n * percent(25, 200); // 12.5\n * ```\n *\n * @example\n * ```ts\n * percent('bad', 100, { fallback: 0 }); // 0\n * ```\n */\nexport const percent = <TFallback = number>(\n value: Maybe<string | number>,\n maxValue?: Maybe<string | number>,\n settings?: Maybe<NumberParserSettings<TFallback>>,\n) => {\n return number<TFallback>((Number(value) / Number(maxValue)) * 100, settings);\n};\n","import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface StringParserSettings<TFallback = string> {\n fallback?: TFallback;\n prettyJson?: boolean;\n}\n\n/**\n * Converts arbitrary input into a string representation.\n *\n * Objects are serialized with `JSON.stringify`, optionally pretty-printed, and\n * nullish values resolve to the configured fallback.\n *\n * @template TFallback Fallback value type returned for nullish input.\n * @param input Raw value to stringify.\n * @param settings String conversion settings.\n * @returns Stringified input or fallback value.\n *\n * @example\n * ```ts\n * string(123); // '123'\n * ```\n *\n * @example\n * ```ts\n * string({ id: 1 }, { prettyJson: true });\n * ```\n */\nexport const string = <TFallback = string>(\n input: Maybe<unknown>,\n settings?: Maybe<StringParserSettings<TFallback>>,\n): string | TFallback => {\n const fallback =\n settings && 'fallback' in settings ? (settings.fallback as TFallback) : '';\n\n if (input == null) {\n return fallback;\n }\n\n if (typeGuard.isObject(input)) {\n if (settings?.prettyJson) {\n return JSON.stringify(input, null, 2);\n }\n\n return JSON.stringify(input);\n }\n\n return String(input);\n};\n"],"names":["typeGuard","format"],"mappings":";;;;AA0CO,MAAM,SAAS,CACpB,OACA,iBACuB;AACvB,QAAM,WAAW;AAAA,IACf,GAAG,OAAO;AAAA,IACV,GAAG;AAAA,EAAA;AAGL,QAAM,WACJ,cAAc,WAAW,SAAS,WAAW;AAG/C,MAAI;AAEJ,MAAIA,UAAAA,UAAU,SAAS,KAAK,GAAG;AAC7B,aAAS;AAAA,EACX,WAAWA,UAAAA,UAAU,SAAS,KAAK,GAAG;AACpC,UAAM,iBAAiBC,OAAAA,OAAO,WAAW,KAAK,EAAE,QAAQ,KAAK,GAAG;AAChE,QAAI,mBAAmB,IAAI;AACzB,eAAS;AAAA,IACX,OAAO;AACL,eAAS,OAAO,cAAc;AAAA,IAChC;AAAA,EACF,OAAO;AACL,aAAS;AAAA,EACX;AAEA,MAAID,UAAAA,UAAU,SAAS,MAAM,GAAG;AAC9B,QAAI,UAAU,WAAW,MAAM;AAC7B,eAAS,KAAK;AAAA,QACZ,SAAS,QAAQ,CAAC,KAAK;AAAA,QACvB,KAAK,IAAI,QAAQ,SAAS,QAAQ,CAAC,KAAK,QAAQ;AAAA,MAAA;AAAA,IAEpD;AAEA,QAAI,UAAU,QAAQ,MAAM;AAC1B,eAAS,KAAK,KAAK,MAAM;AAAA,IAC3B;AAEA,QAAI,UAAU,SAAS,MAAM;AAC3B,eAAS,KAAK,MAAM,MAAM;AAAA,IAC5B;AAEA,QAAI,UAAU,UAAU,MAAM;AAC5B,eAAS,CAAC,OAAO,QAAQ,SAAS,MAAM;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEA,OAAO,kBAAkB,CAAA;ACxElB,MAAM,UAAU,CACrB,OACA,UACA,aACG;AACH,SAAO,OAAmB,OAAO,KAAK,IAAI,OAAO,QAAQ,IAAK,KAAK,QAAQ;AAC7E;ACDO,MAAM,SAAS,CACpB,OACA,aACuB;AACvB,QAAM,WACJ,YAAY,cAAc,WAAY,SAAS,WAAyB;AAE1E,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,MAAIA,UAAAA,UAAU,SAAS,KAAK,GAAG;AAC7B,QAAI,UAAU,YAAY;AACxB,aAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,IACtC;AAEA,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AAEA,SAAO,OAAO,KAAK;AACrB;;;;;;;;"}
1
+ {"version":3,"file":"parser.cjs","names":[],"sources":["../src/parser/number.ts","../src/parser/percent.ts","../src/parser/string.ts","../src/parser/_exports.ts"],"sourcesContent":["import { format } from 'yummies/format';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface NumberParserSettings<TFallback = number> {\n digits?: number;\n fallback?: TFallback;\n /**\n * Round to upper boundary\n * 5.1 -> 6\n */\n ceil?: boolean;\n /**\n * Round to bottom boundary\n * 5.9 -> 5\n */\n floor?: boolean;\n clamped?: [min?: Maybe<number>, max?: Maybe<number>];\n}\n\n/**\n * Parses a number from raw input and optionally clamps, rounds or limits\n * fractional digits.\n *\n * Strings are normalized by removing spaces and replacing `,` with `.` before\n * parsing. Invalid inputs return the configured fallback.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param input Raw value to parse.\n * @param userSettings Parser settings merged with `number.defaultSettings`.\n * @returns Parsed number or fallback value.\n *\n * @example\n * ```ts\n * number('1 234,5'); // 1234.5\n * ```\n *\n * @example\n * ```ts\n * number('bad', { fallback: 0 }); // 0\n * ```\n */\nexport const number = <TFallback = number>(\n input: Maybe<unknown>,\n userSettings?: Maybe<NumberParserSettings<TFallback>>,\n): number | TFallback => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const fallback = (\n 'fallback' in settings ? settings.fallback : 0\n ) as TFallback;\n\n let result: number;\n\n if (typeGuard.isNumber(input)) {\n result = input;\n } else if (typeGuard.isString(input)) {\n const formattedInput = format.skipSpaces(input).replace(',', '.');\n if (formattedInput === '') {\n result = fallback as any;\n } else {\n result = Number(formattedInput);\n }\n } else {\n result = fallback as any;\n }\n\n if (typeGuard.isNumber(result)) {\n if (settings?.clamped != null) {\n result = Math.max(\n settings.clamped[0] ?? -Infinity,\n Math.min(result, settings.clamped[1] ?? Infinity),\n );\n }\n\n if (settings?.ceil != null) {\n result = Math.ceil(result);\n }\n\n if (settings?.floor != null) {\n result = Math.floor(result);\n }\n\n if (settings?.digits != null) {\n result = +result.toFixed(settings.digits);\n }\n\n return result;\n } else {\n return fallback;\n }\n};\n\nnumber.defaultSettings = {} as NumberParserSettings;\n","import type { Maybe } from 'yummies/types';\n\nimport { type NumberParserSettings, number } from './number.js';\n\n/**\n * Converts a value into a percentage of `maxValue` and parses the result with\n * the shared numeric parser.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param value Current value.\n * @param maxValue Maximum value representing `100%`.\n * @param settings Numeric parser settings for the computed percentage.\n * @returns Parsed percentage or fallback value.\n *\n * @example\n * ```ts\n * percent(25, 200); // 12.5\n * ```\n *\n * @example\n * ```ts\n * percent('bad', 100, { fallback: 0 }); // 0\n * ```\n */\nexport const percent = <TFallback = number>(\n value: Maybe<string | number>,\n maxValue?: Maybe<string | number>,\n settings?: Maybe<NumberParserSettings<TFallback>>,\n) => {\n return number<TFallback>((Number(value) / Number(maxValue)) * 100, settings);\n};\n","import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface StringParserSettings<TFallback = string> {\n fallback?: TFallback;\n prettyJson?: boolean;\n}\n\n/**\n * Converts arbitrary input into a string representation.\n *\n * Objects are serialized with `JSON.stringify`, optionally pretty-printed, and\n * nullish values resolve to the configured fallback.\n *\n * @template TFallback Fallback value type returned for nullish input.\n * @param input Raw value to stringify.\n * @param settings String conversion settings.\n * @returns Stringified input or fallback value.\n *\n * @example\n * ```ts\n * string(123); // '123'\n * ```\n *\n * @example\n * ```ts\n * string({ id: 1 }, { prettyJson: true });\n * ```\n */\nexport const string = <TFallback = string>(\n input: Maybe<unknown>,\n settings?: Maybe<StringParserSettings<TFallback>>,\n): string | TFallback => {\n const fallback =\n settings && 'fallback' in settings ? (settings.fallback as TFallback) : '';\n\n if (input == null) {\n return fallback;\n }\n\n if (typeGuard.isObject(input)) {\n if (settings?.prettyJson) {\n return JSON.stringify(input, null, 2);\n }\n\n return JSON.stringify(input);\n }\n\n return String(input);\n};\n","export * from './number.js';\nexport * from './percent.js';\nexport * from './string.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,IAAa,UACX,OACA,iBACuB;CACvB,MAAM,WAAW;EACf,GAAG,OAAO;EACV,GAAG;EACJ;CAED,MAAM,WACJ,cAAc,WAAW,SAAS,WAAW;CAG/C,IAAI;AAEJ,KAAI,mBAAA,UAAU,SAAS,MAAM,CAC3B,UAAS;UACA,mBAAA,UAAU,SAAS,MAAM,EAAE;EACpC,MAAM,iBAAiB,eAAA,OAAO,WAAW,MAAM,CAAC,QAAQ,KAAK,IAAI;AACjE,MAAI,mBAAmB,GACrB,UAAS;MAET,UAAS,OAAO,eAAe;OAGjC,UAAS;AAGX,KAAI,mBAAA,UAAU,SAAS,OAAO,EAAE;AAC9B,MAAI,UAAU,WAAW,KACvB,UAAS,KAAK,IACZ,SAAS,QAAQ,MAAM,WACvB,KAAK,IAAI,QAAQ,SAAS,QAAQ,MAAM,SAAS,CAClD;AAGH,MAAI,UAAU,QAAQ,KACpB,UAAS,KAAK,KAAK,OAAO;AAG5B,MAAI,UAAU,SAAS,KACrB,UAAS,KAAK,MAAM,OAAO;AAG7B,MAAI,UAAU,UAAU,KACtB,UAAS,CAAC,OAAO,QAAQ,SAAS,OAAO;AAG3C,SAAO;OAEP,QAAO;;AAIX,OAAO,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;ACxE3B,IAAa,WACX,OACA,UACA,aACG;AACH,QAAO,OAAmB,OAAO,MAAM,GAAG,OAAO,SAAS,GAAI,KAAK,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;ACA9E,IAAa,UACX,OACA,aACuB;CACvB,MAAM,WACJ,YAAY,cAAc,WAAY,SAAS,WAAyB;AAE1E,KAAI,SAAS,KACX,QAAO;AAGT,KAAI,mBAAA,UAAU,SAAS,MAAM,EAAE;AAC7B,MAAI,UAAU,WACZ,QAAO,KAAK,UAAU,OAAO,MAAM,EAAE;AAGvC,SAAO,KAAK,UAAU,MAAM;;AAG9B,QAAO,OAAO,MAAM"}
package/parser.js CHANGED
@@ -1,69 +1,116 @@
1
- import { format } from "yummies/format";
1
+ import { n as __exportAll } from "./chunk-YKewjYmz.js";
2
2
  import { typeGuard } from "yummies/type-guard";
3
- const number = (input, userSettings) => {
4
- const settings = {
5
- ...number.defaultSettings,
6
- ...userSettings
7
- };
8
- const fallback = "fallback" in settings ? settings.fallback : 0;
9
- let result;
10
- if (typeGuard.isNumber(input)) {
11
- result = input;
12
- } else if (typeGuard.isString(input)) {
13
- const formattedInput = format.skipSpaces(input).replace(",", ".");
14
- if (formattedInput === "") {
15
- result = fallback;
16
- } else {
17
- result = Number(formattedInput);
18
- }
19
- } else {
20
- result = fallback;
21
- }
22
- if (typeGuard.isNumber(result)) {
23
- if (settings?.clamped != null) {
24
- result = Math.max(
25
- settings.clamped[0] ?? -Infinity,
26
- Math.min(result, settings.clamped[1] ?? Infinity)
27
- );
28
- }
29
- if (settings?.ceil != null) {
30
- result = Math.ceil(result);
31
- }
32
- if (settings?.floor != null) {
33
- result = Math.floor(result);
34
- }
35
- if (settings?.digits != null) {
36
- result = +result.toFixed(settings.digits);
37
- }
38
- return result;
39
- } else {
40
- return fallback;
41
- }
3
+ import { format } from "yummies/format";
4
+ //#region src/parser/number.ts
5
+ /**
6
+ * Parses a number from raw input and optionally clamps, rounds or limits
7
+ * fractional digits.
8
+ *
9
+ * Strings are normalized by removing spaces and replacing `,` with `.` before
10
+ * parsing. Invalid inputs return the configured fallback.
11
+ *
12
+ * @template TFallback Fallback value type returned when parsing fails.
13
+ * @param input Raw value to parse.
14
+ * @param userSettings Parser settings merged with `number.defaultSettings`.
15
+ * @returns Parsed number or fallback value.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * number('1 234,5'); // 1234.5
20
+ * ```
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * number('bad', { fallback: 0 }); // 0
25
+ * ```
26
+ */
27
+ var number = (input, userSettings) => {
28
+ const settings = {
29
+ ...number.defaultSettings,
30
+ ...userSettings
31
+ };
32
+ const fallback = "fallback" in settings ? settings.fallback : 0;
33
+ let result;
34
+ if (typeGuard.isNumber(input)) result = input;
35
+ else if (typeGuard.isString(input)) {
36
+ const formattedInput = format.skipSpaces(input).replace(",", ".");
37
+ if (formattedInput === "") result = fallback;
38
+ else result = Number(formattedInput);
39
+ } else result = fallback;
40
+ if (typeGuard.isNumber(result)) {
41
+ if (settings?.clamped != null) result = Math.max(settings.clamped[0] ?? -Infinity, Math.min(result, settings.clamped[1] ?? Infinity));
42
+ if (settings?.ceil != null) result = Math.ceil(result);
43
+ if (settings?.floor != null) result = Math.floor(result);
44
+ if (settings?.digits != null) result = +result.toFixed(settings.digits);
45
+ return result;
46
+ } else return fallback;
42
47
  };
43
48
  number.defaultSettings = {};
44
- const percent = (value, maxValue, settings) => {
45
- return number(Number(value) / Number(maxValue) * 100, settings);
46
- };
47
- const string = (input, settings) => {
48
- const fallback = settings && "fallback" in settings ? settings.fallback : "";
49
- if (input == null) {
50
- return fallback;
51
- }
52
- if (typeGuard.isObject(input)) {
53
- if (settings?.prettyJson) {
54
- return JSON.stringify(input, null, 2);
55
- }
56
- return JSON.stringify(input);
57
- }
58
- return String(input);
49
+ //#endregion
50
+ //#region src/parser/percent.ts
51
+ /**
52
+ * Converts a value into a percentage of `maxValue` and parses the result with
53
+ * the shared numeric parser.
54
+ *
55
+ * @template TFallback Fallback value type returned when parsing fails.
56
+ * @param value Current value.
57
+ * @param maxValue Maximum value representing `100%`.
58
+ * @param settings Numeric parser settings for the computed percentage.
59
+ * @returns Parsed percentage or fallback value.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * percent(25, 200); // 12.5
64
+ * ```
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * percent('bad', 100, { fallback: 0 }); // 0
69
+ * ```
70
+ */
71
+ var percent = (value, maxValue, settings) => {
72
+ return number(Number(value) / Number(maxValue) * 100, settings);
59
73
  };
60
- const _exports = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
61
- __proto__: null,
62
- number,
63
- percent,
64
- string
65
- }, Symbol.toStringTag, { value: "Module" }));
66
- export {
67
- _exports as parser
74
+ //#endregion
75
+ //#region src/parser/string.ts
76
+ /**
77
+ * Converts arbitrary input into a string representation.
78
+ *
79
+ * Objects are serialized with `JSON.stringify`, optionally pretty-printed, and
80
+ * nullish values resolve to the configured fallback.
81
+ *
82
+ * @template TFallback Fallback value type returned for nullish input.
83
+ * @param input Raw value to stringify.
84
+ * @param settings String conversion settings.
85
+ * @returns Stringified input or fallback value.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * string(123); // '123'
90
+ * ```
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * string({ id: 1 }, { prettyJson: true });
95
+ * ```
96
+ */
97
+ var string = (input, settings) => {
98
+ const fallback = settings && "fallback" in settings ? settings.fallback : "";
99
+ if (input == null) return fallback;
100
+ if (typeGuard.isObject(input)) {
101
+ if (settings?.prettyJson) return JSON.stringify(input, null, 2);
102
+ return JSON.stringify(input);
103
+ }
104
+ return String(input);
68
105
  };
69
- //# sourceMappingURL=parser.js.map
106
+ //#endregion
107
+ //#region src/parser/_exports.ts
108
+ var _exports_exports = /* @__PURE__ */ __exportAll({
109
+ number: () => number,
110
+ percent: () => percent,
111
+ string: () => string
112
+ });
113
+ //#endregion
114
+ export { _exports_exports as parser };
115
+
116
+ //# sourceMappingURL=parser.js.map
package/parser.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sources":["../src/parser/number.ts","../src/parser/percent.ts","../src/parser/string.ts"],"sourcesContent":["import { format } from 'yummies/format';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface NumberParserSettings<TFallback = number> {\n digits?: number;\n fallback?: TFallback;\n /**\n * Round to upper boundary\n * 5.1 -> 6\n */\n ceil?: boolean;\n /**\n * Round to bottom boundary\n * 5.9 -> 5\n */\n floor?: boolean;\n clamped?: [min?: Maybe<number>, max?: Maybe<number>];\n}\n\n/**\n * Parses a number from raw input and optionally clamps, rounds or limits\n * fractional digits.\n *\n * Strings are normalized by removing spaces and replacing `,` with `.` before\n * parsing. Invalid inputs return the configured fallback.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param input Raw value to parse.\n * @param userSettings Parser settings merged with `number.defaultSettings`.\n * @returns Parsed number or fallback value.\n *\n * @example\n * ```ts\n * number('1 234,5'); // 1234.5\n * ```\n *\n * @example\n * ```ts\n * number('bad', { fallback: 0 }); // 0\n * ```\n */\nexport const number = <TFallback = number>(\n input: Maybe<unknown>,\n userSettings?: Maybe<NumberParserSettings<TFallback>>,\n): number | TFallback => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const fallback = (\n 'fallback' in settings ? settings.fallback : 0\n ) as TFallback;\n\n let result: number;\n\n if (typeGuard.isNumber(input)) {\n result = input;\n } else if (typeGuard.isString(input)) {\n const formattedInput = format.skipSpaces(input).replace(',', '.');\n if (formattedInput === '') {\n result = fallback as any;\n } else {\n result = Number(formattedInput);\n }\n } else {\n result = fallback as any;\n }\n\n if (typeGuard.isNumber(result)) {\n if (settings?.clamped != null) {\n result = Math.max(\n settings.clamped[0] ?? -Infinity,\n Math.min(result, settings.clamped[1] ?? Infinity),\n );\n }\n\n if (settings?.ceil != null) {\n result = Math.ceil(result);\n }\n\n if (settings?.floor != null) {\n result = Math.floor(result);\n }\n\n if (settings?.digits != null) {\n result = +result.toFixed(settings.digits);\n }\n\n return result;\n } else {\n return fallback;\n }\n};\n\nnumber.defaultSettings = {} as NumberParserSettings;\n","import type { Maybe } from 'yummies/types';\n\nimport { type NumberParserSettings, number } from './number.js';\n\n/**\n * Converts a value into a percentage of `maxValue` and parses the result with\n * the shared numeric parser.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param value Current value.\n * @param maxValue Maximum value representing `100%`.\n * @param settings Numeric parser settings for the computed percentage.\n * @returns Parsed percentage or fallback value.\n *\n * @example\n * ```ts\n * percent(25, 200); // 12.5\n * ```\n *\n * @example\n * ```ts\n * percent('bad', 100, { fallback: 0 }); // 0\n * ```\n */\nexport const percent = <TFallback = number>(\n value: Maybe<string | number>,\n maxValue?: Maybe<string | number>,\n settings?: Maybe<NumberParserSettings<TFallback>>,\n) => {\n return number<TFallback>((Number(value) / Number(maxValue)) * 100, settings);\n};\n","import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface StringParserSettings<TFallback = string> {\n fallback?: TFallback;\n prettyJson?: boolean;\n}\n\n/**\n * Converts arbitrary input into a string representation.\n *\n * Objects are serialized with `JSON.stringify`, optionally pretty-printed, and\n * nullish values resolve to the configured fallback.\n *\n * @template TFallback Fallback value type returned for nullish input.\n * @param input Raw value to stringify.\n * @param settings String conversion settings.\n * @returns Stringified input or fallback value.\n *\n * @example\n * ```ts\n * string(123); // '123'\n * ```\n *\n * @example\n * ```ts\n * string({ id: 1 }, { prettyJson: true });\n * ```\n */\nexport const string = <TFallback = string>(\n input: Maybe<unknown>,\n settings?: Maybe<StringParserSettings<TFallback>>,\n): string | TFallback => {\n const fallback =\n settings && 'fallback' in settings ? (settings.fallback as TFallback) : '';\n\n if (input == null) {\n return fallback;\n }\n\n if (typeGuard.isObject(input)) {\n if (settings?.prettyJson) {\n return JSON.stringify(input, null, 2);\n }\n\n return JSON.stringify(input);\n }\n\n return String(input);\n};\n"],"names":[],"mappings":";;AA0CO,MAAM,SAAS,CACpB,OACA,iBACuB;AACvB,QAAM,WAAW;AAAA,IACf,GAAG,OAAO;AAAA,IACV,GAAG;AAAA,EAAA;AAGL,QAAM,WACJ,cAAc,WAAW,SAAS,WAAW;AAG/C,MAAI;AAEJ,MAAI,UAAU,SAAS,KAAK,GAAG;AAC7B,aAAS;AAAA,EACX,WAAW,UAAU,SAAS,KAAK,GAAG;AACpC,UAAM,iBAAiB,OAAO,WAAW,KAAK,EAAE,QAAQ,KAAK,GAAG;AAChE,QAAI,mBAAmB,IAAI;AACzB,eAAS;AAAA,IACX,OAAO;AACL,eAAS,OAAO,cAAc;AAAA,IAChC;AAAA,EACF,OAAO;AACL,aAAS;AAAA,EACX;AAEA,MAAI,UAAU,SAAS,MAAM,GAAG;AAC9B,QAAI,UAAU,WAAW,MAAM;AAC7B,eAAS,KAAK;AAAA,QACZ,SAAS,QAAQ,CAAC,KAAK;AAAA,QACvB,KAAK,IAAI,QAAQ,SAAS,QAAQ,CAAC,KAAK,QAAQ;AAAA,MAAA;AAAA,IAEpD;AAEA,QAAI,UAAU,QAAQ,MAAM;AAC1B,eAAS,KAAK,KAAK,MAAM;AAAA,IAC3B;AAEA,QAAI,UAAU,SAAS,MAAM;AAC3B,eAAS,KAAK,MAAM,MAAM;AAAA,IAC5B;AAEA,QAAI,UAAU,UAAU,MAAM;AAC5B,eAAS,CAAC,OAAO,QAAQ,SAAS,MAAM;AAAA,IAC1C;AAEA,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEA,OAAO,kBAAkB,CAAA;ACxElB,MAAM,UAAU,CACrB,OACA,UACA,aACG;AACH,SAAO,OAAmB,OAAO,KAAK,IAAI,OAAO,QAAQ,IAAK,KAAK,QAAQ;AAC7E;ACDO,MAAM,SAAS,CACpB,OACA,aACuB;AACvB,QAAM,WACJ,YAAY,cAAc,WAAY,SAAS,WAAyB;AAE1E,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,SAAS,KAAK,GAAG;AAC7B,QAAI,UAAU,YAAY;AACxB,aAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,IACtC;AAEA,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AAEA,SAAO,OAAO,KAAK;AACrB;;;;;;;"}
1
+ {"version":3,"file":"parser.js","names":[],"sources":["../src/parser/number.ts","../src/parser/percent.ts","../src/parser/string.ts","../src/parser/_exports.ts"],"sourcesContent":["import { format } from 'yummies/format';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface NumberParserSettings<TFallback = number> {\n digits?: number;\n fallback?: TFallback;\n /**\n * Round to upper boundary\n * 5.1 -> 6\n */\n ceil?: boolean;\n /**\n * Round to bottom boundary\n * 5.9 -> 5\n */\n floor?: boolean;\n clamped?: [min?: Maybe<number>, max?: Maybe<number>];\n}\n\n/**\n * Parses a number from raw input and optionally clamps, rounds or limits\n * fractional digits.\n *\n * Strings are normalized by removing spaces and replacing `,` with `.` before\n * parsing. Invalid inputs return the configured fallback.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param input Raw value to parse.\n * @param userSettings Parser settings merged with `number.defaultSettings`.\n * @returns Parsed number or fallback value.\n *\n * @example\n * ```ts\n * number('1 234,5'); // 1234.5\n * ```\n *\n * @example\n * ```ts\n * number('bad', { fallback: 0 }); // 0\n * ```\n */\nexport const number = <TFallback = number>(\n input: Maybe<unknown>,\n userSettings?: Maybe<NumberParserSettings<TFallback>>,\n): number | TFallback => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const fallback = (\n 'fallback' in settings ? settings.fallback : 0\n ) as TFallback;\n\n let result: number;\n\n if (typeGuard.isNumber(input)) {\n result = input;\n } else if (typeGuard.isString(input)) {\n const formattedInput = format.skipSpaces(input).replace(',', '.');\n if (formattedInput === '') {\n result = fallback as any;\n } else {\n result = Number(formattedInput);\n }\n } else {\n result = fallback as any;\n }\n\n if (typeGuard.isNumber(result)) {\n if (settings?.clamped != null) {\n result = Math.max(\n settings.clamped[0] ?? -Infinity,\n Math.min(result, settings.clamped[1] ?? Infinity),\n );\n }\n\n if (settings?.ceil != null) {\n result = Math.ceil(result);\n }\n\n if (settings?.floor != null) {\n result = Math.floor(result);\n }\n\n if (settings?.digits != null) {\n result = +result.toFixed(settings.digits);\n }\n\n return result;\n } else {\n return fallback;\n }\n};\n\nnumber.defaultSettings = {} as NumberParserSettings;\n","import type { Maybe } from 'yummies/types';\n\nimport { type NumberParserSettings, number } from './number.js';\n\n/**\n * Converts a value into a percentage of `maxValue` and parses the result with\n * the shared numeric parser.\n *\n * @template TFallback Fallback value type returned when parsing fails.\n * @param value Current value.\n * @param maxValue Maximum value representing `100%`.\n * @param settings Numeric parser settings for the computed percentage.\n * @returns Parsed percentage or fallback value.\n *\n * @example\n * ```ts\n * percent(25, 200); // 12.5\n * ```\n *\n * @example\n * ```ts\n * percent('bad', 100, { fallback: 0 }); // 0\n * ```\n */\nexport const percent = <TFallback = number>(\n value: Maybe<string | number>,\n maxValue?: Maybe<string | number>,\n settings?: Maybe<NumberParserSettings<TFallback>>,\n) => {\n return number<TFallback>((Number(value) / Number(maxValue)) * 100, settings);\n};\n","import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/types';\n\nexport interface StringParserSettings<TFallback = string> {\n fallback?: TFallback;\n prettyJson?: boolean;\n}\n\n/**\n * Converts arbitrary input into a string representation.\n *\n * Objects are serialized with `JSON.stringify`, optionally pretty-printed, and\n * nullish values resolve to the configured fallback.\n *\n * @template TFallback Fallback value type returned for nullish input.\n * @param input Raw value to stringify.\n * @param settings String conversion settings.\n * @returns Stringified input or fallback value.\n *\n * @example\n * ```ts\n * string(123); // '123'\n * ```\n *\n * @example\n * ```ts\n * string({ id: 1 }, { prettyJson: true });\n * ```\n */\nexport const string = <TFallback = string>(\n input: Maybe<unknown>,\n settings?: Maybe<StringParserSettings<TFallback>>,\n): string | TFallback => {\n const fallback =\n settings && 'fallback' in settings ? (settings.fallback as TFallback) : '';\n\n if (input == null) {\n return fallback;\n }\n\n if (typeGuard.isObject(input)) {\n if (settings?.prettyJson) {\n return JSON.stringify(input, null, 2);\n }\n\n return JSON.stringify(input);\n }\n\n return String(input);\n};\n","export * from './number.js';\nexport * from './percent.js';\nexport * from './string.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,IAAa,UACX,OACA,iBACuB;CACvB,MAAM,WAAW;EACf,GAAG,OAAO;EACV,GAAG;EACJ;CAED,MAAM,WACJ,cAAc,WAAW,SAAS,WAAW;CAG/C,IAAI;AAEJ,KAAI,UAAU,SAAS,MAAM,CAC3B,UAAS;UACA,UAAU,SAAS,MAAM,EAAE;EACpC,MAAM,iBAAiB,OAAO,WAAW,MAAM,CAAC,QAAQ,KAAK,IAAI;AACjE,MAAI,mBAAmB,GACrB,UAAS;MAET,UAAS,OAAO,eAAe;OAGjC,UAAS;AAGX,KAAI,UAAU,SAAS,OAAO,EAAE;AAC9B,MAAI,UAAU,WAAW,KACvB,UAAS,KAAK,IACZ,SAAS,QAAQ,MAAM,WACvB,KAAK,IAAI,QAAQ,SAAS,QAAQ,MAAM,SAAS,CAClD;AAGH,MAAI,UAAU,QAAQ,KACpB,UAAS,KAAK,KAAK,OAAO;AAG5B,MAAI,UAAU,SAAS,KACrB,UAAS,KAAK,MAAM,OAAO;AAG7B,MAAI,UAAU,UAAU,KACtB,UAAS,CAAC,OAAO,QAAQ,SAAS,OAAO;AAG3C,SAAO;OAEP,QAAO;;AAIX,OAAO,kBAAkB,EAAE;;;;;;;;;;;;;;;;;;;;;;;ACxE3B,IAAa,WACX,OACA,UACA,aACG;AACH,QAAO,OAAmB,OAAO,MAAM,GAAG,OAAO,SAAS,GAAI,KAAK,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;ACA9E,IAAa,UACX,OACA,aACuB;CACvB,MAAM,WACJ,YAAY,cAAc,WAAY,SAAS,WAAyB;AAE1E,KAAI,SAAS,KACX,QAAO;AAGT,KAAI,UAAU,SAAS,MAAM,EAAE;AAC7B,MAAI,UAAU,WACZ,QAAO,KAAK,UAAU,OAAO,MAAM,EAAE;AAGvC,SAAO,KAAK,UAAU,MAAM;;AAG9B,QAAO,OAAO,MAAM"}