si-funciona 2.3.3 → 2.4.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.
Files changed (167) hide show
  1. package/README.md +1337 -1244
  2. package/browser/siFunciona.js +24205 -24146
  3. package/dist/helpers/arrays/BasicQueue.d.ts +65 -61
  4. package/dist/helpers/arrays/BasicQueue.js +62 -59
  5. package/dist/helpers/arrays/addUniqueToArray.d.ts +10 -10
  6. package/dist/helpers/arrays/addUniqueToArray.js +17 -17
  7. package/dist/helpers/arrays/buildArray.d.ts +11 -11
  8. package/dist/helpers/arrays/buildArray.js +26 -26
  9. package/dist/helpers/arrays/buildArrayOfReferences.d.ts +11 -11
  10. package/dist/helpers/arrays/buildArrayOfReferences.js +23 -23
  11. package/dist/helpers/arrays/compareArrays.d.ts +97 -97
  12. package/dist/helpers/arrays/compareArrays.js +97 -97
  13. package/dist/helpers/arrays/mergeArrays.d.ts +9 -9
  14. package/dist/helpers/arrays/mergeArrays.js +22 -22
  15. package/dist/helpers/arrays/uniqueArray.d.ts +9 -9
  16. package/dist/helpers/arrays/uniqueArray.js +17 -17
  17. package/dist/helpers/arrays.d.ts +21 -20
  18. package/dist/helpers/arrays.js +33 -32
  19. package/dist/helpers/descriptors/assignDescriptor.d.ts +14 -11
  20. package/dist/helpers/descriptors/assignDescriptor.js +58 -55
  21. package/dist/helpers/descriptors/assignDescriptorDetail.d.ts +14 -11
  22. package/dist/helpers/descriptors/assignDescriptorDetail.js +37 -34
  23. package/dist/helpers/descriptors/checkClearValues.d.ts +12 -11
  24. package/dist/helpers/descriptors/checkClearValues.js +21 -20
  25. package/dist/helpers/descriptors/checkDescriptorComplete.d.ts +11 -10
  26. package/dist/helpers/descriptors/checkDescriptorComplete.js +20 -19
  27. package/dist/helpers/descriptors/cloneDescriptor.d.ts +10 -10
  28. package/dist/helpers/descriptors/cloneDescriptor.js +36 -36
  29. package/dist/helpers/descriptors/cloneDescriptorDetail.d.ts +10 -10
  30. package/dist/helpers/descriptors/cloneDescriptorDetail.js +27 -27
  31. package/dist/helpers/descriptors/compareDescriptor.d.ts +13 -11
  32. package/dist/helpers/descriptors/compareDescriptor.js +33 -31
  33. package/dist/helpers/descriptors/describeObject.d.ts +15 -13
  34. package/dist/helpers/descriptors/describeObject.js +53 -51
  35. package/dist/helpers/descriptors/describeObjectDetail.d.ts +14 -12
  36. package/dist/helpers/descriptors/describeObjectDetail.js +38 -36
  37. package/dist/helpers/descriptors/describeObjectMap.d.ts +36 -20
  38. package/dist/helpers/descriptors/describeObjectMap.js +108 -92
  39. package/dist/helpers/descriptors/nextReference.d.ts +13 -11
  40. package/dist/helpers/descriptors/nextReference.js +31 -29
  41. package/dist/helpers/descriptors/sameDescriptor.d.ts +13 -11
  42. package/dist/helpers/descriptors/sameDescriptor.js +22 -20
  43. package/dist/helpers/descriptors/samples/descriptor.d.ts +34 -27
  44. package/dist/helpers/descriptors/samples/descriptor.js +22 -22
  45. package/dist/helpers/descriptors/samples/descriptorDetail.d.ts +42 -34
  46. package/dist/helpers/descriptors/samples/descriptorDetail.js +24 -24
  47. package/dist/helpers/descriptors/samples/descriptorMap.d.ts +16 -12
  48. package/dist/helpers/descriptors/samples/descriptorMap.js +14 -14
  49. package/dist/helpers/descriptors/samples/mappedDescriptorMap.d.ts +10 -7
  50. package/dist/helpers/descriptors/samples/mappedDescriptorMap.js +287 -284
  51. package/dist/helpers/descriptors.d.ts +44 -28
  52. package/dist/helpers/descriptors.js +58 -42
  53. package/dist/helpers/functions/callWithParams.d.ts +11 -11
  54. package/dist/helpers/functions/callWithParams.js +17 -17
  55. package/dist/helpers/functions/curry.d.ts +11 -11
  56. package/dist/helpers/functions/curry.js +17 -17
  57. package/dist/helpers/functions/delay.d.ts +21 -21
  58. package/dist/helpers/functions/delay.js +32 -32
  59. package/dist/helpers/functions/makeBasicQueue.d.ts +10 -10
  60. package/dist/helpers/functions/makeBasicQueue.js +19 -19
  61. package/dist/helpers/functions/onBodyLoad.d.ts +10 -10
  62. package/dist/helpers/functions/onBodyLoad.js +74 -74
  63. package/dist/helpers/functions/pipe.d.ts +10 -10
  64. package/dist/helpers/functions/pipe.js +18 -18
  65. package/dist/helpers/functions/preloadParams.d.ts +20 -20
  66. package/dist/helpers/functions/preloadParams.js +21 -21
  67. package/dist/helpers/functions/queueManager.d.ts +49 -47
  68. package/dist/helpers/functions/queueManager.js +124 -122
  69. package/dist/helpers/functions/queueTimeout.d.ts +21 -21
  70. package/dist/helpers/functions/queueTimeout.js +23 -23
  71. package/dist/helpers/functions/relevancyFilter.d.ts +35 -35
  72. package/dist/helpers/functions/relevancyFilter.js +34 -34
  73. package/dist/helpers/functions/trace.d.ts +14 -12
  74. package/dist/helpers/functions/trace.js +25 -23
  75. package/dist/helpers/functions.d.ts +29 -29
  76. package/dist/helpers/functions.js +40 -40
  77. package/dist/helpers/numbers/absoluteMax.d.ts +10 -10
  78. package/dist/helpers/numbers/absoluteMax.js +16 -16
  79. package/dist/helpers/numbers/absoluteMin.d.ts +10 -10
  80. package/dist/helpers/numbers/absoluteMin.js +16 -16
  81. package/dist/helpers/numbers/compare.d.ts +13 -13
  82. package/dist/helpers/numbers/compare.js +19 -19
  83. package/dist/helpers/numbers/greatestCommonDivisor.d.ts +10 -10
  84. package/dist/helpers/numbers/greatestCommonDivisor.js +16 -16
  85. package/dist/helpers/numbers/leastCommonMultiple.d.ts +10 -10
  86. package/dist/helpers/numbers/leastCommonMultiple.js +18 -18
  87. package/dist/helpers/numbers/lowestCommonDenominator.d.ts +10 -10
  88. package/dist/helpers/numbers/lowestCommonDenominator.js +20 -20
  89. package/dist/helpers/numbers/randomInteger.d.ts +13 -13
  90. package/dist/helpers/numbers/randomInteger.js +19 -19
  91. package/dist/helpers/numbers/randomNumber.d.ts +13 -13
  92. package/dist/helpers/numbers/randomNumber.js +19 -19
  93. package/dist/helpers/numbers/simplestRatio.d.ts +9 -9
  94. package/dist/helpers/numbers/simplestRatio.js +29 -29
  95. package/dist/helpers/numbers.d.ts +21 -21
  96. package/dist/helpers/numbers.js +36 -36
  97. package/dist/helpers/objects/cloneObject.d.ts +20 -20
  98. package/dist/helpers/objects/cloneObject.js +32 -32
  99. package/dist/helpers/objects/dotGet.d.ts +12 -12
  100. package/dist/helpers/objects/dotGet.js +60 -60
  101. package/dist/helpers/objects/dotNotate.d.ts +28 -28
  102. package/dist/helpers/objects/dotNotate.js +80 -80
  103. package/dist/helpers/objects/dotSet.d.ts +12 -12
  104. package/dist/helpers/objects/dotSet.js +54 -54
  105. package/dist/helpers/objects/dotUnset.d.ts +11 -11
  106. package/dist/helpers/objects/dotUnset.js +53 -53
  107. package/dist/helpers/objects/emptyObject.d.ts +9 -9
  108. package/dist/helpers/objects/emptyObject.js +18 -18
  109. package/dist/helpers/objects/filterObject.d.ts +27 -27
  110. package/dist/helpers/objects/filterObject.js +32 -32
  111. package/dist/helpers/objects/isCloneable.d.ts +9 -9
  112. package/dist/helpers/objects/isCloneable.js +17 -17
  113. package/dist/helpers/objects/isInstanceObject.d.ts +9 -9
  114. package/dist/helpers/objects/isInstanceObject.js +27 -27
  115. package/dist/helpers/objects/isObject.d.ts +9 -9
  116. package/dist/helpers/objects/isObject.js +15 -15
  117. package/dist/helpers/objects/mapObject.d.ts +26 -26
  118. package/dist/helpers/objects/mapObject.js +26 -26
  119. package/dist/helpers/objects/mergeObjects.d.ts +13 -13
  120. package/dist/helpers/objects/mergeObjects.js +20 -20
  121. package/dist/helpers/objects/mergeObjectsBase.d.ts +36 -36
  122. package/dist/helpers/objects/mergeObjectsBase.js +92 -92
  123. package/dist/helpers/objects/mergeObjectsMutable.d.ts +13 -13
  124. package/dist/helpers/objects/mergeObjectsMutable.js +18 -18
  125. package/dist/helpers/objects/objectKeys.d.ts +14 -14
  126. package/dist/helpers/objects/objectKeys.js +40 -40
  127. package/dist/helpers/objects/objectValues.d.ts +14 -14
  128. package/dist/helpers/objects/objectValues.js +21 -21
  129. package/dist/helpers/objects/reduceObject.d.ts +31 -31
  130. package/dist/helpers/objects/reduceObject.js +26 -26
  131. package/dist/helpers/objects/setAndReturnValue.d.ts +14 -14
  132. package/dist/helpers/objects/setAndReturnValue.js +20 -20
  133. package/dist/helpers/objects/setValue.d.ts +15 -15
  134. package/dist/helpers/objects/setValue.js +22 -22
  135. package/dist/helpers/objects.d.ts +100 -100
  136. package/dist/helpers/objects.js +56 -56
  137. package/dist/helpers/strings/camelCase.d.ts +9 -9
  138. package/dist/helpers/strings/camelCase.js +20 -20
  139. package/dist/helpers/strings/kabobCase.d.ts +9 -9
  140. package/dist/helpers/strings/kabobCase.js +19 -19
  141. package/dist/helpers/strings/makeFilepath.d.ts +9 -9
  142. package/dist/helpers/strings/makeFilepath.js +49 -49
  143. package/dist/helpers/strings/makeRelativePath.d.ts +9 -9
  144. package/dist/helpers/strings/makeRelativePath.js +43 -43
  145. package/dist/helpers/strings/regexEscape.d.ts +8 -8
  146. package/dist/helpers/strings/regexEscape.js +15 -15
  147. package/dist/helpers/strings/snakeCase.d.ts +9 -9
  148. package/dist/helpers/strings/snakeCase.js +19 -19
  149. package/dist/helpers/strings/strAfter.d.ts +10 -10
  150. package/dist/helpers/strings/strAfter.js +19 -19
  151. package/dist/helpers/strings/strAfterLast.d.ts +10 -10
  152. package/dist/helpers/strings/strAfterLast.js +19 -19
  153. package/dist/helpers/strings/strBefore.d.ts +10 -10
  154. package/dist/helpers/strings/strBefore.js +19 -19
  155. package/dist/helpers/strings/strBeforeLast.d.ts +10 -10
  156. package/dist/helpers/strings/strBeforeLast.js +19 -19
  157. package/dist/helpers/strings/titleCase.d.ts +9 -9
  158. package/dist/helpers/strings/titleCase.js +20 -20
  159. package/dist/helpers/strings/ucFirst.d.ts +9 -9
  160. package/dist/helpers/strings/ucFirst.js +15 -15
  161. package/dist/helpers/strings/words.d.ts +10 -9
  162. package/dist/helpers/strings/words.js +16 -15
  163. package/dist/helpers/strings.d.ts +25 -25
  164. package/dist/helpers/strings.js +44 -44
  165. package/dist/main.d.ts +9 -9
  166. package/dist/main.js +30 -30
  167. package/package.json +2 -5
@@ -1,13 +1,15 @@
1
- import 'core-js/stable';
2
- import { descriptorDetail } from './samples/descriptorDetail';
3
- /**
4
- * Trace an object's attribute and provide details about it.
5
- * @memberOf module:objectDescriptors
6
- * @param {*} value
7
- * @param {string|number} [key=0]
8
- * @param {number} [index=0]
9
- * @returns {module:objectDescriptors~descriptorDetail}
10
- */
11
- declare const describeObjectDetail: (value: any, key?: number | string, index?: number) => descriptorDetail;
12
- export default describeObjectDetail;
1
+ import 'core-js/stable';
2
+ import { descriptorDetail } from './samples/descriptorDetail';
3
+ /**
4
+ * Trace a single property's value and produce the descriptorDetail describing it (type, nullability, whether it
5
+ * references a nested object/array, etc.) - the per-property building block used by
6
+ * {@link module:objectDescriptors.describeObject}.
7
+ * @memberOf module:objectDescriptors
8
+ * @param {*} value - The property's value to describe.
9
+ * @param {string|number} [key=0] - The property name (or array index) this value belongs to.
10
+ * @param {number} [index=0] - This detail's intended position within its parent descriptor's `details` array.
11
+ * @returns {module:objectDescriptors~descriptorDetail}
12
+ */
13
+ declare const describeObjectDetail: (value: any, key?: number | string, index?: number) => descriptorDetail;
14
+ export default describeObjectDetail;
13
15
  //# sourceMappingURL=describeObjectDetail.d.ts.map
@@ -1,36 +1,38 @@
1
- 'use strict'
2
-
3
- Object.defineProperty(exports, '__esModule', {
4
- value: true
5
- })
6
- exports.default = void 0
7
- require('core-js/stable')
8
- var _emptyObject = _interopRequireDefault(require('../objects/emptyObject'))
9
- var _isCloneable = _interopRequireDefault(require('../objects/isCloneable'))
10
- var _isInstanceObject = _interopRequireDefault(require('../objects/isInstanceObject'))
11
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
12
- /**
13
- * Trace an object's attribute and provide details about it.
14
- * @memberOf module:objectDescriptors
15
- * @param {*} value
16
- * @param {string|number} [key=0]
17
- * @param {number} [index=0]
18
- * @returns {module:objectDescriptors~descriptorDetail}
19
- */
20
- const describeObjectDetail = (value, key = 0, index = 0) => {
21
- const type = typeof value
22
- return {
23
- index: index,
24
- key: key,
25
- type: [type],
26
- value: [value],
27
- nullable: value === null,
28
- optional: false,
29
- circular: false,
30
- isReference: (0, _isCloneable.default)(value) && !(0, _emptyObject.default)(value),
31
- isInstance: (0, _isInstanceObject.default)(value),
32
- arrayReference: null,
33
- objectReference: null
34
- }
35
- }
36
- var _default = exports.default = describeObjectDetail
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.default = void 0
7
+ require('core-js/stable')
8
+ var _emptyObject = _interopRequireDefault(require('../objects/emptyObject'))
9
+ var _isCloneable = _interopRequireDefault(require('../objects/isCloneable'))
10
+ var _isInstanceObject = _interopRequireDefault(require('../objects/isInstanceObject'))
11
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
12
+ /**
13
+ * Trace a single property's value and produce the descriptorDetail describing it (type, nullability, whether it
14
+ * references a nested object/array, etc.) - the per-property building block used by
15
+ * {@link module:objectDescriptors.describeObject}.
16
+ * @memberOf module:objectDescriptors
17
+ * @param {*} value - The property's value to describe.
18
+ * @param {string|number} [key=0] - The property name (or array index) this value belongs to.
19
+ * @param {number} [index=0] - This detail's intended position within its parent descriptor's `details` array.
20
+ * @returns {module:objectDescriptors~descriptorDetail}
21
+ */
22
+ const describeObjectDetail = (value, key = 0, index = 0) => {
23
+ const type = typeof value
24
+ return {
25
+ index: index,
26
+ key: key,
27
+ type: [type],
28
+ value: [value],
29
+ nullable: value === null,
30
+ optional: false,
31
+ circular: false,
32
+ isReference: (0, _isCloneable.default)(value) && !(0, _emptyObject.default)(value),
33
+ isInstance: (0, _isInstanceObject.default)(value),
34
+ arrayReference: null,
35
+ objectReference: null
36
+ }
37
+ }
38
+ var _default = exports.default = describeObjectDetail
@@ -1,21 +1,37 @@
1
- import 'core-js/stable';
2
- import { describeableObject } from './describeObject';
3
- import { descriptorMap } from './samples/descriptorMap';
4
- type describeObjectMapOptions = {
5
- mapLimit?: number;
6
- depthLimit?: number;
7
- keepValues?: boolean;
8
- };
9
- /**
10
- * Trace out the entire object including nested objects.
11
- * @memberOf module:objectDescriptors
12
- * @param {Object|Array} object
13
- * @param {Object} [options={}]
14
- * @param {number} [options.mapLimit=1000000000]
15
- * @param {number} [options.depthLimit=-1]
16
- * @param {boolean} [options.keepValues=false]
17
- * @returns {module:objectDescriptors~descriptorMap}
18
- */
19
- declare const describeObjectMap: (object: describeableObject, { mapLimit, depthLimit, keepValues }?: describeObjectMapOptions) => descriptorMap;
20
- export default describeObjectMap;
1
+ import 'core-js/stable';
2
+ import { describeableObject } from './describeObject';
3
+ import { descriptorMap } from './samples/descriptorMap';
4
+ type describeObjectMapOptions = {
5
+ mapLimit?: number;
6
+ depthLimit?: number;
7
+ keepValues?: boolean;
8
+ };
9
+ /**
10
+ * Trace out the entire object including nested objects, producing a flat descriptorMap - see the
11
+ * {@link module:objectDescriptors} module description for what a descriptor represents and why it's flat. This is
12
+ * the main entry point into this module: start here to describe a real object/array before comparing, merging, or
13
+ * inspecting its structure with the other functions in this module.
14
+ * @example
15
+ * describeObjectMap({ name: 'example', tags: ['a', 'b'] })
16
+ * // [
17
+ * // { index: 0, details: [...], length: 2, keys: ['name', 'tags'], references: [1], isArray: false, complete: true },
18
+ * // { index: 1, details: [...], length: 2, keys: [0], references: [], isArray: true, complete: true }
19
+ * // ]
20
+ * // descriptorMap[0] describes the top-level object; its 'tags' property is a reference (references: [1]) to
21
+ * // descriptorMap[1], which separately describes that nested array. descriptorMap[1]'s own `length` (2) reflects
22
+ * // the array's actual length, but `keys` has only one entry (0) since both elements share the same type
23
+ * // ('string') and are described together by a single, representative descriptorDetail.
24
+ * @memberOf module:objectDescriptors
25
+ * @param {Object|Array} object - The real object or array to describe.
26
+ * @param {Object} [options={}]
27
+ * @param {number} [options.mapLimit=1000000000] - Stop describing further nested references once the map reaches
28
+ * this many descriptors - a safety limit for extremely large or deeply-referenced structures.
29
+ * @param {number} [options.depthLimit=-1] - How many levels of nested objects/arrays to describe; `-1` means no
30
+ * limit, `0` describes only the top level, etc.
31
+ * @param {boolean} [options.keepValues=false] - By default, each detail's actual values are cleared once its
32
+ * descriptor is complete (to save memory) - set true to keep them.
33
+ * @returns {module:objectDescriptors~descriptorMap}
34
+ */
35
+ declare const describeObjectMap: (object: describeableObject, { mapLimit, depthLimit, keepValues }?: describeObjectMapOptions) => descriptorMap;
36
+ export default describeObjectMap;
21
37
  //# sourceMappingURL=describeObjectMap.d.ts.map
@@ -1,92 +1,108 @@
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.for-each.js')
10
- require('core-js/stable')
11
- var _assignDescriptor = _interopRequireDefault(require('./assignDescriptor'))
12
- var _checkClearValues = _interopRequireDefault(require('./checkClearValues'))
13
- var _checkDescriptorComplete = _interopRequireDefault(require('./checkDescriptorComplete'))
14
- var _compareDescriptor = _interopRequireDefault(require('./compareDescriptor'))
15
- var _describeObject = _interopRequireDefault(require('./describeObject'))
16
- var _nextReference = _interopRequireDefault(require('./nextReference'))
17
- var _sameDescriptor = _interopRequireDefault(require('./sameDescriptor'))
18
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
19
- /**
20
- * Trace out the entire object including nested objects.
21
- * @memberOf module:objectDescriptors
22
- * @param {Object|Array} object
23
- * @param {Object} [options={}]
24
- * @param {number} [options.mapLimit=1000000000]
25
- * @param {number} [options.depthLimit=-1]
26
- * @param {boolean} [options.keepValues=false]
27
- * @returns {module:objectDescriptors~descriptorMap}
28
- */
29
- const describeObjectMap = (object, {
30
- mapLimit = 1000000000,
31
- depthLimit = -1,
32
- keepValues = false
33
- } = {}) => {
34
- const descriptorMap = [(0, _describeObject.default)(object)]
35
- descriptorMap[0].index = 0
36
- const describeReferences = (descriptor, currentDetail, limit = -1, returnCallback = returnMap => returnMap) => {
37
- let index = descriptorMap.length
38
- const nextRef = currentDetail ? (0, _nextReference.default)(descriptor, currentDetail.index) : undefined
39
- const nextDetail = typeof nextRef !== 'undefined' ? descriptor.details[nextRef] : null
40
- if (currentDetail) {
41
- const vals = descriptor.isArray ? currentDetail.value : [currentDetail.value[currentDetail.value.length - 1]]
42
- vals.forEach(val => {
43
- var _a, _b
44
- const tempDescriptor = (0, _describeObject.default)(val)
45
- const existingDescriptorIndex = descriptorMap.findIndex(existingDescriptor => (0, _compareDescriptor.default)(tempDescriptor, existingDescriptor))
46
- if (existingDescriptorIndex >= 0) {
47
- index = existingDescriptorIndex
48
- if (tempDescriptor.length && (0, _sameDescriptor.default)(tempDescriptor, descriptorMap[existingDescriptorIndex])) {
49
- currentDetail.circular = true
50
- descriptor.details[currentDetail.index] = currentDetail
51
- }
52
- }
53
- if (index >= mapLimit) {
54
- return descriptorMap
55
- }
56
- if (limit === 0) {
57
- return descriptorMap
58
- }
59
- if (tempDescriptor.isArray) {
60
- index = (_a = currentDetail.arrayReference) !== null && _a !== void 0 ? _a : index
61
- descriptor.details[currentDetail.index].arrayReference = index
62
- } else {
63
- index = (_b = currentDetail.objectReference) !== null && _b !== void 0 ? _b : index
64
- descriptor.details[currentDetail.index].objectReference = index
65
- }
66
- tempDescriptor.index = index
67
- if (existingDescriptorIndex < 0) {
68
- descriptorMap[index] = descriptorMap[index] ? (0, _assignDescriptor.default)(descriptorMap[index], tempDescriptor) : tempDescriptor
69
- }
70
- descriptorMap[descriptor.index] = (0, _assignDescriptor.default)(descriptorMap[descriptor.index], descriptor)
71
- currentDetail = descriptorMap[descriptor.index].details.find(detail => detail.key === currentDetail.key)
72
- if (!currentDetail.circular) {
73
- const newReference = (0, _nextReference.default)(tempDescriptor, -1)
74
- const newDetail = typeof newReference !== 'undefined' ? tempDescriptor.details[newReference] : null
75
- return describeReferences(tempDescriptor, newDetail, --limit, returnMap => describeReferences(descriptor, nextDetail, --limit))
76
- }
77
- })
78
- }
79
- descriptorMap[descriptor.index] = (0, _assignDescriptor.default)(descriptorMap[descriptor.index], (0, _checkDescriptorComplete.default)(descriptor))
80
- descriptorMap[descriptor.index] = (0, _checkClearValues.default)(descriptorMap[descriptor.index], keepValues)
81
- return nextDetail ? describeReferences(descriptor, nextDetail, --limit) : returnCallback(descriptorMap)
82
- }
83
- const descriptor = descriptorMap[0]
84
- const currentReference = (0, _nextReference.default)(descriptor, -1)
85
- if (typeof currentReference === 'undefined') {
86
- descriptorMap[0] = (0, _assignDescriptor.default)(descriptorMap[0], (0, _checkDescriptorComplete.default)(descriptor))
87
- descriptorMap[0] = (0, _checkClearValues.default)(descriptorMap[0], keepValues)
88
- return descriptorMap
89
- }
90
- return describeReferences(descriptor, descriptor.details[currentReference], depthLimit)
91
- }
92
- var _default = exports.default = describeObjectMap
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.for-each.js')
10
+ require('core-js/stable')
11
+ var _assignDescriptor = _interopRequireDefault(require('./assignDescriptor'))
12
+ var _checkClearValues = _interopRequireDefault(require('./checkClearValues'))
13
+ var _checkDescriptorComplete = _interopRequireDefault(require('./checkDescriptorComplete'))
14
+ var _compareDescriptor = _interopRequireDefault(require('./compareDescriptor'))
15
+ var _describeObject = _interopRequireDefault(require('./describeObject'))
16
+ var _nextReference = _interopRequireDefault(require('./nextReference'))
17
+ var _sameDescriptor = _interopRequireDefault(require('./sameDescriptor'))
18
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
19
+ /**
20
+ * Trace out the entire object including nested objects, producing a flat descriptorMap - see the
21
+ * {@link module:objectDescriptors} module description for what a descriptor represents and why it's flat. This is
22
+ * the main entry point into this module: start here to describe a real object/array before comparing, merging, or
23
+ * inspecting its structure with the other functions in this module.
24
+ * @example
25
+ * describeObjectMap({ name: 'example', tags: ['a', 'b'] })
26
+ * // [
27
+ * // { index: 0, details: [...], length: 2, keys: ['name', 'tags'], references: [1], isArray: false, complete: true },
28
+ * // { index: 1, details: [...], length: 2, keys: [0], references: [], isArray: true, complete: true }
29
+ * // ]
30
+ * // descriptorMap[0] describes the top-level object; its 'tags' property is a reference (references: [1]) to
31
+ * // descriptorMap[1], which separately describes that nested array. descriptorMap[1]'s own `length` (2) reflects
32
+ * // the array's actual length, but `keys` has only one entry (0) since both elements share the same type
33
+ * // ('string') and are described together by a single, representative descriptorDetail.
34
+ * @memberOf module:objectDescriptors
35
+ * @param {Object|Array} object - The real object or array to describe.
36
+ * @param {Object} [options={}]
37
+ * @param {number} [options.mapLimit=1000000000] - Stop describing further nested references once the map reaches
38
+ * this many descriptors - a safety limit for extremely large or deeply-referenced structures.
39
+ * @param {number} [options.depthLimit=-1] - How many levels of nested objects/arrays to describe; `-1` means no
40
+ * limit, `0` describes only the top level, etc.
41
+ * @param {boolean} [options.keepValues=false] - By default, each detail's actual values are cleared once its
42
+ * descriptor is complete (to save memory) - set true to keep them.
43
+ * @returns {module:objectDescriptors~descriptorMap}
44
+ */
45
+ const describeObjectMap = (object, {
46
+ mapLimit = 1000000000,
47
+ depthLimit = -1,
48
+ keepValues = false
49
+ } = {}) => {
50
+ const descriptorMap = [(0, _describeObject.default)(object)]
51
+ descriptorMap[0].index = 0
52
+ const describeReferences = (descriptor, currentDetail, limit = -1, returnCallback = returnMap => returnMap) => {
53
+ let index = descriptorMap.length
54
+ const nextRef = currentDetail ? (0, _nextReference.default)(descriptor, currentDetail.index) : undefined
55
+ const nextDetail = typeof nextRef !== 'undefined' ? descriptor.details[nextRef] : null
56
+ if (currentDetail) {
57
+ const vals = descriptor.isArray ? currentDetail.value : [currentDetail.value[currentDetail.value.length - 1]]
58
+ vals.forEach(val => {
59
+ var _a, _b
60
+ const tempDescriptor = (0, _describeObject.default)(val)
61
+ const existingDescriptorIndex = descriptorMap.findIndex(existingDescriptor => (0, _compareDescriptor.default)(tempDescriptor, existingDescriptor))
62
+ if (existingDescriptorIndex >= 0) {
63
+ index = existingDescriptorIndex
64
+ if (tempDescriptor.length && (0, _sameDescriptor.default)(tempDescriptor, descriptorMap[existingDescriptorIndex])) {
65
+ currentDetail.circular = true
66
+ descriptor.details[currentDetail.index] = currentDetail
67
+ }
68
+ }
69
+ if (index >= mapLimit) {
70
+ return descriptorMap
71
+ }
72
+ if (limit === 0) {
73
+ return descriptorMap
74
+ }
75
+ if (tempDescriptor.isArray) {
76
+ index = (_a = currentDetail.arrayReference) !== null && _a !== void 0 ? _a : index
77
+ descriptor.details[currentDetail.index].arrayReference = index
78
+ } else {
79
+ index = (_b = currentDetail.objectReference) !== null && _b !== void 0 ? _b : index
80
+ descriptor.details[currentDetail.index].objectReference = index
81
+ }
82
+ tempDescriptor.index = index
83
+ if (existingDescriptorIndex < 0) {
84
+ descriptorMap[index] = descriptorMap[index] ? (0, _assignDescriptor.default)(descriptorMap[index], tempDescriptor) : tempDescriptor
85
+ }
86
+ descriptorMap[descriptor.index] = (0, _assignDescriptor.default)(descriptorMap[descriptor.index], descriptor)
87
+ currentDetail = descriptorMap[descriptor.index].details.find(detail => detail.key === currentDetail.key)
88
+ if (!currentDetail.circular) {
89
+ const newReference = (0, _nextReference.default)(tempDescriptor, -1)
90
+ const newDetail = typeof newReference !== 'undefined' ? tempDescriptor.details[newReference] : null
91
+ return describeReferences(tempDescriptor, newDetail, --limit, returnMap => describeReferences(descriptor, nextDetail, --limit))
92
+ }
93
+ })
94
+ }
95
+ descriptorMap[descriptor.index] = (0, _assignDescriptor.default)(descriptorMap[descriptor.index], (0, _checkDescriptorComplete.default)(descriptor))
96
+ descriptorMap[descriptor.index] = (0, _checkClearValues.default)(descriptorMap[descriptor.index], keepValues)
97
+ return nextDetail ? describeReferences(descriptor, nextDetail, --limit) : returnCallback(descriptorMap)
98
+ }
99
+ const descriptor = descriptorMap[0]
100
+ const currentReference = (0, _nextReference.default)(descriptor, -1)
101
+ if (typeof currentReference === 'undefined') {
102
+ descriptorMap[0] = (0, _assignDescriptor.default)(descriptorMap[0], (0, _checkDescriptorComplete.default)(descriptor))
103
+ descriptorMap[0] = (0, _checkClearValues.default)(descriptorMap[0], keepValues)
104
+ return descriptorMap
105
+ }
106
+ return describeReferences(descriptor, descriptor.details[currentReference], depthLimit)
107
+ }
108
+ var _default = exports.default = describeObjectMap
@@ -1,12 +1,14 @@
1
- import 'core-js/stable';
2
- import { descriptor } from './samples/descriptor';
3
- /**
4
- * Find the index of the next module:objectDescriptors.descriptorDetail to build a resource for.
5
- * @memberOf module:objectDescriptors
6
- * @param {module:objectDescriptors~descriptor} descriptor
7
- * @param {number} currentReference
8
- * @returns {number|undefined}
9
- */
10
- declare const nextReference: (descriptor: descriptor, currentReference: number) => number | undefined;
11
- export default nextReference;
1
+ import 'core-js/stable';
2
+ import { descriptor } from './samples/descriptor';
3
+ /**
4
+ * Find the index (within `descriptor.details`) of the next referenced property - after `currentReference` - whose
5
+ * own nested object/array still needs its descriptor built. Used to walk through a descriptor's references one at
6
+ * a time while building out a descriptorMap.
7
+ * @memberOf module:objectDescriptors
8
+ * @param {module:objectDescriptors~descriptor} descriptor - The descriptor whose references to search.
9
+ * @param {number} currentReference - The `details` index already processed - search continues after this one.
10
+ * @returns {number|undefined} The next detail index to process, or `undefined` if none remain.
11
+ */
12
+ declare const nextReference: (descriptor: descriptor, currentReference: number) => number | undefined;
13
+ export default nextReference;
12
14
  //# sourceMappingURL=nextReference.d.ts.map
@@ -1,29 +1,31 @@
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/stable')
10
- var _objectKeys = _interopRequireDefault(require('../objects/objectKeys'))
11
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
12
- /**
13
- * Find the index of the next module:objectDescriptors.descriptorDetail to build a resource for.
14
- * @memberOf module:objectDescriptors
15
- * @param {module:objectDescriptors~descriptor} descriptor
16
- * @param {number} currentReference
17
- * @returns {number|undefined}
18
- */
19
- const nextReference = (descriptor, currentReference) => descriptor.references.find(nextRef => {
20
- if (nextRef <= currentReference) {
21
- return false
22
- }
23
- const val = descriptor.details[nextRef].value[descriptor.details[nextRef].value.length - 1]
24
- if (typeof val !== 'object' || val === null || typeof val === 'undefined' || descriptor.details[nextRef].circular || descriptor.details[nextRef].isInstance) {
25
- return false
26
- }
27
- return !!(0, _objectKeys.default)(val).length
28
- })
29
- var _default = exports.default = nextReference
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/stable')
10
+ var _objectKeys = _interopRequireDefault(require('../objects/objectKeys'))
11
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
12
+ /**
13
+ * Find the index (within `descriptor.details`) of the next referenced property - after `currentReference` - whose
14
+ * own nested object/array still needs its descriptor built. Used to walk through a descriptor's references one at
15
+ * a time while building out a descriptorMap.
16
+ * @memberOf module:objectDescriptors
17
+ * @param {module:objectDescriptors~descriptor} descriptor - The descriptor whose references to search.
18
+ * @param {number} currentReference - The `details` index already processed - search continues after this one.
19
+ * @returns {number|undefined} The next detail index to process, or `undefined` if none remain.
20
+ */
21
+ const nextReference = (descriptor, currentReference) => descriptor.references.find(nextRef => {
22
+ if (nextRef <= currentReference) {
23
+ return false
24
+ }
25
+ const val = descriptor.details[nextRef].value[descriptor.details[nextRef].value.length - 1]
26
+ if (typeof val !== 'object' || val === null || typeof val === 'undefined' || descriptor.details[nextRef].circular || descriptor.details[nextRef].isInstance) {
27
+ return false
28
+ }
29
+ return !!(0, _objectKeys.default)(val).length
30
+ })
31
+ var _default = exports.default = nextReference
@@ -1,12 +1,14 @@
1
- import 'core-js/stable';
2
- import { descriptor } from './samples/descriptor';
3
- /**
4
- * Check if the two descriptors are the same.
5
- * @memberOf module:objectDescriptors
6
- * @param {module:objectDescriptors~descriptor} descriptor1
7
- * @param {module:objectDescriptors~descriptor} descriptor2
8
- * @returns {boolean}
9
- */
10
- declare const sameDescriptor: (descriptor1: descriptor, descriptor2: descriptor) => boolean;
11
- export default sameDescriptor;
1
+ import 'core-js/stable';
2
+ import { descriptor } from './samples/descriptor';
3
+ /**
4
+ * Check if two descriptors describe the exact same underlying values (not just compatible types, like
5
+ * {@link module:objectDescriptors.compareDescriptor} does) - used to detect genuine circular references, where a
6
+ * nested value's descriptor turns out to be identical to one of its own ancestors.
7
+ * @memberOf module:objectDescriptors
8
+ * @param {module:objectDescriptors~descriptor} descriptor1 - The first descriptor to compare.
9
+ * @param {module:objectDescriptors~descriptor} descriptor2 - The second descriptor to compare.
10
+ * @returns {boolean} True if every detail's values match at the same position.
11
+ */
12
+ declare const sameDescriptor: (descriptor1: descriptor, descriptor2: descriptor) => boolean;
13
+ export default sameDescriptor;
12
14
  //# sourceMappingURL=sameDescriptor.d.ts.map
@@ -1,20 +1,22 @@
1
- 'use strict'
2
-
3
- Object.defineProperty(exports, '__esModule', {
4
- value: true
5
- })
6
- exports.default = void 0
7
- require('core-js/modules/es.array.includes.js')
8
- require('core-js/modules/esnext.iterator.constructor.js')
9
- require('core-js/modules/esnext.iterator.every.js')
10
- require('core-js/modules/esnext.iterator.some.js')
11
- require('core-js/stable')
12
- /**
13
- * Check if the two descriptors are the same.
14
- * @memberOf module:objectDescriptors
15
- * @param {module:objectDescriptors~descriptor} descriptor1
16
- * @param {module:objectDescriptors~descriptor} descriptor2
17
- * @returns {boolean}
18
- */
19
- const sameDescriptor = (descriptor1, descriptor2) => descriptor1.details.every((detail, index) => detail.value.some(dVal => descriptor2.details[index].value.includes(dVal)))
20
- var _default = exports.default = sameDescriptor
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.default = void 0
7
+ require('core-js/modules/es.array.includes.js')
8
+ require('core-js/modules/esnext.iterator.constructor.js')
9
+ require('core-js/modules/esnext.iterator.every.js')
10
+ require('core-js/modules/esnext.iterator.some.js')
11
+ require('core-js/stable')
12
+ /**
13
+ * Check if two descriptors describe the exact same underlying values (not just compatible types, like
14
+ * {@link module:objectDescriptors.compareDescriptor} does) - used to detect genuine circular references, where a
15
+ * nested value's descriptor turns out to be identical to one of its own ancestors.
16
+ * @memberOf module:objectDescriptors
17
+ * @param {module:objectDescriptors~descriptor} descriptor1 - The first descriptor to compare.
18
+ * @param {module:objectDescriptors~descriptor} descriptor2 - The second descriptor to compare.
19
+ * @returns {boolean} True if every detail's values match at the same position.
20
+ */
21
+ const sameDescriptor = (descriptor1, descriptor2) => descriptor1.details.every((detail, index) => detail.value.some(dVal => descriptor2.details[index].value.includes(dVal)))
22
+ var _default = exports.default = sameDescriptor
@@ -1,28 +1,35 @@
1
- import { descriptorDetail } from './descriptorDetail';
2
- /**
3
- * @typedef {Object} module:objectDescriptors~descriptor
4
- * @memberOf module:objectDescriptors
5
- * @property {number} index
6
- * @property {Array.<module:objectDescriptors~descriptorDetail>} details
7
- * @property {number} length
8
- * @property {Array.<string|number>} keys
9
- * @property {Array.<number>} references
10
- * @property {boolean} isArray
11
- * @property {boolean} complete
12
- */
13
- export type descriptor = {
14
- index: number;
15
- details: Array<descriptorDetail>;
16
- length: number;
17
- keys: Array<number | string>;
18
- references: Array<number>;
19
- isArray: boolean;
20
- complete: boolean;
21
- };
22
- /**
23
- * @type {module:objectDescriptors~descriptor}
24
- * @memberOf module:objectDescriptors
25
- */
26
- declare const descriptorSample: descriptor;
27
- export default descriptorSample;
1
+ import { descriptorDetail } from './descriptorDetail';
2
+ /**
3
+ * A flat, serializable description of one object or array's shape - see the {@link module:objectDescriptors} module
4
+ * description for the concept this represents. One `descriptor` covers a single level of nesting; a nested
5
+ * object/array's own shape is a separate `descriptor` elsewhere in the same {@link module:objectDescriptors~descriptorMap},
6
+ * pointed to via the relevant `descriptorDetail`'s `arrayReference`/`objectReference`.
7
+ * @typedef {Object} module:objectDescriptors~descriptor
8
+ * @memberOf module:objectDescriptors
9
+ * @property {number} index - This descriptor's own position in the descriptorMap it belongs to.
10
+ * @property {Array.<module:objectDescriptors~descriptorDetail>} details - One entry per property/element of the
11
+ * described object or array.
12
+ * @property {number} length - The number of properties/elements described (i.e. `details.length`).
13
+ * @property {Array.<string|number>} keys - The property names (or array indexes) described, in the same order as `details`.
14
+ * @property {Array.<number>} references - The `index` values (from `details`) of properties whose own value is
15
+ * itself an object/array, and so has a separate descriptor elsewhere in the map.
16
+ * @property {boolean} isArray - Whether the described value was an array (true) or a plain object (false).
17
+ * @property {boolean} complete - Whether every referenced nested descriptor has actually been resolved yet - false
18
+ * while still being built, true once nothing referenced is left pending.
19
+ */
20
+ export type descriptor = {
21
+ index: number;
22
+ details: Array<descriptorDetail>;
23
+ length: number;
24
+ keys: Array<number | string>;
25
+ references: Array<number>;
26
+ isArray: boolean;
27
+ complete: boolean;
28
+ };
29
+ /**
30
+ * @type {module:objectDescriptors~descriptor}
31
+ * @memberOf module:objectDescriptors
32
+ */
33
+ declare const descriptorSample: descriptor;
34
+ export default descriptorSample;
28
35
  //# sourceMappingURL=descriptor.d.ts.map