|
|
- 'use strict';
-
- class Mixin {
- constructor(host) {
- const originalMethods = {};
- const overriddenMethods = this._getOverriddenMethods(this, originalMethods);
-
- for (const key of Object.keys(overriddenMethods)) {
- if (typeof overriddenMethods[key] === 'function') {
- originalMethods[key] = host[key];
- host[key] = overriddenMethods[key];
- }
- }
- }
-
- _getOverriddenMethods() {
- throw new Error('Not implemented');
- }
- }
-
- Mixin.install = function(host, Ctor, opts) {
- if (!host.__mixins) {
- host.__mixins = [];
- }
-
- for (let i = 0; i < host.__mixins.length; i++) {
- if (host.__mixins[i].constructor === Ctor) {
- return host.__mixins[i];
- }
- }
-
- const mixin = new Ctor(host, opts);
-
- host.__mixins.push(mixin);
-
- return mixin;
- };
-
- module.exports = Mixin;
|