umt 2.16.0 → 2.17.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 +42 -0
- package/module/Array/chunk.js.map +1 -1
- package/module/Array/uniqBy.js.map +1 -1
- package/module/Async/debounceAsync.d.ts +18 -0
- package/module/Async/debounceAsync.js +59 -0
- package/module/Async/debounceAsync.js.map +1 -0
- package/module/Async/index.d.ts +5 -0
- package/module/Async/index.js +5 -0
- package/module/Async/index.js.map +1 -1
- package/module/Async/pSettled.d.ts +19 -0
- package/module/Async/pSettled.js +54 -0
- package/module/Async/pSettled.js.map +1 -0
- package/module/Async/retry.d.ts +22 -0
- package/module/Async/retry.js +49 -0
- package/module/Async/retry.js.map +1 -0
- package/module/Async/throttleAsync.d.ts +18 -0
- package/module/Async/throttleAsync.js +41 -0
- package/module/Async/throttleAsync.js.map +1 -0
- package/module/Async/waitFor.d.ts +18 -0
- package/module/Async/waitFor.js +32 -0
- package/module/Async/waitFor.js.map +1 -0
- package/module/Date/addDuration.d.ts +15 -0
- package/module/Date/addDuration.js +40 -0
- package/module/Date/addDuration.js.map +1 -0
- package/module/Date/diff.d.ts +14 -0
- package/module/Date/diff.js +45 -0
- package/module/Date/diff.js.map +1 -0
- package/module/Date/durationUnit.d.ts +12 -0
- package/module/Date/durationUnit.js +2 -0
- package/module/Date/durationUnit.js.map +1 -0
- package/module/Date/endOf.d.ts +13 -0
- package/module/Date/endOf.js +58 -0
- package/module/Date/endOf.js.map +1 -0
- package/module/Date/formatRelative.d.ts +13 -0
- package/module/Date/formatRelative.js +35 -0
- package/module/Date/formatRelative.js.map +1 -0
- package/module/Date/index.d.ts +10 -0
- package/module/Date/index.js +10 -0
- package/module/Date/index.js.map +1 -1
- package/module/Date/isBusinessDay.d.ts +10 -0
- package/module/Date/isBusinessDay.js +18 -0
- package/module/Date/isBusinessDay.js.map +1 -0
- package/module/Date/isSameDay.d.ts +10 -0
- package/module/Date/isSameDay.js +13 -0
- package/module/Date/isSameDay.js.map +1 -0
- package/module/Date/isWeekend.d.ts +9 -0
- package/module/Date/isWeekend.js +13 -0
- package/module/Date/isWeekend.js.map +1 -0
- package/module/Date/msByUnit.d.ts +2 -0
- package/module/Date/msByUnit.js +10 -0
- package/module/Date/msByUnit.js.map +1 -0
- package/module/Date/startOf.d.ts +13 -0
- package/module/Date/startOf.js +58 -0
- package/module/Date/startOf.js.map +1 -0
- package/module/Date/subDuration.d.ts +13 -0
- package/module/Date/subDuration.js +14 -0
- package/module/Date/subDuration.js.map +1 -0
- package/module/Error/index.d.ts +0 -1
- package/module/Error/index.js +0 -1
- package/module/Error/index.js.map +1 -1
- package/module/Object/deepClone.js.map +1 -1
- package/module/Object/flattenObject.d.ts +11 -0
- package/module/Object/flattenObject.js +29 -0
- package/module/Object/flattenObject.js.map +1 -0
- package/module/Object/get.d.ts +1 -0
- package/module/Object/get.js +26 -0
- package/module/Object/get.js.map +1 -0
- package/module/Object/has.d.ts +0 -19
- package/module/Object/has.js +4 -4
- package/module/Object/has.js.map +1 -1
- package/module/Object/index.d.ts +8 -0
- package/module/Object/index.js +8 -0
- package/module/Object/index.js.map +1 -1
- package/module/Object/invert.d.ts +12 -0
- package/module/Object/invert.js +20 -0
- package/module/Object/invert.js.map +1 -0
- package/module/Object/mergeDeep.js.map +1 -1
- package/module/Object/omitBy.d.ts +11 -0
- package/module/Object/omitBy.js +21 -0
- package/module/Object/omitBy.js.map +1 -0
- package/module/Object/pathSegments.d.ts +1 -0
- package/module/Object/pathSegments.js +2 -0
- package/module/Object/pathSegments.js.map +1 -0
- package/module/Object/pickBy.d.ts +11 -0
- package/module/Object/pickBy.js +21 -0
- package/module/Object/pickBy.js.map +1 -0
- package/module/Object/set.d.ts +19 -0
- package/module/Object/set.js +38 -0
- package/module/Object/set.js.map +1 -0
- package/module/Object/unflattenObject.d.ts +15 -0
- package/module/Object/unflattenObject.js +23 -0
- package/module/Object/unflattenObject.js.map +1 -0
- package/module/Random/index.d.ts +7 -0
- package/module/Random/index.js +8 -0
- package/module/Random/index.js.map +1 -0
- package/module/Random/randomBoolean.d.ts +9 -0
- package/module/Random/randomBoolean.js +10 -0
- package/module/Random/randomBoolean.js.map +1 -0
- package/module/Random/randomChoice.d.ts +9 -0
- package/module/Random/randomChoice.js +13 -0
- package/module/Random/randomChoice.js.map +1 -0
- package/module/Random/randomFloat.d.ts +9 -0
- package/module/Random/randomFloat.js +10 -0
- package/module/Random/randomFloat.js.map +1 -0
- package/module/Random/randomInt.d.ts +9 -0
- package/module/Random/randomInt.js +14 -0
- package/module/Random/randomInt.js.map +1 -0
- package/module/Random/randomUuid.d.ts +9 -0
- package/module/Random/randomUuid.js +31 -0
- package/module/Random/randomUuid.js.map +1 -0
- package/module/Random/seededRandom.d.ts +11 -0
- package/module/Random/seededRandom.js +31 -0
- package/module/Random/seededRandom.js.map +1 -0
- package/module/Random/weightedChoice.d.ts +15 -0
- package/module/Random/weightedChoice.js +34 -0
- package/module/Random/weightedChoice.js.map +1 -0
- package/module/String/capitalize.d.ts +12 -0
- package/module/String/capitalize.js +18 -0
- package/module/String/capitalize.js.map +1 -0
- package/module/String/capitalizeWord.d.ts +1 -0
- package/module/String/capitalizeWord.js +2 -0
- package/module/String/capitalizeWord.js.map +1 -0
- package/module/String/dedent.d.ts +19 -0
- package/module/String/dedent.js +56 -0
- package/module/String/dedent.js.map +1 -0
- package/module/String/index.d.ts +10 -0
- package/module/String/index.js +10 -0
- package/module/String/index.js.map +1 -1
- package/module/String/mask.d.ts +20 -0
- package/module/String/mask.js +24 -0
- package/module/String/mask.js.map +1 -0
- package/module/String/pascalCase.d.ts +9 -0
- package/module/String/pascalCase.js +14 -0
- package/module/String/pascalCase.js.map +1 -0
- package/module/String/snakeCase.d.ts +9 -0
- package/module/String/snakeCase.js +13 -0
- package/module/String/snakeCase.js.map +1 -0
- package/module/String/titleCase.d.ts +9 -0
- package/module/String/titleCase.js +14 -0
- package/module/String/titleCase.js.map +1 -0
- package/module/String/uncapitalize.d.ts +10 -0
- package/module/String/uncapitalize.js +16 -0
- package/module/String/uncapitalize.js.map +1 -0
- package/module/String/wordCount.d.ts +10 -0
- package/module/String/wordCount.js +12 -0
- package/module/String/wordCount.js.map +1 -0
- package/module/String/words.d.ts +12 -0
- package/module/String/words.js +21 -0
- package/module/String/words.js.map +1 -0
- package/module/Tool/createPipeline.d.ts +1 -1
- package/module/Tool/createPipeline.js +8 -6
- package/module/Tool/createPipeline.js.map +1 -1
- package/module/Tool/pipe.js.map +1 -1
- package/module/URL/buildUrl.d.ts +10 -0
- package/module/URL/buildUrl.js +10 -4
- package/module/URL/buildUrl.js.map +1 -1
- package/module/URL/parseQueryString.d.ts +6 -0
- package/module/URL/parseQueryString.js +6 -4
- package/module/URL/parseQueryString.js.map +1 -1
- package/module/Validate/isNumber.js.map +1 -1
- package/module/Validate/object/core.js +0 -1
- package/module/Validate/object/core.js.map +1 -1
- package/module/es5/Async/debounceAsync.d.ts +18 -0
- package/module/es5/Async/debounceAsync.js +103 -0
- package/module/es5/Async/index.d.ts +5 -0
- package/module/es5/Async/index.js +55 -0
- package/module/es5/Async/pSettled.d.ts +19 -0
- package/module/es5/Async/pSettled.js +68 -0
- package/module/es5/Async/retry.d.ts +22 -0
- package/module/es5/Async/retry.js +106 -0
- package/module/es5/Async/throttleAsync.d.ts +18 -0
- package/module/es5/Async/throttleAsync.js +46 -0
- package/module/es5/Async/waitFor.d.ts +18 -0
- package/module/es5/{Error/retry.js → Async/waitFor.js} +68 -74
- package/module/es5/Date/addDuration.d.ts +15 -0
- package/module/es5/Date/addDuration.js +45 -0
- package/module/es5/Date/diff.d.ts +14 -0
- package/module/es5/Date/diff.js +40 -0
- package/module/es5/Date/durationUnit.d.ts +12 -0
- package/module/es5/Date/durationUnit.js +5 -0
- package/module/es5/Date/endOf.d.ts +13 -0
- package/module/es5/Date/endOf.js +72 -0
- package/module/es5/Date/formatRelative.d.ts +13 -0
- package/module/es5/Date/formatRelative.js +61 -0
- package/module/es5/Date/index.d.ts +10 -0
- package/module/es5/Date/index.js +110 -0
- package/module/es5/Date/isBusinessDay.d.ts +10 -0
- package/module/es5/Date/isBusinessDay.js +26 -0
- package/module/es5/Date/isSameDay.d.ts +10 -0
- package/module/es5/Date/isSameDay.js +18 -0
- package/module/es5/Date/isWeekend.d.ts +9 -0
- package/module/es5/Date/isWeekend.js +18 -0
- package/module/es5/Date/msByUnit.d.ts +2 -0
- package/module/es5/Date/msByUnit.js +15 -0
- package/module/es5/Date/startOf.d.ts +13 -0
- package/module/es5/Date/startOf.js +72 -0
- package/module/es5/Date/subDuration.d.ts +13 -0
- package/module/es5/Date/subDuration.js +21 -0
- package/module/es5/Error/index.d.ts +0 -1
- package/module/es5/Error/index.js +0 -11
- package/module/es5/Object/flattenObject.d.ts +11 -0
- package/module/es5/Object/flattenObject.js +35 -0
- package/module/es5/Object/get.d.ts +1 -0
- package/module/es5/Object/get.js +42 -0
- package/module/es5/Object/has.d.ts +0 -19
- package/module/es5/Object/has.js +4 -4
- package/module/es5/Object/index.d.ts +8 -0
- package/module/es5/Object/index.js +88 -0
- package/module/es5/Object/invert.d.ts +12 -0
- package/module/es5/Object/invert.js +26 -0
- package/module/es5/Object/omitBy.d.ts +11 -0
- package/module/es5/Object/omitBy.js +27 -0
- package/module/es5/Object/pathSegments.d.ts +1 -0
- package/module/es5/Object/pathSegments.js +9 -0
- package/module/es5/Object/pickBy.d.ts +11 -0
- package/module/es5/Object/pickBy.js +27 -0
- package/module/es5/Object/set.d.ts +19 -0
- package/module/es5/Object/set.js +44 -0
- package/module/es5/Object/unflattenObject.d.ts +15 -0
- package/module/es5/Object/unflattenObject.js +30 -0
- package/module/es5/Random/index.d.ts +7 -0
- package/module/es5/Random/index.js +82 -0
- package/module/es5/Random/randomBoolean.d.ts +9 -0
- package/module/es5/Random/randomBoolean.js +18 -0
- package/module/es5/Random/randomChoice.d.ts +9 -0
- package/module/es5/Random/randomChoice.js +18 -0
- package/module/es5/Random/randomFloat.d.ts +9 -0
- package/module/es5/Random/randomFloat.js +17 -0
- package/module/es5/Random/randomInt.d.ts +9 -0
- package/module/es5/Random/randomInt.js +19 -0
- package/module/es5/Random/randomUuid.d.ts +9 -0
- package/module/es5/Random/randomUuid.js +38 -0
- package/module/es5/Random/seededRandom.d.ts +11 -0
- package/module/es5/Random/seededRandom.js +46 -0
- package/module/es5/Random/weightedChoice.d.ts +15 -0
- package/module/es5/Random/weightedChoice.js +50 -0
- package/module/es5/String/capitalize.d.ts +12 -0
- package/module/es5/String/capitalize.js +35 -0
- package/module/es5/String/capitalizeWord.d.ts +1 -0
- package/module/es5/String/capitalizeWord.js +9 -0
- package/module/es5/String/dedent.d.ts +19 -0
- package/module/es5/String/dedent.js +82 -0
- package/module/es5/String/index.d.ts +10 -0
- package/module/es5/String/index.js +110 -0
- package/module/es5/String/mask.d.ts +20 -0
- package/module/es5/String/mask.js +39 -0
- package/module/es5/String/pascalCase.d.ts +9 -0
- package/module/es5/String/pascalCase.js +21 -0
- package/module/es5/String/snakeCase.d.ts +9 -0
- package/module/es5/String/snakeCase.js +20 -0
- package/module/es5/String/titleCase.d.ts +9 -0
- package/module/es5/String/titleCase.js +21 -0
- package/module/es5/String/uncapitalize.d.ts +10 -0
- package/module/es5/String/uncapitalize.js +33 -0
- package/module/es5/String/wordCount.d.ts +10 -0
- package/module/es5/String/wordCount.js +19 -0
- package/module/es5/String/words.d.ts +12 -0
- package/module/es5/String/words.js +25 -0
- package/module/es5/Tool/createPipeline.d.ts +1 -1
- package/module/es5/Tool/createPipeline.js +7 -10
- package/module/es5/URL/buildUrl.d.ts +10 -0
- package/module/es5/URL/buildUrl.js +10 -4
- package/module/es5/URL/parseQueryString.d.ts +6 -0
- package/module/es5/URL/parseQueryString.js +6 -4
- package/module/es5/Validate/object/core.js +0 -1
- package/module/es5/index.d.ts +1 -0
- package/module/es5/index.js +20 -9
- package/module/index.d.ts +1 -0
- package/module/index.js +1 -0
- package/module/index.js.map +1 -1
- package/package.json +30 -25
- package/module/Error/retry.d.ts +0 -37
- package/module/Error/retry.js +0 -47
- package/module/Error/retry.js.map +0 -1
- package/module/es5/Error/retry.d.ts +0 -37
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DurationUnit } from "./durationUnit";
|
|
2
|
+
/**
|
|
3
|
+
* Subtracts a duration from a date and returns a new Date.
|
|
4
|
+
* Equivalent to addDuration(date, -amount, unit).
|
|
5
|
+
*
|
|
6
|
+
* @param {Date} date - Base date
|
|
7
|
+
* @param {number} amount - Amount to subtract
|
|
8
|
+
* @param {DurationUnit} unit - Unit of the amount
|
|
9
|
+
* @returns {Date} A new Date with the duration subtracted
|
|
10
|
+
* @example
|
|
11
|
+
* subDuration(new Date("2025-03-31"), 1, "M"); // 2025-02-28
|
|
12
|
+
*/
|
|
13
|
+
export declare const subDuration: (date: Date, amount: number, unit: DurationUnit) => Date;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.subDuration = void 0;
|
|
7
|
+
var _addDuration = require("./addDuration");
|
|
8
|
+
/**
|
|
9
|
+
* Subtracts a duration from a date and returns a new Date.
|
|
10
|
+
* Equivalent to addDuration(date, -amount, unit).
|
|
11
|
+
*
|
|
12
|
+
* @param {Date} date - Base date
|
|
13
|
+
* @param {number} amount - Amount to subtract
|
|
14
|
+
* @param {DurationUnit} unit - Unit of the amount
|
|
15
|
+
* @returns {Date} A new Date with the duration subtracted
|
|
16
|
+
* @example
|
|
17
|
+
* subDuration(new Date("2025-03-31"), 1, "M"); // 2025-02-28
|
|
18
|
+
*/
|
|
19
|
+
var subDuration = exports.subDuration = function subDuration(date, amount, unit) {
|
|
20
|
+
return (0, _addDuration.addDuration)(date, -amount, unit);
|
|
21
|
+
};
|
|
@@ -36,17 +36,6 @@ Object.keys(_matchResult).forEach(function (key) {
|
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
|
-
var _retry = require("./retry");
|
|
40
|
-
Object.keys(_retry).forEach(function (key) {
|
|
41
|
-
if (key === "default" || key === "__esModule") return;
|
|
42
|
-
if (key in exports && exports[key] === _retry[key]) return;
|
|
43
|
-
Object.defineProperty(exports, key, {
|
|
44
|
-
enumerable: true,
|
|
45
|
-
get: function get() {
|
|
46
|
-
return _retry[key];
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
39
|
var _safeExecute = require("./safeExecute");
|
|
51
40
|
Object.keys(_safeExecute).forEach(function (key) {
|
|
52
41
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recursively flattens a nested plain object into a single-level object
|
|
3
|
+
* keyed by joined paths. Arrays and non-plain objects are kept as-is.
|
|
4
|
+
*
|
|
5
|
+
* @param {Record<string, unknown>} object - Source nested object
|
|
6
|
+
* @param {string} [separator="."] - Separator used to join path segments
|
|
7
|
+
* @returns {Record<string, unknown>} A flat object
|
|
8
|
+
* @example
|
|
9
|
+
* flattenObject({ a: { b: { c: 1 } }, d: 2 }); // { "a.b.c": 1, d: 2 }
|
|
10
|
+
*/
|
|
11
|
+
export declare const flattenObject: <T extends Record<string, unknown>>(object: T, separator?: string) => Record<string, unknown>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.flattenObject = void 0;
|
|
7
|
+
var _isPlainObject = require("./isPlainObject");
|
|
8
|
+
/**
|
|
9
|
+
* Recursively flattens a nested plain object into a single-level object
|
|
10
|
+
* keyed by joined paths. Arrays and non-plain objects are kept as-is.
|
|
11
|
+
*
|
|
12
|
+
* @param {Record<string, unknown>} object - Source nested object
|
|
13
|
+
* @param {string} [separator="."] - Separator used to join path segments
|
|
14
|
+
* @returns {Record<string, unknown>} A flat object
|
|
15
|
+
* @example
|
|
16
|
+
* flattenObject({ a: { b: { c: 1 } }, d: 2 }); // { "a.b.c": 1, d: 2 }
|
|
17
|
+
*/
|
|
18
|
+
var flattenObject = exports.flattenObject = function flattenObject(object) {
|
|
19
|
+
var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ".";
|
|
20
|
+
var result = {};
|
|
21
|
+
var _walk = function walk(current, prefix) {
|
|
22
|
+
for (var _i = 0, _Object$keys = Object.keys(current); _i < _Object$keys.length; _i++) {
|
|
23
|
+
var key = _Object$keys[_i];
|
|
24
|
+
var value = current[key];
|
|
25
|
+
var nextKey = prefix ? "".concat(prefix).concat(separator).concat(key) : key;
|
|
26
|
+
if ((0, _isPlainObject.isPlainObject)(value) && Object.keys(value).length > 0) {
|
|
27
|
+
_walk(value, nextKey);
|
|
28
|
+
} else {
|
|
29
|
+
result[nextKey] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
_walk(object, "");
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const get: <T>(object: unknown, path: string | string[], defaultValue?: T) => T | undefined;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.get = void 0;
|
|
7
|
+
var _pathSegments = require("./pathSegments");
|
|
8
|
+
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; } } }; }
|
|
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 _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; } /**
|
|
11
|
+
* Reads a deeply nested property by string or string-array path.
|
|
12
|
+
* Returns the default value if any segment is missing.
|
|
13
|
+
*
|
|
14
|
+
* @template T - Expected return type
|
|
15
|
+
* @param {unknown} object - Source object
|
|
16
|
+
* @param {string | string[]} path - Dot-separated string or path segments array
|
|
17
|
+
* @param {T} [defaultValue] - Returned when the path resolves to undefined or is missing
|
|
18
|
+
* @returns {T | undefined} The resolved value, or defaultValue when missing
|
|
19
|
+
* @example
|
|
20
|
+
* get({ a: { b: { c: 1 } } }, "a.b.c"); // 1
|
|
21
|
+
* get({ a: { b: 1 } }, ["a", "x"], 0); // 0
|
|
22
|
+
*/
|
|
23
|
+
var get = exports.get = function get(object, path, defaultValue) {
|
|
24
|
+
var segments = (0, _pathSegments.pathSegments)(path);
|
|
25
|
+
var current = object;
|
|
26
|
+
var _iterator = _createForOfIteratorHelper(segments),
|
|
27
|
+
_step;
|
|
28
|
+
try {
|
|
29
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
30
|
+
var key = _step.value;
|
|
31
|
+
if (current == null) {
|
|
32
|
+
return defaultValue;
|
|
33
|
+
}
|
|
34
|
+
current = current[key];
|
|
35
|
+
}
|
|
36
|
+
} catch (err) {
|
|
37
|
+
_iterator.e(err);
|
|
38
|
+
} finally {
|
|
39
|
+
_iterator.f();
|
|
40
|
+
}
|
|
41
|
+
return current === undefined ? defaultValue : current;
|
|
42
|
+
};
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Determines if an object has a specified path
|
|
3
|
-
* @param {T} object - Object to check
|
|
4
|
-
* @param {string | string[]} path - Path to check
|
|
5
|
-
* @returns {boolean} Returns true if path exists, false otherwise
|
|
6
|
-
* @example has({ a: { b: 1 } }, "a.b"); // true
|
|
7
|
-
* has({ a: { b: 1 } }, ["a", "b"]); // true
|
|
8
|
-
* has({ a: { b: 1 } }, "a.c"); // false
|
|
9
|
-
*
|
|
10
|
-
* @remarks
|
|
11
|
-
* **Prototype pollution warning:** This function does not filter out
|
|
12
|
-
* prototype-polluting keys (`__proto__`, `constructor`, `prototype`).
|
|
13
|
-
* If processing user-controlled input, sanitize with the appropriate
|
|
14
|
-
* `removePrototype*` helper before calling this function:
|
|
15
|
-
* - `removePrototype` — shallow sanitization of a single object
|
|
16
|
-
* - `removePrototypeDeep` — recursive sanitization of a single object (for deeply nested data)
|
|
17
|
-
* - `removePrototypeMap` — shallow sanitization of an array of objects
|
|
18
|
-
* - `removePrototypeMapDeep` — recursive sanitization of an array of objects (for deeply nested data)
|
|
19
|
-
*/
|
|
20
1
|
export declare const has: <T extends {
|
|
21
2
|
[key: string]: unknown;
|
|
22
3
|
}>(object: T, path: string | string[]) => boolean;
|
package/module/es5/Object/has.js
CHANGED
|
@@ -4,10 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.has = void 0;
|
|
7
|
+
var _pathSegments = require("./pathSegments");
|
|
7
8
|
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
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; } }
|
|
9
|
-
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; }
|
|
10
|
-
/**
|
|
10
|
+
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; } /**
|
|
11
11
|
* Determines if an object has a specified path
|
|
12
12
|
* @param {T} object - Object to check
|
|
13
13
|
* @param {string | string[]} path - Path to check
|
|
@@ -27,9 +27,9 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
27
27
|
* - `removePrototypeMapDeep` — recursive sanitization of an array of objects (for deeply nested data)
|
|
28
28
|
*/
|
|
29
29
|
var has = exports.has = function has(object, path) {
|
|
30
|
-
var
|
|
30
|
+
var segments = (0, _pathSegments.pathSegments)(path);
|
|
31
31
|
var current = object;
|
|
32
|
-
var _iterator = _createForOfIteratorHelper(
|
|
32
|
+
var _iterator = _createForOfIteratorHelper(segments),
|
|
33
33
|
_step;
|
|
34
34
|
try {
|
|
35
35
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export * from "./deepClone";
|
|
2
|
+
export * from "./flattenObject";
|
|
3
|
+
export * from "./get";
|
|
2
4
|
export * from "./getObjectsCommon";
|
|
3
5
|
export * from "./getObjectsDiff";
|
|
4
6
|
export * from "./has";
|
|
7
|
+
export * from "./invert";
|
|
5
8
|
export * from "./isEmpty";
|
|
6
9
|
export * from "./isPlainObject";
|
|
7
10
|
export * from "./keyBy";
|
|
@@ -10,9 +13,14 @@ export * from "./mapValues";
|
|
|
10
13
|
export * from "./merge";
|
|
11
14
|
export * from "./mergeDeep";
|
|
12
15
|
export * from "./omit";
|
|
16
|
+
export * from "./omitBy";
|
|
17
|
+
export * from "./pathSegments";
|
|
13
18
|
export * from "./pick";
|
|
19
|
+
export * from "./pickBy";
|
|
14
20
|
export * from "./pickDeep";
|
|
15
21
|
export * from "./removePrototype";
|
|
16
22
|
export * from "./removePrototypeDeep";
|
|
17
23
|
export * from "./removePrototypeMap";
|
|
18
24
|
export * from "./removePrototypeMapDeep";
|
|
25
|
+
export * from "./set";
|
|
26
|
+
export * from "./unflattenObject";
|
|
@@ -14,6 +14,28 @@ Object.keys(_deepClone).forEach(function (key) {
|
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
|
+
var _flattenObject = require("./flattenObject");
|
|
18
|
+
Object.keys(_flattenObject).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _flattenObject[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function get() {
|
|
24
|
+
return _flattenObject[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
var _get = require("./get");
|
|
29
|
+
Object.keys(_get).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _get[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function get() {
|
|
35
|
+
return _get[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
17
39
|
var _getObjectsCommon = require("./getObjectsCommon");
|
|
18
40
|
Object.keys(_getObjectsCommon).forEach(function (key) {
|
|
19
41
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -47,6 +69,17 @@ Object.keys(_has).forEach(function (key) {
|
|
|
47
69
|
}
|
|
48
70
|
});
|
|
49
71
|
});
|
|
72
|
+
var _invert = require("./invert");
|
|
73
|
+
Object.keys(_invert).forEach(function (key) {
|
|
74
|
+
if (key === "default" || key === "__esModule") return;
|
|
75
|
+
if (key in exports && exports[key] === _invert[key]) return;
|
|
76
|
+
Object.defineProperty(exports, key, {
|
|
77
|
+
enumerable: true,
|
|
78
|
+
get: function get() {
|
|
79
|
+
return _invert[key];
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
50
83
|
var _isEmpty = require("./isEmpty");
|
|
51
84
|
Object.keys(_isEmpty).forEach(function (key) {
|
|
52
85
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -135,6 +168,28 @@ Object.keys(_omit).forEach(function (key) {
|
|
|
135
168
|
}
|
|
136
169
|
});
|
|
137
170
|
});
|
|
171
|
+
var _omitBy = require("./omitBy");
|
|
172
|
+
Object.keys(_omitBy).forEach(function (key) {
|
|
173
|
+
if (key === "default" || key === "__esModule") return;
|
|
174
|
+
if (key in exports && exports[key] === _omitBy[key]) return;
|
|
175
|
+
Object.defineProperty(exports, key, {
|
|
176
|
+
enumerable: true,
|
|
177
|
+
get: function get() {
|
|
178
|
+
return _omitBy[key];
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
var _pathSegments = require("./pathSegments");
|
|
183
|
+
Object.keys(_pathSegments).forEach(function (key) {
|
|
184
|
+
if (key === "default" || key === "__esModule") return;
|
|
185
|
+
if (key in exports && exports[key] === _pathSegments[key]) return;
|
|
186
|
+
Object.defineProperty(exports, key, {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
get: function get() {
|
|
189
|
+
return _pathSegments[key];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
138
193
|
var _pick = require("./pick");
|
|
139
194
|
Object.keys(_pick).forEach(function (key) {
|
|
140
195
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -146,6 +201,17 @@ Object.keys(_pick).forEach(function (key) {
|
|
|
146
201
|
}
|
|
147
202
|
});
|
|
148
203
|
});
|
|
204
|
+
var _pickBy = require("./pickBy");
|
|
205
|
+
Object.keys(_pickBy).forEach(function (key) {
|
|
206
|
+
if (key === "default" || key === "__esModule") return;
|
|
207
|
+
if (key in exports && exports[key] === _pickBy[key]) return;
|
|
208
|
+
Object.defineProperty(exports, key, {
|
|
209
|
+
enumerable: true,
|
|
210
|
+
get: function get() {
|
|
211
|
+
return _pickBy[key];
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
149
215
|
var _pickDeep = require("./pickDeep");
|
|
150
216
|
Object.keys(_pickDeep).forEach(function (key) {
|
|
151
217
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -200,4 +266,26 @@ Object.keys(_removePrototypeMapDeep).forEach(function (key) {
|
|
|
200
266
|
return _removePrototypeMapDeep[key];
|
|
201
267
|
}
|
|
202
268
|
});
|
|
269
|
+
});
|
|
270
|
+
var _set = require("./set");
|
|
271
|
+
Object.keys(_set).forEach(function (key) {
|
|
272
|
+
if (key === "default" || key === "__esModule") return;
|
|
273
|
+
if (key in exports && exports[key] === _set[key]) return;
|
|
274
|
+
Object.defineProperty(exports, key, {
|
|
275
|
+
enumerable: true,
|
|
276
|
+
get: function get() {
|
|
277
|
+
return _set[key];
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
var _unflattenObject = require("./unflattenObject");
|
|
282
|
+
Object.keys(_unflattenObject).forEach(function (key) {
|
|
283
|
+
if (key === "default" || key === "__esModule") return;
|
|
284
|
+
if (key in exports && exports[key] === _unflattenObject[key]) return;
|
|
285
|
+
Object.defineProperty(exports, key, {
|
|
286
|
+
enumerable: true,
|
|
287
|
+
get: function get() {
|
|
288
|
+
return _unflattenObject[key];
|
|
289
|
+
}
|
|
290
|
+
});
|
|
203
291
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a new object with keys and values swapped.
|
|
3
|
+
* If multiple keys share the same value, later entries overwrite earlier ones.
|
|
4
|
+
*
|
|
5
|
+
* @template K - Key type of the input object (must be a PropertyKey)
|
|
6
|
+
* @template V - Value type of the input object (must be a PropertyKey)
|
|
7
|
+
* @param {Record<K, V>} object - Source object
|
|
8
|
+
* @returns {Record<V, K>} A new object with keys and values swapped
|
|
9
|
+
* @example
|
|
10
|
+
* invert({ a: 1, b: 2 }); // { 1: "a", 2: "b" }
|
|
11
|
+
*/
|
|
12
|
+
export declare const invert: <K extends PropertyKey, V extends PropertyKey>(object: Record<K, V>) => Record<V, K>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.invert = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new object with keys and values swapped.
|
|
9
|
+
* If multiple keys share the same value, later entries overwrite earlier ones.
|
|
10
|
+
*
|
|
11
|
+
* @template K - Key type of the input object (must be a PropertyKey)
|
|
12
|
+
* @template V - Value type of the input object (must be a PropertyKey)
|
|
13
|
+
* @param {Record<K, V>} object - Source object
|
|
14
|
+
* @returns {Record<V, K>} A new object with keys and values swapped
|
|
15
|
+
* @example
|
|
16
|
+
* invert({ a: 1, b: 2 }); // { 1: "a", 2: "b" }
|
|
17
|
+
*/
|
|
18
|
+
var invert = exports.invert = function invert(object) {
|
|
19
|
+
var result = {};
|
|
20
|
+
for (var _i = 0, _arr = Object.keys(object); _i < _arr.length; _i++) {
|
|
21
|
+
var key = _arr[_i];
|
|
22
|
+
var value = object[key];
|
|
23
|
+
result[value] = key;
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a new object containing only entries for which the predicate returns false.
|
|
3
|
+
*
|
|
4
|
+
* @template T - Type of the source object
|
|
5
|
+
* @param {T} object - Source object
|
|
6
|
+
* @param {(value: T[keyof T], key: keyof T) => boolean} predicate - Rejection predicate
|
|
7
|
+
* @returns {Partial<T>} A new object with the remaining entries
|
|
8
|
+
* @example
|
|
9
|
+
* omitBy({ a: 1, b: undefined, c: 3 }, (v) => v === undefined); // { a: 1, c: 3 }
|
|
10
|
+
*/
|
|
11
|
+
export declare const omitBy: <T extends Record<string, unknown>>(object: T, predicate: (value: T[keyof T], key: keyof T) => boolean) => Partial<T>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.omitBy = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new object containing only entries for which the predicate returns false.
|
|
9
|
+
*
|
|
10
|
+
* @template T - Type of the source object
|
|
11
|
+
* @param {T} object - Source object
|
|
12
|
+
* @param {(value: T[keyof T], key: keyof T) => boolean} predicate - Rejection predicate
|
|
13
|
+
* @returns {Partial<T>} A new object with the remaining entries
|
|
14
|
+
* @example
|
|
15
|
+
* omitBy({ a: 1, b: undefined, c: 3 }, (v) => v === undefined); // { a: 1, c: 3 }
|
|
16
|
+
*/
|
|
17
|
+
var omitBy = exports.omitBy = function omitBy(object, predicate) {
|
|
18
|
+
var result = {};
|
|
19
|
+
for (var _i = 0, _arr = Object.keys(object); _i < _arr.length; _i++) {
|
|
20
|
+
var key = _arr[_i];
|
|
21
|
+
var value = object[key];
|
|
22
|
+
if (!predicate(value, key)) {
|
|
23
|
+
result[key] = value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const pathSegments: (path: string | string[]) => string[];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a new object containing only entries for which the predicate returns true.
|
|
3
|
+
*
|
|
4
|
+
* @template T - Type of the source object
|
|
5
|
+
* @param {T} object - Source object
|
|
6
|
+
* @param {(value: T[keyof T], key: keyof T) => boolean} predicate - Selector predicate
|
|
7
|
+
* @returns {Partial<T>} A new object with the filtered entries
|
|
8
|
+
* @example
|
|
9
|
+
* pickBy({ a: 1, b: 2, c: 3 }, (v) => v > 1); // { b: 2, c: 3 }
|
|
10
|
+
*/
|
|
11
|
+
export declare const pickBy: <T extends Record<string, unknown>>(object: T, predicate: (value: T[keyof T], key: keyof T) => boolean) => Partial<T>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.pickBy = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new object containing only entries for which the predicate returns true.
|
|
9
|
+
*
|
|
10
|
+
* @template T - Type of the source object
|
|
11
|
+
* @param {T} object - Source object
|
|
12
|
+
* @param {(value: T[keyof T], key: keyof T) => boolean} predicate - Selector predicate
|
|
13
|
+
* @returns {Partial<T>} A new object with the filtered entries
|
|
14
|
+
* @example
|
|
15
|
+
* pickBy({ a: 1, b: 2, c: 3 }, (v) => v > 1); // { b: 2, c: 3 }
|
|
16
|
+
*/
|
|
17
|
+
var pickBy = exports.pickBy = function pickBy(object, predicate) {
|
|
18
|
+
var result = {};
|
|
19
|
+
for (var _i = 0, _arr = Object.keys(object); _i < _arr.length; _i++) {
|
|
20
|
+
var key = _arr[_i];
|
|
21
|
+
var value = object[key];
|
|
22
|
+
if (predicate(value, key)) {
|
|
23
|
+
result[key] = value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sets a value at a deeply nested path on an object, mutating it.
|
|
3
|
+
* Creates intermediate objects as needed.
|
|
4
|
+
*
|
|
5
|
+
* @template T - Type of the source object
|
|
6
|
+
* @param {T} object - Target object (mutated)
|
|
7
|
+
* @param {string | string[]} path - Dot-separated string or path segments array
|
|
8
|
+
* @param {unknown} value - Value to assign at the path
|
|
9
|
+
* @returns {T} The same object reference, for chaining
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* **Prototype pollution warning:** This function does not filter out
|
|
13
|
+
* prototype-polluting keys (`__proto__`, `constructor`, `prototype`).
|
|
14
|
+
* Sanitize user-controlled paths before calling.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* set({}, "a.b.c", 1); // { a: { b: { c: 1 } } }
|
|
18
|
+
*/
|
|
19
|
+
export declare const set: <T extends object>(object: T, path: string | string[], value: unknown) => T;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.set = void 0;
|
|
7
|
+
var _pathSegments = require("./pathSegments");
|
|
8
|
+
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); }
|
|
9
|
+
/**
|
|
10
|
+
* Sets a value at a deeply nested path on an object, mutating it.
|
|
11
|
+
* Creates intermediate objects as needed.
|
|
12
|
+
*
|
|
13
|
+
* @template T - Type of the source object
|
|
14
|
+
* @param {T} object - Target object (mutated)
|
|
15
|
+
* @param {string | string[]} path - Dot-separated string or path segments array
|
|
16
|
+
* @param {unknown} value - Value to assign at the path
|
|
17
|
+
* @returns {T} The same object reference, for chaining
|
|
18
|
+
*
|
|
19
|
+
* @remarks
|
|
20
|
+
* **Prototype pollution warning:** This function does not filter out
|
|
21
|
+
* prototype-polluting keys (`__proto__`, `constructor`, `prototype`).
|
|
22
|
+
* Sanitize user-controlled paths before calling.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* set({}, "a.b.c", 1); // { a: { b: { c: 1 } } }
|
|
26
|
+
*/
|
|
27
|
+
var set = exports.set = function set(object, path, value) {
|
|
28
|
+
var segments = (0, _pathSegments.pathSegments)(path);
|
|
29
|
+
if (segments.length === 0) {
|
|
30
|
+
return object;
|
|
31
|
+
}
|
|
32
|
+
var current = object;
|
|
33
|
+
for (var index = 0; index < segments.length - 1; index += 1) {
|
|
34
|
+
var key = segments[index];
|
|
35
|
+
var next = current[key];
|
|
36
|
+
if (next == null || _typeof(next) !== "object") {
|
|
37
|
+
current[key] = {};
|
|
38
|
+
}
|
|
39
|
+
current = current[key];
|
|
40
|
+
}
|
|
41
|
+
var lastIndex = segments.length - 1;
|
|
42
|
+
current[segments[lastIndex]] = value;
|
|
43
|
+
return object;
|
|
44
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reconstructs a nested object from a flat path-keyed object.
|
|
3
|
+
*
|
|
4
|
+
* @param {Record<string, unknown>} flat - Flat input keyed by joined paths
|
|
5
|
+
* @param {string} [separator="."] - Separator used in path keys
|
|
6
|
+
* @returns {Record<string, unknown>} A nested object
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* **Prototype pollution warning:** Internally uses `set`, which does not
|
|
10
|
+
* filter out prototype-polluting keys. Sanitize user-controlled keys.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* unflattenObject({ "a.b.c": 1, d: 2 }); // { a: { b: { c: 1 } }, d: 2 }
|
|
14
|
+
*/
|
|
15
|
+
export declare const unflattenObject: (flat: Record<string, unknown>, separator?: string) => Record<string, unknown>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.unflattenObject = void 0;
|
|
7
|
+
var _set = require("./set");
|
|
8
|
+
/**
|
|
9
|
+
* Reconstructs a nested object from a flat path-keyed object.
|
|
10
|
+
*
|
|
11
|
+
* @param {Record<string, unknown>} flat - Flat input keyed by joined paths
|
|
12
|
+
* @param {string} [separator="."] - Separator used in path keys
|
|
13
|
+
* @returns {Record<string, unknown>} A nested object
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* **Prototype pollution warning:** Internally uses `set`, which does not
|
|
17
|
+
* filter out prototype-polluting keys. Sanitize user-controlled keys.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* unflattenObject({ "a.b.c": 1, d: 2 }); // { a: { b: { c: 1 } }, d: 2 }
|
|
21
|
+
*/
|
|
22
|
+
var unflattenObject = exports.unflattenObject = function unflattenObject(flat) {
|
|
23
|
+
var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ".";
|
|
24
|
+
var result = {};
|
|
25
|
+
for (var _i = 0, _Object$keys = Object.keys(flat); _i < _Object$keys.length; _i++) {
|
|
26
|
+
var key = _Object$keys[_i];
|
|
27
|
+
(0, _set.set)(result, key.split(separator), flat[key]);
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
};
|