UNPKG

@nodeswork/kiws

Version:

Koa-based Injectable Web Service

45 lines (43 loc) 1.58 kB
"use strict"; 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