UNPKG

class-o-mat

Version:

ALPHA VERSION ONLY: class-o-mats will help to create getter-setter functionality with validations that can be attached to a container class for easier coding. Some basic validations are included. class-o-mats also has the ability to store params as bloc

69 lines (57 loc) 2.57 kB
import Bunyan from 'bunyan'; const log = Bunyan.createLogger({name: "PluginMethods"}); import { NONE, CLASS_BUILDER } from '../constants/types'; export const prependConstructor =(self, key, newConstructor)=>{ const plugin = self.___parent(); const prepender =({classOMat, mixins, defaults, params}, buildMethods)=>{ const oldConstructor = mixins.constructor; const thisConstructor = function(...p) { newConstructor.call(this, ...p); oldConstructor.call(this, ...p); } mixins.constructor = thisConstructor; return [{classOMat, mixins, defaults, params}, buildMethods]; } plugin.append().buildConstructor(prepender); } export const appendConstructor =(self, key, newConstructor)=>{ const plugin = self.___parent(); const appender =({classOMat, mixins, defaults, params}, buildMethods)=>{ const oldConstructor = mixins.constructor; const thisConstructor = function(...p) { oldConstructor.call(this, ...p); newConstructor.call(this, ...p); } mixins.constructor = thisConstructor; return [{classOMat, mixins, defaults, params}, buildMethods]; } plugin.append().buildConstructor(appender); } export const prependMethod =(self, key, newFunktion)=>{ const parent = self.___parent(); const buildMethods = parent.buildMethods(); const funktion = buildMethods[key]; buildMethods[key] = ({classOMat, mixins, defaults, params}, buildMethods)=>{ let workingArguments; [workingArguments, buildMethods] = newFunktion({classOMat, mixins, defaults, params}, buildMethods); return funktion({classOMat, mixins, defaults, params}, buildMethods); } parent.buildMethods(buildMethods); } export const appendMethod =(self, key, newFunktion)=>{ const parent = self.___parent(); const buildMethods = parent.buildMethods(); const funktion = buildMethods[key]; buildMethods[key] = ({classOMat, mixins, defaults, params}, buildMethods)=>{ let workingArguments; [workingArguments, buildMethods] = funktion({classOMat, mixins, defaults, params}, buildMethods); return newFunktion({classOMat, mixins, defaults, params}, buildMethods); } parent.buildMethods(buildMethods); }