si-funciona 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -0
- package/browser/siFunciona.js +605 -408
- package/browser/siFunciona.min.js +1 -1
- package/dist/helpers/functions/onBodyLoad.js +2 -1
- package/dist/helpers/functions/onBodyLoad.min.js +1 -1
- package/dist/helpers/functions/queueManager.d.ts +29 -2
- package/dist/helpers/functions/queueManager.js +103 -33
- package/dist/helpers/functions/queueManager.min.js +1 -1
- package/dist/helpers/functions/queueTimeout.js +2 -1
- package/dist/helpers/functions/queueTimeout.min.js +1 -1
- package/package.json +4 -3
|
@@ -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
|
|
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 {
|
|
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
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
57
|
-
|
|
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
|
-
|
|
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;
|
|
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.
|
|
16
|
+
"version": "2.2.0",
|
|
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.
|
|
33
|
+
"npm": "^10.2.5"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
+
"collect-your-stuff": "^1.1.2",
|
|
36
37
|
"gulp": "^4.0.2",
|
|
37
|
-
"js-build-tools": "^2.2.
|
|
38
|
+
"js-build-tools": "^2.2.11",
|
|
38
39
|
"jsdoc": "^4.0.2",
|
|
39
40
|
"standard": "^17.1.0"
|
|
40
41
|
},
|