umt 2.5.0 → 2.6.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 (268) hide show
  1. package/README.md +11 -0
  2. package/module/Array/generateNumberArray.js +13 -7
  3. package/module/Array/generateNumberArray.js.map +1 -1
  4. package/module/Array/getArraysCommon.js +21 -3
  5. package/module/Array/getArraysCommon.js.map +1 -1
  6. package/module/Array/groupBy.js +1 -1
  7. package/module/Array/groupBy.js.map +1 -1
  8. package/module/Array/index.d.ts +2 -0
  9. package/module/Array/index.js +2 -0
  10. package/module/Array/index.js.map +1 -1
  11. package/module/Array/ultraNumberSort.js +2 -2
  12. package/module/Array/ultraNumberSort.js.map +1 -1
  13. package/module/Array/uniqBy.d.ts +7 -0
  14. package/module/Array/uniqBy.js +19 -0
  15. package/module/Array/uniqBy.js.map +1 -0
  16. package/module/Array/unique.d.ts +6 -0
  17. package/module/Array/unique.js +9 -0
  18. package/module/Array/unique.js.map +1 -0
  19. package/module/Color/rgbaToHsla.js +1 -1
  20. package/module/Color/rgbaToHsla.js.map +1 -1
  21. package/module/Date/birthday.js +14 -6
  22. package/module/Date/birthday.js.map +1 -1
  23. package/module/Date/isLeapYear.js +3 -0
  24. package/module/Date/isLeapYear.js.map +1 -1
  25. package/module/Error/index.d.ts +1 -0
  26. package/module/Error/index.js +1 -0
  27. package/module/Error/index.js.map +1 -1
  28. package/module/Error/retry.d.ts +37 -0
  29. package/module/Error/retry.js +47 -0
  30. package/module/Error/retry.js.map +1 -0
  31. package/module/IP/getIpClass.js +1 -1
  32. package/module/IP/getIpClass.js.map +1 -1
  33. package/module/IP/getNetworkAddress.js +2 -2
  34. package/module/IP/getNetworkAddress.js.map +1 -1
  35. package/module/IP/ipToBinaryString.js +2 -2
  36. package/module/IP/ipToBinaryString.js.map +1 -1
  37. package/module/IP/subnetMaskToCidr.js +1 -1
  38. package/module/IP/subnetMaskToCidr.js.map +1 -1
  39. package/module/Math/calculator/core.js +21 -13
  40. package/module/Math/calculator/core.js.map +1 -1
  41. package/module/Math/calculator/literalExpression.js +19 -7
  42. package/module/Math/calculator/literalExpression.js.map +1 -1
  43. package/module/Math/division.js +3 -3
  44. package/module/Math/division.js.map +1 -1
  45. package/module/Math/gcd.js +26 -4
  46. package/module/Math/gcd.js.map +1 -1
  47. package/module/Math/standardDeviation.js +4 -2
  48. package/module/Math/standardDeviation.js.map +1 -1
  49. package/module/Object/has.js +1 -2
  50. package/module/Object/has.js.map +1 -1
  51. package/module/Object/index.d.ts +4 -0
  52. package/module/Object/index.js +4 -0
  53. package/module/Object/index.js.map +1 -1
  54. package/module/Object/isEmpty.d.ts +6 -0
  55. package/module/Object/isEmpty.js +20 -0
  56. package/module/Object/isEmpty.js.map +1 -0
  57. package/module/Object/merge.d.ts +8 -0
  58. package/module/Object/merge.js +10 -0
  59. package/module/Object/merge.js.map +1 -0
  60. package/module/Object/mergeDeep.d.ts +8 -0
  61. package/module/Object/mergeDeep.js +37 -0
  62. package/module/Object/mergeDeep.js.map +1 -0
  63. package/module/Object/omit.d.ts +7 -0
  64. package/module/Object/omit.js +14 -0
  65. package/module/Object/omit.js.map +1 -0
  66. package/module/Object/pickDeep.d.ts +2 -2
  67. package/module/Object/pickDeep.js +4 -4
  68. package/module/Object/pickDeep.js.map +1 -1
  69. package/module/Simple/Date/dayOfWeekSimple.js +3 -3
  70. package/module/Simple/Date/dayOfWeekSimple.js.map +1 -1
  71. package/module/String/camelCase.d.ts +6 -0
  72. package/module/String/camelCase.js +12 -0
  73. package/module/String/camelCase.js.map +1 -0
  74. package/module/String/escapeHtml.d.ts +6 -0
  75. package/module/String/escapeHtml.js +19 -0
  76. package/module/String/escapeHtml.js.map +1 -0
  77. package/module/String/formatString/applyFormatter.d.ts +25 -0
  78. package/module/String/formatString/applyFormatter.js +71 -0
  79. package/module/String/formatString/applyFormatter.js.map +1 -0
  80. package/module/String/formatString/defaultFormatters.d.ts +24 -0
  81. package/module/String/formatString/defaultFormatters.js +59 -0
  82. package/module/String/formatString/defaultFormatters.js.map +1 -0
  83. package/module/String/formatString/detectMode.d.ts +26 -0
  84. package/module/String/formatString/detectMode.js +61 -0
  85. package/module/String/formatString/detectMode.js.map +1 -0
  86. package/module/String/formatString/getValue.d.ts +27 -0
  87. package/module/String/formatString/getValue.js +56 -0
  88. package/module/String/formatString/getValue.js.map +1 -0
  89. package/module/String/formatString/index.d.ts +91 -0
  90. package/module/String/formatString/index.js +38 -0
  91. package/module/String/formatString/index.js.map +1 -0
  92. package/module/String/index.d.ts +5 -0
  93. package/module/String/index.js +5 -0
  94. package/module/String/index.js.map +1 -1
  95. package/module/String/kebabCase.d.ts +6 -0
  96. package/module/String/kebabCase.js +22 -0
  97. package/module/String/kebabCase.js.map +1 -0
  98. package/module/String/levenshteinDistance.d.ts +8 -0
  99. package/module/String/levenshteinDistance.js +38 -0
  100. package/module/String/levenshteinDistance.js.map +1 -0
  101. package/module/String/stringSimilarity.d.ts +8 -0
  102. package/module/String/stringSimilarity.js +23 -0
  103. package/module/String/stringSimilarity.js.map +1 -0
  104. package/module/Validate/core/index.js +0 -1
  105. package/module/Validate/core/index.js.map +1 -1
  106. package/module/Validate/isDouble.js +1 -1
  107. package/module/Validate/isDouble.js.map +1 -1
  108. package/module/Validate/isNode.js +1 -0
  109. package/module/Validate/isNode.js.map +1 -1
  110. package/module/Validate/isNumber.js +1 -1
  111. package/module/Validate/isNumber.js.map +1 -1
  112. package/module/Validate/isValueNaN.js +1 -1
  113. package/module/Validate/isValueNaN.js.map +1 -1
  114. package/module/Validate/number/even.js +7 -1
  115. package/module/Validate/number/even.js.map +1 -1
  116. package/module/Validate/number/odd.js +7 -1
  117. package/module/Validate/number/odd.js.map +1 -1
  118. package/module/Validate/string/email.js +20 -2
  119. package/module/Validate/string/email.js.map +1 -1
  120. package/module/es5/Array/generateNumberArray.js +15 -9
  121. package/module/es5/Array/getArraysCommon.js +39 -4
  122. package/module/es5/Array/groupBy.js +1 -1
  123. package/module/es5/Array/index.d.ts +2 -0
  124. package/module/es5/Array/index.js +22 -0
  125. package/module/es5/Array/ultraNumberSort.js +2 -2
  126. package/module/es5/Array/uniqBy.d.ts +7 -0
  127. package/module/es5/Array/uniqBy.js +36 -0
  128. package/module/es5/Array/unique.d.ts +6 -0
  129. package/module/es5/Array/unique.js +20 -0
  130. package/module/es5/Color/rgbaToHsla.js +1 -1
  131. package/module/es5/Date/birthday.js +17 -3
  132. package/module/es5/Date/isLeapYear.js +3 -0
  133. package/module/es5/Error/index.d.ts +1 -0
  134. package/module/es5/Error/index.js +11 -0
  135. package/module/es5/Error/retry.d.ts +37 -0
  136. package/module/es5/Error/retry.js +88 -0
  137. package/module/es5/IP/getIpClass.js +1 -1
  138. package/module/es5/IP/getNetworkAddress.js +2 -2
  139. package/module/es5/IP/ipToBinaryString.js +2 -2
  140. package/module/es5/IP/subnetMaskToCidr.js +1 -1
  141. package/module/es5/Math/calculator/core.js +17 -9
  142. package/module/es5/Math/calculator/literalExpression.js +19 -6
  143. package/module/es5/Math/division.js +3 -3
  144. package/module/es5/Math/gcd.js +43 -5
  145. package/module/es5/Math/standardDeviation.js +4 -2
  146. package/module/es5/Object/has.js +1 -1
  147. package/module/es5/Object/index.d.ts +4 -0
  148. package/module/es5/Object/index.js +44 -0
  149. package/module/es5/Object/isEmpty.d.ts +6 -0
  150. package/module/es5/Object/isEmpty.js +26 -0
  151. package/module/es5/Object/merge.d.ts +8 -0
  152. package/module/es5/Object/merge.js +18 -0
  153. package/module/es5/Object/mergeDeep.d.ts +8 -0
  154. package/module/es5/Object/mergeDeep.js +46 -0
  155. package/module/es5/Object/omit.d.ts +7 -0
  156. package/module/es5/Object/omit.js +29 -0
  157. package/module/es5/Object/pickDeep.d.ts +2 -2
  158. package/module/es5/Object/pickDeep.js +4 -4
  159. package/module/es5/Simple/Date/dayOfWeekSimple.js +3 -3
  160. package/module/es5/String/camelCase.d.ts +6 -0
  161. package/module/es5/String/camelCase.js +18 -0
  162. package/module/es5/String/escapeHtml.d.ts +6 -0
  163. package/module/es5/String/escapeHtml.js +27 -0
  164. package/module/es5/String/formatString/applyFormatter.d.ts +25 -0
  165. package/module/es5/String/formatString/applyFormatter.js +100 -0
  166. package/module/es5/String/formatString/defaultFormatters.d.ts +24 -0
  167. package/module/es5/String/formatString/defaultFormatters.js +79 -0
  168. package/module/es5/String/formatString/detectMode.d.ts +26 -0
  169. package/module/es5/String/formatString/detectMode.js +60 -0
  170. package/module/es5/String/formatString/getValue.d.ts +27 -0
  171. package/module/es5/String/formatString/getValue.js +85 -0
  172. package/module/es5/String/formatString/index.d.ts +91 -0
  173. package/module/es5/String/formatString/index.js +152 -0
  174. package/module/es5/String/index.d.ts +5 -0
  175. package/module/es5/String/index.js +55 -0
  176. package/module/es5/String/kebabCase.d.ts +6 -0
  177. package/module/es5/String/kebabCase.js +26 -0
  178. package/module/es5/String/levenshteinDistance.d.ts +8 -0
  179. package/module/es5/String/levenshteinDistance.js +58 -0
  180. package/module/es5/String/stringSimilarity.d.ts +8 -0
  181. package/module/es5/String/stringSimilarity.js +30 -0
  182. package/module/es5/Validate/core/index.js +0 -1
  183. package/module/es5/Validate/isDouble.js +1 -1
  184. package/module/es5/Validate/isNode.js +1 -0
  185. package/module/es5/Validate/isNumber.js +1 -1
  186. package/module/es5/Validate/isValueNaN.js +1 -1
  187. package/module/es5/Validate/number/even.js +4 -0
  188. package/module/es5/Validate/number/odd.js +4 -0
  189. package/module/es5/Validate/string/email.js +26 -1
  190. package/module/es5/tsconfig.tsbuildinfo +1 -1
  191. package/module/es5/types/index.d.ts +1 -0
  192. package/module/es5/types/index.js +11 -0
  193. package/module/es5/types/logic/deepPartial.d.ts +37 -0
  194. package/module/es5/types/logic/deepPartial.js +5 -0
  195. package/module/es5/types/logic/deepRequired.d.ts +37 -0
  196. package/module/es5/types/logic/deepRequired.js +5 -0
  197. package/module/es5/types/logic/index.d.ts +3 -0
  198. package/module/es5/types/logic/index.js +33 -0
  199. package/module/es5/types/logic/unionToIntersection.d.ts +12 -0
  200. package/module/es5/types/logic/unionToIntersection.js +5 -0
  201. package/module/es5/types/object/index.d.ts +1 -0
  202. package/module/es5/types/object/index.js +11 -0
  203. package/module/es5/types/object/pickDeep.d.ts +13 -1
  204. package/module/es5/types/object/shallowObjectValue.d.ts +9 -0
  205. package/module/es5/types/object/shallowObjectValue.js +5 -0
  206. package/module/es5/types/string/formatString/formatData.d.ts +17 -0
  207. package/module/es5/types/string/formatString/formatData.js +5 -0
  208. package/module/es5/types/string/formatString/formatOptions.d.ts +21 -0
  209. package/module/es5/types/string/formatString/formatOptions.js +5 -0
  210. package/module/es5/types/string/formatString/formatString.d.ts +4 -0
  211. package/module/es5/types/string/formatString/formatString.js +49 -0
  212. package/module/es5/types/string/formatString/formatValue.d.ts +15 -0
  213. package/module/es5/types/string/formatString/formatValue.js +5 -0
  214. package/module/es5/types/string/formatString/formatter.d.ts +13 -0
  215. package/module/es5/types/string/formatString/formatter.js +5 -0
  216. package/module/es5/types/string/formatString/index.d.ts +5 -0
  217. package/module/es5/types/string/formatString/index.js +60 -0
  218. package/module/es5/types/string/index.d.ts +1 -0
  219. package/module/es5/types/string/index.js +16 -0
  220. package/module/types/index.d.ts +1 -0
  221. package/module/types/index.js +1 -0
  222. package/module/types/index.js.map +1 -1
  223. package/module/types/logic/deepPartial.d.ts +37 -0
  224. package/module/types/logic/deepPartial.js +36 -0
  225. package/module/types/logic/deepPartial.js.map +1 -0
  226. package/module/types/logic/deepRequired.d.ts +37 -0
  227. package/module/types/logic/deepRequired.js +2 -0
  228. package/module/types/logic/deepRequired.js.map +1 -0
  229. package/module/types/logic/index.d.ts +3 -0
  230. package/module/types/logic/index.js +3 -0
  231. package/module/types/logic/index.js.map +1 -1
  232. package/module/types/logic/unionToIntersection.d.ts +12 -0
  233. package/module/types/logic/unionToIntersection.js +2 -0
  234. package/module/types/logic/unionToIntersection.js.map +1 -0
  235. package/module/types/object/index.d.ts +1 -0
  236. package/module/types/object/index.js +1 -0
  237. package/module/types/object/index.js.map +1 -1
  238. package/module/types/object/pickDeep.d.ts +13 -1
  239. package/module/types/object/shallowObjectValue.d.ts +9 -0
  240. package/module/types/object/shallowObjectValue.js +2 -0
  241. package/module/types/object/shallowObjectValue.js.map +1 -0
  242. package/module/types/string/formatString/formatData.d.ts +17 -0
  243. package/module/types/string/formatString/formatData.js +2 -0
  244. package/module/types/string/formatString/formatData.js.map +1 -0
  245. package/module/types/string/formatString/formatOptions.d.ts +21 -0
  246. package/module/types/string/formatString/formatOptions.js +2 -0
  247. package/module/types/string/formatString/formatOptions.js.map +1 -0
  248. package/module/types/string/formatString/formatString.d.ts +4 -0
  249. package/module/types/string/formatString/formatString.js +5 -0
  250. package/module/types/string/formatString/formatString.js.map +1 -0
  251. package/module/types/string/formatString/formatValue.d.ts +15 -0
  252. package/module/types/string/formatString/formatValue.js +2 -0
  253. package/module/types/string/formatString/formatValue.js.map +1 -0
  254. package/module/types/string/formatString/formatter.d.ts +13 -0
  255. package/module/types/string/formatString/formatter.js +2 -0
  256. package/module/types/string/formatString/formatter.js.map +1 -0
  257. package/module/types/string/formatString/index.d.ts +5 -0
  258. package/module/types/string/formatString/index.js +6 -0
  259. package/module/types/string/formatString/index.js.map +1 -0
  260. package/module/types/string/index.d.ts +1 -0
  261. package/module/types/string/index.js +2 -0
  262. package/module/types/string/index.js.map +1 -0
  263. package/package.json +31 -32
  264. package/module/String/formatString.d.ts +0 -13
  265. package/module/String/formatString.js +0 -18
  266. package/module/String/formatString.js.map +0 -1
  267. package/module/es5/String/formatString.d.ts +0 -13
  268. package/module/es5/String/formatString.js +0 -26
@@ -7,7 +7,7 @@ import type { PickDeepKey } from "$/object/pickDeepKey";
7
7
  * @template K - Type of property keys to select. Must be a subset of PickDeepKey<T>.
8
8
  * @param {T} object - The source object to extract properties from.
9
9
  * @param {...K[]} keys - Property keys to extract. Can use dot notation for nested properties.
10
- * @returns {PickDeep<T>} A new object containing only the specified properties.
10
+ * @returns {PickDeep<T, K>} A new object containing only the specified properties.
11
11
  *
12
12
  * @example
13
13
  * ```typescript
@@ -16,4 +16,4 @@ import type { PickDeepKey } from "$/object/pickDeepKey";
16
16
  * // picked will be { a: { b: { c: 1 } }, f: 4 }
17
17
  * ```
18
18
  */
19
- export declare const pickDeep: <T extends object, K extends PickDeepKey<T>>(object: T, ...keys: K[]) => PickDeep<T>;
19
+ export declare const pickDeep: <T extends object, const K extends readonly PickDeepKey<T>[]>(object: T, ...keys: K) => PickDeep<T, K>;
@@ -24,7 +24,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
24
24
  * @template K - Type of property keys to select. Must be a subset of PickDeepKey<T>.
25
25
  * @param {T} object - The source object to extract properties from.
26
26
  * @param {...K[]} keys - Property keys to extract. Can use dot notation for nested properties.
27
- * @returns {PickDeep<T>} A new object containing only the specified properties.
27
+ * @returns {PickDeep<T, K>} A new object containing only the specified properties.
28
28
  *
29
29
  * @example
30
30
  * ```typescript
@@ -34,7 +34,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
34
34
  * ```
35
35
  */
36
36
  var pickDeep = exports.pickDeep = function pickDeep(object) {
37
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
37
+ // biome-ignore lint/suspicious/noExplicitAny: ignore
38
38
  var result = {};
39
39
  for (var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
40
40
  keys[_key - 1] = arguments[_key];
@@ -42,9 +42,9 @@ var pickDeep = exports.pickDeep = function pickDeep(object) {
42
42
  for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
43
43
  var key = _keys[_i];
44
44
  var parts = key.split(".");
45
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
45
+ // biome-ignore lint/suspicious/noExplicitAny: ignore
46
46
  var current = _objectSpread({}, object);
47
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
47
+ // biome-ignore lint/suspicious/noExplicitAny: ignore
48
48
  var target = result;
49
49
  var _iterator = _createForOfIteratorHelper(parts.entries()),
50
50
  _step;
@@ -28,7 +28,7 @@ function dayOfWeekSimple(properties) {
28
28
  if (typeof properties === "string") {
29
29
  if (properties.includes(":")) {
30
30
  var _ref = properties.split(":")
31
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
31
+ // biome-ignore lint/suspicious/noExplicitAny: ignore
32
32
  .map(Number),
33
33
  _ref2 = _slicedToArray(_ref, 3),
34
34
  _year = _ref2[0],
@@ -42,7 +42,7 @@ function dayOfWeekSimple(properties) {
42
42
  }
43
43
  if (properties.includes("/")) {
44
44
  var _ref3 = properties.split("/")
45
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
45
+ // biome-ignore lint/suspicious/noExplicitAny: ignore
46
46
  .map(Number),
47
47
  _ref4 = _slicedToArray(_ref3, 3),
48
48
  _year2 = _ref4[0],
@@ -55,7 +55,7 @@ function dayOfWeekSimple(properties) {
55
55
  }, timeDifference);
56
56
  }
57
57
  var _ref5 = properties.split("-")
58
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
58
+ // biome-ignore lint/suspicious/noExplicitAny: ignore
59
59
  .map(Number),
60
60
  _ref6 = _slicedToArray(_ref5, 3),
61
61
  year = _ref6[0],
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Converts a string to camelCase
3
+ * @param str - The string to convert
4
+ * @returns The camelCase string
5
+ */
6
+ export declare const camelCase: (string_: string) => string;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.camelCase = void 0;
7
+ /**
8
+ * Converts a string to camelCase
9
+ * @param str - The string to convert
10
+ * @returns The camelCase string
11
+ */
12
+ var camelCase = exports.camelCase = function camelCase(string_) {
13
+ return string_.replaceAll(/[^a-zA-Z0-9]+(.)/g, function (_, _char) {
14
+ return _char.toUpperCase();
15
+ }).replaceAll(/[^a-zA-Z0-9]+$/g, "").replace(/^[A-Z]/, function (_char2) {
16
+ return _char2.toLowerCase();
17
+ });
18
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Escapes HTML special characters in a string
3
+ * @param str - The string to escape
4
+ * @returns The escaped string
5
+ */
6
+ export declare const escapeHtml: (string_: string) => string;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.escapeHtml = void 0;
7
+ /**
8
+ * HTML entities map for escaping
9
+ */
10
+ var htmlEscapeMap = {
11
+ "&": "&amp;",
12
+ "<": "&lt;",
13
+ ">": "&gt;",
14
+ '"': "&quot;",
15
+ "'": "&#39;"
16
+ };
17
+
18
+ /**
19
+ * Escapes HTML special characters in a string
20
+ * @param str - The string to escape
21
+ * @returns The escaped string
22
+ */
23
+ var escapeHtml = exports.escapeHtml = function escapeHtml(string_) {
24
+ return string_.replaceAll(/[&<>"']/g, function (match) {
25
+ return htmlEscapeMap[match];
26
+ });
27
+ };
@@ -0,0 +1,25 @@
1
+ import type { Formatter } from "$/string/formatString/formatter";
2
+ /**
3
+ * Applies a formatter function to a value with optional arguments.
4
+ *
5
+ * Parses formatter syntax like "upper", "currency(ja-JP,JPY)", "pad(4,0)" and applies
6
+ * the corresponding formatter function with parsed arguments.
7
+ *
8
+ * @param value - The value to format
9
+ * @param formatterString - Formatter name with optional arguments (e.g., "upper", "currency(ja-JP,JPY)")
10
+ * @param formatters - Available formatter functions
11
+ * @returns Formatted string, or original string value if formatter not found/invalid
12
+ *
13
+ * @example
14
+ * // Simple formatter
15
+ * applyFormatter("hello", "upper", { upper: (v) => String(v).toUpperCase() }) // → "HELLO"
16
+ *
17
+ * @example
18
+ * // Formatter with arguments
19
+ * applyFormatter(42, "pad(4,0)", { pad: (v, len, char) => String(v).padStart(+len, char) }) // → "0042"
20
+ *
21
+ * @example
22
+ * // Invalid formatter returns original value
23
+ * applyFormatter("test", "invalid!@#", {}) // → "test"
24
+ */
25
+ export declare function applyFormatter(value: unknown, formatterString: string, formatters: Record<string, Formatter>): string;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.applyFormatter = applyFormatter;
7
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
8
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
9
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
11
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
12
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
13
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
15
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
16
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
17
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
18
+ /**
19
+ * Applies a formatter function to a value with optional arguments.
20
+ *
21
+ * Parses formatter syntax like "upper", "currency(ja-JP,JPY)", "pad(4,0)" and applies
22
+ * the corresponding formatter function with parsed arguments.
23
+ *
24
+ * @param value - The value to format
25
+ * @param formatterString - Formatter name with optional arguments (e.g., "upper", "currency(ja-JP,JPY)")
26
+ * @param formatters - Available formatter functions
27
+ * @returns Formatted string, or original string value if formatter not found/invalid
28
+ *
29
+ * @example
30
+ * // Simple formatter
31
+ * applyFormatter("hello", "upper", { upper: (v) => String(v).toUpperCase() }) // → "HELLO"
32
+ *
33
+ * @example
34
+ * // Formatter with arguments
35
+ * applyFormatter(42, "pad(4,0)", { pad: (v, len, char) => String(v).padStart(+len, char) }) // → "0042"
36
+ *
37
+ * @example
38
+ * // Invalid formatter returns original value
39
+ * applyFormatter("test", "invalid!@#", {}) // → "test"
40
+ */
41
+ function applyFormatter(value, formatterString, formatters) {
42
+ var match = formatterString.match(/^(\w+)(?:\(([^)]*)\))?$/);
43
+ if (!match) {
44
+ return String(value);
45
+ }
46
+ var _match = _slicedToArray(match, 3),
47
+ formatterName = _match[1],
48
+ argumentsString = _match[2];
49
+ var formatter = formatters[formatterName];
50
+ if (!formatter) {
51
+ return String(value);
52
+ }
53
+ var arguments_ = argumentsString ? parseArguments(argumentsString) : [];
54
+ return formatter.apply(void 0, [value].concat(_toConsumableArray(arguments_)));
55
+ }
56
+
57
+ /**
58
+ * Parses comma-separated arguments while preserving quoted strings
59
+ * @param argumentsString - String containing comma-separated arguments
60
+ * @returns Array of parsed arguments
61
+ */
62
+ function parseArguments(argumentsString) {
63
+ var arguments_ = [];
64
+ var current = "";
65
+ var inQuotes = false;
66
+ var quoteChar = "";
67
+ var _iterator = _createForOfIteratorHelper(argumentsString),
68
+ _step;
69
+ try {
70
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
71
+ var _char = _step.value;
72
+ if (!inQuotes && (_char === '"' || _char === "'")) {
73
+ inQuotes = true;
74
+ quoteChar = _char;
75
+ continue;
76
+ }
77
+ if (inQuotes && _char === quoteChar) {
78
+ inQuotes = false;
79
+ quoteChar = "";
80
+ continue;
81
+ }
82
+ if (!inQuotes && _char === ",") {
83
+ var _trimmed = current.trim();
84
+ arguments_.push(_trimmed === "" ? " " : _trimmed);
85
+ current = "";
86
+ continue;
87
+ }
88
+ current += _char;
89
+ }
90
+
91
+ // Handle last argument
92
+ } catch (err) {
93
+ _iterator.e(err);
94
+ } finally {
95
+ _iterator.f();
96
+ }
97
+ var trimmed = current.trim();
98
+ arguments_.push(trimmed === "" ? " " : trimmed);
99
+ return arguments_;
100
+ }
@@ -0,0 +1,24 @@
1
+ import type { Formatter } from "$/string/formatString/formatter";
2
+ /**
3
+ * Built-in formatter functions for formatString.
4
+ *
5
+ * Each formatter takes a value and optional arguments, returning a formatted string.
6
+ * Formatters are used with syntax like {value:formatterName} or {value:formatterName(arg1,arg2)}.
7
+ *
8
+ * Available formatters:
9
+ * - upper: Convert to uppercase
10
+ * - lower: Convert to lowercase
11
+ * - currency: Format as currency with locale support
12
+ * - date: Format dates with locale and format options
13
+ * - time: Format time with locale support
14
+ * - number: Format numbers with precision control
15
+ * - plural: Choose singular/plural form based on count
16
+ * - pad: Pad string with characters to specified length
17
+ *
18
+ * @example
19
+ * // Usage in formatString
20
+ * formatString("{name:upper}", { name: "alice" }) // → "ALICE"
21
+ * formatString("{price:currency(ja-JP,JPY)}", { price: 1000 }) // → "¥1,000"
22
+ * formatString("{count:plural(item,items)}", { count: 1 }) // → "item"
23
+ */
24
+ export declare const defaultFormatters: Record<string, Formatter>;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaultFormatters = void 0;
7
+ function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); }
8
+ /**
9
+ * Built-in formatter functions for formatString.
10
+ *
11
+ * Each formatter takes a value and optional arguments, returning a formatted string.
12
+ * Formatters are used with syntax like {value:formatterName} or {value:formatterName(arg1,arg2)}.
13
+ *
14
+ * Available formatters:
15
+ * - upper: Convert to uppercase
16
+ * - lower: Convert to lowercase
17
+ * - currency: Format as currency with locale support
18
+ * - date: Format dates with locale and format options
19
+ * - time: Format time with locale support
20
+ * - number: Format numbers with precision control
21
+ * - plural: Choose singular/plural form based on count
22
+ * - pad: Pad string with characters to specified length
23
+ *
24
+ * @example
25
+ * // Usage in formatString
26
+ * formatString("{name:upper}", { name: "alice" }) // → "ALICE"
27
+ * formatString("{price:currency(ja-JP,JPY)}", { price: 1000 }) // → "¥1,000"
28
+ * formatString("{count:plural(item,items)}", { count: 1 }) // → "item"
29
+ */
30
+ var defaultFormatters = exports.defaultFormatters = {
31
+ upper: function upper(value) {
32
+ return String(value).toUpperCase();
33
+ },
34
+ lower: function lower(value) {
35
+ return String(value).toLowerCase();
36
+ },
37
+ currency: function currency(value) {
38
+ var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "en-US";
39
+ var _currency = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "USD";
40
+ return new Intl.NumberFormat(locale, {
41
+ style: "currency",
42
+ currency: _currency
43
+ }).format(Number(value));
44
+ },
45
+ date: function date(value) {
46
+ var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "en-US";
47
+ var format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "short";
48
+ var date = value instanceof Date ? value : new Date(String(value));
49
+ if (format === "iso") {
50
+ return date.toISOString();
51
+ }
52
+ if (format === "time") {
53
+ return date.toLocaleTimeString(locale);
54
+ }
55
+ return date.toLocaleDateString(locale);
56
+ },
57
+ time: function time(value) {
58
+ var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "en-US";
59
+ var date = value instanceof Date ? value : new Date(String(value));
60
+ return date.toLocaleTimeString(locale);
61
+ },
62
+ number: function number(value) {
63
+ var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "en-US";
64
+ var minimumFractionDigits = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0";
65
+ var maximumFractionDigits = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "20";
66
+ return new Intl.NumberFormat(locale, {
67
+ minimumFractionDigits: Number(minimumFractionDigits),
68
+ maximumFractionDigits: Number(maximumFractionDigits)
69
+ }).format(Number(value));
70
+ },
71
+ plural: function plural(value, singular, _plural) {
72
+ return Number(value) === 1 ? singular : _plural;
73
+ },
74
+ pad: function pad(value) {
75
+ var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "2";
76
+ var _char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0";
77
+ return String(value).padStart(Number(length), _char);
78
+ }
79
+ };
@@ -0,0 +1,26 @@
1
+ import type { FormatData } from "$/string/formatString/formatData";
2
+ import type { FormatOptions } from "$/string/formatString/formatOptions";
3
+ import type { FormatValue } from "$/string/formatString/formatValue";
4
+ /**
5
+ * Detects whether formatString should use indexed or named mode based on arguments.
6
+ *
7
+ * Named mode: First argument is a non-array object
8
+ * Indexed mode: Arguments are treated as array values
9
+ *
10
+ * @param dataOrFirstValue - First argument (object for named mode, value for indexed mode)
11
+ * @param optionsOrSecondValue - Second argument (options for named mode, value for indexed mode)
12
+ * @param restValues - Remaining arguments for indexed mode
13
+ * @returns Object containing data and options for formatting
14
+ *
15
+ * @example
16
+ * // Named mode detection
17
+ * detectMode({ name: "Alice" }) // → { data: { name: "Alice" }, options: {} }
18
+ *
19
+ * @example
20
+ * // Indexed mode detection
21
+ * detectMode("first", "second") // → { data: ["first", "second"], options: {} }
22
+ */
23
+ export declare function detectMode(dataOrFirstValue: FormatData | FormatValue | undefined, optionsOrSecondValue: FormatOptions | FormatValue | undefined, restValues: FormatValue[]): {
24
+ data: unknown;
25
+ options: FormatOptions;
26
+ };
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.detectMode = detectMode;
7
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
8
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
10
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
11
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
12
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
13
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
14
+ /**
15
+ * Detects whether formatString should use indexed or named mode based on arguments.
16
+ *
17
+ * Named mode: First argument is a non-array object
18
+ * Indexed mode: Arguments are treated as array values
19
+ *
20
+ * @param dataOrFirstValue - First argument (object for named mode, value for indexed mode)
21
+ * @param optionsOrSecondValue - Second argument (options for named mode, value for indexed mode)
22
+ * @param restValues - Remaining arguments for indexed mode
23
+ * @returns Object containing data and options for formatting
24
+ *
25
+ * @example
26
+ * // Named mode detection
27
+ * detectMode({ name: "Alice" }) // → { data: { name: "Alice" }, options: {} }
28
+ *
29
+ * @example
30
+ * // Indexed mode detection
31
+ * detectMode("first", "second") // → { data: ["first", "second"], options: {} }
32
+ */
33
+ function detectMode(dataOrFirstValue, optionsOrSecondValue, restValues) {
34
+ var isFirstArgumentObject = dataOrFirstValue !== undefined && _typeof(dataOrFirstValue) === "object" && dataOrFirstValue !== null && !Array.isArray(dataOrFirstValue) && !(dataOrFirstValue instanceof Date);
35
+ var isSecondArgumentOptions = optionsOrSecondValue !== undefined && _typeof(optionsOrSecondValue) === "object" && optionsOrSecondValue !== null && !Array.isArray(optionsOrSecondValue) && !(optionsOrSecondValue instanceof Date) && "formatters" in optionsOrSecondValue;
36
+ if (isFirstArgumentObject && optionsOrSecondValue === undefined && restValues.length === 0) {
37
+ return {
38
+ data: dataOrFirstValue,
39
+ options: {}
40
+ };
41
+ }
42
+ if (isFirstArgumentObject && isSecondArgumentOptions && restValues.length === 0) {
43
+ return {
44
+ data: dataOrFirstValue,
45
+ options: optionsOrSecondValue
46
+ };
47
+ }
48
+ var allValues = [];
49
+ if (dataOrFirstValue !== undefined) {
50
+ allValues.push(dataOrFirstValue);
51
+ }
52
+ if (optionsOrSecondValue !== undefined) {
53
+ allValues.push(optionsOrSecondValue);
54
+ }
55
+ allValues.push.apply(allValues, _toConsumableArray(restValues));
56
+ return {
57
+ data: allValues,
58
+ options: {}
59
+ };
60
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Retrieves a value from an object using a dot-notation path with array index support.
3
+ *
4
+ * Supports nested properties and array access with positive/negative indices.
5
+ *
6
+ * @param object - The object to retrieve the value from
7
+ * @param path - Dot-notation path (e.g., "user.name", "items[0]", "data[0].items[-1].name")
8
+ * @returns The value at the specified path, or undefined if not found
9
+ *
10
+ * @example
11
+ * // Simple property access
12
+ * getValue({ name: "Alice" }, "name") // → "Alice"
13
+ *
14
+ * @example
15
+ * // Nested property access
16
+ * getValue({ user: { name: "Bob" } }, "user.name") // → "Bob"
17
+ *
18
+ * @example
19
+ * // Array access
20
+ * getValue({ items: ["A", "B", "C"] }, "items[0]") // → "A"
21
+ * getValue({ items: ["A", "B", "C"] }, "items[-1]") // → "C"
22
+ *
23
+ * @example
24
+ * // Complex nested access
25
+ * getValue({ users: [{ name: "Alice" }] }, "users[0].name") // → "Alice"
26
+ */
27
+ export declare function getValue(object: unknown, path: string): unknown;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getValue = getValue;
7
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
10
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
11
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
12
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
13
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
14
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
15
+ /**
16
+ * Retrieves a value from an object using a dot-notation path with array index support.
17
+ *
18
+ * Supports nested properties and array access with positive/negative indices.
19
+ *
20
+ * @param object - The object to retrieve the value from
21
+ * @param path - Dot-notation path (e.g., "user.name", "items[0]", "data[0].items[-1].name")
22
+ * @returns The value at the specified path, or undefined if not found
23
+ *
24
+ * @example
25
+ * // Simple property access
26
+ * getValue({ name: "Alice" }, "name") // → "Alice"
27
+ *
28
+ * @example
29
+ * // Nested property access
30
+ * getValue({ user: { name: "Bob" } }, "user.name") // → "Bob"
31
+ *
32
+ * @example
33
+ * // Array access
34
+ * getValue({ items: ["A", "B", "C"] }, "items[0]") // → "A"
35
+ * getValue({ items: ["A", "B", "C"] }, "items[-1]") // → "C"
36
+ *
37
+ * @example
38
+ * // Complex nested access
39
+ * getValue({ users: [{ name: "Alice" }] }, "users[0].name") // → "Alice"
40
+ */
41
+ function getValue(object, path) {
42
+ var segments = [];
43
+ var parts = path.split(".");
44
+ var _iterator = _createForOfIteratorHelper(parts),
45
+ _step;
46
+ try {
47
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
48
+ var part = _step.value;
49
+ var arrayMatch = part.match(/^(.+?)\[(-?\d+)\]$/);
50
+ if (arrayMatch) {
51
+ var _arrayMatch = _slicedToArray(arrayMatch, 3),
52
+ key = _arrayMatch[1],
53
+ indexString = _arrayMatch[2];
54
+ segments.push({
55
+ key: key,
56
+ index: Number(indexString)
57
+ });
58
+ } else {
59
+ segments.push({
60
+ key: part
61
+ });
62
+ }
63
+ }
64
+ } catch (err) {
65
+ _iterator.e(err);
66
+ } finally {
67
+ _iterator.f();
68
+ }
69
+ var current = object;
70
+ for (var _i = 0, _segments = segments; _i < _segments.length; _i++) {
71
+ var segment = _segments[_i];
72
+ if (_typeof(current) !== "object" || current == null) {
73
+ return;
74
+ }
75
+ current = current[segment.key];
76
+ if (segment.index !== undefined) {
77
+ if (!Array.isArray(current)) {
78
+ return;
79
+ }
80
+ var index = segment.index;
81
+ current = index < 0 ? current[current.length + index] : current[index];
82
+ }
83
+ }
84
+ return current;
85
+ }