@testring/pluggable-module
Advanced tools
| export declare class Hook { | ||
| private writeHooks; | ||
| private readHooks; | ||
| private generateError; | ||
| writeHook(pluginName: string, modifier: Function): void; | ||
| readHook(pluginName: string, reader: Function): void; | ||
| callHooks(...data: Array<any>): Promise<any>; | ||
| } | ||
| //# sourceMappingURL=hook.d.ts.map |
| {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"AAAA,qBAAa,IAAI;IACb,OAAO,CAAC,UAAU,CAAoC;IAEtD,OAAO,CAAC,SAAS,CAAoC;IAErD,OAAO,CAAC,aAAa;IAUd,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAIhD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;IAIvC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;CA0B7C"} |
| export * from './pluggable-module'; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"} |
| import { IPluggableModule } from '@testring/types'; | ||
| import { Hook } from './hook'; | ||
| type HookDescriptor = string; | ||
| export declare class PluggableModule implements IPluggableModule<Hook> { | ||
| private pluginHooks; | ||
| constructor(hooks?: Array<HookDescriptor>); | ||
| private createHooks; | ||
| protected callHook<T = any>(name: string, ...args: any[]): Promise<T>; | ||
| getHook(name: string): Hook | undefined; | ||
| } | ||
| export {}; | ||
| //# sourceMappingURL=pluggable-module.d.ts.map |
| {"version":3,"file":"pluggable-module.d.ts","sourceRoot":"","sources":["../src/pluggable-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAE5B,KAAK,cAAc,GAAG,MAAM,CAAC;AAE7B,qBAAa,eAAgB,YAAW,gBAAgB,CAAC,IAAI,CAAC;IAC1D,OAAO,CAAC,WAAW,CAAgC;gBAEvC,KAAK,GAAE,KAAK,CAAC,cAAc,CAAM;IAI7C,OAAO,CAAC,WAAW;cAYH,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAUpE,OAAO,CAAC,IAAI,EAAE,MAAM;CAG9B"} |
| { | ||
| "extends": "./tsconfig.json", | ||
| "compilerOptions": { | ||
| "outDir": "dist", | ||
| "rootDir": "src", | ||
| "noEmit": false, | ||
| "composite": true | ||
| }, | ||
| "exclude": ["test"] | ||
| } |
+23
-33
| "use strict"; | ||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
| function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
| return new (P || (P = Promise))(function (resolve, reject) { | ||
| function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
| function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
| function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
| step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
| }); | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -19,4 +10,5 @@ exports.Hook = void 0; | ||
| generateError(pluginName, error) { | ||
| var _a; | ||
| const generatedError = new Error(`Plugin ${pluginName} failed: ${error.message}`); | ||
| generatedError.stack = error.stack; | ||
| generatedError.stack = (_a = error.stack) !== null && _a !== void 0 ? _a : 'No stack trace available'; | ||
| return error; | ||
@@ -30,27 +22,25 @@ } | ||
| } | ||
| callHooks(...data) { | ||
| return __awaiter(this, void 0, void 0, function* () { | ||
| const { writeHooks, readHooks } = this; | ||
| let dataArguments = data; | ||
| for (const [key, hook] of writeHooks) { | ||
| try { | ||
| dataArguments = [ | ||
| yield hook(...dataArguments), | ||
| ...dataArguments.slice(1), | ||
| ]; | ||
| } | ||
| catch (error) { | ||
| throw this.generateError(key, error); | ||
| } | ||
| async callHooks(...data) { | ||
| const { writeHooks, readHooks } = this; | ||
| let dataArguments = data; | ||
| for (const [key, hook] of writeHooks) { | ||
| try { | ||
| dataArguments = [ | ||
| await hook(...dataArguments), | ||
| ...dataArguments.slice(1), | ||
| ]; | ||
| } | ||
| for (const [key, hook] of readHooks) { | ||
| try { | ||
| yield hook(...dataArguments); | ||
| } | ||
| catch (error) { | ||
| throw this.generateError(key, error); | ||
| } | ||
| catch (error) { | ||
| throw this.generateError(key, error); | ||
| } | ||
| return dataArguments[0]; | ||
| }); | ||
| } | ||
| for (const [key, hook] of readHooks) { | ||
| try { | ||
| await hook(...dataArguments); | ||
| } | ||
| catch (error) { | ||
| throw this.generateError(key, error); | ||
| } | ||
| } | ||
| return dataArguments[0]; | ||
| } | ||
@@ -57,0 +47,0 @@ } |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,MAAa,IAAI;IAAjB;QACY,eAAU,GAA0B,IAAI,GAAG,EAAE,CAAC;QAE9C,cAAS,GAA0B,IAAI,GAAG,EAAE,CAAC;IA8CzD,CAAC;IA5CW,aAAa,CAAC,UAAkB,EAAE,KAAY;QAClD,MAAM,cAAc,GAAG,IAAI,KAAK,CAC5B,UAAU,UAAU,YAAY,KAAK,CAAC,OAAO,EAAE,CAClD,CAAC;QAEF,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAEnC,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,SAAS,CAAC,UAAkB,EAAE,QAAkB;QACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,MAAgB;QAChD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEY,SAAS,CAAC,GAAG,IAAgB;;YACtC,MAAM,EAAC,UAAU,EAAE,SAAS,EAAC,GAAG,IAAI,CAAC;YAErC,IAAI,aAAa,GAAG,IAAI,CAAC;YAEzB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACD,aAAa,GAAG;wBACZ,MAAM,IAAI,CAAC,GAAG,aAAa,CAAC;wBAC5B,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC5B,CAAC;gBACN,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzC,CAAC;YACL,CAAC;YAED,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACD,MAAM,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzC,CAAC;YACL,CAAC;YAED,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;KAAA;CACJ;AAjDD,oBAiDC"} | ||
| {"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";;;AAAA,MAAa,IAAI;IAAjB;QACY,eAAU,GAA0B,IAAI,GAAG,EAAE,CAAC;QAE9C,cAAS,GAA0B,IAAI,GAAG,EAAE,CAAC;IA8CzD,CAAC;IA5CW,aAAa,CAAC,UAAkB,EAAE,KAAY;;QAClD,MAAM,cAAc,GAAG,IAAI,KAAK,CAC5B,UAAU,UAAU,YAAY,KAAK,CAAC,OAAO,EAAE,CAClD,CAAC;QAEF,cAAc,CAAC,KAAK,GAAG,MAAA,KAAK,CAAC,KAAK,mCAAI,0BAA0B,CAAC;QAEjE,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,SAAS,CAAC,UAAkB,EAAE,QAAkB;QACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,MAAgB;QAChD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,GAAG,IAAgB;QACtC,MAAM,EAAC,UAAU,EAAE,SAAS,EAAC,GAAG,IAAI,CAAC;QAErC,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACD,aAAa,GAAG;oBACZ,MAAM,IAAI,CAAC,GAAG,aAAa,CAAC;oBAC5B,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC5B,CAAC;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAc,CAAC,CAAC;YAClD,CAAC;QACL,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAc,CAAC,CAAC;YAClD,CAAC;QACL,CAAC;QAED,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;CACJ;AAjDD,oBAiDC"} |
| "use strict"; | ||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
| function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
| return new (P || (P = Promise))(function (resolve, reject) { | ||
| function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
| function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
| function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
| step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
| }); | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -23,13 +14,13 @@ exports.PluggableModule = void 0; | ||
| hookName = hooks[index]; | ||
| this.pluginHooks.set(hookName, new hook_1.Hook()); | ||
| if (hookName !== undefined) { | ||
| this.pluginHooks.set(hookName, new hook_1.Hook()); | ||
| } | ||
| } | ||
| } | ||
| callHook(name, ...args) { | ||
| return __awaiter(this, void 0, void 0, function* () { | ||
| const pluginHook = this.pluginHooks.get(name); | ||
| if (pluginHook === undefined) { | ||
| throw new ReferenceError(`There is no plugin called ${name}.`); | ||
| } | ||
| return pluginHook.callHooks(...args); | ||
| }); | ||
| async callHook(name, ...args) { | ||
| const pluginHook = this.pluginHooks.get(name); | ||
| if (pluginHook === undefined) { | ||
| throw new ReferenceError(`There is no plugin called ${name}.`); | ||
| } | ||
| return pluginHook.callHooks(...args); | ||
| } | ||
@@ -36,0 +27,0 @@ getHook(name) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"pluggable-module.js","sourceRoot":"","sources":["../src/pluggable-module.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iCAA4B;AAI5B,MAAa,eAAe;IAGxB,YAAY,QAA+B,EAAE;QAFrC,gBAAW,GAAsB,IAAI,GAAG,EAAE,CAAC;QAG/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,WAAW,CAAC,QAA+B,EAAE;QACjD,IAAI,QAAQ,CAAC;QAEb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAExB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,WAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAEe,QAAQ,CAAU,IAAY,EAAE,GAAG,IAAI;;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE9C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,cAAc,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAC;YACnE,CAAC;YAED,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;KAAA;IAEM,OAAO,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACJ;AA9BD,0CA8BC"} | ||
| {"version":3,"file":"pluggable-module.js","sourceRoot":"","sources":["../src/pluggable-module.ts"],"names":[],"mappings":";;;AACA,iCAA4B;AAI5B,MAAa,eAAe;IAGxB,YAAY,QAA+B,EAAE;QAFrC,gBAAW,GAAsB,IAAI,GAAG,EAAE,CAAC;QAG/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,WAAW,CAAC,QAA+B,EAAE;QACjD,IAAI,QAAQ,CAAC;QAEb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAExB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,WAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC;IACL,CAAC;IAES,KAAK,CAAC,QAAQ,CAAU,IAAY,EAAE,GAAG,IAAW;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,cAAc,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACJ;AAhCD,0CAgCC"} |
+2
-2
| { | ||
| "name": "@testring/pluggable-module", | ||
| "version": "0.7.6", | ||
| "version": "0.8.0", | ||
| "main": "./dist/index.js", | ||
@@ -13,4 +13,4 @@ "types": "./src/index.ts", | ||
| "dependencies": { | ||
| "@testring/types": "0.7.6" | ||
| "@testring/types": "0.8.0" | ||
| } | ||
| } |
+3
-3
@@ -11,3 +11,3 @@ export class Hook { | ||
| generatedError.stack = error.stack; | ||
| generatedError.stack = error.stack ?? 'No stack trace available'; | ||
@@ -37,3 +37,3 @@ return error; | ||
| } catch (error) { | ||
| throw this.generateError(key, error); | ||
| throw this.generateError(key, error as Error); | ||
| } | ||
@@ -46,3 +46,3 @@ } | ||
| } catch (error) { | ||
| throw this.generateError(key, error); | ||
| throw this.generateError(key, error as Error); | ||
| } | ||
@@ -49,0 +49,0 @@ } |
@@ -19,7 +19,9 @@ import {IPluggableModule} from '@testring/types'; | ||
| this.pluginHooks.set(hookName, new Hook()); | ||
| if (hookName !== undefined) { | ||
| this.pluginHooks.set(hookName, new Hook()); | ||
| } | ||
| } | ||
| } | ||
| protected async callHook<T = any>(name: string, ...args): Promise<T> { | ||
| protected async callHook<T = any>(name: string, ...args: any[]): Promise<T> { | ||
| const pluginHook = this.pluginHooks.get(name); | ||
@@ -26,0 +28,0 @@ |
10850
7.09%19
58.33%196
6.52%+ Added
- Removed
Updated