@richardo2016/rcli
Version:
Richard's cli
62 lines (61 loc) • 1.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const mq = require("mq");
const http = require("http");
const App = require("fib-app");
const parseQuerystringDotKey = require("parse-querystring-dotkey");
const DEFAULT_CONN_STR = `sqlite:app.db?pool=true`;
function transformQueryToData(req) {
req.query.clear();
const parsed = parseQuerystringDotKey(req.queryString);
req.query.set(parsed);
req.query.set({
where: JSON.stringify(parsed.where || {}),
});
if (parsed._body)
req.json(parsed._body);
if (parsed._headers)
req.headers.set(parsed._headers);
if (parsed._form)
req.form.set(parsed._form);
}
function filterHttpMethod(input) {
input = input.toLowerCase();
switch (input) {
case 'post':
case 'put':
case 'patch':
case 'delete':
break;
default:
case 'get':
input = 'get';
break;
}
return input;
}
function handler(url, ctx) {
let { ormEntry, httpMethod, connection } = ctx;
if (!path.isAbsolute(ormEntry))
ormEntry = path.resolve(process.cwd(), ormEntry);
httpMethod = filterHttpMethod(httpMethod);
connection = connection || process.env.RCLI_CONNECTION || DEFAULT_CONN_STR;
const app = new App(connection, {
apiPathPrefix: '/api'
}, {});
app.dbPool.use(require(ormEntry));
const req = new http.Request();
const [req_value, qs] = url.split('?');
req.value = req_value;
req.queryString = qs;
req.method = httpMethod;
req.json({});
mq.invoke([
(req) => transformQueryToData(req),
app
], req);
const res = req.response.json();
console.dir(res);
app.dbPool.clear();
}
exports.default = handler;