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,42 +1,58 @@
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 _assignDescriptor = _interopRequireDefault(require('./descriptors/assignDescriptor'))
9
- var _assignDescriptorDetail = _interopRequireDefault(require('./descriptors/assignDescriptorDetail'))
10
- var _checkClearValues = _interopRequireDefault(require('./descriptors/checkClearValues'))
11
- var _checkDescriptorComplete = _interopRequireDefault(require('./descriptors/checkDescriptorComplete'))
12
- var _cloneDescriptor = _interopRequireDefault(require('./descriptors/cloneDescriptor'))
13
- var _cloneDescriptorDetail = _interopRequireDefault(require('./descriptors/cloneDescriptorDetail'))
14
- var _compareDescriptor = _interopRequireDefault(require('./descriptors/compareDescriptor'))
15
- var _describeObject = _interopRequireDefault(require('./descriptors/describeObject'))
16
- var _describeObjectMap = _interopRequireDefault(require('./descriptors/describeObjectMap'))
17
- var _describeObjectDetail = _interopRequireDefault(require('./descriptors/describeObjectDetail'))
18
- var _nextReference = _interopRequireDefault(require('./descriptors/nextReference'))
19
- var _sameDescriptor = _interopRequireDefault(require('./descriptors/sameDescriptor'))
20
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
21
- /**
22
- * Create a format to standardize every object into a specific template.
23
- * @file
24
- * @author Joshua Heagle <joshuaheagle@gmail.com>
25
- * @version 1.0.0
26
- * @module objectDescriptors
27
- * @memberOf module:siFunciona
28
- */
29
- var _default = exports.default = {
30
- assignDescriptor: _assignDescriptor.default,
31
- assignDescriptorDetail: _assignDescriptorDetail.default,
32
- checkClearValues: _checkClearValues.default,
33
- checkDescriptorComplete: _checkDescriptorComplete.default,
34
- cloneDescriptor: _cloneDescriptor.default,
35
- cloneDescriptorDetail: _cloneDescriptorDetail.default,
36
- compareDescriptor: _compareDescriptor.default,
37
- describeObject: _describeObject.default,
38
- describeObjectMap: _describeObjectMap.default,
39
- describeObjectDetail: _describeObjectDetail.default,
40
- nextReference: _nextReference.default,
41
- sameDescriptor: _sameDescriptor.default
42
- }
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 _assignDescriptor = _interopRequireDefault(require('./descriptors/assignDescriptor'))
9
+ var _assignDescriptorDetail = _interopRequireDefault(require('./descriptors/assignDescriptorDetail'))
10
+ var _checkClearValues = _interopRequireDefault(require('./descriptors/checkClearValues'))
11
+ var _checkDescriptorComplete = _interopRequireDefault(require('./descriptors/checkDescriptorComplete'))
12
+ var _cloneDescriptor = _interopRequireDefault(require('./descriptors/cloneDescriptor'))
13
+ var _cloneDescriptorDetail = _interopRequireDefault(require('./descriptors/cloneDescriptorDetail'))
14
+ var _compareDescriptor = _interopRequireDefault(require('./descriptors/compareDescriptor'))
15
+ var _describeObject = _interopRequireDefault(require('./descriptors/describeObject'))
16
+ var _describeObjectMap = _interopRequireDefault(require('./descriptors/describeObjectMap'))
17
+ var _describeObjectDetail = _interopRequireDefault(require('./descriptors/describeObjectDetail'))
18
+ var _nextReference = _interopRequireDefault(require('./descriptors/nextReference'))
19
+ var _sameDescriptor = _interopRequireDefault(require('./descriptors/sameDescriptor'))
20
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
21
+ /**
22
+ * A "descriptor" is a flat, serializable snapshot of an object or array's shape: for each property, its type(s),
23
+ * whether it's nullable, and - if the property's own value is itself an object/array - a reference to that nested
24
+ * value's own descriptor elsewhere in the same list, rather than nesting descriptors inside descriptors. This flat,
25
+ * reference-based structure is what lets these utilities walk deeply nested and even circular object graphs (an
26
+ * object that contains itself, directly or indirectly) without infinite recursion, since a value that's already
27
+ * been described is simply pointed to again instead of re-described.
28
+ *
29
+ * Start with {@link module:objectDescriptors.describeObjectMap}, which takes any real object or array and produces
30
+ * this flat list of descriptors for you - the other functions here (comparing, merging, cloning descriptors) are
31
+ * building blocks used internally, or useful once you already have descriptors to work with directly.
32
+ *
33
+ * The concrete use this module has earned its keep on: describing two objects and comparing the results tells
34
+ * you whether they're the same shape and values even when they're different references entirely (see
35
+ * {@link module:objectDescriptors.sameDescriptor}/{@link module:objectDescriptors.compareDescriptor}) - useful
36
+ * anywhere you need to check that two objects genuinely match without caring whether they're literally the same
37
+ * instance. A descriptor also doubles as a flat, structured summary of an object's shape, which can be handy for
38
+ * discussion or assessment purposes (e.g. describing what an object looks like without dumping the whole thing).
39
+ * @file
40
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
41
+ * @version 1.0.0
42
+ * @module objectDescriptors
43
+ * @memberOf module:siFunciona
44
+ */
45
+ var _default = exports.default = {
46
+ assignDescriptor: _assignDescriptor.default,
47
+ assignDescriptorDetail: _assignDescriptorDetail.default,
48
+ checkClearValues: _checkClearValues.default,
49
+ checkDescriptorComplete: _checkDescriptorComplete.default,
50
+ cloneDescriptor: _cloneDescriptor.default,
51
+ cloneDescriptorDetail: _cloneDescriptorDetail.default,
52
+ compareDescriptor: _compareDescriptor.default,
53
+ describeObject: _describeObject.default,
54
+ describeObjectMap: _describeObjectMap.default,
55
+ describeObjectDetail: _describeObjectDetail.default,
56
+ nextReference: _nextReference.default,
57
+ sameDescriptor: _sameDescriptor.default
58
+ }
@@ -1,11 +1,11 @@
1
- import 'core-js/stable';
2
- import { IsQueue, queuedItem } from '../arrays/BasicQueue';
3
- /**
4
- * Create an instance of a basic queue.
5
- * @memberOf module:functionHelpers
6
- * @param {Array} initialQueue
7
- * @returns {IsQueue}
8
- */
9
- declare const makeBasicQueue: (initialQueue?: queuedItem[] | any) => IsQueue<any>;
10
- export default makeBasicQueue;
1
+ import 'core-js/stable';
2
+ import { IsQueue, queuedItem } from '../arrays/BasicQueue';
3
+ /**
4
+ * Create an instance of a basic queue.
5
+ * @memberOf module:functionHelpers
6
+ * @param {Array} [initialQueue=[]] - Items to pre-populate the queue with, in order.
7
+ * @returns {IsQueue}
8
+ */
9
+ declare const makeBasicQueue: (initialQueue?: queuedItem[] | any) => IsQueue<any>;
10
+ export default makeBasicQueue;
11
11
  //# sourceMappingURL=makeBasicQueue.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
- require('core-js/stable')
8
- var _BasicQueue = _interopRequireDefault(require('../arrays/BasicQueue'))
9
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
10
- /**
11
- * Create an instance of a basic queue.
12
- * @memberOf module:functionHelpers
13
- * @param {Array} initialQueue
14
- * @returns {IsQueue}
15
- */
16
- const makeBasicQueue = (initialQueue = []) => {
17
- return new _BasicQueue.default(initialQueue)
18
- }
19
- var _default = exports.default = makeBasicQueue
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 _BasicQueue = _interopRequireDefault(require('../arrays/BasicQueue'))
9
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
10
+ /**
11
+ * Create an instance of a basic queue.
12
+ * @memberOf module:functionHelpers
13
+ * @param {Array} [initialQueue=[]] - Items to pre-populate the queue with, in order.
14
+ * @returns {IsQueue}
15
+ */
16
+ const makeBasicQueue = (initialQueue = []) => {
17
+ return new _BasicQueue.default(initialQueue)
18
+ }
19
+ var _default = exports.default = makeBasicQueue
@@ -1,48 +1,50 @@
1
- import 'core-js/stable';
2
- import 'regenerator-runtime/runtime';
3
- import { IsQueue, queuedItem } from '../arrays/BasicQueue';
4
- /**
5
- * Each time queue handle is called the passed function is added to the queue to be called when ready.
6
- * @typedef {Object} module:functionHelpers~queueedRunnable
7
- * @memberOf module:functionHelpers
8
- * @property {Object.<fn|args, Function|Array.<*>>} item - Stores the function and the arguments to apply to it when called
9
- * @property {Generator} generator - The generator instance which can be used to yield function results
10
- */
11
- export type queuedRunnable = {
12
- item: {
13
- fn: Function | queuedItem;
14
- args: any[];
15
- };
16
- generator: Generator;
17
- };
18
- /**
19
- * The pushed function is added to the queue to be called when ready.
20
- * @typedef {Function} module:functionHelpers~queueManagerPush
21
- * @memberOf module:functionHelpers
22
- * @param {Function} fn - A function to enqueue
23
- * @param {...*} args - Arguments to be passed to the function once it is ready
24
- * @returns {Promise}
25
- */
26
- export type queuePush = (fn: Function, ...args: any) => Promise<any>;
27
- /**
28
- * Each time queue handle is called the passed function is added to the queue to be called when ready.
29
- * @typedef {Object} module:functionHelpers~queueManagerHandle
30
- * @memberOf module:functionHelpers
31
- * @property {Function} start - Callable property that will disable paused state and run the next queue
32
- * @property {Function} pause - Callable property that will switch state to paused
33
- * @property {module:functionHelpers~queueManagerPush} push - Callable property that takes a function to add to the queue
34
- */
35
- export type queueManagerHandle = {
36
- start: () => void;
37
- pause: () => void;
38
- push: queuePush;
39
- };
40
- /**
41
- * Manage functions to run sequentially.
42
- * @memberOf module:functionHelpers
43
- * @param {IsQueue} [queue=[]] - The iterable that can be used to store queued functions
44
- * @returns {module:functionHelpers~queueManagerHandle}
45
- */
46
- declare const queueManager: (queue?: IsQueue<queuedItem>) => queueManagerHandle;
47
- export default queueManager;
1
+ import 'core-js/stable';
2
+ import 'regenerator-runtime/runtime';
3
+ import { IsQueue, queuedItem } from '../arrays/BasicQueue';
4
+ /**
5
+ * Each time queue handle is called the passed function is added to the queue to be called when ready.
6
+ * @typedef {Object} module:functionHelpers~queueedRunnable
7
+ * @memberOf module:functionHelpers
8
+ * @property {Object.<fn|args, Function|Array.<*>>} item - Stores the function and the arguments to apply to it when called
9
+ * @property {Generator} generator - The generator instance which can be used to yield function results
10
+ */
11
+ export type queuedRunnable = {
12
+ item: {
13
+ fn: Function | queuedItem;
14
+ args: any[];
15
+ };
16
+ generator: Generator;
17
+ };
18
+ /**
19
+ * The pushed function is added to the queue to be called when ready.
20
+ * @typedef {Function} module:functionHelpers~queueManagerPush
21
+ * @memberOf module:functionHelpers
22
+ * @param {Function} fn - A function to enqueue
23
+ * @param {...*} args - Arguments to be passed to the function once it is ready
24
+ * @returns {Promise}
25
+ */
26
+ export type queuePush = (fn: Function, ...args: any) => Promise<any>;
27
+ /**
28
+ * Each time queue handle is called the passed function is added to the queue to be called when ready.
29
+ * @typedef {Object} module:functionHelpers~queueManagerHandle
30
+ * @memberOf module:functionHelpers
31
+ * @property {Function} start - Callable property that will disable paused state and run the next queue
32
+ * @property {Function} pause - Callable property that will switch state to paused
33
+ * @property {module:functionHelpers~queueManagerPush} push - Callable property that takes a function to add to the queue
34
+ */
35
+ export type queueManagerHandle = {
36
+ start: () => void;
37
+ pause: () => void;
38
+ push: queuePush;
39
+ };
40
+ /**
41
+ * Manage functions to run sequentially.
42
+ * @memberOf module:functionHelpers
43
+ * @param {IsQueue|Array} [queue=null] - The queue to manage. Pass a plain array to have it converted into a
44
+ * {@link module:arrayHelpers.BasicQueue} automatically, or a custom queue implementing `IsQueue`; omit it (or pass
45
+ * `null`) to have one created for you.
46
+ * @returns {module:functionHelpers~queueManagerHandle}
47
+ */
48
+ declare const queueManager: (queue?: IsQueue<queuedItem>) => queueManagerHandle;
49
+ export default queueManager;
48
50
  //# sourceMappingURL=queueManager.d.ts.map
@@ -1,122 +1,124 @@
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.for-each.js')
9
- require('core-js/stable')
10
- require('regenerator-runtime/runtime')
11
- var _makeBasicQueue = _interopRequireDefault(require('./makeBasicQueue'))
12
- function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
13
- /**
14
- * Manage functions to run sequentially.
15
- * @memberOf module:functionHelpers
16
- * @param {IsQueue} [queue=[]] - The iterable that can be used to store queued functions
17
- * @returns {module:functionHelpers~queueManagerHandle}
18
- */
19
- const queueManager = (queue = null) => {
20
- let isRunning = false
21
- let isPaused = true
22
- /**
23
- * Convert a function to a queueable object.
24
- * @param {Promise.resolve} resolve
25
- * @param {Promise.reject} reject
26
- * @param {Function} fn
27
- * @param {...*} args
28
- * @returns {queuedRunnable}
29
- */
30
- const makeQueuedRunnable = (resolve, reject, fn, ...args) => {
31
- const generator = (function * () {
32
- const item = yield
33
- return typeof item.fn === 'function' ? resolve(item.fn(...item.args)) : reject(item)
34
- }())
35
- // Prepare the generator to be used on the subsequent call
36
- generator.next()
37
- return {
38
- item: {
39
- fn: fn,
40
- args: args
41
- },
42
- generator: generator
43
- }
44
- }
45
- /**
46
- * After an item is run, THEN run this function to reset isRunning
47
- * @param {*} result
48
- * @returns {*}
49
- */
50
- const postRun = result => {
51
- isRunning = false
52
- runNextItem()
53
- return result
54
- }
55
- /**
56
- * When ready, runs the next queued runnable generator.
57
- * @returns {IteratorYieldResult|null}
58
- */
59
- const runNextItem = () => {
60
- if (!isPaused && !queue.empty() && !isRunning) {
61
- isRunning = true
62
- let toRun = queue.dequeue()
63
- if (typeof toRun === 'undefined' || toRun === null) {
64
- return null
65
- }
66
- if (typeof toRun === 'function') {
67
- new Promise((resolve, reject) => {
68
- toRun = makeQueuedRunnable(resolve, reject, toRun)
69
- runNextItem()
70
- }).then(postRun)
71
- }
72
- if ('success' in toRun) {
73
- // Some run responses return an object with 'success' property.
74
- console.info(toRun.success)
75
- return null
76
- }
77
- if (!toRun.generator || 'error' in toRun) {
78
- // Some run responses return an object with an 'error' property
79
- let errorMessage = 'Verify queued function implements "done()" state.'
80
- if ('error' in toRun && toRun.error) {
81
- errorMessage = `[${toRun.error}]: ${errorMessage}`
82
- }
83
- throw new Error(errorMessage)
84
- }
85
- if (toRun.generator && toRun.item) {
86
- // Ensure the returned result has both the generator and the item to be valid
87
- return toRun.generator.next(toRun.item)
88
- }
89
- }
90
- return null
91
- }
92
- /**
93
- * Add a function into the queue to be run when ready.
94
- * @param {Function} fn - The function to run when ready
95
- * @param {...*} args - Optional arguments to apply when the function is ready to be run
96
- * @returns Promise
97
- */
98
- const pushAnother = (fn, ...args) => new Promise((resolve, reject) => {
99
- queue.enqueue(makeQueuedRunnable(resolve, reject, fn, ...args))
100
- runNextItem()
101
- }).then(postRun)
102
- if (Array.isArray(queue)) {
103
- const queueArray = queue
104
- queue = (0, _makeBasicQueue.default)()
105
- queueArray.forEach(queued => pushAnother(queued))
106
- }
107
- if (queue === null) {
108
- queue = (0, _makeBasicQueue.default)()
109
- }
110
- runNextItem()
111
- return {
112
- start: () => {
113
- isPaused = false
114
- runNextItem()
115
- },
116
- pause: () => {
117
- isPaused = true
118
- },
119
- push: pushAnother
120
- }
121
- }
122
- var _default = exports.default = queueManager
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.for-each.js')
9
+ require('core-js/stable')
10
+ require('regenerator-runtime/runtime')
11
+ var _makeBasicQueue = _interopRequireDefault(require('./makeBasicQueue'))
12
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
13
+ /**
14
+ * Manage functions to run sequentially.
15
+ * @memberOf module:functionHelpers
16
+ * @param {IsQueue|Array} [queue=null] - The queue to manage. Pass a plain array to have it converted into a
17
+ * {@link module:arrayHelpers.BasicQueue} automatically, or a custom queue implementing `IsQueue`; omit it (or pass
18
+ * `null`) to have one created for you.
19
+ * @returns {module:functionHelpers~queueManagerHandle}
20
+ */
21
+ const queueManager = (queue = null) => {
22
+ let isRunning = false
23
+ let isPaused = true
24
+ /**
25
+ * Convert a function to a queueable object.
26
+ * @param {Promise.resolve} resolve
27
+ * @param {Promise.reject} reject
28
+ * @param {Function} fn
29
+ * @param {...*} args
30
+ * @returns {queuedRunnable}
31
+ */
32
+ const makeQueuedRunnable = (resolve, reject, fn, ...args) => {
33
+ const generator = (function * () {
34
+ const item = yield
35
+ return typeof item.fn === 'function' ? resolve(item.fn(...item.args)) : reject(item)
36
+ }())
37
+ // Prepare the generator to be used on the subsequent call
38
+ generator.next()
39
+ return {
40
+ item: {
41
+ fn: fn,
42
+ args: args
43
+ },
44
+ generator: generator
45
+ }
46
+ }
47
+ /**
48
+ * After an item is run, THEN run this function to reset isRunning
49
+ * @param {*} result
50
+ * @returns {*}
51
+ */
52
+ const postRun = result => {
53
+ isRunning = false
54
+ runNextItem()
55
+ return result
56
+ }
57
+ /**
58
+ * When ready, runs the next queued runnable generator.
59
+ * @returns {IteratorYieldResult|null}
60
+ */
61
+ const runNextItem = () => {
62
+ if (!isPaused && !queue.empty() && !isRunning) {
63
+ isRunning = true
64
+ let toRun = queue.dequeue()
65
+ if (typeof toRun === 'undefined' || toRun === null) {
66
+ return null
67
+ }
68
+ if (typeof toRun === 'function') {
69
+ new Promise((resolve, reject) => {
70
+ toRun = makeQueuedRunnable(resolve, reject, toRun)
71
+ runNextItem()
72
+ }).then(postRun)
73
+ }
74
+ if ('success' in toRun) {
75
+ // Some run responses return an object with 'success' property.
76
+ console.info(toRun.success)
77
+ return null
78
+ }
79
+ if (!toRun.generator || 'error' in toRun) {
80
+ // Some run responses return an object with an 'error' property
81
+ let errorMessage = 'Verify queued function implements "done()" state.'
82
+ if ('error' in toRun && toRun.error) {
83
+ errorMessage = `[${toRun.error}]: ${errorMessage}`
84
+ }
85
+ throw new Error(errorMessage)
86
+ }
87
+ if (toRun.generator && toRun.item) {
88
+ // Ensure the returned result has both the generator and the item to be valid
89
+ return toRun.generator.next(toRun.item)
90
+ }
91
+ }
92
+ return null
93
+ }
94
+ /**
95
+ * Add a function into the queue to be run when ready.
96
+ * @param {Function} fn - The function to run when ready
97
+ * @param {...*} args - Optional arguments to apply when the function is ready to be run
98
+ * @returns Promise
99
+ */
100
+ const pushAnother = (fn, ...args) => new Promise((resolve, reject) => {
101
+ queue.enqueue(makeQueuedRunnable(resolve, reject, fn, ...args))
102
+ runNextItem()
103
+ }).then(postRun)
104
+ if (Array.isArray(queue)) {
105
+ const queueArray = queue
106
+ queue = (0, _makeBasicQueue.default)()
107
+ queueArray.forEach(queued => pushAnother(queued))
108
+ }
109
+ if (queue === null) {
110
+ queue = (0, _makeBasicQueue.default)()
111
+ }
112
+ runNextItem()
113
+ return {
114
+ start: () => {
115
+ isPaused = false
116
+ runNextItem()
117
+ },
118
+ pause: () => {
119
+ isPaused = true
120
+ },
121
+ push: pushAnother
122
+ }
123
+ }
124
+ var _default = exports.default = queueManager
@@ -1,36 +1,36 @@
1
- import 'core-js/stable';
2
- /**
3
- * An object having an integer valued property named 'relevance'.
4
- * @typedef {Object} relevanceObject
5
- * @memberOf module:functionHelpers
6
- * @property {Array|Object} source
7
- * @property {Array|Object} object
8
- * @property {number} relevance
9
- */
10
- export type relevanceObject = {
11
- source: Array<any> | Object;
12
- object: Array<any> | Object;
13
- relevance: number;
14
- };
15
- /**
16
- * A map of relevanceObjects which can be manipulated to filter results.
17
- * @typedef {Array.<relevanceObject>} relevanceMap
18
- * @memberOf module:functionHelpers
19
- */
20
- export type relevanceMap = Array<relevanceObject>;
21
- type relevancyFilterOptions = {
22
- mapLimit?: number;
23
- relevancyRange?: number;
24
- };
25
- /**
26
- * Remove elements out of relevance range and update the max relevance.
27
- * @memberOf module:functionHelpers
28
- * @param {relevanceMap} map
29
- * @param {Object} [options={}]
30
- * @param {int} [options.mapLimit=1000]
31
- * @param {int} [options.relevancyRange=100]
32
- * @returns {relevanceMap}
33
- */
34
- declare const relevancyFilter: (map: relevanceMap, { mapLimit, relevancyRange }?: relevancyFilterOptions) => relevanceMap;
35
- export default relevancyFilter;
1
+ import 'core-js/stable';
2
+ /**
3
+ * An object having an integer valued property named 'relevance'.
4
+ * @typedef {Object} relevanceObject
5
+ * @memberOf module:functionHelpers
6
+ * @property {Array|Object} source
7
+ * @property {Array|Object} object
8
+ * @property {number} relevance
9
+ */
10
+ export type relevanceObject = {
11
+ source: Array<any> | Object;
12
+ object: Array<any> | Object;
13
+ relevance: number;
14
+ };
15
+ /**
16
+ * A map of relevanceObjects which can be manipulated to filter results.
17
+ * @typedef {Array.<relevanceObject>} relevanceMap
18
+ * @memberOf module:functionHelpers
19
+ */
20
+ export type relevanceMap = Array<relevanceObject>;
21
+ type relevancyFilterOptions = {
22
+ mapLimit?: number;
23
+ relevancyRange?: number;
24
+ };
25
+ /**
26
+ * Remove elements out of relevance range and update the max relevance.
27
+ * @memberOf module:functionHelpers
28
+ * @param {relevanceMap} map
29
+ * @param {Object} [options={}]
30
+ * @param {number} [options.mapLimit=1000] - Only filter once the map exceeds this many entries.
31
+ * @param {number} [options.relevancyRange=100] - How many of the most-recent relevance values to keep.
32
+ * @returns {relevanceMap}
33
+ */
34
+ declare const relevancyFilter: (map: relevanceMap, { mapLimit, relevancyRange }?: relevancyFilterOptions) => relevanceMap;
35
+ export default relevancyFilter;
36
36
  //# sourceMappingURL=relevancyFilter.d.ts.map