UNPKG

@vue-async/module-loader

Version:
216 lines 7.34 kB
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