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.
@@ -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
- * NOTE: Use the mapLimit and relevancyRange to resolve "too much recursion" when the object is large and is known to
9
- * have circular references. A high mapLimit may lead to heavy memory usage and slow performance.
10
- * @memberOf module:objectHelpers
11
- * @param {Object} object - The original object that is being cloned
12
- * @param {Object} [options={}]
13
- * @param {number} [options.mapLimit=100] - Size of temporary reference array used in memory before assessing relevancy.
14
- * @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
15
- * @param {number} [options.relevancyRange=1000] - Total reference map length subtract this range, any relevancy less than that amount at time of evaluation will be removed.
16
- * @returns {Object}
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
- * NOTE: Use the mapLimit and relevancyRange to resolve "too much recursion" when the object is large and is known to
12
- * have circular references. A high mapLimit may lead to heavy memory usage and slow performance.
13
- * @memberOf module:objectHelpers
14
- * @param {Object} object - The original object that is being cloned
15
- * @param {Object} [options={}]
16
- * @param {number} [options.mapLimit=100] - Size of temporary reference array used in memory before assessing relevancy.
17
- * @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
18
- * @param {number} [options.relevancyRange=1000] - Total reference map length subtract this range, any relevancy less than that amount at time of evaluation will be removed.
19
- * @returns {Object}
20
- */
21
- const cloneObject = (object, {
22
- mapLimit = 100,
23
- depthLimit = -1,
24
- relevancyRange = 1000
25
- } = {}) => (0, _mergeObjectsBase.default)({
26
- mapLimit,
27
- depthLimit,
28
- relevancyRange,
29
- useClone: true
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
- * NOTE: Use the mapLimit and relevancyRange to resolve "too much recursion" when the object is large and is known to
24
- * have circular references. A high mapLimit may lead to heavy memory usage and slow performance.
25
- * @memberOf module:objectHelpers
26
- * @param {Object} [options={}]
27
- * @param {number} [options.mapLimit=100] - Size of temporary reference array used in memory before assessing relevancy.
28
- * @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
29
- * @param {number} [options.relevancyRange=1000] - Total reference map length subtract this range, any relevancy less than that amount at time of evaluation will be removed.
30
- * @param {Iterable|array} [options.map=[]] - A predetermined list of references gathered (to be passed to itself during recursion).
31
- * @param {boolean} [options.useClone=false]
32
- * @returns {module:objectHelpers~mergeObjectsCallback|mergeObjectsCallback}
33
- */
34
- declare const mergeObjectsBase: ({ mapLimit, depthLimit, relevancyRange, map, useClone, }?: mergeObjectsBaseOptions) => mergeObjectsCallback;
35
- export default mergeObjectsBase;
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.find.js')
9
- require('core-js/modules/esnext.iterator.map.js')
10
- require('core-js/modules/esnext.iterator.reduce.js')
11
- const _isCloneable = _interopRequireDefault(require('./isCloneable'))
12
- const _reduceObject = _interopRequireDefault(require('./reduceObject'))
13
- const _relevancyFilter = _interopRequireDefault(require('../functions/relevancyFilter'))
14
- const _setValue = _interopRequireDefault(require('./setValue'))
15
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
16
- /**
17
- * Perform a deep merge of objects. This will return a function that will combine all objects and sub-objects.
18
- * Objects having the same attributes will overwrite from last object to first.
19
- * NOTE: Use the mapLimit and relevancyRange to resolve "too much recursion" when the object is large and is known to
20
- * have circular references. A high mapLimit may lead to heavy memory usage and slow performance.
21
- * @memberOf module:objectHelpers
22
- * @param {Object} [options={}]
23
- * @param {number} [options.mapLimit=100] - Size of temporary reference array used in memory before assessing relevancy.
24
- * @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
25
- * @param {number} [options.relevancyRange=1000] - Total reference map length subtract this range, any relevancy less than that amount at time of evaluation will be removed.
26
- * @param {Iterable|array} [options.map=[]] - A predetermined list of references gathered (to be passed to itself during recursion).
27
- * @param {boolean} [options.useClone=false]
28
- * @returns {module:objectHelpers~mergeObjectsCallback|mergeObjectsCallback}
29
- */
30
- const mergeObjectsBase = ({
31
- mapLimit = 100,
32
- depthLimit = -1,
33
- relevancyRange = 1000,
34
- map = [],
35
- useClone = false
36
- } = {}) => (...objects) => {
37
- const firstObject = useClone ? Array.isArray(objects[0]) ? [] : {} : objects.shift()
38
- if (objects.length < 1) {
39
- return firstObject
40
- }
41
- if (depthLimit === 0) {
42
- return firstObject
43
- }
44
- return objects.reduce((newObj, arg) => {
45
- if (!arg) {
46
- return newObj
47
- }
48
- map.push({
49
- source: arg,
50
- object: newObj,
51
- relevance: map.length
52
- })
53
- map = (0, _relevancyFilter.default)(map, {
54
- mapLimit,
55
- relevancyRange
56
- })
57
- return (0, _reduceObject.default)(arg, (returnObj, value, key) => {
58
- if ((0, _isCloneable.default)(value)) {
59
- let objectValue = newObj[key]
60
- const exists = map.find(existing => existing.source === value)
61
- if (exists) {
62
- exists.relevance = map.length + 1
63
- return (0, _setValue.default)(key, exists.object, returnObj)
64
- }
65
- if (!(0, _isCloneable.default)(objectValue) || !objectValue) {
66
- objectValue = useClone ? Array.isArray(value) ? [] : {} : value
67
- }
68
- if ((0, _isCloneable.default)(objectValue)) {
69
- return (0, _setValue.default)(key, mergeObjectsBase({
70
- mapLimit,
71
- depthLimit: depthLimit - 1,
72
- relevancyRange,
73
- map,
74
- useClone
75
- })(objectValue, value), returnObj)
76
- }
77
- map.push({
78
- source: value,
79
- object: objectValue,
80
- relevance: map.length
81
- })
82
- map = (0, _relevancyFilter.default)(map, {
83
- mapLimit,
84
- relevancyRange
85
- })
86
- }
87
- return (0, _setValue.default)(key, value, returnObj)
88
- }, newObj)
89
- }, firstObject || {})
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.find.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.iterator.reduce.js");var _isCloneable=_interopRequireDefault(require("./isCloneable")),_reduceObject=_interopRequireDefault(require("./reduceObject")),_relevancyFilter=_interopRequireDefault(require("../functions/relevancyFilter")),_setValue=_interopRequireDefault(require("./setValue"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const mergeObjectsBase=({mapLimit:e=100,depthLimit:r=-1,relevancyRange:t=1e3,map:a=[],useClone:u=!1}={})=>(...l)=>{const i=u?Array.isArray(l[0])?[]:{}:l.shift();return l.length<1||0===r?i:l.reduce(((l,i)=>i?(a.push({source:i,object:l,relevance:a.length}),a=(0,_relevancyFilter.default)(a,{mapLimit:e,relevancyRange:t}),(0,_reduceObject.default)(i,((i,s,n)=>{if((0,_isCloneable.default)(s)){let o=l[n];const c=a.find((e=>e.source===s));if(c)return c.relevance=a.length+1,(0,_setValue.default)(n,c.object,i);if((0,_isCloneable.default)(o)&&o||(o=u?Array.isArray(s)?[]:{}:s),(0,_isCloneable.default)(o))return(0,_setValue.default)(n,mergeObjectsBase({mapLimit:e,depthLimit:r-1,relevancyRange:t,map:a,useClone:u})(o,s),i);a.push({source:s,object:o,relevance:a.length}),a=(0,_relevancyFilter.default)(a,{mapLimit:e,relevancyRange:t})}return(0,_setValue.default)(n,s,i)}),l)):l),i||{})};var _default=exports.default=mergeObjectsBase;
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;