UNPKG

2.15 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11Object.defineProperty(exports, "__esModule", { value: true });
12class Hook {
13 constructor() {
14 this.writeHooks = new Map();
15 this.readHooks = new Map();
16 }
17 generateError(pluginName, error) {
18 const generatedError = new Error(`Plugin ${pluginName} failed: ${error.message}`);
19 generatedError.stack = error.stack;
20 return error;
21 }
22 writeHook(pluginName, modifier) {
23 this.writeHooks.set(pluginName, modifier);
24 }
25 readHook(pluginName, reader) {
26 this.readHooks.set(pluginName, reader);
27 }
28 callHooks(...data) {
29 return __awaiter(this, void 0, void 0, function* () {
30 const { writeHooks, readHooks } = this;
31 let dataArguments = data;
32 for (const [key, hook] of writeHooks) {
33 try {
34 dataArguments = [
35 yield hook(...dataArguments),
36 ...dataArguments.slice(1),
37 ];
38 }
39 catch (error) {
40 throw this.generateError(key, error);
41 }
42 }
43 for (const [key, hook] of readHooks) {
44 try {
45 yield hook(...dataArguments);
46 }
47 catch (error) {
48 throw this.generateError(key, error);
49 }
50 }
51 return dataArguments[0];
52 });
53 }
54}
55exports.Hook = Hook;