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.
- package/README.md +11 -0
- package/module/Array/generateNumberArray.js +13 -7
- package/module/Array/generateNumberArray.js.map +1 -1
- package/module/Array/getArraysCommon.js +21 -3
- package/module/Array/getArraysCommon.js.map +1 -1
- package/module/Array/groupBy.js +1 -1
- package/module/Array/groupBy.js.map +1 -1
- package/module/Array/index.d.ts +2 -0
- package/module/Array/index.js +2 -0
- package/module/Array/index.js.map +1 -1
- package/module/Array/ultraNumberSort.js +2 -2
- package/module/Array/ultraNumberSort.js.map +1 -1
- package/module/Array/uniqBy.d.ts +7 -0
- package/module/Array/uniqBy.js +19 -0
- package/module/Array/uniqBy.js.map +1 -0
- package/module/Array/unique.d.ts +6 -0
- package/module/Array/unique.js +9 -0
- package/module/Array/unique.js.map +1 -0
- package/module/Color/rgbaToHsla.js +1 -1
- package/module/Color/rgbaToHsla.js.map +1 -1
- package/module/Date/birthday.js +14 -6
- package/module/Date/birthday.js.map +1 -1
- package/module/Date/isLeapYear.js +3 -0
- package/module/Date/isLeapYear.js.map +1 -1
- package/module/Error/index.d.ts +1 -0
- package/module/Error/index.js +1 -0
- package/module/Error/index.js.map +1 -1
- package/module/Error/retry.d.ts +37 -0
- package/module/Error/retry.js +47 -0
- package/module/Error/retry.js.map +1 -0
- package/module/IP/getIpClass.js +1 -1
- package/module/IP/getIpClass.js.map +1 -1
- package/module/IP/getNetworkAddress.js +2 -2
- package/module/IP/getNetworkAddress.js.map +1 -1
- package/module/IP/ipToBinaryString.js +2 -2
- package/module/IP/ipToBinaryString.js.map +1 -1
- package/module/IP/subnetMaskToCidr.js +1 -1
- package/module/IP/subnetMaskToCidr.js.map +1 -1
- package/module/Math/calculator/core.js +21 -13
- package/module/Math/calculator/core.js.map +1 -1
- package/module/Math/calculator/literalExpression.js +19 -7
- package/module/Math/calculator/literalExpression.js.map +1 -1
- package/module/Math/division.js +3 -3
- package/module/Math/division.js.map +1 -1
- package/module/Math/gcd.js +26 -4
- package/module/Math/gcd.js.map +1 -1
- package/module/Math/standardDeviation.js +4 -2
- package/module/Math/standardDeviation.js.map +1 -1
- package/module/Object/has.js +1 -2
- package/module/Object/has.js.map +1 -1
- package/module/Object/index.d.ts +4 -0
- package/module/Object/index.js +4 -0
- package/module/Object/index.js.map +1 -1
- package/module/Object/isEmpty.d.ts +6 -0
- package/module/Object/isEmpty.js +20 -0
- package/module/Object/isEmpty.js.map +1 -0
- package/module/Object/merge.d.ts +8 -0
- package/module/Object/merge.js +10 -0
- package/module/Object/merge.js.map +1 -0
- package/module/Object/mergeDeep.d.ts +8 -0
- package/module/Object/mergeDeep.js +37 -0
- package/module/Object/mergeDeep.js.map +1 -0
- package/module/Object/omit.d.ts +7 -0
- package/module/Object/omit.js +14 -0
- package/module/Object/omit.js.map +1 -0
- package/module/Object/pickDeep.d.ts +2 -2
- package/module/Object/pickDeep.js +4 -4
- package/module/Object/pickDeep.js.map +1 -1
- package/module/Simple/Date/dayOfWeekSimple.js +3 -3
- package/module/Simple/Date/dayOfWeekSimple.js.map +1 -1
- package/module/String/camelCase.d.ts +6 -0
- package/module/String/camelCase.js +12 -0
- package/module/String/camelCase.js.map +1 -0
- package/module/String/escapeHtml.d.ts +6 -0
- package/module/String/escapeHtml.js +19 -0
- package/module/String/escapeHtml.js.map +1 -0
- package/module/String/formatString/applyFormatter.d.ts +25 -0
- package/module/String/formatString/applyFormatter.js +71 -0
- package/module/String/formatString/applyFormatter.js.map +1 -0
- package/module/String/formatString/defaultFormatters.d.ts +24 -0
- package/module/String/formatString/defaultFormatters.js +59 -0
- package/module/String/formatString/defaultFormatters.js.map +1 -0
- package/module/String/formatString/detectMode.d.ts +26 -0
- package/module/String/formatString/detectMode.js +61 -0
- package/module/String/formatString/detectMode.js.map +1 -0
- package/module/String/formatString/getValue.d.ts +27 -0
- package/module/String/formatString/getValue.js +56 -0
- package/module/String/formatString/getValue.js.map +1 -0
- package/module/String/formatString/index.d.ts +91 -0
- package/module/String/formatString/index.js +38 -0
- package/module/String/formatString/index.js.map +1 -0
- package/module/String/index.d.ts +5 -0
- package/module/String/index.js +5 -0
- package/module/String/index.js.map +1 -1
- package/module/String/kebabCase.d.ts +6 -0
- package/module/String/kebabCase.js +22 -0
- package/module/String/kebabCase.js.map +1 -0
- package/module/String/levenshteinDistance.d.ts +8 -0
- package/module/String/levenshteinDistance.js +38 -0
- package/module/String/levenshteinDistance.js.map +1 -0
- package/module/String/stringSimilarity.d.ts +8 -0
- package/module/String/stringSimilarity.js +23 -0
- package/module/String/stringSimilarity.js.map +1 -0
- package/module/Validate/core/index.js +0 -1
- package/module/Validate/core/index.js.map +1 -1
- package/module/Validate/isDouble.js +1 -1
- package/module/Validate/isDouble.js.map +1 -1
- package/module/Validate/isNode.js +1 -0
- package/module/Validate/isNode.js.map +1 -1
- package/module/Validate/isNumber.js +1 -1
- package/module/Validate/isNumber.js.map +1 -1
- package/module/Validate/isValueNaN.js +1 -1
- package/module/Validate/isValueNaN.js.map +1 -1
- package/module/Validate/number/even.js +7 -1
- package/module/Validate/number/even.js.map +1 -1
- package/module/Validate/number/odd.js +7 -1
- package/module/Validate/number/odd.js.map +1 -1
- package/module/Validate/string/email.js +20 -2
- package/module/Validate/string/email.js.map +1 -1
- package/module/es5/Array/generateNumberArray.js +15 -9
- package/module/es5/Array/getArraysCommon.js +39 -4
- package/module/es5/Array/groupBy.js +1 -1
- package/module/es5/Array/index.d.ts +2 -0
- package/module/es5/Array/index.js +22 -0
- package/module/es5/Array/ultraNumberSort.js +2 -2
- package/module/es5/Array/uniqBy.d.ts +7 -0
- package/module/es5/Array/uniqBy.js +36 -0
- package/module/es5/Array/unique.d.ts +6 -0
- package/module/es5/Array/unique.js +20 -0
- package/module/es5/Color/rgbaToHsla.js +1 -1
- package/module/es5/Date/birthday.js +17 -3
- package/module/es5/Date/isLeapYear.js +3 -0
- package/module/es5/Error/index.d.ts +1 -0
- package/module/es5/Error/index.js +11 -0
- package/module/es5/Error/retry.d.ts +37 -0
- package/module/es5/Error/retry.js +88 -0
- package/module/es5/IP/getIpClass.js +1 -1
- package/module/es5/IP/getNetworkAddress.js +2 -2
- package/module/es5/IP/ipToBinaryString.js +2 -2
- package/module/es5/IP/subnetMaskToCidr.js +1 -1
- package/module/es5/Math/calculator/core.js +17 -9
- package/module/es5/Math/calculator/literalExpression.js +19 -6
- package/module/es5/Math/division.js +3 -3
- package/module/es5/Math/gcd.js +43 -5
- package/module/es5/Math/standardDeviation.js +4 -2
- package/module/es5/Object/has.js +1 -1
- package/module/es5/Object/index.d.ts +4 -0
- package/module/es5/Object/index.js +44 -0
- package/module/es5/Object/isEmpty.d.ts +6 -0
- package/module/es5/Object/isEmpty.js +26 -0
- package/module/es5/Object/merge.d.ts +8 -0
- package/module/es5/Object/merge.js +18 -0
- package/module/es5/Object/mergeDeep.d.ts +8 -0
- package/module/es5/Object/mergeDeep.js +46 -0
- package/module/es5/Object/omit.d.ts +7 -0
- package/module/es5/Object/omit.js +29 -0
- package/module/es5/Object/pickDeep.d.ts +2 -2
- package/module/es5/Object/pickDeep.js +4 -4
- package/module/es5/Simple/Date/dayOfWeekSimple.js +3 -3
- package/module/es5/String/camelCase.d.ts +6 -0
- package/module/es5/String/camelCase.js +18 -0
- package/module/es5/String/escapeHtml.d.ts +6 -0
- package/module/es5/String/escapeHtml.js +27 -0
- package/module/es5/String/formatString/applyFormatter.d.ts +25 -0
- package/module/es5/String/formatString/applyFormatter.js +100 -0
- package/module/es5/String/formatString/defaultFormatters.d.ts +24 -0
- package/module/es5/String/formatString/defaultFormatters.js +79 -0
- package/module/es5/String/formatString/detectMode.d.ts +26 -0
- package/module/es5/String/formatString/detectMode.js +60 -0
- package/module/es5/String/formatString/getValue.d.ts +27 -0
- package/module/es5/String/formatString/getValue.js +85 -0
- package/module/es5/String/formatString/index.d.ts +91 -0
- package/module/es5/String/formatString/index.js +152 -0
- package/module/es5/String/index.d.ts +5 -0
- package/module/es5/String/index.js +55 -0
- package/module/es5/String/kebabCase.d.ts +6 -0
- package/module/es5/String/kebabCase.js +26 -0
- package/module/es5/String/levenshteinDistance.d.ts +8 -0
- package/module/es5/String/levenshteinDistance.js +58 -0
- package/module/es5/String/stringSimilarity.d.ts +8 -0
- package/module/es5/String/stringSimilarity.js +30 -0
- package/module/es5/Validate/core/index.js +0 -1
- package/module/es5/Validate/isDouble.js +1 -1
- package/module/es5/Validate/isNode.js +1 -0
- package/module/es5/Validate/isNumber.js +1 -1
- package/module/es5/Validate/isValueNaN.js +1 -1
- package/module/es5/Validate/number/even.js +4 -0
- package/module/es5/Validate/number/odd.js +4 -0
- package/module/es5/Validate/string/email.js +26 -1
- package/module/es5/tsconfig.tsbuildinfo +1 -1
- package/module/es5/types/index.d.ts +1 -0
- package/module/es5/types/index.js +11 -0
- package/module/es5/types/logic/deepPartial.d.ts +37 -0
- package/module/es5/types/logic/deepPartial.js +5 -0
- package/module/es5/types/logic/deepRequired.d.ts +37 -0
- package/module/es5/types/logic/deepRequired.js +5 -0
- package/module/es5/types/logic/index.d.ts +3 -0
- package/module/es5/types/logic/index.js +33 -0
- package/module/es5/types/logic/unionToIntersection.d.ts +12 -0
- package/module/es5/types/logic/unionToIntersection.js +5 -0
- package/module/es5/types/object/index.d.ts +1 -0
- package/module/es5/types/object/index.js +11 -0
- package/module/es5/types/object/pickDeep.d.ts +13 -1
- package/module/es5/types/object/shallowObjectValue.d.ts +9 -0
- package/module/es5/types/object/shallowObjectValue.js +5 -0
- package/module/es5/types/string/formatString/formatData.d.ts +17 -0
- package/module/es5/types/string/formatString/formatData.js +5 -0
- package/module/es5/types/string/formatString/formatOptions.d.ts +21 -0
- package/module/es5/types/string/formatString/formatOptions.js +5 -0
- package/module/es5/types/string/formatString/formatString.d.ts +4 -0
- package/module/es5/types/string/formatString/formatString.js +49 -0
- package/module/es5/types/string/formatString/formatValue.d.ts +15 -0
- package/module/es5/types/string/formatString/formatValue.js +5 -0
- package/module/es5/types/string/formatString/formatter.d.ts +13 -0
- package/module/es5/types/string/formatString/formatter.js +5 -0
- package/module/es5/types/string/formatString/index.d.ts +5 -0
- package/module/es5/types/string/formatString/index.js +60 -0
- package/module/es5/types/string/index.d.ts +1 -0
- package/module/es5/types/string/index.js +16 -0
- package/module/types/index.d.ts +1 -0
- package/module/types/index.js +1 -0
- package/module/types/index.js.map +1 -1
- package/module/types/logic/deepPartial.d.ts +37 -0
- package/module/types/logic/deepPartial.js +36 -0
- package/module/types/logic/deepPartial.js.map +1 -0
- package/module/types/logic/deepRequired.d.ts +37 -0
- package/module/types/logic/deepRequired.js +2 -0
- package/module/types/logic/deepRequired.js.map +1 -0
- package/module/types/logic/index.d.ts +3 -0
- package/module/types/logic/index.js +3 -0
- package/module/types/logic/index.js.map +1 -1
- package/module/types/logic/unionToIntersection.d.ts +12 -0
- package/module/types/logic/unionToIntersection.js +2 -0
- package/module/types/logic/unionToIntersection.js.map +1 -0
- package/module/types/object/index.d.ts +1 -0
- package/module/types/object/index.js +1 -0
- package/module/types/object/index.js.map +1 -1
- package/module/types/object/pickDeep.d.ts +13 -1
- package/module/types/object/shallowObjectValue.d.ts +9 -0
- package/module/types/object/shallowObjectValue.js +2 -0
- package/module/types/object/shallowObjectValue.js.map +1 -0
- package/module/types/string/formatString/formatData.d.ts +17 -0
- package/module/types/string/formatString/formatData.js +2 -0
- package/module/types/string/formatString/formatData.js.map +1 -0
- package/module/types/string/formatString/formatOptions.d.ts +21 -0
- package/module/types/string/formatString/formatOptions.js +2 -0
- package/module/types/string/formatString/formatOptions.js.map +1 -0
- package/module/types/string/formatString/formatString.d.ts +4 -0
- package/module/types/string/formatString/formatString.js +5 -0
- package/module/types/string/formatString/formatString.js.map +1 -0
- package/module/types/string/formatString/formatValue.d.ts +15 -0
- package/module/types/string/formatString/formatValue.js +2 -0
- package/module/types/string/formatString/formatValue.js.map +1 -0
- package/module/types/string/formatString/formatter.d.ts +13 -0
- package/module/types/string/formatString/formatter.js +2 -0
- package/module/types/string/formatString/formatter.js.map +1 -0
- package/module/types/string/formatString/index.d.ts +5 -0
- package/module/types/string/formatString/index.js +6 -0
- package/module/types/string/formatString/index.js.map +1 -0
- package/module/types/string/index.d.ts +1 -0
- package/module/types/string/index.js +2 -0
- package/module/types/string/index.js.map +1 -0
- package/package.json +31 -32
- package/module/String/formatString.d.ts +0 -13
- package/module/String/formatString.js +0 -18
- package/module/String/formatString.js.map +0 -1
- package/module/es5/String/formatString.d.ts +0 -13
- 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
|
|
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:
|
|
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:
|
|
45
|
+
// biome-ignore lint/suspicious/noExplicitAny: ignore
|
|
46
46
|
var current = _objectSpread({}, object);
|
|
47
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
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:
|
|
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:
|
|
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:
|
|
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,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,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
|
+
"&": "&",
|
|
12
|
+
"<": "<",
|
|
13
|
+
">": ">",
|
|
14
|
+
'"': """,
|
|
15
|
+
"'": "'"
|
|
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
|
+
}
|