@shuvi/hook 0.0.1-rc.34 → 1.0.0-rc.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.
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createHookManager = exports.isPluginInstance = exports.SYNC_PLUGIN_SYMBOL = exports.DEFAULT_OPTIONS = void 0;
4
+ const hooks_1 = require("./hooks");
5
+ exports.DEFAULT_OPTIONS = {
6
+ name: 'untitled',
7
+ pre: [],
8
+ post: [],
9
+ rivals: [],
10
+ required: [],
11
+ order: 0
12
+ };
13
+ exports.SYNC_PLUGIN_SYMBOL = 'SYNC_PLUGIN_SYMBOL';
14
+ const isPluginInstance = (plugin) => plugin &&
15
+ plugin.hasOwnProperty(exports.SYNC_PLUGIN_SYMBOL) &&
16
+ plugin.SYNC_PLUGIN_SYMBOL === exports.SYNC_PLUGIN_SYMBOL;
17
+ exports.isPluginInstance = isPluginInstance;
18
+ const sortPlugins = (input) => {
19
+ let plugins = input.slice();
20
+ plugins.sort((a, b) => a.order - b.order);
21
+ for (let i = 0; i < plugins.length; i++) {
22
+ let plugin = plugins[i];
23
+ if (plugin.pre) {
24
+ for (const pre of plugin.pre) {
25
+ for (let j = i + 1; j < plugins.length; j++) {
26
+ if (plugins[j].name === pre) {
27
+ plugins = [
28
+ ...plugins.slice(0, i),
29
+ plugins[j],
30
+ ...plugins.slice(i, j),
31
+ ...plugins.slice(j + 1, plugins.length)
32
+ ];
33
+ }
34
+ }
35
+ }
36
+ }
37
+ if (plugin.post) {
38
+ for (const post of plugin.post) {
39
+ for (let j = 0; j < i; j++) {
40
+ if (plugins[j].name === post) {
41
+ plugins = [
42
+ ...plugins.slice(0, j),
43
+ ...plugins.slice(j + 1, i + 1),
44
+ plugins[j],
45
+ ...plugins.slice(i + 1, plugins.length)
46
+ ];
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+ return plugins;
53
+ };
54
+ const checkPlugins = (plugins) => {
55
+ for (const origin of plugins) {
56
+ if (origin.rivals) {
57
+ for (const rival of origin.rivals) {
58
+ for (const plugin of plugins) {
59
+ if (rival === plugin.name) {
60
+ throw new Error(`${origin.name} has rival ${plugin.name}`);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ if (origin.required) {
66
+ for (const required of origin.required) {
67
+ if (!plugins.some(plugin => plugin.name === required)) {
68
+ throw new Error(`The plugin: ${required} is required when plugin: ${origin.name} is exist.`);
69
+ }
70
+ }
71
+ }
72
+ }
73
+ };
74
+ function uuid() {
75
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
76
+ var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;
77
+ return v.toString(16);
78
+ });
79
+ }
80
+ const copyHookMap = (hookMap) => {
81
+ const newHookMap = {};
82
+ for (const hookName in hookMap) {
83
+ const hook = hookMap[hookName];
84
+ switch (hook === null || hook === void 0 ? void 0 : hook.type) {
85
+ case 'SyncHook':
86
+ newHookMap[hookName] = (0, hooks_1.createSyncHook)();
87
+ break;
88
+ case 'SyncBailHook':
89
+ newHookMap[hookName] = (0, hooks_1.createSyncBailHook)();
90
+ break;
91
+ case 'SyncWaterfallHook':
92
+ newHookMap[hookName] = (0, hooks_1.createSyncWaterfallHook)();
93
+ break;
94
+ case 'AsyncParallelHook':
95
+ newHookMap[hookName] = (0, hooks_1.createAsyncParallelHook)();
96
+ break;
97
+ case 'AsyncSeriesWaterfallHook':
98
+ newHookMap[hookName] = (0, hooks_1.createAsyncSeriesWaterfallHook)();
99
+ break;
100
+ default:
101
+ }
102
+ }
103
+ return newHookMap;
104
+ };
105
+ const createHookManager = (hookMap, hasContext = true) => {
106
+ const setupHook = (0, hooks_1.createSyncHook)();
107
+ const _hookMap = Object.assign(Object.assign({}, copyHookMap(hookMap)), { setup: setupHook });
108
+ let _plugins = [];
109
+ let _hookHandlers = {};
110
+ let _internalRunners = {};
111
+ let _context;
112
+ let _initiated = false;
113
+ const init = () => {
114
+ load();
115
+ const setupRunner = getRunner('setup');
116
+ setupRunner({ addHooks });
117
+ };
118
+ const createPlugin = (pluginHandlers, options = {}) => {
119
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, exports.DEFAULT_OPTIONS), { name: `plugin-id-${uuid()}` }), options), { handlers: pluginHandlers, SYNC_PLUGIN_SYMBOL: exports.SYNC_PLUGIN_SYMBOL });
120
+ };
121
+ const usePlugin = (...plugins) => {
122
+ if (_initiated) {
123
+ return;
124
+ }
125
+ _plugins.push(...plugins);
126
+ };
127
+ const load = () => {
128
+ let plugins = _plugins;
129
+ plugins = sortPlugins(plugins);
130
+ checkPlugins(plugins);
131
+ plugins.forEach(plugin => {
132
+ const handlers = plugin.handlers;
133
+ let hookName;
134
+ for (hookName in handlers) {
135
+ if (!_hookHandlers[hookName]) {
136
+ _hookHandlers[hookName] = [];
137
+ }
138
+ _hookHandlers[hookName].push(handlers[hookName]);
139
+ }
140
+ });
141
+ };
142
+ const setContext = (context) => {
143
+ _context = context;
144
+ };
145
+ const hooks = _hookMap;
146
+ const clear = () => {
147
+ Object.values(_hookMap).forEach(cur => {
148
+ cur.clear();
149
+ });
150
+ _plugins = [];
151
+ _hookHandlers = {};
152
+ _internalRunners = {};
153
+ _initiated = false;
154
+ };
155
+ const addHooks = (extraHookMap) => {
156
+ const extraHookMapNew = copyHookMap(extraHookMap);
157
+ for (const hookName in extraHookMapNew) {
158
+ // connot override existed hooks
159
+ if (!_hookMap[hookName]) {
160
+ //@ts-ignore
161
+ _hookMap[hookName] = extraHookMapNew[hookName];
162
+ if (_internalRunners[hookName]) {
163
+ delete _internalRunners[hookName];
164
+ }
165
+ }
166
+ else {
167
+ console.log('has been added', hookName);
168
+ }
169
+ }
170
+ };
171
+ const getRunner = (hookName) => {
172
+ if (_internalRunners[hookName]) {
173
+ return _internalRunners[hookName];
174
+ }
175
+ const currentRunner = getSingerRunner(hookName);
176
+ _internalRunners[hookName] = currentRunner;
177
+ return currentRunner;
178
+ };
179
+ const getSingerRunner = (hookName) => {
180
+ let used = false;
181
+ const hook = _hookMap[hookName];
182
+ const handlers = _hookHandlers[hookName] || [];
183
+ if (!hook)
184
+ return () => { };
185
+ const isSetupHook = hookName === 'setup';
186
+ if (isSetupHook) {
187
+ return (util) => {
188
+ let setupDone = false;
189
+ if (!used) {
190
+ hook.use(...handlers);
191
+ // every time setup hook runs, set setupDone to true at the end
192
+ // to make sure util methods cannot be used outside of the hook
193
+ hook.use(() => {
194
+ setupDone = true;
195
+ });
196
+ used = true;
197
+ }
198
+ const getDisposableFunctionProxy = (func) => new Proxy(func, {
199
+ apply(target, thisArg, argArray) {
200
+ if (setupDone) {
201
+ return;
202
+ }
203
+ return target.apply(thisArg, argArray);
204
+ }
205
+ });
206
+ const wrappedUtil = Object.assign({}, util);
207
+ for (let key in wrappedUtil) {
208
+ if (typeof wrappedUtil[key] === 'function') {
209
+ wrappedUtil[key] = getDisposableFunctionProxy(wrappedUtil[key]);
210
+ }
211
+ }
212
+ // @ts-ignore
213
+ return hook.run(wrappedUtil);
214
+ };
215
+ }
216
+ return (...args) => {
217
+ if (!used) {
218
+ hook.use(...handlers);
219
+ used = true;
220
+ }
221
+ if (hasContext && !_context) {
222
+ throw new Error(`Context not set. Hook ${String(hookName)} running failed.`);
223
+ }
224
+ // @ts-ignore
225
+ return hook.run(...args, _context);
226
+ };
227
+ };
228
+ const runnerProxy = new Proxy({}, {
229
+ get(_, prop) {
230
+ if (!_initiated) {
231
+ init();
232
+ _initiated = true;
233
+ }
234
+ return getRunner(prop);
235
+ }
236
+ });
237
+ return {
238
+ createPlugin,
239
+ usePlugin,
240
+ runner: runnerProxy,
241
+ clear,
242
+ addHooks,
243
+ hooks,
244
+ setContext,
245
+ getPlugins: () => _plugins
246
+ };
247
+ };
248
+ exports.createHookManager = createHookManager;
package/lib/hooks.d.ts ADDED
@@ -0,0 +1,57 @@
1
+ export declare type HookRunnerFromHandler<T> = T extends (...args: infer A) => infer R ? void extends R ? (...args: A) => void : (...args: A) => R[] : T;
2
+ export declare type RemoveVoidParameter<T> = T extends (initalValue: infer I, extraArg: infer E) => infer R ? null extends I ? null extends E ? (initialValue: I, extraArg: E) => R : void extends E ? (initialValue: I) => R : (initialValue: I, extraArg: E) => R : void extends I ? null extends E ? (extraArg: E) => R : void extends E ? () => R : (extraArg: E) => R : null extends E ? (initialValue: I, extraArg: E) => R : void extends E ? (initialValue: I) => R : (initialValue: I, extraArg: E) => R : T;
3
+ export declare type RemoveVoidParameterBackup<T> = T extends (initalValue: infer I, extraArg: infer E) => infer R ? I extends void ? I extends void ? E extends void ? E extends void ? () => R : (extraArg: E) => R : (extraArg: E) => R : E extends void ? E extends void ? () => R : (initalValue: I, extraArg: E) => R : (initalValue: I, extraArg: E) => R : E extends void ? E extends void ? (initalValue: I) => R : (initalValue: I, extradddArg: E) => R : (initalValue: I, extraArg: E) => R : T;
4
+ export declare type Remove3VoidParameter<T> = T extends (initalValue: infer I, extraArg: infer E, context: infer C) => infer R ? I extends void ? I extends void ? E extends void ? E extends void ? C extends void ? C extends void ? 'C无' : 'C为any' : 'C有' : (extraArg: E) => R : (extraArg: E) => R : E extends void ? E extends void ? () => R : (initalValue: I, extraArg: E) => R : (initalValue: I, extraArg: E) => R : 'I有' : T;
5
+ export declare type SyncHookHandler<I, E, R> = (initalValue: I, extraArg: E) => R;
6
+ export declare type SyncBailHookHandler<I, E, R> = (initalValue: I, extraArg: E) => R | undefined | void;
7
+ export declare type SyncWaterfallHookHandler<I, E> = (initalValue: I, extraArgs: E) => I;
8
+ export declare type AsyncSeriesWaterfallHookHandler<I, E> = (initalValue: I, extraArg: E) => Promise<I> | I;
9
+ export declare type AsyncParallelHookHandler<I, E, R> = (initalValue: I, extraArgs: E) => Promise<R> | R;
10
+ /** Normal hook. */
11
+ export declare type SyncHook<I = void, E = void, R = void> = {
12
+ use: (...handlers: RemoveVoidParameter<SyncHookHandler<I, E, R>>[]) => void;
13
+ run: RemoveVoidParameter<(initalValue: I, extraArg: E) => R[]>;
14
+ clear: () => void;
15
+ type: string;
16
+ };
17
+ /** Has return value with `any` type */
18
+ export declare type SyncBailHook<I = void, E = void, R = I> = {
19
+ use: (...handlers: RemoveVoidParameter<SyncBailHookHandler<I, E, R>>[]) => void;
20
+ run: RemoveVoidParameter<SyncBailHookHandler<I, E, R>>;
21
+ clear: () => void;
22
+ type: string;
23
+ };
24
+ /** Has return value with given type */
25
+ export declare type SyncWaterfallHook<I, E = void> = {
26
+ use: (...handlers: RemoveVoidParameter<SyncWaterfallHookHandler<I, E>>[]) => void;
27
+ run: RemoveVoidParameter<SyncWaterfallHookHandler<I, E>>;
28
+ clear: () => void;
29
+ type: string;
30
+ };
31
+ /** Normal async hook. No return value
32
+ *
33
+ * RemoveVoidParameter<(
34
+ null extends R ?
35
+ (R extends void ? ((initalValue: I, extraArg: E) => Promise<R[]>) :
36
+ ((initalValue: I, extraArg: E) => Promise<R[]>)) :
37
+ ((initalValue: I, extraArg: E) => Promise<R[]>)
38
+ )>
39
+ */
40
+ export declare type AsyncParallelHook<I = void, E = void, R = void> = {
41
+ use: (...handlers: RemoveVoidParameter<AsyncParallelHookHandler<I, E, R>>[]) => void;
42
+ run: RemoveVoidParameter<(initalValue: I, extraArg: E) => Promise<R[]>>;
43
+ clear: () => void;
44
+ type: string;
45
+ };
46
+ /** Has return value with given type */
47
+ export declare type AsyncSeriesWaterfallHook<I = void, E = void> = {
48
+ use: (...handlers: RemoveVoidParameter<AsyncSeriesWaterfallHookHandler<I, E>>[]) => void;
49
+ run: RemoveVoidParameter<(initalValue: I, extraArgs: E) => Promise<I>>;
50
+ clear: () => void;
51
+ type: string;
52
+ };
53
+ export declare const createSyncHook: <I = void, E = void, R = void>() => SyncHook<I, E, R>;
54
+ export declare const createSyncBailHook: <I = void, E = void, R = I>() => SyncBailHook<I, E, R>;
55
+ export declare const createSyncWaterfallHook: <I = void, E = void>() => SyncWaterfallHook<I, E>;
56
+ export declare const createAsyncParallelHook: <I = void, E = void, R = void>() => AsyncParallelHook<I, E, R>;
57
+ export declare const createAsyncSeriesWaterfallHook: <I = void, E = void>() => AsyncSeriesWaterfallHook<I, E>;
package/lib/hooks.js ADDED
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ // 钩子参数来源(void,固定值,前一个钩子的返回值) 钩子同步异步 钩子调用顺序() 钩子返回值
3
+ // 普通型钩子handler均无返回值(如果有,则是一个数组,但是似乎没啥用,如果对返回值有要求,那么应该用waterfall钩子)
4
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
+ return new (P || (P = Promise))(function (resolve, reject) {
7
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11
+ });
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.createAsyncSeriesWaterfallHook = exports.createAsyncParallelHook = exports.createSyncWaterfallHook = exports.createSyncBailHook = exports.createSyncHook = void 0;
15
+ const createSyncHook = () => {
16
+ let _handlers = [];
17
+ const use = (...handlers) => {
18
+ _handlers.push(...handlers);
19
+ };
20
+ const run = (...args) => {
21
+ // @ts-ignore
22
+ return _handlers.map(handler => handler(...args));
23
+ };
24
+ const clear = () => {
25
+ _handlers = [];
26
+ };
27
+ return {
28
+ use,
29
+ run,
30
+ clear,
31
+ type: 'SyncHook'
32
+ };
33
+ };
34
+ exports.createSyncHook = createSyncHook;
35
+ const createSyncBailHook = () => {
36
+ let _handlers = [];
37
+ const use = (...handlers) => {
38
+ _handlers.push(...handlers);
39
+ };
40
+ const run = (...args) => {
41
+ for (let i = 0; i < _handlers.length; i++) {
42
+ const handler = _handlers[i];
43
+ // @ts-ignore
44
+ const result = handler(...args);
45
+ if (result)
46
+ return result;
47
+ }
48
+ return undefined;
49
+ };
50
+ const clear = () => {
51
+ _handlers = [];
52
+ };
53
+ return {
54
+ use,
55
+ run,
56
+ clear,
57
+ type: 'SyncBailHook'
58
+ };
59
+ };
60
+ exports.createSyncBailHook = createSyncBailHook;
61
+ const createSyncWaterfallHook = () => {
62
+ let _handlers = [];
63
+ const use = (...handlers) => {
64
+ _handlers.push(...handlers);
65
+ };
66
+ const run = (...args) => {
67
+ let [currentParam, ...otherArgs] = args;
68
+ for (let i = 0; i < _handlers.length; i++) {
69
+ const handler = _handlers[i];
70
+ // @ts-ignore
71
+ currentParam = handler(currentParam, ...otherArgs);
72
+ }
73
+ return currentParam;
74
+ };
75
+ const clear = () => {
76
+ _handlers = [];
77
+ };
78
+ return {
79
+ use,
80
+ run,
81
+ clear,
82
+ type: 'SyncWaterfallHook'
83
+ };
84
+ };
85
+ exports.createSyncWaterfallHook = createSyncWaterfallHook;
86
+ const createAsyncParallelHook = () => {
87
+ let _handlers = [];
88
+ const use = (...handlers) => {
89
+ _handlers.push(...handlers);
90
+ };
91
+ const run = (...args) => __awaiter(void 0, void 0, void 0, function* () {
92
+ return yield Promise.all(_handlers.map(
93
+ // @ts-ignore
94
+ handler => handler(...args)));
95
+ });
96
+ const clear = () => {
97
+ _handlers = [];
98
+ };
99
+ return {
100
+ use,
101
+ run,
102
+ clear,
103
+ type: 'AsyncParallelHook'
104
+ };
105
+ };
106
+ exports.createAsyncParallelHook = createAsyncParallelHook;
107
+ const createAsyncSeriesWaterfallHook = () => {
108
+ let _handlers = [];
109
+ const use = (...handlers) => {
110
+ _handlers.push(...handlers);
111
+ };
112
+ const run = (...args) => __awaiter(void 0, void 0, void 0, function* () {
113
+ let [currentParam, ...otherArgs] = args;
114
+ for (let i = 0; i < _handlers.length; i++) {
115
+ const handler = _handlers[i];
116
+ // @ts-ignore
117
+ currentParam = yield handler(currentParam, ...otherArgs);
118
+ }
119
+ return currentParam;
120
+ });
121
+ const clear = () => {
122
+ _handlers = [];
123
+ };
124
+ return {
125
+ use,
126
+ run,
127
+ clear,
128
+ type: 'AsyncSeriesWaterfallHook'
129
+ };
130
+ };
131
+ exports.createAsyncSeriesWaterfallHook = createAsyncSeriesWaterfallHook;
package/lib/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- import { Hookable } from './Hookable';
2
- export { Hookable };
3
- export * from './types';
1
+ export * from './hooks';
2
+ export * from './hookGroup';
package/lib/index.js CHANGED
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const Hookable_1 = require("./Hookable");
4
- exports.Hookable = Hookable_1.Hookable;
17
+ __exportStar(require("./hooks"), exports);
18
+ __exportStar(require("./hookGroup"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shuvi/hook",
3
- "version": "0.0.1-rc.34",
3
+ "version": "1.0.0-rc.0",
4
4
  "license": "MIT",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",
@@ -12,15 +12,14 @@
12
12
  "engines": {
13
13
  "node": ">= 12.0.0"
14
14
  },
15
+ "author": "Zheng Yu Tay",
15
16
  "scripts": {
16
17
  "dev": "run-p watch:*",
17
- "watch:esm": "tsc -p tsconfig.build.esm.json -w",
18
- "watch:cjs": "tsc -p tsconfig.build.cjs.json -w",
18
+ "watch:esm": "tsc -p tsconfig.build.json -m esnext --outDir esm -w",
19
+ "watch:cjs": "tsc -p tsconfig.build.json -m commonjs --outDir lib -w",
19
20
  "prebuild": "rimraf lib esm",
20
21
  "build": "run-p build:*",
21
- "build:esm": "tsc -p tsconfig.build.esm.json",
22
- "build:cjs": "tsc -p tsconfig.build.cjs.json"
23
- },
24
- "author": "Zheng Yu Tay",
25
- "gitHead": "10ebaa2a20fd06bc7f34be0feeddef9a26f9dddd"
26
- }
22
+ "build:esm": "tsc -p tsconfig.build.json -m esnext --outDir esm",
23
+ "build:cjs": "tsc -p tsconfig.build.json -m commonjs --outDir lib"
24
+ }
25
+ }
@@ -1,3 +0,0 @@
1
- export declare const executeAsyncParallelHook: (tapFns: (((...args: any[]) => void | Promise<void>) & {
2
- hookName?: string | undefined;
3
- })[], ...args: any[]) => Promise<void[]>;
@@ -1,13 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export const executeAsyncParallelHook = (tapFns, ...args) => __awaiter(void 0, void 0, void 0, function* () {
11
- const results = yield Promise.all(tapFns.map(fn => fn(...args)));
12
- return results;
13
- });
@@ -1,3 +0,0 @@
1
- export declare const executeAsyncSeriesBailHook: (tapFns: (((...args: any[]) => void | Promise<void>) & {
2
- hookName?: string | undefined;
3
- })[], ...args: any[]) => Promise<unknown>;
@@ -1,22 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export const executeAsyncSeriesBailHook = (tapFns, ...args) => __awaiter(void 0, void 0, void 0, function* () {
11
- let result = [];
12
- for (let i = 0; i < tapFns.length; i++) {
13
- result = tapFns[i](...args);
14
- if (Promise.resolve(result) === result) {
15
- result = yield result;
16
- }
17
- if (result) {
18
- break;
19
- }
20
- }
21
- return result;
22
- });
@@ -1,3 +0,0 @@
1
- export declare const executeAsyncSeriesHook: (tapFns: (((...args: any[]) => void | Promise<void>) & {
2
- hookName?: string | undefined;
3
- })[], ...args: any[]) => Promise<unknown[]>;
@@ -1,16 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export const executeAsyncSeriesHook = (tapFns, ...args) => __awaiter(void 0, void 0, void 0, function* () {
11
- let results = [];
12
- for (let i = 0; i < tapFns.length; i++) {
13
- results.push(yield tapFns[i](...args));
14
- }
15
- return results;
16
- });
@@ -1,3 +0,0 @@
1
- export declare const executeAsyncSeriesWaterfallHook: (tapFns: (((...args: any[]) => void | Promise<void>) & {
2
- hookName?: string | undefined;
3
- })[], ...args: any[]) => Promise<any>;
@@ -1,24 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- export const executeAsyncSeriesWaterfallHook = (tapFns, ...args) => __awaiter(void 0, void 0, void 0, function* () {
11
- for (let i = 0; i < tapFns.length; i++) {
12
- let fn = tapFns[i];
13
- let promiseResult = yield fn(...args);
14
- if (typeof args[0] !== 'undefined') {
15
- if (typeof promiseResult !== 'undefined') {
16
- args[0] = promiseResult;
17
- }
18
- else {
19
- console.warn(`Expected return value from hook "${fn.hookName}" but is undefined`);
20
- }
21
- }
22
- }
23
- return args[0];
24
- });
package/esm/Hookable.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { IHookOpts, ICallHookOpts, IHookable, IHookConfig } from './types';
2
- export declare class Hookable implements IHookable {
3
- private _hooks;
4
- tap<Config extends IHookConfig = IHookConfig>(name: Config['name'], hook: IHookOpts<Config['initialValue'], Config['args']>): () => void;
5
- callHook<Config extends IHookConfig = IHookConfig>(name: Config['name'], ...args: Config['args']): Promise<unknown[]>;
6
- callHook<Config extends IHookConfig = IHookConfig>(options: ICallHookOpts<Config['name'], Config['initialValue']>, ...args: Config['args']): Promise<Config['initialValue']>;
7
- on<Config extends IHookConfig = IHookConfig>(event: Config['name'], listener: (...args: Config['args']) => void): () => void;
8
- emitEvent<Config extends IHookConfig = IHookConfig>(name: Config['name'], ...args: Config['args']): void;
9
- }