si-funciona 2.6.2 → 2.7.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 +8 -9
- package/browser/siFunciona.js +62 -66
- package/browser/siFunciona.min.js +1 -1
- package/dist/helpers/numbers/randomInteger.d.ts +18 -18
- package/dist/helpers/numbers/randomInteger.js +24 -24
- package/dist/helpers/numbers/randomNumber.d.ts +13 -13
- package/dist/helpers/numbers/randomNumber.js +19 -19
- package/dist/helpers/objects/cloneObject.d.ts +17 -19
- package/dist/helpers/objects/cloneObject.js +29 -31
- package/dist/helpers/objects/mergeObjectsBase.d.ts +38 -35
- package/dist/helpers/objects/mergeObjectsBase.js +89 -91
- package/dist/helpers/objects/mergeObjectsBase.min.js +1 -1
- package/dist/helpers/objects.d.ts +121 -121
- package/package.json +1 -1
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create a single random integer from a set of `range` possible values, starting at the optional offset.
|
|
3
|
-
* With no offset the result is 0 to range - 1 (so range is the number of possible values, the same as an array length
|
|
4
|
-
* when choosing an index). The distance between the result numbers can be adjusted with interval.
|
|
5
|
-
* @example
|
|
6
|
-
* randomInteger(1) // always 0 (one possible value)
|
|
7
|
-
* randomInteger(2) // 0 or 1
|
|
8
|
-
* randomInteger(3, 1, 5) // 5, 10 or 15
|
|
9
|
-
* items[randomInteger(items.length)] // a random valid index
|
|
10
|
-
* @memberOf module:numberHelpers
|
|
11
|
-
* @param {number} range - The number of possible values (0-99 would be 100 for range)
|
|
12
|
-
* @param {number} [offset=0] - Choose the starting number (1-10 would be 1 for offset, 10 for range)
|
|
13
|
-
* @param {number} [interval=1] - Choose the distance between numbers (5, 10, 15 would be 5 for interval, 1 for
|
|
14
|
-
* offset, 3 for range)
|
|
15
|
-
* @returns {number}
|
|
16
|
-
*/
|
|
17
|
-
declare const randomInteger: (range: number, offset?: number, interval?: number) => number;
|
|
18
|
-
export default randomInteger;
|
|
1
|
+
/**
|
|
2
|
+
* Create a single random integer from a set of `range` possible values, starting at the optional offset.
|
|
3
|
+
* With no offset the result is 0 to range - 1 (so range is the number of possible values, the same as an array length
|
|
4
|
+
* when choosing an index). The distance between the result numbers can be adjusted with interval.
|
|
5
|
+
* @example
|
|
6
|
+
* randomInteger(1) // always 0 (one possible value)
|
|
7
|
+
* randomInteger(2) // 0 or 1
|
|
8
|
+
* randomInteger(3, 1, 5) // 5, 10 or 15
|
|
9
|
+
* items[randomInteger(items.length)] // a random valid index
|
|
10
|
+
* @memberOf module:numberHelpers
|
|
11
|
+
* @param {number} range - The number of possible values (0-99 would be 100 for range)
|
|
12
|
+
* @param {number} [offset=0] - Choose the starting number (1-10 would be 1 for offset, 10 for range)
|
|
13
|
+
* @param {number} [interval=1] - Choose the distance between numbers (5, 10, 15 would be 5 for interval, 1 for
|
|
14
|
+
* offset, 3 for range)
|
|
15
|
+
* @returns {number}
|
|
16
|
+
*/
|
|
17
|
+
declare const randomInteger: (range: number, offset?: number, interval?: number) => number;
|
|
18
|
+
export default randomInteger;
|
|
19
19
|
//# sourceMappingURL=randomInteger.d.ts.map
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', {
|
|
4
|
-
value: true
|
|
5
|
-
})
|
|
6
|
-
exports.default = void 0
|
|
7
|
-
/**
|
|
8
|
-
* Create a single random integer from a set of `range` possible values, starting at the optional offset.
|
|
9
|
-
* With no offset the result is 0 to range - 1 (so range is the number of possible values, the same as an array length
|
|
10
|
-
* when choosing an index). The distance between the result numbers can be adjusted with interval.
|
|
11
|
-
* @example
|
|
12
|
-
* randomInteger(1) // always 0 (one possible value)
|
|
13
|
-
* randomInteger(2) // 0 or 1
|
|
14
|
-
* randomInteger(3, 1, 5) // 5, 10 or 15
|
|
15
|
-
* items[randomInteger(items.length)] // a random valid index
|
|
16
|
-
* @memberOf module:numberHelpers
|
|
17
|
-
* @param {number} range - The number of possible values (0-99 would be 100 for range)
|
|
18
|
-
* @param {number} [offset=0] - Choose the starting number (1-10 would be 1 for offset, 10 for range)
|
|
19
|
-
* @param {number} [interval=1] - Choose the distance between numbers (5, 10, 15 would be 5 for interval, 1 for
|
|
20
|
-
* offset, 3 for range)
|
|
21
|
-
* @returns {number}
|
|
22
|
-
*/
|
|
23
|
-
const randomInteger = (range, offset = 0, interval = 1) => (Math.floor(Math.random() * range) + offset) * interval
|
|
24
|
-
const _default = exports.default = randomInteger
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.default = void 0
|
|
7
|
+
/**
|
|
8
|
+
* Create a single random integer from a set of `range` possible values, starting at the optional offset.
|
|
9
|
+
* With no offset the result is 0 to range - 1 (so range is the number of possible values, the same as an array length
|
|
10
|
+
* when choosing an index). The distance between the result numbers can be adjusted with interval.
|
|
11
|
+
* @example
|
|
12
|
+
* randomInteger(1) // always 0 (one possible value)
|
|
13
|
+
* randomInteger(2) // 0 or 1
|
|
14
|
+
* randomInteger(3, 1, 5) // 5, 10 or 15
|
|
15
|
+
* items[randomInteger(items.length)] // a random valid index
|
|
16
|
+
* @memberOf module:numberHelpers
|
|
17
|
+
* @param {number} range - The number of possible values (0-99 would be 100 for range)
|
|
18
|
+
* @param {number} [offset=0] - Choose the starting number (1-10 would be 1 for offset, 10 for range)
|
|
19
|
+
* @param {number} [interval=1] - Choose the distance between numbers (5, 10, 15 would be 5 for interval, 1 for
|
|
20
|
+
* offset, 3 for range)
|
|
21
|
+
* @returns {number}
|
|
22
|
+
*/
|
|
23
|
+
const randomInteger = (range, offset = 0, interval = 1) => (Math.floor(Math.random() * range) + offset) * interval
|
|
24
|
+
const _default = exports.default = randomInteger
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create a single random number from offset up to (but never including) offset + range. With optional offset,
|
|
3
|
-
* the distance between the result numbers can be adjusted with interval. Matches randomInteger, which gives the
|
|
4
|
-
* whole numbers of the same span.
|
|
5
|
-
* @memberOf module:numberHelpers
|
|
6
|
-
* @param {number} range - Choose the breadth of the random number (0 up to, but not including, 100 would be 100 for range)
|
|
7
|
-
* @param {number} [offset=0] - Choose the starting number (1 up to, but not including, 10 would be 1 for offset, 9 for range)
|
|
8
|
-
* @param {number} [interval=1] - Choose the multiplier applied to the result (~5, ~10, ~15 would be 5 for interval,
|
|
9
|
-
* 1 for offset, 2 for range)
|
|
10
|
-
* @returns {number}
|
|
11
|
-
*/
|
|
12
|
-
declare const randomNumber: (range: number, offset?: number, interval?: number) => number;
|
|
13
|
-
export default randomNumber;
|
|
1
|
+
/**
|
|
2
|
+
* Create a single random number from offset up to (but never including) offset + range. With optional offset,
|
|
3
|
+
* the distance between the result numbers can be adjusted with interval. Matches randomInteger, which gives the
|
|
4
|
+
* whole numbers of the same span.
|
|
5
|
+
* @memberOf module:numberHelpers
|
|
6
|
+
* @param {number} range - Choose the breadth of the random number (0 up to, but not including, 100 would be 100 for range)
|
|
7
|
+
* @param {number} [offset=0] - Choose the starting number (1 up to, but not including, 10 would be 1 for offset, 9 for range)
|
|
8
|
+
* @param {number} [interval=1] - Choose the multiplier applied to the result (~5, ~10, ~15 would be 5 for interval,
|
|
9
|
+
* 1 for offset, 2 for range)
|
|
10
|
+
* @returns {number}
|
|
11
|
+
*/
|
|
12
|
+
declare const randomNumber: (range: number, offset?: number, interval?: number) => number;
|
|
13
|
+
export default randomNumber;
|
|
14
14
|
//# sourceMappingURL=randomNumber.d.ts.map
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', {
|
|
4
|
-
value: true
|
|
5
|
-
})
|
|
6
|
-
exports.default = void 0
|
|
7
|
-
/**
|
|
8
|
-
* Create a single random number from offset up to (but never including) offset + range. With optional offset,
|
|
9
|
-
* the distance between the result numbers can be adjusted with interval. Matches randomInteger, which gives the
|
|
10
|
-
* whole numbers of the same span.
|
|
11
|
-
* @memberOf module:numberHelpers
|
|
12
|
-
* @param {number} range - Choose the breadth of the random number (0 up to, but not including, 100 would be 100 for range)
|
|
13
|
-
* @param {number} [offset=0] - Choose the starting number (1 up to, but not including, 10 would be 1 for offset, 9 for range)
|
|
14
|
-
* @param {number} [interval=1] - Choose the multiplier applied to the result (~5, ~10, ~15 would be 5 for interval,
|
|
15
|
-
* 1 for offset, 2 for range)
|
|
16
|
-
* @returns {number}
|
|
17
|
-
*/
|
|
18
|
-
const randomNumber = (range, offset = 0, interval = 1) => (Math.random() * range + offset) * interval
|
|
19
|
-
const _default = exports.default = randomNumber
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.default = void 0
|
|
7
|
+
/**
|
|
8
|
+
* Create a single random number from offset up to (but never including) offset + range. With optional offset,
|
|
9
|
+
* the distance between the result numbers can be adjusted with interval. Matches randomInteger, which gives the
|
|
10
|
+
* whole numbers of the same span.
|
|
11
|
+
* @memberOf module:numberHelpers
|
|
12
|
+
* @param {number} range - Choose the breadth of the random number (0 up to, but not including, 100 would be 100 for range)
|
|
13
|
+
* @param {number} [offset=0] - Choose the starting number (1 up to, but not including, 10 would be 1 for offset, 9 for range)
|
|
14
|
+
* @param {number} [interval=1] - Choose the multiplier applied to the result (~5, ~10, ~15 would be 5 for interval,
|
|
15
|
+
* 1 for offset, 2 for range)
|
|
16
|
+
* @returns {number}
|
|
17
|
+
*/
|
|
18
|
+
const randomNumber = (range, offset = 0, interval = 1) => (Math.random() * range + offset) * interval
|
|
19
|
+
const _default = exports.default = randomNumber
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
type cloneObjectOptions = {
|
|
2
|
-
mapLimit?: number;
|
|
3
|
-
depthLimit?: number;
|
|
4
|
-
relevancyRange?: number;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Clone objects for manipulation without data corruption, returns a copy of the provided object.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
11
|
-
* @param {
|
|
12
|
-
* @param {
|
|
13
|
-
* @param {number} [options.
|
|
14
|
-
* @
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
declare const cloneObject: (object: object, { mapLimit, depthLimit, relevancyRange }?: cloneObjectOptions) => object;
|
|
19
|
-
export default cloneObject;
|
|
1
|
+
type cloneObjectOptions = {
|
|
2
|
+
mapLimit?: number;
|
|
3
|
+
depthLimit?: number;
|
|
4
|
+
relevancyRange?: number;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Clone objects for manipulation without data corruption, returns a copy of the provided object.
|
|
8
|
+
* @memberOf module:objectHelpers
|
|
9
|
+
* @param {Object} object - The original object that is being cloned
|
|
10
|
+
* @param {Object} [options={}]
|
|
11
|
+
* @param {number} [options.mapLimit=100] - Deprecated and ignored (circular references are handled without trimming).
|
|
12
|
+
* @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
|
|
13
|
+
* @param {number} [options.relevancyRange=1000] - Deprecated and ignored: see mapLimit.
|
|
14
|
+
* @returns {Object}
|
|
15
|
+
*/
|
|
16
|
+
declare const cloneObject: (object: object, { mapLimit, depthLimit, relevancyRange }?: cloneObjectOptions) => object;
|
|
17
|
+
export default cloneObject;
|
|
20
18
|
//# sourceMappingURL=cloneObject.d.ts.map
|
|
@@ -1,31 +1,29 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', {
|
|
4
|
-
value: true
|
|
5
|
-
})
|
|
6
|
-
exports.default = void 0
|
|
7
|
-
const _mergeObjectsBase = _interopRequireDefault(require('./mergeObjectsBase'))
|
|
8
|
-
function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
|
|
9
|
-
/**
|
|
10
|
-
* Clone objects for manipulation without data corruption, returns a copy of the provided object.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* @
|
|
14
|
-
* @param {
|
|
15
|
-
* @param {
|
|
16
|
-
* @param {number} [options.
|
|
17
|
-
* @
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
})(object)
|
|
31
|
-
const _default = exports.default = cloneObject
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.default = void 0
|
|
7
|
+
const _mergeObjectsBase = _interopRequireDefault(require('./mergeObjectsBase'))
|
|
8
|
+
function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
|
|
9
|
+
/**
|
|
10
|
+
* Clone objects for manipulation without data corruption, returns a copy of the provided object.
|
|
11
|
+
* @memberOf module:objectHelpers
|
|
12
|
+
* @param {Object} object - The original object that is being cloned
|
|
13
|
+
* @param {Object} [options={}]
|
|
14
|
+
* @param {number} [options.mapLimit=100] - Deprecated and ignored (circular references are handled without trimming).
|
|
15
|
+
* @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
|
|
16
|
+
* @param {number} [options.relevancyRange=1000] - Deprecated and ignored: see mapLimit.
|
|
17
|
+
* @returns {Object}
|
|
18
|
+
*/
|
|
19
|
+
const cloneObject = (object, {
|
|
20
|
+
mapLimit = 100,
|
|
21
|
+
depthLimit = -1,
|
|
22
|
+
relevancyRange = 1000
|
|
23
|
+
} = {}) => (0, _mergeObjectsBase.default)({
|
|
24
|
+
mapLimit,
|
|
25
|
+
depthLimit,
|
|
26
|
+
relevancyRange,
|
|
27
|
+
useClone: true
|
|
28
|
+
})(object)
|
|
29
|
+
const _default = exports.default = cloneObject
|
|
@@ -1,36 +1,39 @@
|
|
|
1
|
-
import { relevanceMap } from '../functions/relevancyFilter';
|
|
2
|
-
type mergeableItem = Array<any> | {
|
|
3
|
-
[k: number | string]: any;
|
|
4
|
-
};
|
|
5
|
-
/**
|
|
6
|
-
* Function that takes one or more objects and combines them into one.
|
|
7
|
-
* @typedef {Function} module:objectHelpers~mergeObjectsCallback
|
|
8
|
-
* @memberOf module:objectHelpers
|
|
9
|
-
* @param {...Object} objects - Provide a list of objects which will be merged starting from the end up into the first
|
|
10
|
-
* @returns {*}
|
|
11
|
-
*/
|
|
12
|
-
type mergeObjectsCallback = (...objects: Array<Object>) => mergeableItem;
|
|
13
|
-
type mergeObjectsBaseOptions = {
|
|
14
|
-
mapLimit?: number;
|
|
15
|
-
depthLimit?: number;
|
|
16
|
-
relevancyRange?: number;
|
|
17
|
-
map?: relevanceMap;
|
|
18
|
-
useClone?: boolean;
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Perform a deep merge of objects. This will return a function that will combine all objects and sub-objects.
|
|
22
|
-
* Objects having the same attributes will overwrite from last object to first.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
27
|
-
* @param {
|
|
28
|
-
* @param {number} [options.
|
|
29
|
-
*
|
|
30
|
-
* @param {
|
|
31
|
-
* @param {
|
|
32
|
-
* @
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
import { relevanceMap } from '../functions/relevancyFilter';
|
|
2
|
+
type mergeableItem = Array<any> | {
|
|
3
|
+
[k: number | string]: any;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Function that takes one or more objects and combines them into one.
|
|
7
|
+
* @typedef {Function} module:objectHelpers~mergeObjectsCallback
|
|
8
|
+
* @memberOf module:objectHelpers
|
|
9
|
+
* @param {...Object} objects - Provide a list of objects which will be merged starting from the end up into the first
|
|
10
|
+
* @returns {*}
|
|
11
|
+
*/
|
|
12
|
+
type mergeObjectsCallback = (...objects: Array<Object>) => mergeableItem;
|
|
13
|
+
type mergeObjectsBaseOptions = {
|
|
14
|
+
mapLimit?: number;
|
|
15
|
+
depthLimit?: number;
|
|
16
|
+
relevancyRange?: number;
|
|
17
|
+
map?: relevanceMap;
|
|
18
|
+
useClone?: boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Perform a deep merge of objects. This will return a function that will combine all objects and sub-objects.
|
|
22
|
+
* Objects having the same attributes will overwrite from last object to first.
|
|
23
|
+
* Every call of the returned function keeps its own record of the objects it has already visited (so circular
|
|
24
|
+
* references are followed only once, and an object which is referenced in several places is merged once), and nothing
|
|
25
|
+
* is remembered between calls: the results of separate calls never share state or go stale.
|
|
26
|
+
* @memberOf module:objectHelpers
|
|
27
|
+
* @param {Object} [options={}]
|
|
28
|
+
* @param {number} [options.mapLimit=100] - Deprecated and ignored: the record of visited objects is now scoped to a
|
|
29
|
+
* single call, so it does not need trimming.
|
|
30
|
+
* @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
|
|
31
|
+
* @param {number} [options.relevancyRange=1000] - Deprecated and ignored: see mapLimit.
|
|
32
|
+
* @param {Iterable|array} [options.map=[]] - A predetermined list of references (source and the object it should
|
|
33
|
+
* resolve to) which every call starts from. It is only read, never added to.
|
|
34
|
+
* @param {boolean} [options.useClone=false]
|
|
35
|
+
* @returns {module:objectHelpers~mergeObjectsCallback|mergeObjectsCallback}
|
|
36
|
+
*/
|
|
37
|
+
declare const mergeObjectsBase: ({ depthLimit, map, useClone, }?: mergeObjectsBaseOptions) => mergeObjectsCallback;
|
|
38
|
+
export default mergeObjectsBase;
|
|
36
39
|
//# sourceMappingURL=mergeObjectsBase.d.ts.map
|
|
@@ -1,91 +1,89 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', {
|
|
4
|
-
value: true
|
|
5
|
-
})
|
|
6
|
-
exports.default = void 0
|
|
7
|
-
require('core-js/modules/esnext.iterator.constructor.js')
|
|
8
|
-
require('core-js/modules/esnext.iterator.
|
|
9
|
-
require('core-js/modules/esnext.iterator.
|
|
10
|
-
require('core-js/modules/esnext.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
const _default = exports.default = mergeObjectsBase
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.default = void 0
|
|
7
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
8
|
+
require('core-js/modules/esnext.iterator.map.js')
|
|
9
|
+
require('core-js/modules/esnext.iterator.reduce.js')
|
|
10
|
+
require('core-js/modules/esnext.map.delete-all.js')
|
|
11
|
+
require('core-js/modules/esnext.map.every.js')
|
|
12
|
+
require('core-js/modules/esnext.map.filter.js')
|
|
13
|
+
require('core-js/modules/esnext.map.find.js')
|
|
14
|
+
require('core-js/modules/esnext.map.find-key.js')
|
|
15
|
+
require('core-js/modules/esnext.map.includes.js')
|
|
16
|
+
require('core-js/modules/esnext.map.key-of.js')
|
|
17
|
+
require('core-js/modules/esnext.map.map-keys.js')
|
|
18
|
+
require('core-js/modules/esnext.map.map-values.js')
|
|
19
|
+
require('core-js/modules/esnext.map.merge.js')
|
|
20
|
+
require('core-js/modules/esnext.map.reduce.js')
|
|
21
|
+
require('core-js/modules/esnext.map.some.js')
|
|
22
|
+
require('core-js/modules/esnext.map.update.js')
|
|
23
|
+
const _isCloneable = _interopRequireDefault(require('./isCloneable'))
|
|
24
|
+
const _reduceObject = _interopRequireDefault(require('./reduceObject'))
|
|
25
|
+
const _setValue = _interopRequireDefault(require('./setValue'))
|
|
26
|
+
function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
|
|
27
|
+
/**
|
|
28
|
+
* Perform a deep merge of objects. This will return a function that will combine all objects and sub-objects.
|
|
29
|
+
* Objects having the same attributes will overwrite from last object to first.
|
|
30
|
+
* Every call of the returned function keeps its own record of the objects it has already visited (so circular
|
|
31
|
+
* references are followed only once, and an object which is referenced in several places is merged once), and nothing
|
|
32
|
+
* is remembered between calls: the results of separate calls never share state or go stale.
|
|
33
|
+
* @memberOf module:objectHelpers
|
|
34
|
+
* @param {Object} [options={}]
|
|
35
|
+
* @param {number} [options.mapLimit=100] - Deprecated and ignored: the record of visited objects is now scoped to a
|
|
36
|
+
* single call, so it does not need trimming.
|
|
37
|
+
* @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
|
|
38
|
+
* @param {number} [options.relevancyRange=1000] - Deprecated and ignored: see mapLimit.
|
|
39
|
+
* @param {Iterable|array} [options.map=[]] - A predetermined list of references (source and the object it should
|
|
40
|
+
* resolve to) which every call starts from. It is only read, never added to.
|
|
41
|
+
* @param {boolean} [options.useClone=false]
|
|
42
|
+
* @returns {module:objectHelpers~mergeObjectsCallback|mergeObjectsCallback}
|
|
43
|
+
*/
|
|
44
|
+
const mergeObjectsBase = ({
|
|
45
|
+
depthLimit = -1,
|
|
46
|
+
map = [],
|
|
47
|
+
useClone = false
|
|
48
|
+
} = {}) => {
|
|
49
|
+
const merge = (visited, depth, objects) => {
|
|
50
|
+
const firstObject = useClone ? Array.isArray(objects[0]) ? [] : {} : objects.shift()
|
|
51
|
+
if (objects.length < 1) {
|
|
52
|
+
return firstObject
|
|
53
|
+
}
|
|
54
|
+
if (depth === 0) {
|
|
55
|
+
return firstObject
|
|
56
|
+
}
|
|
57
|
+
return objects.reduce((newObj, arg) => {
|
|
58
|
+
if (!arg) {
|
|
59
|
+
return newObj
|
|
60
|
+
}
|
|
61
|
+
if (!visited.has(arg)) {
|
|
62
|
+
visited.set(arg, newObj)
|
|
63
|
+
}
|
|
64
|
+
return (0, _reduceObject.default)(arg, (returnObj, value, key) => {
|
|
65
|
+
if ((0, _isCloneable.default)(value)) {
|
|
66
|
+
if (visited.has(value)) {
|
|
67
|
+
return (0, _setValue.default)(key, visited.get(value), returnObj)
|
|
68
|
+
}
|
|
69
|
+
let objectValue = newObj[key]
|
|
70
|
+
if (!(0, _isCloneable.default)(objectValue) || !objectValue) {
|
|
71
|
+
if (!useClone) {
|
|
72
|
+
// Merging by reference: the source object is used as it is, there is nothing to merge it into.
|
|
73
|
+
visited.set(value, value)
|
|
74
|
+
return (0, _setValue.default)(key, value, returnObj)
|
|
75
|
+
}
|
|
76
|
+
objectValue = Array.isArray(value) ? [] : {}
|
|
77
|
+
}
|
|
78
|
+
return (0, _setValue.default)(key, merge(visited, depth - 1, [objectValue, value]), returnObj)
|
|
79
|
+
}
|
|
80
|
+
return (0, _setValue.default)(key, value, returnObj)
|
|
81
|
+
}, newObj)
|
|
82
|
+
}, firstObject || {})
|
|
83
|
+
}
|
|
84
|
+
return (...objects) => merge(new Map(map.map(({
|
|
85
|
+
source,
|
|
86
|
+
object
|
|
87
|
+
}) => [source, object])), depthLimit, objects)
|
|
88
|
+
}
|
|
89
|
+
const _default = exports.default = mergeObjectsBase
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.iterator.reduce.js"),require("core-js/modules/esnext.map.delete-all.js"),require("core-js/modules/esnext.map.every.js"),require("core-js/modules/esnext.map.filter.js"),require("core-js/modules/esnext.map.find.js"),require("core-js/modules/esnext.map.find-key.js"),require("core-js/modules/esnext.map.includes.js"),require("core-js/modules/esnext.map.key-of.js"),require("core-js/modules/esnext.map.map-keys.js"),require("core-js/modules/esnext.map.map-values.js"),require("core-js/modules/esnext.map.merge.js"),require("core-js/modules/esnext.map.reduce.js"),require("core-js/modules/esnext.map.some.js"),require("core-js/modules/esnext.map.update.js");var _isCloneable=_interopRequireDefault(require("./isCloneable")),_reduceObject=_interopRequireDefault(require("./reduceObject")),_setValue=_interopRequireDefault(require("./setValue"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const mergeObjectsBase=({depthLimit:e=-1,map:r=[],useClone:s=!1}={})=>{const t=(e,r,u)=>{const a=s?Array.isArray(u[0])?[]:{}:u.shift();return u.length<1||0===r?a:u.reduce(((u,a)=>a?(e.has(a)||e.set(a,u),(0,_reduceObject.default)(a,((a,o,l)=>{if((0,_isCloneable.default)(o)){if(e.has(o))return(0,_setValue.default)(l,e.get(o),a);let i=u[l];if(!(0,_isCloneable.default)(i)||!i){if(!s)return e.set(o,o),(0,_setValue.default)(l,o,a);i=Array.isArray(o)?[]:{}}return(0,_setValue.default)(l,t(e,r-1,[i,o]),a)}return(0,_setValue.default)(l,o,a)}),u)):u),a||{})};return(...s)=>t(new Map(r.map((({source:e,object:r})=>[e,r]))),e,s)};var _default=exports.default=mergeObjectsBase;
|