1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const commands_1 = require("@akala/commands");
|
4 | const router_1 = require("../router");
|
5 | const core_1 = require("@akala/core");
|
6 | const processors_1 = require("@akala/commands/dist/processors");
|
7 | function wrapHttp(container, command) {
|
8 | return function (req, res, next) {
|
9 | var result = processCommand(container, command, { '$request': req, $next: next, $response: res });
|
10 | if (core_1.isPromiseLike(result)) {
|
11 | result.then(function (r) {
|
12 | res.json(r);
|
13 | }, function (err) {
|
14 | res.status(500).json(err);
|
15 | });
|
16 | }
|
17 | else if (typeof result != 'undefined')
|
18 | res.json(result);
|
19 | else
|
20 | res.sendStatus(201);
|
21 | };
|
22 | }
|
23 | async function processCommand(container, c, injected) {
|
24 | var req = injected.$request;
|
25 | return processors_1.Local.execute(c, function (...args) {
|
26 | container.dispatch(c.name, ...args);
|
27 | }, container, { param: [], route: req.params, query: req.query, body: req.body, headers: req.headers, ...injected });
|
28 | }
|
29 | function wrapWorker(container, c) {
|
30 | return function (req, res) {
|
31 | var result = processCommand(container, c, { '$request': req, $callback: res });
|
32 | if (core_1.isPromiseLike(result)) {
|
33 | result.then(function (r) {
|
34 | res(200, r);
|
35 | }, function (err) {
|
36 | res(500, err);
|
37 | });
|
38 | }
|
39 | else if (typeof result != 'undefined')
|
40 | res(result);
|
41 | else
|
42 | res(201);
|
43 | };
|
44 | }
|
45 | exports.trigger = new commands_1.Trigger('http', function register(container, router) {
|
46 | var commandRouter = new router_1.HttpRouter();
|
47 | if (!(router instanceof router_1.HttpRouter))
|
48 | commandRouter.attachTo(router);
|
49 | commands_1.metadata(container).commands.forEach(command => {
|
50 | if (!command.config || !command.config.http)
|
51 | return;
|
52 | var config = command.config.http;
|
53 | if (config.method === 'use' || !config.method) {
|
54 | if (commandRouter instanceof router_1.HttpRouter)
|
55 | commandRouter.use(config.route, wrapHttp(container, command));
|
56 | else
|
57 | commandRouter.use(config.route, wrapWorker(container, command));
|
58 | }
|
59 | else if (router instanceof router_1.HttpRouter)
|
60 | commandRouter[config.method](config.route, wrapHttp(container, command));
|
61 | else
|
62 | commandRouter[config.method](config.route, wrapWorker(container, command));
|
63 | });
|
64 | return commandRouter;
|
65 | });
|
66 |
|
\ | No newline at end of file |