@sunspirytus/xflow-hook 1.0.52

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/es/utils.js ADDED
@@ -0,0 +1,112 @@
1
+ import toposort from 'toposort';
2
+ export var ErrorUtils;
3
+ (function (ErrorUtils) {
4
+ let ErrorEnum;
5
+ (function (ErrorEnum) {
6
+ ErrorEnum["INVALID_HOOK_BEFORE"] = "INVALID_HOOK_BEFORE";
7
+ ErrorEnum["INVALID_HOOK_AFTER"] = "INVALID_HOOK_AFTER";
8
+ ErrorEnum["INVALID_HOOK_ARGS_LENGTH"] = "INVALID_HOOK_ARGS_LENGTH";
9
+ })(ErrorEnum = ErrorUtils.ErrorEnum || (ErrorUtils.ErrorEnum = {}));
10
+ class HookError extends Error {
11
+ constructor(code, message, ...contexts) {
12
+ if (Array.isArray(message)) {
13
+ message = message
14
+ .filter(function (line) {
15
+ return !!line;
16
+ })
17
+ .join(' ');
18
+ }
19
+ super(`${code}: ${message}`);
20
+ if (Error.captureStackTrace) {
21
+ ;
22
+ Error.captureStackTrace(this, HookError);
23
+ }
24
+ this.code = code;
25
+ this.contexts = {};
26
+ contexts.forEach(context => {
27
+ if (typeof context === 'object') {
28
+ Object.entries(context).forEach(pair => {
29
+ const [key, value] = pair;
30
+ if (key !== 'key' && value) {
31
+ this.contexts[key] = JSON.parse(JSON.stringify(value));
32
+ }
33
+ });
34
+ }
35
+ });
36
+ }
37
+ toString() {
38
+ return `${this.code}: ${this.message}`;
39
+ }
40
+ }
41
+ ErrorUtils.HookError = HookError;
42
+ const createError = (code, message, ...args) => {
43
+ return new HookError(code, message, ...args);
44
+ };
45
+ ErrorUtils.HookBeforeError = () => {
46
+ return createError(ErrorEnum.INVALID_HOOK_BEFORE, [
47
+ 'hook require a before dependency but not exist in hookmap',
48
+ ]);
49
+ };
50
+ ErrorUtils.HookAfterError = () => {
51
+ return createError(ErrorEnum.INVALID_HOOK_AFTER, [
52
+ 'hook require a after dependency but not exist in hookmap',
53
+ ]);
54
+ };
55
+ ErrorUtils.InvalidHookArguments = (hook) => {
56
+ return createError(ErrorEnum.INVALID_HOOK_ARGS_LENGTH, [
57
+ 'hook handlers must have 0 to 2 arguments',
58
+ `but got ${hook.handler.length}`,
59
+ ]);
60
+ };
61
+ })(ErrorUtils || (ErrorUtils = {}));
62
+ export var HookUtils;
63
+ (function (HookUtils) {
64
+ /** 处理 runtime hooks */
65
+ HookUtils.normalize = (hookConfig = [], hookMap) => {
66
+ const runtimeHook = Array.isArray(hookConfig) ? hookConfig : [hookConfig];
67
+ const innerHooks = [];
68
+ hookMap.forEach(val => {
69
+ innerHooks.push(val);
70
+ });
71
+ return [...innerHooks, ...runtimeHook].filter(item => item && !!item.handler);
72
+ };
73
+ /** 排序 hooks */
74
+ HookUtils.sort = (hooks = [], hookMap) => {
75
+ const edges = [];
76
+ hooks.forEach(hook => {
77
+ if (hook.before) {
78
+ if (!hookMap.has(hook.before)) {
79
+ throw ErrorUtils.HookBeforeError();
80
+ }
81
+ const edge = [hook, hookMap.get(hook.before)];
82
+ edges.push(edge);
83
+ }
84
+ if (hook.after) {
85
+ if (!hookMap.has(hook.after)) {
86
+ throw ErrorUtils.HookBeforeError();
87
+ }
88
+ const edge = [hookMap.get(hook.after), hook];
89
+ edges.push(edge);
90
+ }
91
+ });
92
+ const sortedHooks = toposort.array(hooks, edges);
93
+ return sortedHooks;
94
+ };
95
+ })(HookUtils || (HookUtils = {}));
96
+ export class Deferred {
97
+ constructor() {
98
+ this.isResolved = false;
99
+ this.isRejected = false;
100
+ this.promise = new Promise((resolve, reject) => {
101
+ this.resolve = args => {
102
+ this.isResolved = true;
103
+ resolve(args);
104
+ };
105
+ this.reject = args => {
106
+ this.isRejected = true;
107
+ reject(args);
108
+ };
109
+ });
110
+ }
111
+ }
112
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,MAAM,KAAW,UAAU,CA0D1B;AA1DD,WAAiB,UAAU;IACzB,IAAY,SAIX;IAJD,WAAY,SAAS;QACnB,wDAA6C,CAAA;QAC7C,sDAA2C,CAAA;QAC3C,kEAAuD,CAAA;IACzD,CAAC,EAJW,SAAS,GAAT,oBAAS,KAAT,oBAAS,QAIpB;IAED,MAAa,SAAU,SAAQ,KAAK;QAGlC,YAAY,IAAY,EAAE,OAA0B,EAAE,GAAG,QAAe;YACtE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,OAAO,GAAG,OAAO;qBACd,MAAM,CAAC,UAAU,IAAI;oBACpB,OAAO,CAAC,CAAC,IAAI,CAAA;gBACf,CAAC,CAAC;qBACD,IAAI,CAAC,GAAG,CAAC,CAAA;aACb;YACD,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAA;YAC5B,IAAK,KAAa,CAAC,iBAAiB,EAAE;gBACpC,CAAC;gBAAC,KAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;aACnD;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;YAClB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;oBAC/B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBACrC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;wBACzB,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,EAAE;4BAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;yBACvD;oBACH,CAAC,CAAC,CAAA;iBACH;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,QAAQ;YACN,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAA;QACxC,CAAC;KACF;IA/BY,oBAAS,YA+BrB,CAAA;IACD,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,OAAiB,EAAE,GAAG,IAAW,EAAE,EAAE;QACtE,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAA;IACY,0BAAe,GAAG,GAAG,EAAE;QAClC,OAAO,WAAW,CAAC,SAAS,CAAC,mBAAmB,EAAE;YAChD,2DAA2D;SAC5D,CAAC,CAAA;IACJ,CAAC,CAAA;IACY,yBAAc,GAAG,GAAG,EAAE;QACjC,OAAO,WAAW,CAAC,SAAS,CAAC,kBAAkB,EAAE;YAC/C,0DAA0D;SAC3D,CAAC,CAAA;IACJ,CAAC,CAAA;IACY,+BAAoB,GAAG,CAAC,IAAW,EAAE,EAAE;QAClD,OAAO,WAAW,CAAC,SAAS,CAAC,wBAAwB,EAAE;YACrD,0CAA0C;YAC1C,WAAW,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;SACjC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC,EA1DgB,UAAU,KAAV,UAAU,QA0D1B;AAED,MAAM,KAAW,SAAS,CAoCzB;AApCD,WAAiB,SAAS;IACxB,uBAAuB;IACV,mBAAS,GAAG,CACvB,aAA8B,EAAE,EAChC,OAA2B,EAClB,EAAE;QACX,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QACzE,MAAM,UAAU,GAAY,EAAE,CAAA;QAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/E,CAAC,CAAA;IACD,eAAe;IACF,cAAI,GAAG,CAAC,QAAiB,EAAE,EAAE,OAA2B,EAAW,EAAE;QAChF,MAAM,KAAK,GAAqB,EAAE,CAAA;QAClC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBAC7B,MAAM,UAAU,CAAC,eAAe,EAAE,CAAA;iBACnC;gBACD,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAmB,CAAA;gBAC/D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACjB;YACD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAC5B,MAAM,UAAU,CAAC,eAAe,EAAE,CAAA;iBACnC;gBACD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAmB,CAAA;gBAC9D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACjB;QACH,CAAC,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAChD,OAAO,WAAW,CAAA;IACpB,CAAC,CAAA;AACH,CAAC,EApCgB,SAAS,KAAT,SAAS,QAoCzB;AAED,MAAM,OAAO,QAAQ;IAWnB;QAVA,eAAU,GAAY,KAAK,CAAA;QAE3B,eAAU,GAAY,KAAK,CAAA;QASzB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;gBACtB,OAAO,CAAC,IAAI,CAAC,CAAA;YACf,CAAC,CAAA;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;gBACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;gBACtB,MAAM,CAAC,IAAI,CAAC,CAAA;YACd,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,107 @@
1
+ import { __awaiter } from "tslib";
2
+ import { HookUtils, ErrorUtils, Deferred } from './utils';
3
+ describe('sort utils', () => {
4
+ test('it should sort hooks when use IHook after attributes', () => {
5
+ const mockHandler = () => __awaiter(void 0, void 0, void 0, function* () { });
6
+ const hook1 = { name: 'hook1', handler: mockHandler, after: 'hook2' };
7
+ const hook2 = { name: 'hook2', handler: mockHandler, after: 'hook3' };
8
+ const hook3 = { name: 'hook3', handler: mockHandler, after: 'hook4' };
9
+ const hook4 = { name: 'hook4', handler: mockHandler, after: 'hook5' };
10
+ const hook5 = { name: 'hook5', handler: mockHandler };
11
+ const hooks = [hook1, hook2, hook3, hook4, hook5];
12
+ const hookMap = new Map();
13
+ hookMap.set('hook1', hook1);
14
+ hookMap.set('hook2', hook2);
15
+ hookMap.set('hook3', hook3);
16
+ hookMap.set('hook4', hook4);
17
+ hookMap.set('hook5', hook5);
18
+ expect(HookUtils.sort(hooks, hookMap)).toEqual([hook5, hook4, hook3, hook2, hook1]);
19
+ });
20
+ test('it should sort hooks when use IHook before attributes', () => {
21
+ const mockHandler = () => __awaiter(void 0, void 0, void 0, function* () { });
22
+ const hook1 = { name: 'hook1', handler: mockHandler };
23
+ const hook2 = { name: 'hook2', handler: mockHandler, before: 'hook1' };
24
+ const hook3 = { name: 'hook3', handler: mockHandler, before: 'hook2' };
25
+ const hook4 = { name: 'hook4', handler: mockHandler, before: 'hook3' };
26
+ const hook5 = { name: 'hook5', handler: mockHandler, before: 'hook4' };
27
+ const hooks = [hook1, hook2, hook3, hook4, hook5];
28
+ const hookMap = new Map();
29
+ hookMap.set('hook1', hook1);
30
+ hookMap.set('hook2', hook2);
31
+ hookMap.set('hook3', hook3);
32
+ hookMap.set('hook4', hook4);
33
+ hookMap.set('hook5', hook5);
34
+ expect(HookUtils.sort(hooks, hookMap)).toEqual([hook5, hook4, hook3, hook2, hook1]);
35
+ });
36
+ });
37
+ describe('err utils test', () => {
38
+ test('it can create error with context', () => {
39
+ // given
40
+ const code = 'MY ERROR';
41
+ const message = 'error message string';
42
+ const context = { a: 1, b: 2 };
43
+ // when
44
+ const err = new ErrorUtils.HookError(code, message, context);
45
+ //then
46
+ expect(err instanceof Error).toBe(true);
47
+ expect(err.message).toEqual('MY ERROR: error message string');
48
+ expect(err.contexts.a).toEqual(1);
49
+ expect(err.contexts.b).toEqual(2);
50
+ });
51
+ test('it can create hook argument error', () => {
52
+ // given
53
+ const mockHandler = () => __awaiter(void 0, void 0, void 0, function* () { });
54
+ const hook1 = { name: 'hook1', handler: mockHandler };
55
+ // when
56
+ const err = ErrorUtils.InvalidHookArguments(hook1);
57
+ //then
58
+ expect(err instanceof Error).toBe(true);
59
+ expect(err.message).toEqual('INVALID_HOOK_ARGS_LENGTH: hook handlers must have 0 to 2 arguments but got 0');
60
+ });
61
+ test('it can create hook argument error', () => {
62
+ // given & when
63
+ const err = ErrorUtils.HookBeforeError();
64
+ //then
65
+ expect(err instanceof Error).toBe(true);
66
+ expect(err.message).toEqual('INVALID_HOOK_BEFORE: hook require a before dependency but not exist in hookmap');
67
+ });
68
+ test('it can create hook argument error', () => {
69
+ // given & when
70
+ const err = ErrorUtils.HookAfterError();
71
+ //then
72
+ expect(err instanceof Error).toBe(true);
73
+ expect(err.message).toEqual('INVALID_HOOK_AFTER: hook require a after dependency but not exist in hookmap');
74
+ });
75
+ });
76
+ describe('Deferred utils', () => {
77
+ test('Deferred should resolve value async', () => __awaiter(void 0, void 0, void 0, function* () {
78
+ // given
79
+ const booleanDefer = new Deferred();
80
+ // when
81
+ setTimeout(() => {
82
+ booleanDefer.resolve('successs');
83
+ }, 0);
84
+ const value = yield booleanDefer.promise;
85
+ // then
86
+ expect(value).toBe('successs');
87
+ expect(booleanDefer.isResolved).toBe(true);
88
+ expect(booleanDefer.isRejected).toBe(false);
89
+ }));
90
+ test('Deferred should reject value async', () => __awaiter(void 0, void 0, void 0, function* () {
91
+ // given
92
+ const booleanDefer = new Deferred();
93
+ // when
94
+ setTimeout(() => {
95
+ booleanDefer.reject('error');
96
+ }, 0);
97
+ try {
98
+ yield booleanDefer.promise;
99
+ }
100
+ catch (error) {
101
+ expect(error).toBe('error');
102
+ expect(booleanDefer.isResolved).toBe(false);
103
+ expect(booleanDefer.isRejected).toBe(true);
104
+ }
105
+ }));
106
+ });
107
+ //# sourceMappingURL=utils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../src/utils.spec.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import type { Disposable, IHook, IHookHub, IRuntimeHook, ScheduleOptions } from './interface';
2
+ export { ScheduleTypeEnum } from './interface';
3
+ export type { Disposable, IHook, IHookHub, IRuntimeHook, IMainHandler, ScheduleOptions, } from './interface';
4
+ export declare class HookHub<Args = any, Result = Args | null> implements IHookHub<Args, Result> {
5
+ /** hooks */
6
+ private hookMap;
7
+ /** scheduleType */
8
+ private scheduleType;
9
+ constructor(options?: ScheduleOptions);
10
+ /** hasRegistered */
11
+ hasHook: (hookName: string) => boolean;
12
+ /** getHooks */
13
+ getHooks: (runtimeHooks?: IRuntimeHook<Args, Result>, sort?: boolean) => IHook<Args, Result>[];
14
+ /** registerHook */
15
+ registerHook: (hookMeta: IHook<Args, Result>) => Disposable;
16
+ /** registerHook */
17
+ call: (args: Args, main?: (mainArgs: Args) => Promise<Result>, runtimeHook?: IRuntimeHook<Args, Result>) => Promise<Result | undefined>;
18
+ /** 执行hook的scheduler */
19
+ private schedulers;
20
+ }
package/lib/index.js ADDED
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HookHub = exports.ScheduleTypeEnum = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var interface_1 = require("./interface");
6
+ var utils_1 = require("./utils");
7
+ var interface_2 = require("./interface");
8
+ Object.defineProperty(exports, "ScheduleTypeEnum", { enumerable: true, get: function () { return interface_2.ScheduleTypeEnum; } });
9
+ var HookHub = /** @class */ (function () {
10
+ function HookHub(options) {
11
+ var _a;
12
+ var _this = this;
13
+ /** scheduleType */
14
+ this.scheduleType = interface_1.ScheduleTypeEnum.ASYNC_SRRIES;
15
+ /** hasRegistered */
16
+ this.hasHook = function (hookName) {
17
+ return _this.hookMap.has(hookName);
18
+ };
19
+ /** getHooks */
20
+ this.getHooks = function (runtimeHooks, sort) {
21
+ if (runtimeHooks === void 0) { runtimeHooks = []; }
22
+ if (sort === void 0) { sort = true; }
23
+ var hooks = utils_1.HookUtils.normalize(runtimeHooks, _this.hookMap);
24
+ if (!sort) {
25
+ return hooks;
26
+ }
27
+ return utils_1.HookUtils.sort(hooks, _this.hookMap);
28
+ };
29
+ /** registerHook */
30
+ this.registerHook = function (hookMeta) {
31
+ if (_this.hookMap.has(hookMeta.name)) {
32
+ console.error("".concat(hookMeta.name, " is duplicated in hookmap"));
33
+ }
34
+ _this.hookMap.set(hookMeta.name, hookMeta);
35
+ return {
36
+ dispose: function () {
37
+ _this.hookMap.delete(hookMeta.name);
38
+ },
39
+ };
40
+ };
41
+ /** registerHook */
42
+ this.call = function (args, main, runtimeHook) {
43
+ if (main === void 0) { main = function (mainArgs) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
44
+ return [2 /*return*/, mainArgs];
45
+ }); }); }; }
46
+ if (runtimeHook === void 0) { runtimeHook = []; }
47
+ return tslib_1.__awaiter(_this, void 0, void 0, function () {
48
+ var hooks, scheduler;
49
+ return tslib_1.__generator(this, function (_a) {
50
+ hooks = this.getHooks(runtimeHook, true);
51
+ scheduler = this.schedulers[this.scheduleType];
52
+ return [2 /*return*/, scheduler(args, main, hooks)];
53
+ });
54
+ });
55
+ };
56
+ /** 执行hook的scheduler */
57
+ this.schedulers = (_a = {},
58
+ /** pipeline执行 */
59
+ _a[interface_1.ScheduleTypeEnum.ASYNC_SRRIES] = function (args, main, hooks) {
60
+ if (hooks === void 0) { hooks = []; }
61
+ return tslib_1.__awaiter(_this, void 0, void 0, function () {
62
+ var callback, _i, hooks_1, hook, result, err;
63
+ return tslib_1.__generator(this, function (_a) {
64
+ switch (_a.label) {
65
+ case 0:
66
+ callback = main;
67
+ _i = 0, hooks_1 = hooks;
68
+ _a.label = 1;
69
+ case 1:
70
+ if (!(_i < hooks_1.length)) return [3 /*break*/, 7];
71
+ hook = hooks_1[_i];
72
+ if (![0, 1].includes(hook.handler.length)) return [3 /*break*/, 3];
73
+ return [4 /*yield*/, hook.handler.call(this, args)];
74
+ case 2:
75
+ _a.sent();
76
+ return [3 /*break*/, 6];
77
+ case 3:
78
+ if (!([2].includes(hook.handler.length) && callback !== null)) return [3 /*break*/, 5];
79
+ return [4 /*yield*/, hook.handler.call(this, args, callback)
80
+ /** 如果返回为null,则直接中断执行 */
81
+ ];
82
+ case 4:
83
+ result = _a.sent();
84
+ /** 如果返回为null,则直接中断执行 */
85
+ if (result === null) {
86
+ callback = null;
87
+ return [3 /*break*/, 7];
88
+ }
89
+ else if (typeof result === 'function') {
90
+ callback = result;
91
+ return [3 /*break*/, 6];
92
+ }
93
+ _a.label = 5;
94
+ case 5:
95
+ err = utils_1.ErrorUtils.InvalidHookArguments(hook);
96
+ throw err;
97
+ case 6:
98
+ _i++;
99
+ return [3 /*break*/, 1];
100
+ case 7:
101
+ if (!callback) return [3 /*break*/, 9];
102
+ return [4 /*yield*/, callback.call(this, args)];
103
+ case 8: return [2 /*return*/, _a.sent()];
104
+ case 9: return [2 /*return*/];
105
+ }
106
+ });
107
+ });
108
+ },
109
+ _a[interface_1.ScheduleTypeEnum.ASYNC_PARALLEL] = function (args, main, hooks) {
110
+ if (hooks === void 0) { hooks = []; }
111
+ return tslib_1.__awaiter(_this, void 0, void 0, function () {
112
+ var promises, defer;
113
+ var _this = this;
114
+ return tslib_1.__generator(this, function (_a) {
115
+ switch (_a.label) {
116
+ case 0:
117
+ promises = hooks.map(function (hook) {
118
+ if ([0, 1].includes(hook.handler.length)) {
119
+ return hook.handler.call(_this, args);
120
+ }
121
+ if ([2].includes(hook.handler.length)) {
122
+ return hook.handler.call(_this, args, main);
123
+ }
124
+ throw utils_1.ErrorUtils.InvalidHookArguments(hook);
125
+ });
126
+ defer = new utils_1.Deferred();
127
+ Promise.all(promises).then(function (res) { return defer.resolve(res); });
128
+ if (!main) return [3 /*break*/, 2];
129
+ return [4 /*yield*/, main.call(this, defer)];
130
+ case 1: return [2 /*return*/, _a.sent()];
131
+ case 2: return [2 /*return*/];
132
+ }
133
+ });
134
+ });
135
+ },
136
+ _a);
137
+ this.hookMap = new Map();
138
+ if (options && options.type) {
139
+ this.scheduleType = options.type;
140
+ }
141
+ }
142
+ return HookHub;
143
+ }());
144
+ exports.HookHub = HookHub;
145
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};