diff --git a/index.js b/index.js index 7fc8072..f715b4d 100644 --- a/index.js +++ b/index.js @@ -1,32 +1,26 @@ export class Base { constructor(options = {}) { this.options = options; - // apply plugins - // https://stackoverflow.com/a/16345172 - const classConstructor = this.constructor; - classConstructor.plugins.forEach((plugin) => { + this.constructor.plugins.forEach((plugin) => { Object.assign(this, plugin(this, options)); }); } - static plugin(plugin1, ...additionalPlugins) { - var _a; + + static plugin(...newPlugins) { const currentPlugins = this.plugins; - let newPlugins = [plugin1, ...additionalPlugins]; - const BaseWithPlugins = - ((_a = class extends this {}), - (_a.plugins = currentPlugins.concat( + return class extends this { + static plugins = currentPlugins.concat( newPlugins.filter((plugin) => !currentPlugins.includes(plugin)) - )), - _a); - return BaseWithPlugins; + ); + }; } static defaults(defaults) { - const BaseWitDefaults = class extends this { + return class extends this { constructor(...args) { super(Object.assign({}, defaults, args[0] || {})); } }; - return BaseWitDefaults; } + + static plugins = []; } -Base.plugins = [];