si-funciona 2.1.0 → 2.2.2

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.
@@ -36,13 +36,14 @@ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P
36
36
  }
37
37
  const queue = []
38
38
  const manager = (0, _queueManager.default)()
39
+ manager.start()
39
40
  let observer = null
40
41
  const doReset = () => observer = null
41
42
  const initializeObserver = () => __awaiter(void 0, void 0, void 0, function * () {
42
43
  observer = new MutationObserver(() => {
43
44
  if (document.body) {
44
45
  while (queue.length) {
45
- manager(queue.shift())
46
+ manager.push(queue.shift())
46
47
  }
47
48
  observer.disconnect()
48
49
  doReset()
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/stable");var _queueManager=_interopRequireDefault(require("./queueManager"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var __awaiter=function(e,r,t,n){return new(t||(t=Promise))((function(u,o){function i(e){try{s(n.next(e))}catch(e){o(e)}}function a(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var r;e.done?u(e.value):(r=e.value,r instanceof t?r:new t((function(e){e(r)}))).then(i,a)}s((n=n.apply(e,r||[])).next())}))};const queue=[],manager=(0,_queueManager.default)();let observer=null;const doReset=()=>observer=null,initializeObserver=()=>__awaiter(void 0,void 0,void 0,(function*(){return observer=new MutationObserver((()=>{if(document.body){for(;queue.length;)manager(queue.shift());observer.disconnect(),doReset()}})),observer.observe(document.documentElement,{childList:!0}),observer})),onBodyLoad=function(e){return arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&doReset(),queue.push(e),null===observer&&initializeObserver(),queue};var _default=exports.default=onBodyLoad;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/stable");var _queueManager=_interopRequireDefault(require("./queueManager"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var __awaiter=function(e,r,t,n){return new(t||(t=Promise))((function(u,o){function a(e){try{s(n.next(e))}catch(e){o(e)}}function i(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var r;e.done?u(e.value):(r=e.value,r instanceof t?r:new t((function(e){e(r)}))).then(a,i)}s((n=n.apply(e,r||[])).next())}))};const queue=[],manager=(0,_queueManager.default)();manager.start();let observer=null;const doReset=()=>observer=null,initializeObserver=()=>__awaiter(void 0,void 0,void 0,(function*(){return observer=new MutationObserver((()=>{if(document.body){for(;queue.length;)manager.push(queue.shift());observer.disconnect(),doReset()}})),observer.observe(document.documentElement,{childList:!0}),observer})),onBodyLoad=function(e){return arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&doReset(),queue.push(e),null===observer&&initializeObserver(),queue};var _default=exports.default=onBodyLoad;
@@ -3,13 +3,40 @@ import 'regenerator-runtime/runtime';
3
3
  import { IsQueue, queuedItem } from '../arrays/BasicQueue';
4
4
  /**
5
5
  * Each time queue handle is called the passed function is added to the queue to be called when ready.
6
- * @typedef {Function} module:functionHelpers~queueManagerHandle
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
7
21
  * @memberOf module:functionHelpers
8
22
  * @param {Function} fn - A function to enqueue
9
23
  * @param {...*} args - Arguments to be passed to the function once it is ready
10
24
  * @returns {Promise}
11
25
  */
12
- export type queueManagerHandle = (fn: Function, ...args: any) => Promise<any>;
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
+ };
13
40
  /**
14
41
  * Manage functions to run sequentially.
15
42
  * @function
@@ -4,6 +4,9 @@ Object.defineProperty(exports, '__esModule', {
4
4
  value: true
5
5
  })
6
6
  exports.default = void 0
7
+ require('core-js/modules/esnext.async-iterator.for-each.js')
8
+ require('core-js/modules/esnext.iterator.constructor.js')
9
+ require('core-js/modules/esnext.iterator.for-each.js')
7
10
  require('core-js/stable')
8
11
  require('regenerator-runtime/runtime')
9
12
  var _makeBasicQueue = _interopRequireDefault(require('./makeBasicQueue'))
@@ -17,47 +20,114 @@ function _interopRequireDefault (obj) { return obj && obj.__esModule ? obj : { d
17
20
  */
18
21
  const queueManager = function () {
19
22
  let queue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null
20
- if (Array.isArray(queue)) {
21
- queue = (0, _makeBasicQueue.default)(queue)
22
- }
23
- if (queue === null) {
24
- queue = (0, _makeBasicQueue.default)()
25
- }
26
23
  let isRunning = false
27
- return function (fn) {
28
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
29
- args[_key - 1] = arguments[_key]
24
+ let isPaused = true
25
+ /**
26
+ * Convert a function to a queueable object.
27
+ * @param {Promise.resolve} resolve
28
+ * @param {Promise.reject} reject
29
+ * @param {Function} fn
30
+ * @param {...*} args
31
+ * @returns {queuedRunnable}
32
+ */
33
+ const makeQueuedRunnable = function (resolve, reject, fn) {
34
+ const generator = (function * () {
35
+ const item = yield
36
+ return typeof item.fn === 'function' ? resolve(item.fn(...item.args)) : reject(item)
37
+ }())
38
+ // Prepare the generator to be used on the subsequent call
39
+ generator.next()
40
+ for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
41
+ args[_key - 3] = arguments[_key]
42
+ }
43
+ return {
44
+ item: {
45
+ fn: fn,
46
+ args: args
47
+ },
48
+ generator: generator
30
49
  }
31
- const runNextItem = () => {
32
- if (!queue.empty() && !isRunning) {
33
- isRunning = true
34
- const toRun = queue.dequeue()
35
- if (toRun.generator && toRun.item) {
36
- // Ensure the returned result has both the generator and the item to be valid
37
- toRun.generator.next(toRun.item)
50
+ }
51
+ /**
52
+ * After an item is run, THEN run this function to reset isRunning
53
+ * @param {*} result
54
+ * @returns {*}
55
+ */
56
+ const postRun = result => {
57
+ isRunning = false
58
+ runNextItem()
59
+ return result
60
+ }
61
+ /**
62
+ * When ready, runs the next queued runnable generator.
63
+ * @returns {IteratorYieldResult|null}
64
+ */
65
+ const runNextItem = () => {
66
+ if (!isPaused && !queue.empty() && !isRunning) {
67
+ isRunning = true
68
+ let toRun = queue.dequeue()
69
+ if (typeof toRun === 'undefined' || toRun === null) {
70
+ return null
71
+ }
72
+ if (typeof toRun === 'function') {
73
+ new Promise((resolve, reject) => {
74
+ toRun = makeQueuedRunnable(resolve, reject, toRun)
75
+ runNextItem()
76
+ }).then(postRun)
77
+ }
78
+ if ('success' in toRun) {
79
+ // Some run responses return an object with 'success' property.
80
+ console.info(toRun.success)
81
+ return null
82
+ }
83
+ if (!toRun.generator || 'error' in toRun) {
84
+ // Some run responses return an object with an 'error' property
85
+ let errorMessage = 'Verify queued function implements "done()" state.'
86
+ if ('error' in toRun && toRun.error) {
87
+ errorMessage = `[${toRun.error}]: ${errorMessage}`
38
88
  }
89
+ throw new Error(errorMessage)
39
90
  }
40
- return queue
91
+ if (toRun.generator && toRun.item) {
92
+ // Ensure the returned result has both the generator and the item to be valid
93
+ return toRun.generator.next(toRun.item)
94
+ }
95
+ }
96
+ return null
97
+ }
98
+ /**
99
+ * Add a function into the queue to be run when ready.
100
+ * @param {Function} fn - The function to run when ready
101
+ * @param {...*} args - Optional arguments to apply when the function is ready to be run
102
+ * @returns Promise
103
+ */
104
+ const pushAnother = function (fn) {
105
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
106
+ args[_key2 - 1] = arguments[_key2]
41
107
  }
42
108
  return new Promise((resolve, reject) => {
43
- const generator = (function * () {
44
- const item = yield
45
- return typeof item.fn === 'function' ? resolve(item.fn(...item.args)) : reject(item)
46
- }())
47
- generator.next()
48
- queue.enqueue({
49
- item: {
50
- fn: fn,
51
- args: args
52
- },
53
- generator: generator
54
- })
109
+ queue.enqueue(makeQueuedRunnable(resolve, reject, fn, ...args))
55
110
  runNextItem()
56
- }).then(resolvedResult => {
57
- isRunning = false
111
+ }).then(postRun)
112
+ }
113
+ if (Array.isArray(queue)) {
114
+ const queueArray = queue
115
+ queue = (0, _makeBasicQueue.default)()
116
+ queueArray.forEach(queued => pushAnother(queued))
117
+ }
118
+ if (queue === null) {
119
+ queue = (0, _makeBasicQueue.default)()
120
+ }
121
+ runNextItem()
122
+ return {
123
+ start: () => {
124
+ isPaused = false
58
125
  runNextItem()
59
- return resolvedResult
60
- })
126
+ },
127
+ pause: () => {
128
+ isPaused = true
129
+ },
130
+ push: pushAnother
61
131
  }
62
132
  }
63
133
  var _default = exports.default = queueManager
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/stable"),require("regenerator-runtime/runtime");var _makeBasicQueue=_interopRequireDefault(require("./makeBasicQueue"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const queueManager=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;Array.isArray(e)&&(e=(0,_makeBasicQueue.default)(e)),null===e&&(e=(0,_makeBasicQueue.default)());let r=!1;return function(t){for(var u=arguments.length,n=new Array(u>1?u-1:0),a=1;a<u;a++)n[a-1]=arguments[a];const i=()=>{if(!e.empty()&&!r){r=!0;const t=e.dequeue();t.generator&&t.item&&t.generator.next(t.item)}return e};return new Promise(((r,u)=>{const a=function*(){const e=yield;return"function"==typeof e.fn?r(e.fn(...e.args)):u(e)}();a.next(),e.enqueue({item:{fn:t,args:n},generator:a}),i()})).then((e=>(r=!1,i(),e)))}};var _default=exports.default=queueManager;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/modules/esnext.async-iterator.for-each.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.for-each.js"),require("core-js/stable"),require("regenerator-runtime/runtime");var _makeBasicQueue=_interopRequireDefault(require("./makeBasicQueue"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const queueManager=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,r=!1,t=!0;const n=function(e,r,t){const n=function*(){const t=yield;return"function"==typeof t.fn?e(t.fn(...t.args)):r(t)}();n.next();for(var u=arguments.length,o=new Array(u>3?u-3:0),i=3;i<u;i++)o[i-3]=arguments[i];return{item:{fn:t,args:o},generator:n}},u=e=>(r=!1,o(),e),o=()=>{if(!t&&!e.empty()&&!r){r=!0;let t=e.dequeue();if(null==t)return null;if("function"==typeof t&&new Promise(((e,r)=>{t=n(e,r,t),o()})).then(u),"success"in t)return console.info(t.success),null;if(!t.generator||"error"in t){let e='Verify queued function implements "done()" state.';throw"error"in t&&t.error&&(e=`[${t.error}]: ${e}`),new Error(e)}if(t.generator&&t.item)return t.generator.next(t.item)}return null},i=function(r){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];return new Promise(((t,u)=>{e.enqueue(n(t,u,r,...i)),o()})).then(u)};if(Array.isArray(e)){const r=e;e=(0,_makeBasicQueue.default)(),r.forEach((e=>i(e)))}return null===e&&(e=(0,_makeBasicQueue.default)()),o(),{start:()=>{t=!1,o()},pause:()=>{t=!0},push:i}};var _default=exports.default=queueManager;
@@ -19,12 +19,13 @@ function _interopRequireDefault (obj) { return obj && obj.__esModule ? obj : { d
19
19
  const queueTimeout = function () {
20
20
  const queueManagerHandle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null
21
21
  const manager = queueManagerHandle || (0, _queueManager.default)()
22
+ manager.start()
22
23
  return function (fn) {
23
24
  const time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0
24
25
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
25
26
  args[_key - 2] = arguments[_key]
26
27
  }
27
- return manager(() => (0, _delay.default)(time).resolver.then(() => fn(...args)))
28
+ return manager.push(() => (0, _delay.default)(time).resolver.then(() => fn(...args)))
28
29
  }
29
30
  }
30
31
  var _default = exports.default = queueTimeout
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/stable"),require("regenerator-runtime/runtime");var _delay=_interopRequireDefault(require("./delay")),_queueManager=_interopRequireDefault(require("./queueManager"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const queueTimeout=function(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||(0,_queueManager.default)();return function(r){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var t=arguments.length,n=new Array(t>2?t-2:0),a=2;a<t;a++)n[a-2]=arguments[a];return e((()=>(0,_delay.default)(u).resolver.then((()=>r(...n)))))}};var _default=exports.default=queueTimeout;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,require("core-js/stable"),require("regenerator-runtime/runtime");var _delay=_interopRequireDefault(require("./delay")),_queueManager=_interopRequireDefault(require("./queueManager"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const queueTimeout=function(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||(0,_queueManager.default)();return e.start(),function(r){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var t=arguments.length,n=new Array(t>2?t-2:0),a=2;a<t;a++)n[a-2]=arguments[a];return e.push((()=>(0,_delay.default)(u).resolver.then((()=>r(...n)))))}};var _default=exports.default=queueTimeout;
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "general",
14
14
  "typescript"
15
15
  ],
16
- "version": "2.1.0",
16
+ "version": "2.2.2",
17
17
  "license": "GPL-3.0-or-later",
18
18
  "bugs": {
19
19
  "url": "https://github.com/jheagle/si-funciona/issues"
@@ -30,11 +30,12 @@
30
30
  "watch:test": "gulp watchTest"
31
31
  },
32
32
  "dependencies": {
33
- "npm": "^10.2.3"
33
+ "npm": "^10.2.5"
34
34
  },
35
35
  "devDependencies": {
36
+ "collect-your-stuff": "^1.1.5",
36
37
  "gulp": "^4.0.2",
37
- "js-build-tools": "^2.2.10",
38
+ "js-build-tools": "^2.2.12",
38
39
  "jsdoc": "^4.0.2",
39
40
  "standard": "^17.1.0"
40
41
  },