UNPKG

chain-able

Version:

interfaces that describe their intentions.

118 lines (99 loc) 10.4 kB
var MethodChain = require('../MethodChain') var compose = require('../compose') var chainMethods = function (parent) { return new MethodChain(parent); } var decorator = function (instructions) { return function (target) { var extension = (function (superclass) { function ChainableDecoration () { superclass.apply(this, arguments); }if ( superclass ) ChainableDecoration.__proto__ = superclass; ChainableDecoration.prototype = Object.create( superclass && superclass.prototype ); ChainableDecoration.prototype.constructor = ChainableDecoration; return ChainableDecoration; }(compose(target))) // log.verbose(100).data(extension).echo() var decorated = instructions(chainMethods(extension.prototype)) return decorated.build(extension) }; } // ---- @TODO --- // can do these 3 without extending constructor, just by using proto // --- --- var observe = function (keys, fn) { return function (target) { return (function (target) { function ChainableObserverDecorator(parent) { target.call(this, parent) return this.observe(keys, fn.bind(this)) } if ( target ) ChainableObserverDecorator.__proto__ = target; ChainableObserverDecorator.prototype = Object.create( target && target.prototype ); ChainableObserverDecorator.prototype.constructor = ChainableObserverDecorator; return ChainableObserverDecorator; }(target)) }; } var transform = function (keys, value) { return function (target) { return (function (target) { function ChainableTransformDecorator(parent) { target.call(this, parent) return this.transform(keys, value.bind(this)) } if ( target ) ChainableTransformDecorator.__proto__ = target; ChainableTransformDecorator.prototype = Object.create( target && target.prototype ); ChainableTransformDecorator.prototype.constructor = ChainableTransformDecorator; return ChainableTransformDecorator; }(target)) }; } var remap = function (from, to) { return function (target) { return (function (target) { function ChainableTransformDecorator(parent) { target.call(this, parent) return this.remap(from, to) } if ( target ) ChainableTransformDecorator.__proto__ = target; ChainableTransformDecorator.prototype = Object.create( target && target.prototype ); ChainableTransformDecorator.prototype.constructor = ChainableTransformDecorator; return ChainableTransformDecorator; }(target)) }; } // ---- // for experimenting // const onValid = (key, arg) => { // log.bold('valid :-)').data({arg, key}).echo() // console.log('\n') // } // const onInvalid = (error, arg, instance) => { // log.red('invalid').data({error, arg, instance}).exit() // console.log('\n') // } // @NOTE: need to manage onInvalid onValid... could check for methods :3 /* prettier-ignore */ var schema = function (obj) { return function (target) { return decorator(function (builder) { return builder .onValid(target.prototype.onValid) .onInvalid(target.prototype.onInvalid) .schema(obj); } )(target); }; } /* prettier-ignore */ var schema2 = function (obj) { return function (target) { return (function (target) { function ChainableSchemaDecoration(parent) { target.call(this, parent) chainMethods(this) .onValid(this.onValid) .onInvalid(this.onInvalid) .schema(obj) return this } if ( target ) ChainableSchemaDecoration.__proto__ = target; ChainableSchemaDecoration.prototype = Object.create( target && target.prototype ); ChainableSchemaDecoration.prototype.constructor = ChainableSchemaDecoration; return ChainableSchemaDecoration; }(target)) }; } exports.chainMethods = chainMethods exports.methodDecorator = decorator exports.decorator = decorator exports.observe = observe exports.transform = transform exports.remap = remap exports.schema = schema exports.schema2 = schema2 exports.compose = compose //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZXMiOlsiZGVjb3JhdG9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBNZXRob2RDaGFpbiA9IHJlcXVpcmUoJy4uL01ldGhvZENoYWluJylcbmNvbnN0IGNvbXBvc2UgPSByZXF1aXJlKCcuLi9jb21wb3NlJylcblxuY29uc3QgY2hhaW5NZXRob2RzID0gcGFyZW50ID0+IG5ldyBNZXRob2RDaGFpbihwYXJlbnQpXG5cbmNvbnN0IGRlY29yYXRvciA9IGluc3RydWN0aW9ucyA9PiB0YXJnZXQgPT4ge1xuICBjb25zdCBleHRlbnNpb24gPSBjbGFzcyBDaGFpbmFibGVEZWNvcmF0aW9uIGV4dGVuZHMgY29tcG9zZSh0YXJnZXQpIHt9XG4gIC8vIGxvZy52ZXJib3NlKDEwMCkuZGF0YShleHRlbnNpb24pLmVjaG8oKVxuICBjb25zdCBkZWNvcmF0ZWQgPSBpbnN0cnVjdGlvbnMoY2hhaW5NZXRob2RzKGV4dGVuc2lvbi5wcm90b3R5cGUpKVxuICByZXR1cm4gZGVjb3JhdGVkLmJ1aWxkKGV4dGVuc2lvbilcbn1cblxuLy8gLS0tLSBAVE9ETyAtLS1cbi8vIGNhbiBkbyB0aGVzZSAzIHdpdGhvdXQgZXh0ZW5kaW5nIGNvbnN0cnVjdG9yLCBqdXN0IGJ5IHVzaW5nIHByb3RvXG4vLyAtLS0gICAgICAgIC0tLVxuY29uc3Qgb2JzZXJ2ZSA9IChrZXlzLCBmbikgPT4gdGFyZ2V0ID0+IHtcbiAgcmV0dXJuIGNsYXNzIENoYWluYWJsZU9ic2VydmVyRGVjb3JhdG9yIGV4dGVuZHMgdGFyZ2V0IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgIHN1cGVyKHBhcmVudClcbiAgICAgIHJldHVybiB0aGlzLm9ic2VydmUoa2V5cywgZm4uYmluZCh0aGlzKSlcbiAgICB9XG4gIH1cbn1cbmNvbnN0IHRyYW5zZm9ybSA9IChrZXlzLCB2YWx1ZSkgPT4gdGFyZ2V0ID0+IHtcbiAgcmV0dXJuIGNsYXNzIENoYWluYWJsZVRyYW5zZm9ybURlY29yYXRvciBleHRlbmRzIHRhcmdldCB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICBzdXBlcihwYXJlbnQpXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oa2V5cywgdmFsdWUuYmluZCh0aGlzKSlcbiAgICB9XG4gIH1cbn1cbmNvbnN0IHJlbWFwID0gKGZyb20sIHRvKSA9PiB0YXJnZXQgPT4ge1xuICByZXR1cm4gY2xhc3MgQ2hhaW5hYmxlVHJhbnNmb3JtRGVjb3JhdG9yIGV4dGVuZHMgdGFyZ2V0IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgIHN1cGVyKHBhcmVudClcbiAgICAgIHJldHVybiB0aGlzLnJlbWFwKGZyb20sIHRvKVxuICAgIH1cbiAgfVxufVxuLy8gLS0tLVxuXG4vLyBmb3IgZXhwZXJpbWVudGluZ1xuLy8gY29uc3Qgb25WYWxpZCA9IChrZXksIGFyZykgPT4ge1xuLy8gICBsb2cuYm9sZCgndmFsaWQgOi0pJykuZGF0YSh7YXJnLCBrZXl9KS5lY2hvKClcbi8vICAgY29uc29sZS5sb2coJ1xcbicpXG4vLyB9XG4vLyBjb25zdCBvbkludmFsaWQgPSAoZXJyb3IsIGFyZywgaW5zdGFuY2UpID0+IHtcbi8vICAgbG9nLnJlZCgnaW52YWxpZCcpLmRhdGEoe2Vycm9yLCBhcmcsIGluc3RhbmNlfSkuZXhpdCgpXG4vLyAgIGNvbnNvbGUubG9nKCdcXG4nKVxuLy8gfVxuXG4vLyBATk9URTogbmVlZCB0byBtYW5hZ2Ugb25JbnZhbGlkIG9uVmFsaWQuLi4gY291bGQgY2hlY2sgZm9yIG1ldGhvZHMgOjNcbi8qIHByZXR0aWVyLWlnbm9yZSAqL1xuY29uc3Qgc2NoZW1hID0gb2JqID0+IHRhcmdldCA9PiBkZWNvcmF0b3IoYnVpbGRlciA9PlxuICBidWlsZGVyXG4gICAgLm9uVmFsaWQodGFyZ2V0LnByb3RvdHlwZS5vblZhbGlkKVxuICAgIC5vbkludmFsaWQodGFyZ2V0LnByb3RvdHlwZS5vbkludmFsaWQpXG4gICAgLnNjaGVtYShvYmopXG4pKHRhcmdldClcblxuLyogcHJldHRpZXItaWdub3JlICovXG5jb25zdCBzY2hlbWEyID0gb2JqID0+IHRhcmdldCA9PiAge1xuICByZXR1cm4gY2xhc3MgQ2hhaW5hYmxlU2NoZW1hRGVjb3JhdGlvbiBleHRlbmRzIHRhcmdldCB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICBzdXBlcihwYXJlbnQpXG4gICAgICBjaGFpbk1ldGhvZHModGhpcylcbiAgICAgICAgLm9uVmFsaWQodGhpcy5vblZhbGlkKVxuICAgICAgICAub25JbnZhbGlkKHRoaXMub25JbnZhbGlkKVxuICAgICAgICAuc2NoZW1hKG9iailcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuY2hhaW5NZXRob2RzID0gY2hhaW5NZXRob2RzXG5leHBvcnRzLm1ldGhvZERlY29yYXRvciA9IGRlY29yYXRvclxuZXhwb3J0cy5kZWNvcmF0b3IgPSBkZWNvcmF0b3JcbmV4cG9ydHMub2JzZXJ2ZSA9IG9ic2VydmVcbmV4cG9ydHMudHJhbnNmb3JtID0gdHJhbnNmb3JtXG5leHBvcnRzLnJlbWFwID0gcmVtYXBcbmV4cG9ydHMuc2NoZW1hID0gc2NoZW1hXG5leHBvcnRzLnNjaGVtYTIgPSBzY2hlbWEyXG5leHBvcnRzLmNvbXBvc2UgPSBjb21wb3NlXG4iXSwibmFtZXMiOlsiY29uc3QiLCJzdXBlciJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzdDQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7O0FBRXJDQSxHQUFLLENBQUMsWUFBWSxHQUFHLFVBQUEsTUFBTSxDQUFBLENBQUMsQUFBRyxTQUFBLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFBOztBQUV0REEsR0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFBLFlBQVksQ0FBQSxDQUFDLEFBQUcsU0FBQSxVQUFBLE1B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