@vue-async/module-loader
Version:
Module Loader Core.
216 lines • 7.34 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
import warning from 'warning';
import { hasOwn, isObject } from '@ace-util/core';
// function sortBy(name: string, order: 'ASC' | 'DESC' = 'ASC') {
// return function(o: Dictionary<any>, p: Dictionary<any>) {
// let a, b;
// if (typeof o === 'object' && typeof p === 'object' && o && p) {
// a = o[name];
// b = p[name];
// if (a === b) {
// return 0;
// }
// if (typeof a === typeof b) {
// const result = a < b ? -1 : 1;
// return order === 'DESC' ? ~result + 1 : result;
// }
// const result = typeof a < typeof b ? -1 : 1;
// return order === 'DESC' ? ~result + 1 : result;
// } else {
// throw 'error';
// }
// };
// }
var POHook = /** @class */ (function () {
function POHook() {
this.callbacks = {};
this.doingAction = false;
}
POHook.buildPreinitializedHook = function (filters) {
var normalized = {};
var _loop_1 = function (tag) {
var filter = filters[tag];
if (isObject(filter) && filter instanceof POHook) {
normalized[tag] = filter;
return "continue";
}
var hook = new POHook();
var _loop_2 = function (priority) {
var cbs = filter[priority];
cbs.forEach(function (cb) {
hook.addFilter(cb.func, priority, cb.acceptedArgs);
});
};
for (var priority in filter) {
_loop_2(priority);
}
normalized[tag] = hook;
};
for (var tag in filters) {
_loop_1(tag);
}
return normalized;
};
Object.defineProperty(POHook.prototype, "filters", {
get: function () {
return this.callbacks;
},
enumerable: false,
configurable: true
});
/**
* Check if any filter has been registered
* @since
*
*/
POHook.prototype.hasFilter = function (functionToCheck) {
if (functionToCheck === void 0) { functionToCheck = false; }
var funcs = Object.entries(this.callbacks).reduce(function (prev, _a) {
var _b = __read(_a, 2), _priority = _b[0], callbacks = _b[1];
return prev.concat(callbacks);
}, []);
if (typeof functionToCheck === 'boolean') {
return funcs.length > 0;
}
else {
var cb = funcs.find(function (_a) {
var func = _a.func;
return func === functionToCheck;
});
return cb ? cb.func : false;
}
};
/**
* Add filter
* @since
*
*/
POHook.prototype.addFilter = function (callback, priority, acceptedArgs) {
if (priority === void 0) { priority = 10; }
if (acceptedArgs === void 0) { acceptedArgs = 1; }
if (!hasOwn(this.callbacks, priority)) {
this.callbacks[priority] = [];
}
this.callbacks[priority].push({
func: callback,
acceptedArgs: acceptedArgs,
});
};
/**
* Remove filter
* @since
*
*/
POHook.prototype.removeFilter = function (functionToRemove, priority) {
if (priority === void 0) { priority = 10; }
if (hasOwn(this.callbacks, priority)) {
var index = this.callbacks[priority].findIndex(function (_a) {
var func = _a.func;
return func === functionToRemove;
});
index >= 0 && this.callbacks[priority].splice(index, 1);
return index >= 0;
}
else {
return false;
}
};
/**
* Remove filter
* @since
*
*/
POHook.prototype.removeAllFilters = function (priority) {
if (priority === void 0) { priority = false; }
if (typeof priority === 'boolean') {
this.callbacks = {};
}
else if (hasOwn(this.callbacks, priority)) {
this.callbacks[priority] = [];
}
else {
warning(process.env.NDE_ENV === 'production', "priority \"".concat(priority, "\" is not exists , no filiters will be removed."));
}
};
POHook.prototype.applyFilters = function (value) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var sortFuncs = Object.entries(this.callbacks)
.sort(function (_a, _b) {
var _c = __read(_a, 1), a = _c[0];
var _d = __read(_b, 1), b = _d[0];
return Number(a) - Number(b);
})
.reduce(function (prev, _a) {
var _b = __read(_a, 2), _priority = _b[0], callbacks = _b[1];
return prev.concat(callbacks);
}, []);
if (sortFuncs.length) {
var _doingAction_1 = this.doingAction;
return new Promise(function (resolve) { return exec(0, value, resolve); });
// @ts-ignore
function exec(index, value, resolve) {
var cb = sortFuncs[index];
var _args = __spreadArray([], __read(args), false);
if (!_doingAction_1) {
_args.unshift(value);
}
var result = cb.func.apply(null, _args.slice(0, cb.acceptedArgs));
if (index === sortFuncs.length - 1) {
result instanceof Promise ? result.then(resolve) : resolve(result);
}
else if (result instanceof Promise) {
result.then(function (val) { return exec(index + 1, val, resolve); });
}
else {
exec(index + 1, result, resolve);
}
}
}
return Promise.resolve(value);
};
POHook.prototype.doAction = function () {
var _this = this;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
this.doingAction = true;
return new Promise(function (resolve, reject) {
_this.applyFilters.apply(_this, __spreadArray([''], __read(args), false)).then(function () {
//
_this.doingAction = false;
resolve();
}, reject);
});
};
return POHook;
}());
export default POHook;
//# sourceMappingURL=hook.js.map