si-funciona 2.3.3 → 2.3.4

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 (74) 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.d.ts +21 -20
  6. package/dist/helpers/arrays.js +33 -32
  7. package/dist/helpers/descriptors/assignDescriptor.d.ts +14 -11
  8. package/dist/helpers/descriptors/assignDescriptor.js +58 -55
  9. package/dist/helpers/descriptors/assignDescriptorDetail.d.ts +14 -11
  10. package/dist/helpers/descriptors/assignDescriptorDetail.js +37 -34
  11. package/dist/helpers/descriptors/checkClearValues.d.ts +12 -11
  12. package/dist/helpers/descriptors/checkClearValues.js +21 -20
  13. package/dist/helpers/descriptors/checkDescriptorComplete.d.ts +11 -10
  14. package/dist/helpers/descriptors/checkDescriptorComplete.js +20 -19
  15. package/dist/helpers/descriptors/cloneDescriptor.d.ts +10 -10
  16. package/dist/helpers/descriptors/cloneDescriptor.js +36 -36
  17. package/dist/helpers/descriptors/cloneDescriptorDetail.d.ts +10 -10
  18. package/dist/helpers/descriptors/cloneDescriptorDetail.js +27 -27
  19. package/dist/helpers/descriptors/compareDescriptor.d.ts +13 -11
  20. package/dist/helpers/descriptors/compareDescriptor.js +33 -31
  21. package/dist/helpers/descriptors/describeObject.d.ts +15 -13
  22. package/dist/helpers/descriptors/describeObject.js +53 -51
  23. package/dist/helpers/descriptors/describeObjectDetail.d.ts +14 -12
  24. package/dist/helpers/descriptors/describeObjectDetail.js +38 -36
  25. package/dist/helpers/descriptors/describeObjectMap.d.ts +36 -20
  26. package/dist/helpers/descriptors/describeObjectMap.js +108 -92
  27. package/dist/helpers/descriptors/nextReference.d.ts +13 -11
  28. package/dist/helpers/descriptors/nextReference.js +31 -29
  29. package/dist/helpers/descriptors/sameDescriptor.d.ts +13 -11
  30. package/dist/helpers/descriptors/sameDescriptor.js +22 -20
  31. package/dist/helpers/descriptors/samples/descriptor.d.ts +34 -27
  32. package/dist/helpers/descriptors/samples/descriptorDetail.d.ts +42 -34
  33. package/dist/helpers/descriptors/samples/descriptorMap.d.ts +16 -12
  34. package/dist/helpers/descriptors/samples/mappedDescriptorMap.d.ts +10 -7
  35. package/dist/helpers/descriptors/samples/mappedDescriptorMap.js +287 -284
  36. package/dist/helpers/descriptors.d.ts +44 -28
  37. package/dist/helpers/descriptors.js +58 -42
  38. package/dist/helpers/functions/makeBasicQueue.d.ts +10 -10
  39. package/dist/helpers/functions/makeBasicQueue.js +19 -19
  40. package/dist/helpers/functions/queueManager.d.ts +49 -47
  41. package/dist/helpers/functions/queueManager.js +124 -122
  42. package/dist/helpers/functions/relevancyFilter.d.ts +35 -35
  43. package/dist/helpers/functions/relevancyFilter.js +34 -34
  44. package/dist/helpers/functions/trace.d.ts +14 -12
  45. package/dist/helpers/functions/trace.js +25 -23
  46. package/dist/helpers/numbers/lowestCommonDenominator.d.ts +10 -10
  47. package/dist/helpers/numbers/lowestCommonDenominator.js +20 -20
  48. package/dist/helpers/strings/camelCase.d.ts +9 -9
  49. package/dist/helpers/strings/camelCase.js +20 -20
  50. package/dist/helpers/strings/kabobCase.d.ts +9 -9
  51. package/dist/helpers/strings/kabobCase.js +19 -19
  52. package/dist/helpers/strings/makeFilepath.d.ts +9 -9
  53. package/dist/helpers/strings/makeFilepath.js +49 -49
  54. package/dist/helpers/strings/makeRelativePath.d.ts +9 -9
  55. package/dist/helpers/strings/makeRelativePath.js +43 -43
  56. package/dist/helpers/strings/regexEscape.d.ts +8 -8
  57. package/dist/helpers/strings/regexEscape.js +15 -15
  58. package/dist/helpers/strings/snakeCase.d.ts +9 -9
  59. package/dist/helpers/strings/snakeCase.js +19 -19
  60. package/dist/helpers/strings/strAfter.d.ts +10 -10
  61. package/dist/helpers/strings/strAfter.js +19 -19
  62. package/dist/helpers/strings/strAfterLast.d.ts +10 -10
  63. package/dist/helpers/strings/strAfterLast.js +19 -19
  64. package/dist/helpers/strings/strBefore.d.ts +10 -10
  65. package/dist/helpers/strings/strBefore.js +19 -19
  66. package/dist/helpers/strings/strBeforeLast.d.ts +10 -10
  67. package/dist/helpers/strings/strBeforeLast.js +19 -19
  68. package/dist/helpers/strings/titleCase.d.ts +9 -9
  69. package/dist/helpers/strings/titleCase.js +20 -20
  70. package/dist/helpers/strings/ucFirst.d.ts +9 -9
  71. package/dist/helpers/strings/ucFirst.js +15 -15
  72. package/dist/helpers/strings/words.d.ts +10 -9
  73. package/dist/helpers/strings/words.js +16 -15
  74. package/package.json +1 -1
@@ -1,62 +1,66 @@
1
- import 'core-js/stable';
2
- export type callableLater = {
3
- fn?: Function;
4
- args?: Array<any>;
5
- };
6
- export type queuedItem = {
7
- item: callableLater | any;
8
- generator: Generator;
9
- };
10
- /**
11
- * Define the format of a queue
12
- * @typdef {Object} IsQueue
13
- * @property {Array|*} innerList - Stores the data for the queue
14
- * @method dequeue - Pulls the first item from the queue
15
- * @method empty - Check if the queue is empty
16
- * @method enqueue - Adds and item to the end of the queue
17
- * @method peek - Get the next queue item but does not remove it
18
- * @method size - Get the size of the queue
19
- */
20
- export interface IsQueue<queuedItem> {
21
- dequeue: () => queuedItem | null;
22
- empty: () => boolean;
23
- enqueue: (data: queuedItem) => void;
24
- peek: () => queuedItem | null;
25
- size: () => number;
26
- }
27
- /**
28
- * Class BasicQueue is a functional example of a queue to be used with queueManager.
29
- * @memberOf module:arrayHelpers
30
- */
31
- declare class BasicQueue implements IsQueue<queuedItem> {
32
- private readonly innerList;
33
- constructor(innerList?: queuedItem[] | any);
34
- /**
35
- * Remove and return the next item in the queue
36
- * @returns {queuedItem|*}
37
- */
38
- dequeue(): queuedItem | any;
39
- /**
40
- * Check if the queue is empty
41
- * @returns {boolean}
42
- */
43
- empty(): boolean;
44
- /**
45
- * Add an item to the end of the queue
46
- * @param {queuedItem|*} data
47
- * @returns {BasicQueue}
48
- */
49
- enqueue(data: queuedItem | any): IsQueue<queuedItem>;
50
- /**
51
- * Retrieve the next item from the queue
52
- * @returns {queuedItem|*}
53
- */
54
- peek(): queuedItem | any;
55
- /**
56
- * Get the quantity of items in the queue
57
- * @returns {number}
58
- */
59
- size(): number;
60
- }
61
- export default BasicQueue;
1
+ import 'core-js/stable';
2
+ export type callableLater = {
3
+ fn?: Function;
4
+ args?: Array<any>;
5
+ };
6
+ export type queuedItem = {
7
+ item: callableLater | any;
8
+ generator: Generator;
9
+ };
10
+ /**
11
+ * Define the format of a queue.
12
+ * @typedef {Object} IsQueue
13
+ * @memberOf module:arrayHelpers
14
+ * @property {Array|*} innerList - Stores the data for the queue
15
+ * @method dequeue - Pulls the first item from the queue
16
+ * @method empty - Check if the queue is empty
17
+ * @method enqueue - Adds and item to the end of the queue
18
+ * @method peek - Get the next queue item but does not remove it
19
+ * @method size - Get the size of the queue
20
+ */
21
+ export interface IsQueue<queuedItem> {
22
+ dequeue: () => queuedItem | null;
23
+ empty: () => boolean;
24
+ enqueue: (data: queuedItem) => void;
25
+ peek: () => queuedItem | null;
26
+ size: () => number;
27
+ }
28
+ /**
29
+ * Class BasicQueue is a functional example of a queue to be used with queueManager.
30
+ * @memberOf module:arrayHelpers
31
+ */
32
+ declare class BasicQueue implements IsQueue<queuedItem> {
33
+ private readonly innerList;
34
+ /**
35
+ * @param {Array} [innerList=[]] - Items to pre-populate the queue with, in order.
36
+ */
37
+ constructor(innerList?: queuedItem[] | any);
38
+ /**
39
+ * Remove and return the next item in the queue
40
+ * @returns {queuedItem|*}
41
+ */
42
+ dequeue(): queuedItem | any;
43
+ /**
44
+ * Check if the queue is empty
45
+ * @returns {boolean}
46
+ */
47
+ empty(): boolean;
48
+ /**
49
+ * Add an item to the end of the queue
50
+ * @param {queuedItem|*} data
51
+ * @returns {BasicQueue}
52
+ */
53
+ enqueue(data: queuedItem | any): IsQueue<queuedItem>;
54
+ /**
55
+ * Retrieve the next item from the queue
56
+ * @returns {queuedItem|*}
57
+ */
58
+ peek(): queuedItem | any;
59
+ /**
60
+ * Get the quantity of items in the queue
61
+ * @returns {number}
62
+ */
63
+ size(): number;
64
+ }
65
+ export default BasicQueue;
62
66
  //# sourceMappingURL=BasicQueue.d.ts.map
@@ -1,59 +1,62 @@
1
- 'use strict'
2
-
3
- Object.defineProperty(exports, '__esModule', {
4
- value: true
5
- })
6
- exports.default = void 0
7
- require('core-js/stable')
8
- /**
9
- * Class BasicQueue is a functional example of a queue to be used with queueManager.
10
- * @memberOf module:arrayHelpers
11
- */
12
- class BasicQueue {
13
- constructor (innerList = []) {
14
- this.innerList = innerList
15
- }
16
-
17
- /**
18
- * Remove and return the next item in the queue
19
- * @returns {queuedItem|*}
20
- */
21
- dequeue () {
22
- return this.innerList.shift()
23
- }
24
-
25
- /**
26
- * Check if the queue is empty
27
- * @returns {boolean}
28
- */
29
- empty () {
30
- return !this.size()
31
- }
32
-
33
- /**
34
- * Add an item to the end of the queue
35
- * @param {queuedItem|*} data
36
- * @returns {BasicQueue}
37
- */
38
- enqueue (data) {
39
- this.innerList.push(data)
40
- return this
41
- }
42
-
43
- /**
44
- * Retrieve the next item from the queue
45
- * @returns {queuedItem|*}
46
- */
47
- peek () {
48
- return this.empty() ? null : this.innerList[0]
49
- }
50
-
51
- /**
52
- * Get the quantity of items in the queue
53
- * @returns {number}
54
- */
55
- size () {
56
- return this.innerList.length
57
- }
58
- }
59
- var _default = exports.default = BasicQueue
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.default = void 0
7
+ require('core-js/stable')
8
+ /**
9
+ * Class BasicQueue is a functional example of a queue to be used with queueManager.
10
+ * @memberOf module:arrayHelpers
11
+ */
12
+ class BasicQueue {
13
+ /**
14
+ * @param {Array} [innerList=[]] - Items to pre-populate the queue with, in order.
15
+ */
16
+ constructor (innerList = []) {
17
+ this.innerList = innerList
18
+ }
19
+
20
+ /**
21
+ * Remove and return the next item in the queue
22
+ * @returns {queuedItem|*}
23
+ */
24
+ dequeue () {
25
+ return this.innerList.shift()
26
+ }
27
+
28
+ /**
29
+ * Check if the queue is empty
30
+ * @returns {boolean}
31
+ */
32
+ empty () {
33
+ return !this.size()
34
+ }
35
+
36
+ /**
37
+ * Add an item to the end of the queue
38
+ * @param {queuedItem|*} data
39
+ * @returns {BasicQueue}
40
+ */
41
+ enqueue (data) {
42
+ this.innerList.push(data)
43
+ return this
44
+ }
45
+
46
+ /**
47
+ * Retrieve the next item from the queue
48
+ * @returns {queuedItem|*}
49
+ */
50
+ peek () {
51
+ return this.empty() ? null : this.innerList[0]
52
+ }
53
+
54
+ /**
55
+ * Get the quantity of items in the queue
56
+ * @returns {number}
57
+ */
58
+ size () {
59
+ return this.innerList.length
60
+ }
61
+ }
62
+ var _default = exports.default = BasicQueue
@@ -1,21 +1,22 @@
1
- /**
2
- * Some simple utility functions for generating arrays or performing work on arrays.
3
- * @file
4
- * @author Joshua Heagle <joshuaheagle@gmail.com>
5
- * @version 1.0.0
6
- * @module arrayHelpers
7
- * @memberOf module:siFunciona
8
- */
9
- import 'core-js/stable';
10
- import BasicQueue from './arrays/BasicQueue';
11
- declare const _default: {
12
- addUniqueToArray: (item: any, array: Array<any>) => Array<any>;
13
- BasicQueue: typeof BasicQueue;
14
- buildArray: (item: any, length: number) => Array<any>;
15
- buildArrayOfReferences: (item: any, length: number) => Array<any>;
16
- compareArrays: (...arrays: Array<Array<any>>) => import("./arrays/compareArrays").compareArrayResultMap;
17
- mergeArrays: (...arrays: Array<Array<any>>) => Array<any>;
18
- uniqueArray: (array: Array<any>) => Array<any>;
19
- };
20
- export default _default;
1
+ /**
2
+ * Utilities for building, merging, deduplicating and comparing arrays, plus a basic FIFO queue (BasicQueue) for
3
+ * use with functionHelpers' queueManager/queueTimeout.
4
+ * @file
5
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
6
+ * @version 1.0.0
7
+ * @module arrayHelpers
8
+ * @memberOf module:siFunciona
9
+ */
10
+ import 'core-js/stable';
11
+ import BasicQueue from './arrays/BasicQueue';
12
+ declare const _default: {
13
+ addUniqueToArray: (item: any, array: Array<any>) => Array<any>;
14
+ BasicQueue: typeof BasicQueue;
15
+ buildArray: (item: any, length: number) => Array<any>;
16
+ buildArrayOfReferences: (item: any, length: number) => Array<any>;
17
+ compareArrays: (...arrays: Array<Array<any>>) => import("./arrays/compareArrays").compareArrayResultMap;
18
+ mergeArrays: (...arrays: Array<Array<any>>) => Array<any>;
19
+ uniqueArray: (array: Array<any>) => Array<any>;
20
+ };
21
+ export default _default;
21
22
  //# sourceMappingURL=arrays.d.ts.map
@@ -1,32 +1,33 @@
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 _addUniqueToArray = _interopRequireDefault(require('./arrays/addUniqueToArray'))
9
- var _BasicQueue = _interopRequireDefault(require('./arrays/BasicQueue'))
10
- var _buildArray = _interopRequireDefault(require('./arrays/buildArray'))
11
- var _buildArrayOfReferences = _interopRequireDefault(require('./arrays/buildArrayOfReferences'))
12
- var _compareArrays = _interopRequireDefault(require('./arrays/compareArrays'))
13
- var _mergeArrays = _interopRequireDefault(require('./arrays/mergeArrays'))
14
- var _uniqueArray = _interopRequireDefault(require('./arrays/uniqueArray'))
15
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
16
- /**
17
- * Some simple utility functions for generating arrays or performing work on arrays.
18
- * @file
19
- * @author Joshua Heagle <joshuaheagle@gmail.com>
20
- * @version 1.0.0
21
- * @module arrayHelpers
22
- * @memberOf module:siFunciona
23
- */
24
- var _default = exports.default = {
25
- addUniqueToArray: _addUniqueToArray.default,
26
- BasicQueue: _BasicQueue.default,
27
- buildArray: _buildArray.default,
28
- buildArrayOfReferences: _buildArrayOfReferences.default,
29
- compareArrays: _compareArrays.default,
30
- mergeArrays: _mergeArrays.default,
31
- uniqueArray: _uniqueArray.default
32
- }
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 _addUniqueToArray = _interopRequireDefault(require('./arrays/addUniqueToArray'))
9
+ var _BasicQueue = _interopRequireDefault(require('./arrays/BasicQueue'))
10
+ var _buildArray = _interopRequireDefault(require('./arrays/buildArray'))
11
+ var _buildArrayOfReferences = _interopRequireDefault(require('./arrays/buildArrayOfReferences'))
12
+ var _compareArrays = _interopRequireDefault(require('./arrays/compareArrays'))
13
+ var _mergeArrays = _interopRequireDefault(require('./arrays/mergeArrays'))
14
+ var _uniqueArray = _interopRequireDefault(require('./arrays/uniqueArray'))
15
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
16
+ /**
17
+ * Utilities for building, merging, deduplicating and comparing arrays, plus a basic FIFO queue (BasicQueue) for
18
+ * use with functionHelpers' queueManager/queueTimeout.
19
+ * @file
20
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
21
+ * @version 1.0.0
22
+ * @module arrayHelpers
23
+ * @memberOf module:siFunciona
24
+ */
25
+ var _default = exports.default = {
26
+ addUniqueToArray: _addUniqueToArray.default,
27
+ BasicQueue: _BasicQueue.default,
28
+ buildArray: _buildArray.default,
29
+ buildArrayOfReferences: _buildArrayOfReferences.default,
30
+ compareArrays: _compareArrays.default,
31
+ mergeArrays: _mergeArrays.default,
32
+ uniqueArray: _uniqueArray.default
33
+ }
@@ -1,12 +1,15 @@
1
- import 'core-js/stable';
2
- import { descriptor } from './samples/descriptor';
3
- /**
4
- * Apply one or more descriptors to an existing descriptor so that they represent a merged version of the descriptors.
5
- * @memberOf module:objectDescriptors
6
- * @param {module:objectDescriptors~descriptor} originalMap
7
- * @param {...module:objectDescriptors~descriptor} descriptors
8
- * @returns {module:objectDescriptors~descriptor}
9
- */
10
- declare const assignDescriptor: (originalMap: descriptor, ...descriptors: Array<descriptor>) => descriptor;
11
- export default assignDescriptor;
1
+ import 'core-js/stable';
2
+ import { descriptor } from './samples/descriptor';
3
+ /**
4
+ * Apply one or more descriptors to an existing descriptor so that they represent a merged version of the descriptors.
5
+ * Used to widen a descriptor as more differently-shaped objects are described into it (e.g. array elements of
6
+ * different types), rather than replacing it outright.
7
+ * @memberOf module:objectDescriptors
8
+ * @param {module:objectDescriptors~descriptor} originalMap - The base descriptor to merge onto (not mutated - a
9
+ * clone is merged and returned).
10
+ * @param {...module:objectDescriptors~descriptor} descriptors - One or more further descriptors to merge in.
11
+ * @returns {module:objectDescriptors~descriptor} A new descriptor representing the merge of all of the above.
12
+ */
13
+ declare const assignDescriptor: (originalMap: descriptor, ...descriptors: Array<descriptor>) => descriptor;
14
+ export default assignDescriptor;
12
15
  //# sourceMappingURL=assignDescriptor.d.ts.map
@@ -1,55 +1,58 @@
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.every.js')
9
- require('core-js/modules/esnext.iterator.filter.js')
10
- require('core-js/modules/esnext.iterator.find.js')
11
- require('core-js/modules/esnext.iterator.for-each.js')
12
- require('core-js/modules/esnext.iterator.map.js')
13
- require('core-js/modules/esnext.iterator.reduce.js')
14
- require('core-js/stable')
15
- var _assignDescriptorDetail = _interopRequireDefault(require('./assignDescriptorDetail'))
16
- var _cloneDescriptor = _interopRequireDefault(require('./cloneDescriptor'))
17
- var _compareArrays = _interopRequireDefault(require('../arrays/compareArrays'))
18
- var _uniqueArray = _interopRequireDefault(require('../arrays/uniqueArray'))
19
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
20
- /**
21
- * Apply one or more descriptors to an existing descriptor so that they represent a merged version of the descriptors.
22
- * @memberOf module:objectDescriptors
23
- * @param {module:objectDescriptors~descriptor} originalMap
24
- * @param {...module:objectDescriptors~descriptor} descriptors
25
- * @returns {module:objectDescriptors~descriptor}
26
- */
27
- const assignDescriptor = (originalMap, ...descriptors) => descriptors.reduce((assignedDescriptor, descriptor) => {
28
- const detailsDiff = (0, _compareArrays.default)(assignedDescriptor.keys, descriptor.keys)
29
- detailsDiff.forEach(diff => {
30
- const existingDetail = assignedDescriptor.details.find(detail => detail.key === diff.value)
31
- const newDetail = descriptor.details.find(detail => detail.key === diff.value)
32
- if (diff.result.every(result => result === 0)) {
33
- assignedDescriptor.details[existingDetail.index] = (0, _assignDescriptorDetail.default)(existingDetail, newDetail)
34
- return assignedDescriptor
35
- }
36
- const useDetail = diff.result[0] > 0 ? existingDetail : newDetail
37
- if (!useDetail) {
38
- assignedDescriptor.details[existingDetail.index].optional = true
39
- return assignedDescriptor
40
- }
41
- const useIndex = diff.result[0] > 0 ? useDetail.index : assignedDescriptor.length
42
- assignedDescriptor.details[useIndex] = Object.assign({}, useDetail, {
43
- index: useIndex,
44
- optional: true
45
- })
46
- assignedDescriptor.length = assignedDescriptor.length < assignedDescriptor.details.length ? assignedDescriptor.details.length : assignedDescriptor.length
47
- return assignedDescriptor
48
- })
49
- assignedDescriptor.keys = (0, _uniqueArray.default)(assignedDescriptor.details.map(detail => detail.key))
50
- assignedDescriptor.references = (0, _uniqueArray.default)(assignedDescriptor.details.filter(detail => detail.isReference).map(detail => detail.index))
51
- assignedDescriptor.isArray = assignedDescriptor.length ? assignedDescriptor.details.every(detail => typeof detail.key === 'number') : assignedDescriptor.isArray
52
- assignedDescriptor.complete = !assignedDescriptor.references.length || assignedDescriptor.complete || descriptor.complete
53
- return assignedDescriptor
54
- }, (0, _cloneDescriptor.default)(originalMap))
55
- var _default = exports.default = assignDescriptor
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.every.js')
9
+ require('core-js/modules/esnext.iterator.filter.js')
10
+ require('core-js/modules/esnext.iterator.find.js')
11
+ require('core-js/modules/esnext.iterator.for-each.js')
12
+ require('core-js/modules/esnext.iterator.map.js')
13
+ require('core-js/modules/esnext.iterator.reduce.js')
14
+ require('core-js/stable')
15
+ var _assignDescriptorDetail = _interopRequireDefault(require('./assignDescriptorDetail'))
16
+ var _cloneDescriptor = _interopRequireDefault(require('./cloneDescriptor'))
17
+ var _compareArrays = _interopRequireDefault(require('../arrays/compareArrays'))
18
+ var _uniqueArray = _interopRequireDefault(require('../arrays/uniqueArray'))
19
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
20
+ /**
21
+ * Apply one or more descriptors to an existing descriptor so that they represent a merged version of the descriptors.
22
+ * Used to widen a descriptor as more differently-shaped objects are described into it (e.g. array elements of
23
+ * different types), rather than replacing it outright.
24
+ * @memberOf module:objectDescriptors
25
+ * @param {module:objectDescriptors~descriptor} originalMap - The base descriptor to merge onto (not mutated - a
26
+ * clone is merged and returned).
27
+ * @param {...module:objectDescriptors~descriptor} descriptors - One or more further descriptors to merge in.
28
+ * @returns {module:objectDescriptors~descriptor} A new descriptor representing the merge of all of the above.
29
+ */
30
+ const assignDescriptor = (originalMap, ...descriptors) => descriptors.reduce((assignedDescriptor, descriptor) => {
31
+ const detailsDiff = (0, _compareArrays.default)(assignedDescriptor.keys, descriptor.keys)
32
+ detailsDiff.forEach(diff => {
33
+ const existingDetail = assignedDescriptor.details.find(detail => detail.key === diff.value)
34
+ const newDetail = descriptor.details.find(detail => detail.key === diff.value)
35
+ if (diff.result.every(result => result === 0)) {
36
+ assignedDescriptor.details[existingDetail.index] = (0, _assignDescriptorDetail.default)(existingDetail, newDetail)
37
+ return assignedDescriptor
38
+ }
39
+ const useDetail = diff.result[0] > 0 ? existingDetail : newDetail
40
+ if (!useDetail) {
41
+ assignedDescriptor.details[existingDetail.index].optional = true
42
+ return assignedDescriptor
43
+ }
44
+ const useIndex = diff.result[0] > 0 ? useDetail.index : assignedDescriptor.length
45
+ assignedDescriptor.details[useIndex] = Object.assign({}, useDetail, {
46
+ index: useIndex,
47
+ optional: true
48
+ })
49
+ assignedDescriptor.length = assignedDescriptor.length < assignedDescriptor.details.length ? assignedDescriptor.details.length : assignedDescriptor.length
50
+ return assignedDescriptor
51
+ })
52
+ assignedDescriptor.keys = (0, _uniqueArray.default)(assignedDescriptor.details.map(detail => detail.key))
53
+ assignedDescriptor.references = (0, _uniqueArray.default)(assignedDescriptor.details.filter(detail => detail.isReference).map(detail => detail.index))
54
+ assignedDescriptor.isArray = assignedDescriptor.length ? assignedDescriptor.details.every(detail => typeof detail.key === 'number') : assignedDescriptor.isArray
55
+ assignedDescriptor.complete = !assignedDescriptor.references.length || assignedDescriptor.complete || descriptor.complete
56
+ return assignedDescriptor
57
+ }, (0, _cloneDescriptor.default)(originalMap))
58
+ var _default = exports.default = assignDescriptor
@@ -1,12 +1,15 @@
1
- import 'core-js/stable';
2
- import { descriptorDetail } from './samples/descriptorDetail';
3
- /**
4
- * Assign properties from other details onto an existing detail.
5
- * @memberOf module:objectDescriptors
6
- * @param {module:objectDescriptors~descriptorDetail} originalDetail
7
- * @param {...module:objectDescriptors~descriptorDetail} details
8
- * @returns {module:objectDescriptors~descriptorDetail}
9
- */
10
- declare const assignDescriptorDetail: (originalDetail: descriptorDetail, ...details: Array<descriptorDetail>) => descriptorDetail;
11
- export default assignDescriptorDetail;
1
+ import 'core-js/stable';
2
+ import { descriptorDetail } from './samples/descriptorDetail';
3
+ /**
4
+ * Assign properties from other details onto an existing detail, widening it (e.g. combining `type`/`value` arrays,
5
+ * OR-ing boolean flags like `nullable`/`optional`) rather than overwriting it - the per-property counterpart to
6
+ * {@link module:objectDescriptors.assignDescriptor}.
7
+ * @memberOf module:objectDescriptors
8
+ * @param {module:objectDescriptors~descriptorDetail} originalDetail - The base detail to merge onto (not mutated -
9
+ * a clone is merged and returned).
10
+ * @param {...module:objectDescriptors~descriptorDetail} details - One or more further details to merge in.
11
+ * @returns {module:objectDescriptors~descriptorDetail} A new detail representing the merge of all of the above.
12
+ */
13
+ declare const assignDescriptorDetail: (originalDetail: descriptorDetail, ...details: Array<descriptorDetail>) => descriptorDetail;
14
+ export default assignDescriptorDetail;
12
15
  //# sourceMappingURL=assignDescriptorDetail.d.ts.map
@@ -1,34 +1,37 @@
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.reduce.js')
9
- require('core-js/stable')
10
- var _cloneDescriptorDetail = _interopRequireDefault(require('./cloneDescriptorDetail'))
11
- var _uniqueArray = _interopRequireDefault(require('../arrays/uniqueArray'))
12
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
13
- /**
14
- * Assign properties from other details onto an existing detail.
15
- * @memberOf module:objectDescriptors
16
- * @param {module:objectDescriptors~descriptorDetail} originalDetail
17
- * @param {...module:objectDescriptors~descriptorDetail} details
18
- * @returns {module:objectDescriptors~descriptorDetail}
19
- */
20
- const assignDescriptorDetail = (originalDetail, ...details) => details.reduce((existingDetail, newDetail) => {
21
- existingDetail.type = (0, _uniqueArray.default)([...existingDetail.type, ...newDetail.type])
22
- existingDetail.value = (0, _uniqueArray.default)([...existingDetail.value, ...newDetail.value])
23
- existingDetail.nullable = existingDetail.nullable || newDetail.nullable
24
- existingDetail.optional = existingDetail.optional || newDetail.optional
25
- existingDetail.circular = existingDetail.circular || newDetail.circular
26
- existingDetail.isReference = existingDetail.isReference || newDetail.isReference
27
- existingDetail.isInstance = existingDetail.isInstance || newDetail.isInstance
28
- existingDetail.arrayReference = [existingDetail.arrayReference, newDetail.arrayReference].find(ref => typeof ref === 'number')
29
- existingDetail.objectReference = [existingDetail.objectReference, newDetail.objectReference].find(ref => typeof ref === 'number')
30
- existingDetail.arrayReference = typeof existingDetail.arrayReference === 'undefined' ? null : existingDetail.arrayReference
31
- existingDetail.objectReference = typeof existingDetail.objectReference === 'undefined' ? null : existingDetail.objectReference
32
- return existingDetail
33
- }, (0, _cloneDescriptorDetail.default)(originalDetail))
34
- var _default = exports.default = assignDescriptorDetail
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.reduce.js')
9
+ require('core-js/stable')
10
+ var _cloneDescriptorDetail = _interopRequireDefault(require('./cloneDescriptorDetail'))
11
+ var _uniqueArray = _interopRequireDefault(require('../arrays/uniqueArray'))
12
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
13
+ /**
14
+ * Assign properties from other details onto an existing detail, widening it (e.g. combining `type`/`value` arrays,
15
+ * OR-ing boolean flags like `nullable`/`optional`) rather than overwriting it - the per-property counterpart to
16
+ * {@link module:objectDescriptors.assignDescriptor}.
17
+ * @memberOf module:objectDescriptors
18
+ * @param {module:objectDescriptors~descriptorDetail} originalDetail - The base detail to merge onto (not mutated -
19
+ * a clone is merged and returned).
20
+ * @param {...module:objectDescriptors~descriptorDetail} details - One or more further details to merge in.
21
+ * @returns {module:objectDescriptors~descriptorDetail} A new detail representing the merge of all of the above.
22
+ */
23
+ const assignDescriptorDetail = (originalDetail, ...details) => details.reduce((existingDetail, newDetail) => {
24
+ existingDetail.type = (0, _uniqueArray.default)([...existingDetail.type, ...newDetail.type])
25
+ existingDetail.value = (0, _uniqueArray.default)([...existingDetail.value, ...newDetail.value])
26
+ existingDetail.nullable = existingDetail.nullable || newDetail.nullable
27
+ existingDetail.optional = existingDetail.optional || newDetail.optional
28
+ existingDetail.circular = existingDetail.circular || newDetail.circular
29
+ existingDetail.isReference = existingDetail.isReference || newDetail.isReference
30
+ existingDetail.isInstance = existingDetail.isInstance || newDetail.isInstance
31
+ existingDetail.arrayReference = [existingDetail.arrayReference, newDetail.arrayReference].find(ref => typeof ref === 'number')
32
+ existingDetail.objectReference = [existingDetail.objectReference, newDetail.objectReference].find(ref => typeof ref === 'number')
33
+ existingDetail.arrayReference = typeof existingDetail.arrayReference === 'undefined' ? null : existingDetail.arrayReference
34
+ existingDetail.objectReference = typeof existingDetail.objectReference === 'undefined' ? null : existingDetail.objectReference
35
+ return existingDetail
36
+ }, (0, _cloneDescriptorDetail.default)(originalDetail))
37
+ var _default = exports.default = assignDescriptorDetail