@nodeswork/kiws
Version:
Koa-based Injectable Web Service
45 lines (43 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const _ = require("underscore");
const injection_1 = require("./injection");
exports.INPUT = 'INPUT';
const INPUT_TAGS = ['input', 'provider'];
exports.INPUT_METADATA_KEY = Symbol('kiws:input');
/**
* InputProvider class decorator will register the middlewares declared in
* the provider to provide inputs when serving traffic.
*/
function InputProvider(options = {}) {
const injectable = injection_1.Injectable({
inputs: true,
tags: _.union(INPUT_TAGS, options.tags || []),
meta: options.meta,
});
return (constructor) => {
injectable(constructor);
constructor.prototype.$generateInputs = $generateInputs;
};
}
exports.InputProvider = InputProvider;
function InputGenerator(options = {}) {
return (target, propertyKey, descriptor) => {
const generators = Reflect.getOwnMetadata(exports.INPUT_METADATA_KEY, target) || [];
generators.push(_.extend({}, options, {
provider: target.constructor.name,
name: propertyKey,
}));
Reflect.defineMetadata(exports.INPUT_METADATA_KEY, generators, target);
};
}
exports.InputGenerator = InputGenerator;
function $generateInputs(ctx) {
const metadatas = Reflect.getOwnMetadata(exports.INPUT_METADATA_KEY, this.constructor.prototype) || [];
const inputs = _.map(metadatas, (metadata) => {
return this[metadata.name](ctx);
});
return _.flatten(inputs);
}
//# sourceMappingURL=input.js.map