surrogate
Version:
Object method hooks made easy
37 lines • 1.94 kB
JavaScript
;
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