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
package/README.md
CHANGED
|
@@ -359,18 +359,19 @@ Optional flag will include the inherited keys from prototype chain when set.
|
|
|
359
359
|
### objectHelpers.mergeObjectsBase([options]) ⇒ <code>module:objectHelpers~mergeObjectsCallback</code> \| <code>mergeObjectsCallback</code>
|
|
360
360
|
Perform a deep merge of objects. This will return a function that will combine all objects and sub-objects.
|
|
361
361
|
Objects having the same attributes will overwrite from last object to first.
|
|
362
|
-
|
|
363
|
-
|
|
362
|
+
Every call of the returned function keeps its own record of the objects it has already visited (so circular
|
|
363
|
+
references are followed only once, and an object which is referenced in several places is merged once), and nothing
|
|
364
|
+
is remembered between calls: the results of separate calls never share state or go stale.
|
|
364
365
|
|
|
365
366
|
**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)
|
|
366
367
|
|
|
367
368
|
| Param | Type | Default | Description |
|
|
368
369
|
| --- | --- | --- | --- |
|
|
369
370
|
| [options] | <code>Object</code> | <code>{}</code> | |
|
|
370
|
-
| [options.mapLimit] | <code>number</code> | <code>100</code> |
|
|
371
|
+
| [options.mapLimit] | <code>number</code> | <code>100</code> | Deprecated and ignored: the record of visited objects is now scoped to a single call, so it does not need trimming. |
|
|
371
372
|
| [options.depthLimit] | <code>number</code> | <code>-1</code> | Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited. |
|
|
372
|
-
| [options.relevancyRange] | <code>number</code> | <code>1000</code> |
|
|
373
|
-
| [options.map] | <code>Iterable</code> \| <code>array</code> | <code>[]</code> | A predetermined list of references
|
|
373
|
+
| [options.relevancyRange] | <code>number</code> | <code>1000</code> | Deprecated and ignored: see mapLimit. |
|
|
374
|
+
| [options.map] | <code>Iterable</code> \| <code>array</code> | <code>[]</code> | A predetermined list of references (source and the object it should resolve to) which every call starts from. It is only read, never added to. |
|
|
374
375
|
| [options.useClone] | <code>boolean</code> | <code>false</code> | |
|
|
375
376
|
|
|
376
377
|
<a name="module_objectHelpers.mapObject"></a>
|
|
@@ -525,8 +526,6 @@ Get a nested property value from an object.
|
|
|
525
526
|
|
|
526
527
|
### objectHelpers.cloneObject(object, [options]) ⇒ <code>Object</code>
|
|
527
528
|
Clone objects for manipulation without data corruption, returns a copy of the provided object.
|
|
528
|
-
NOTE: Use the mapLimit and relevancyRange to resolve "too much recursion" when the object is large and is known to
|
|
529
|
-
have circular references. A high mapLimit may lead to heavy memory usage and slow performance.
|
|
530
529
|
|
|
531
530
|
**Kind**: static method of [<code>objectHelpers</code>](#module_objectHelpers)
|
|
532
531
|
|
|
@@ -534,9 +533,9 @@ have circular references. A high mapLimit may lead to heavy memory usage and slo
|
|
|
534
533
|
| --- | --- | --- | --- |
|
|
535
534
|
| object | <code>Object</code> | | The original object that is being cloned |
|
|
536
535
|
| [options] | <code>Object</code> | <code>{}</code> | |
|
|
537
|
-
| [options.mapLimit] | <code>number</code> | <code>100</code> |
|
|
536
|
+
| [options.mapLimit] | <code>number</code> | <code>100</code> | Deprecated and ignored (circular references are handled without trimming). |
|
|
538
537
|
| [options.depthLimit] | <code>number</code> | <code>-1</code> | Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited. |
|
|
539
|
-
| [options.relevancyRange] | <code>number</code> | <code>1000</code> |
|
|
538
|
+
| [options.relevancyRange] | <code>number</code> | <code>1000</code> | Deprecated and ignored: see mapLimit. |
|
|
540
539
|
|
|
541
540
|
<a name="module_objectHelpers..handleRetainObjects"></a>
|
|
542
541
|
|
package/browser/siFunciona.js
CHANGED
|
@@ -1966,14 +1966,12 @@
|
|
|
1966
1966
|
function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
|
|
1967
1967
|
/**
|
|
1968
1968
|
* Clone objects for manipulation without data corruption, returns a copy of the provided object.
|
|
1969
|
-
* NOTE: Use the mapLimit and relevancyRange to resolve "too much recursion" when the object is large and is known to
|
|
1970
|
-
* have circular references. A high mapLimit may lead to heavy memory usage and slow performance.
|
|
1971
1969
|
* @memberOf module:objectHelpers
|
|
1972
1970
|
* @param {Object} object - The original object that is being cloned
|
|
1973
1971
|
* @param {Object} [options={}]
|
|
1974
|
-
* @param {number} [options.mapLimit=100] -
|
|
1972
|
+
* @param {number} [options.mapLimit=100] - Deprecated and ignored (circular references are handled without trimming).
|
|
1975
1973
|
* @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
|
|
1976
|
-
* @param {number} [options.relevancyRange=1000] -
|
|
1974
|
+
* @param {number} [options.relevancyRange=1000] - Deprecated and ignored: see mapLimit.
|
|
1977
1975
|
* @returns {Object}
|
|
1978
1976
|
*/
|
|
1979
1977
|
const cloneObject = (object, {
|
|
@@ -2513,91 +2511,89 @@
|
|
|
2513
2511
|
})
|
|
2514
2512
|
exports.default = void 0
|
|
2515
2513
|
require('core-js/modules/esnext.iterator.constructor.js')
|
|
2516
|
-
require('core-js/modules/esnext.iterator.find.js')
|
|
2517
2514
|
require('core-js/modules/esnext.iterator.map.js')
|
|
2518
2515
|
require('core-js/modules/esnext.iterator.reduce.js')
|
|
2516
|
+
require('core-js/modules/esnext.map.delete-all.js')
|
|
2517
|
+
require('core-js/modules/esnext.map.every.js')
|
|
2518
|
+
require('core-js/modules/esnext.map.filter.js')
|
|
2519
|
+
require('core-js/modules/esnext.map.find.js')
|
|
2520
|
+
require('core-js/modules/esnext.map.find-key.js')
|
|
2521
|
+
require('core-js/modules/esnext.map.includes.js')
|
|
2522
|
+
require('core-js/modules/esnext.map.key-of.js')
|
|
2523
|
+
require('core-js/modules/esnext.map.map-keys.js')
|
|
2524
|
+
require('core-js/modules/esnext.map.map-values.js')
|
|
2525
|
+
require('core-js/modules/esnext.map.merge.js')
|
|
2526
|
+
require('core-js/modules/esnext.map.reduce.js')
|
|
2527
|
+
require('core-js/modules/esnext.map.some.js')
|
|
2528
|
+
require('core-js/modules/esnext.map.update.js')
|
|
2519
2529
|
const _isCloneable = _interopRequireDefault(require('./isCloneable'))
|
|
2520
2530
|
const _reduceObject = _interopRequireDefault(require('./reduceObject'))
|
|
2521
|
-
const _relevancyFilter = _interopRequireDefault(require('../functions/relevancyFilter'))
|
|
2522
2531
|
const _setValue = _interopRequireDefault(require('./setValue'))
|
|
2523
2532
|
function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
|
|
2524
2533
|
/**
|
|
2525
2534
|
* Perform a deep merge of objects. This will return a function that will combine all objects and sub-objects.
|
|
2526
2535
|
* Objects having the same attributes will overwrite from last object to first.
|
|
2527
|
-
*
|
|
2528
|
-
*
|
|
2536
|
+
* Every call of the returned function keeps its own record of the objects it has already visited (so circular
|
|
2537
|
+
* references are followed only once, and an object which is referenced in several places is merged once), and nothing
|
|
2538
|
+
* is remembered between calls: the results of separate calls never share state or go stale.
|
|
2529
2539
|
* @memberOf module:objectHelpers
|
|
2530
2540
|
* @param {Object} [options={}]
|
|
2531
|
-
* @param {number} [options.mapLimit=100] -
|
|
2541
|
+
* @param {number} [options.mapLimit=100] - Deprecated and ignored: the record of visited objects is now scoped to a
|
|
2542
|
+
* single call, so it does not need trimming.
|
|
2532
2543
|
* @param {number} [options.depthLimit=-1] - Control how many nested levels deep will be used, -1 = no limit, >-1 = nth level limited.
|
|
2533
|
-
* @param {number} [options.relevancyRange=1000] -
|
|
2534
|
-
* @param {Iterable|array} [options.map=[]] - A predetermined list of references
|
|
2544
|
+
* @param {number} [options.relevancyRange=1000] - Deprecated and ignored: see mapLimit.
|
|
2545
|
+
* @param {Iterable|array} [options.map=[]] - A predetermined list of references (source and the object it should
|
|
2546
|
+
* resolve to) which every call starts from. It is only read, never added to.
|
|
2535
2547
|
* @param {boolean} [options.useClone=false]
|
|
2536
2548
|
* @returns {module:objectHelpers~mergeObjectsCallback|mergeObjectsCallback}
|
|
2537
2549
|
*/
|
|
2538
2550
|
const mergeObjectsBase = ({
|
|
2539
|
-
mapLimit = 100,
|
|
2540
2551
|
depthLimit = -1,
|
|
2541
|
-
relevancyRange = 1000,
|
|
2542
2552
|
map = [],
|
|
2543
2553
|
useClone = false
|
|
2544
|
-
} = {}) =>
|
|
2545
|
-
const
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
if (depthLimit === 0) {
|
|
2550
|
-
return firstObject
|
|
2551
|
-
}
|
|
2552
|
-
return objects.reduce((newObj, arg) => {
|
|
2553
|
-
if (!arg) {
|
|
2554
|
-
return newObj
|
|
2554
|
+
} = {}) => {
|
|
2555
|
+
const merge = (visited, depth, objects) => {
|
|
2556
|
+
const firstObject = useClone ? Array.isArray(objects[0]) ? [] : {} : objects.shift()
|
|
2557
|
+
if (objects.length < 1) {
|
|
2558
|
+
return firstObject
|
|
2555
2559
|
}
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
mapLimit,
|
|
2563
|
-
relevancyRange
|
|
2564
|
-
})
|
|
2565
|
-
return (0, _reduceObject.default)(arg, (returnObj, value, key) => {
|
|
2566
|
-
if ((0, _isCloneable.default)(value)) {
|
|
2567
|
-
let objectValue = newObj[key]
|
|
2568
|
-
const exists = map.find(existing => existing.source === value)
|
|
2569
|
-
if (exists) {
|
|
2570
|
-
exists.relevance = map.length + 1
|
|
2571
|
-
return (0, _setValue.default)(key, exists.object, returnObj)
|
|
2572
|
-
}
|
|
2573
|
-
if (!(0, _isCloneable.default)(objectValue) || !objectValue) {
|
|
2574
|
-
objectValue = useClone ? Array.isArray(value) ? [] : {} : value
|
|
2575
|
-
}
|
|
2576
|
-
if ((0, _isCloneable.default)(objectValue)) {
|
|
2577
|
-
return (0, _setValue.default)(key, mergeObjectsBase({
|
|
2578
|
-
mapLimit,
|
|
2579
|
-
depthLimit: depthLimit - 1,
|
|
2580
|
-
relevancyRange,
|
|
2581
|
-
map,
|
|
2582
|
-
useClone
|
|
2583
|
-
})(objectValue, value), returnObj)
|
|
2584
|
-
}
|
|
2585
|
-
map.push({
|
|
2586
|
-
source: value,
|
|
2587
|
-
object: objectValue,
|
|
2588
|
-
relevance: map.length
|
|
2589
|
-
})
|
|
2590
|
-
map = (0, _relevancyFilter.default)(map, {
|
|
2591
|
-
mapLimit,
|
|
2592
|
-
relevancyRange
|
|
2593
|
-
})
|
|
2560
|
+
if (depth === 0) {
|
|
2561
|
+
return firstObject
|
|
2562
|
+
}
|
|
2563
|
+
return objects.reduce((newObj, arg) => {
|
|
2564
|
+
if (!arg) {
|
|
2565
|
+
return newObj
|
|
2594
2566
|
}
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2567
|
+
if (!visited.has(arg)) {
|
|
2568
|
+
visited.set(arg, newObj)
|
|
2569
|
+
}
|
|
2570
|
+
return (0, _reduceObject.default)(arg, (returnObj, value, key) => {
|
|
2571
|
+
if ((0, _isCloneable.default)(value)) {
|
|
2572
|
+
if (visited.has(value)) {
|
|
2573
|
+
return (0, _setValue.default)(key, visited.get(value), returnObj)
|
|
2574
|
+
}
|
|
2575
|
+
let objectValue = newObj[key]
|
|
2576
|
+
if (!(0, _isCloneable.default)(objectValue) || !objectValue) {
|
|
2577
|
+
if (!useClone) {
|
|
2578
|
+
// Merging by reference: the source object is used as it is, there is nothing to merge it into.
|
|
2579
|
+
visited.set(value, value)
|
|
2580
|
+
return (0, _setValue.default)(key, value, returnObj)
|
|
2581
|
+
}
|
|
2582
|
+
objectValue = Array.isArray(value) ? [] : {}
|
|
2583
|
+
}
|
|
2584
|
+
return (0, _setValue.default)(key, merge(visited, depth - 1, [objectValue, value]), returnObj)
|
|
2585
|
+
}
|
|
2586
|
+
return (0, _setValue.default)(key, value, returnObj)
|
|
2587
|
+
}, newObj)
|
|
2588
|
+
}, firstObject || {})
|
|
2589
|
+
}
|
|
2590
|
+
return (...objects) => merge(new Map(map.map(({
|
|
2591
|
+
source,
|
|
2592
|
+
object
|
|
2593
|
+
}) => [source, object])), depthLimit, objects)
|
|
2598
2594
|
}
|
|
2599
2595
|
const _default = exports.default = mergeObjectsBase
|
|
2600
|
-
}, { '
|
|
2596
|
+
}, { './isCloneable': 52, './reduceObject': 62, './setValue': 64, 'core-js/modules/esnext.iterator.constructor.js': 214, 'core-js/modules/esnext.iterator.map.js': 219, 'core-js/modules/esnext.iterator.reduce.js': 220, 'core-js/modules/esnext.map.delete-all.js': 222, 'core-js/modules/esnext.map.every.js': 223, 'core-js/modules/esnext.map.filter.js': 224, 'core-js/modules/esnext.map.find-key.js': 225, 'core-js/modules/esnext.map.find.js': 226, 'core-js/modules/esnext.map.includes.js': 227, 'core-js/modules/esnext.map.key-of.js': 228, 'core-js/modules/esnext.map.map-keys.js': 229, 'core-js/modules/esnext.map.map-values.js': 230, 'core-js/modules/esnext.map.merge.js': 231, 'core-js/modules/esnext.map.reduce.js': 232, 'core-js/modules/esnext.map.some.js': 233, 'core-js/modules/esnext.map.update.js': 234 }],
|
|
2601
2597
|
59: [function (require, module, exports) {
|
|
2602
2598
|
'use strict'
|
|
2603
2599
|
|