UNPKG

surrogate

Version:

Object method hooks made easy

37 lines 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.manageAsyncDecorator = exports.determineWhich = exports.manageDecorator = void 0; const surrogateClassWrapper_1 = require("./surrogateClassWrapper"); const which_1 = require("../which"); const constants_1 = require("../constants"); const asarray_1 = require("@jfrazx/asarray"); const helpers_1 = require("../helpers"); const manageDecorator = (type, options) => { const decoratorOptions = organizeOptions(options); return (target, event) => { surrogateClassWrapper_1.SurrogateClassWrapper.addDecorators(target.constructor, type, event, decoratorOptions); }; }; exports.manageDecorator = manageDecorator; const determineWhich = (type) => type === which_1.BOTH ? [which_1.PRE, which_1.POST] : [type]; exports.determineWhich = determineWhich; const manageAsyncDecorator = (type, options) => { const wrapper = { wrapper: constants_1.MethodWrapper.Async }; const asyncOptions = (0, asarray_1.asArray)(options).map((opt) => isDecoratorOptions(opt) ? Object.assign(Object.assign({}, opt), { options: Object.assign(Object.assign({}, opt.options), wrapper) }) : { handler: opt, options: Object.assign({}, wrapper) }); return (0, exports.manageDecorator)(type, asyncOptions); }; exports.manageAsyncDecorator = manageAsyncDecorator; const organizeOptions = (delegateOptions) => { return (0, asarray_1.asArray)(delegateOptions).flatMap((value) => { return isDecoratorOptions(value) ? mapHandlers(value) : [{ handler: value, options: {} }]; }); }; const mapHandlers = (decoratorOptions) => { const { handler: handlers, options = {} } = decoratorOptions; return (0, asarray_1.asArray)(handlers).map((handler) => ({ handler, options: Object.assign({}, options) })); }; const isDecoratorOptions = (value) => (0, helpers_1.isObject)(value); //# sourceMappingURL=manageDecorator.js.map