aquameta-datum
Version:
Service layer for the Aquameta database API
91 lines (79 loc) • 9.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isInvalidExecutable = isInvalidExecutable;
exports.http = exports.update = exports.select = exports.insert = exports.del = void 0;
var _ramda = require("ramda");
var _constants = require("./constants.js");
var _args = require("./args.js");
const EXECUTABLE = Symbol.for('executable');
const createExecutable = (0, _ramda.curry)((method, chainable, data) => ({
method,
url: chainable.url,
args: chainable.args,
// SELECT, UPDATE, DELETE use args
version: chainable.version || null,
data,
// UPDATE and INSERT use data
type: EXECUTABLE
}));
function isInvalidExecutable(executable) {
return !(executable.type === EXECUTABLE);
} // $FlowFixMe
const del = createExecutable((0, _constants.getMethodFromType)(_constants.DELETE), _ramda.__, null);
exports.del = del;
const insert = createExecutable((0, _constants.getMethodFromType)(_constants.INSERT));
exports.insert = insert;
const select = createExecutable((0, _constants.getMethodFromType)(_constants.SELECT), _ramda.__, null);
exports.select = select;
const update = createExecutable((0, _constants.getMethodFromType)(_constants.UPDATE));
exports.update = update;
/**
* Parse http request and return executable
*
* e.g.
* query(
* client.connection(),
* database.http(req)
* ).then(...).catch(...)
*
* http requests are either datum calls or source urls
* source urls return a single column and have the format: /db/schema/rel/name.column
*/
const sourceUrlRegex = /^\/db\/.+\/.+\/.+\..+/;
const source = (0, _args.addArg)('source', true);
const http = false ? function http(req) {
const parsed = url.parse(req.url, true);
const {
pathname
} = parsed;
if (pathname && sourceUrlRegex.test(pathname)) {
// return createExecutable('GET', {url: pathname, args: {source: true}}, null);
if (false) {
const {
schemaName,
relationName,
column,
name
} = parseSourceUrl(pathname);
const func = fn('endpoint.source', [schemaName, relationName, column, name]); // $FlowFixMe
return compose(select, source)(func);
}
} else if (pathname) {
// TODO: does something need to happen here with versions?
/*
const [, version] = /\/?(.+)\//.exec(pathname);
console.log(version);
*/
const url = pathname.replace(/\/?.+?\//, '');
return createExecutable(req.method, {
url,
args: parsed.query || {}
}, req.body || null);
} else {
return null;
}
} : null;
exports.http = http;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4ZWN1dGFibGUuanMiXSwibmFtZXMiOlsiRVhFQ1VUQUJMRSIsIlN5bWJvbCIsImZvciIsImNyZWF0ZUV4ZWN1dGFibGUiLCJtZXRob2QiLCJjaGFpbmFibGUiLCJkYXRhIiwidXJsIiwiYXJncyIsInZlcnNpb24iLCJ0eXBlIiwiaXNJbnZhbGlkRXhlY3V0YWJsZSIsImV4ZWN1dGFibGUiLCJkZWwiLCJERUxFVEUiLCJfXyIsImluc2VydCIsIklOU0VSVCIsInNlbGVjdCIsIlNFTEVDVCIsInVwZGF0ZSIsIlVQREFURSIsInNvdXJjZVVybFJlZ2V4Iiwic291cmNlIiwiaHR0cCIsInJlcSIsInBhcnNlZCIsInBhcnNlIiwicGF0aG5hbWUiLCJ0ZXN0Iiwic2NoZW1hTmFtZSIsInJlbGF0aW9uTmFtZSIsImNvbHVtbiIsIm5hbWUiLCJwYXJzZVNvdXJjZVVybCIsImZ1bmMiLCJmbiIsImNvbXBvc2UiLCJyZXBsYWNlIiwicXVlcnkiLCJib2R5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUdBOztBQUNBOztBQVNBOztBQU1BLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxHQUFQLENBQVcsWUFBWCxDQUFuQjtBQUVBLE1BQU1DLGdCQUFnQixHQUFHLGtCQU12QixDQUNFQyxNQURGLEVBRUVDLFNBRkYsRUFHRUMsSUFIRixNQUlrQjtBQUNoQkYsRUFBQUEsTUFEZ0I7QUFFaEJHLEVBQUFBLEdBQUcsRUFBRUYsU0FBUyxDQUFDRSxHQUZDO0FBR2hCQyxFQUFBQSxJQUFJLEVBQUVILFNBQVMsQ0FBQ0csSUFIQTtBQUdNO0FBQ3RCQyxFQUFBQSxPQUFPLEVBQUVKLFNBQVMsQ0FBQ0ksT0FBVixJQUFxQixJQUpkO0FBS2hCSCxFQUFBQSxJQUxnQjtBQUtWO0FBQ05JLEVBQUFBLElBQUksRUFBRVY7QUFOVSxDQUpsQixDQU51QixDQUF6Qjs7QUFvQk8sU0FBU1csbUJBQVQsQ0FBNkJDLFVBQTdCLEVBQThEO0FBQ25FLFNBQU8sRUFBRUEsVUFBVSxDQUFDRixJQUFYLEtBQW9CVixVQUF0QixDQUFQO0FBQ0QsQyxDQUVEOzs7QUFDTyxNQUFNYSxHQUFHLEdBQUdWLGdCQUFnQixDQUFDLGtDQUFrQlcsaUJBQWxCLENBQUQsRUFBNkJDLFNBQTdCLEVBQXVDLElBQXZDLENBQTVCOztBQUNBLE1BQU1DLE1BQU0sR0FBR2IsZ0JBQWdCLENBQUMsa0NBQWtCYyxpQkFBbEIsQ0FBRCxDQUEvQjs7QUFDQSxNQUFNQyxNQUFNLEdBQUdmLGdCQUFnQixDQUNwQyxrQ0FBa0JnQixpQkFBbEIsQ0FEb0MsRUFFbkNKLFNBRm1DLEVBR3BDLElBSG9DLENBQS9COztBQUtBLE1BQU1LLE1BQU0sR0FBR2pCLGdCQUFnQixDQUFDLGtDQUFrQmtCLGlCQUFsQixDQUFELENBQS9COzs7QUFPUDs7Ozs7Ozs7Ozs7O0FBWUEsTUFBTUMsY0FBYyxHQUFHLHVCQUF2QjtBQUNBLE1BQU1DLE1BQU0sR0FBRyxrQkFBTyxRQUFQLEVBQWlCLElBQWpCLENBQWY7QUFDTyxNQUFNQyxJQUFJLEdBQUcsUUFBVyxTQUFTQSxJQUFULENBQWNDLEdBQWQsRUFBbUQ7QUFDaEYsUUFBTUMsTUFBaUIsR0FBR25CLEdBQUcsQ0FBQ29CLEtBQUosQ0FBVUYsR0FBRyxDQUFDbEIsR0FBZCxFQUFtQixJQUFuQixDQUExQjtBQUNBLFFBQU07QUFBQ3FCLElBQUFBO0FBQUQsTUFBYUYsTUFBbkI7O0FBRUEsTUFBSUUsUUFBUSxJQUFJTixjQUFjLENBQUNPLElBQWYsQ0FBb0JELFFBQXBCLENBQWhCLEVBQStDO0FBQzdDO0FBQ0EsZUFBYztBQUNaLFlBQU07QUFBQ0UsUUFBQUEsVUFBRDtBQUFhQyxRQUFBQSxZQUFiO0FBQTJCQyxRQUFBQSxNQUEzQjtBQUFtQ0MsUUFBQUE7QUFBbkMsVUFBMkNDLGNBQWMsQ0FBQ04sUUFBRCxDQUEvRDtBQUNBLFlBQU1PLElBQUksR0FBR0MsRUFBRSxDQUFDLGlCQUFELEVBQW9CLENBQ2pDTixVQURpQyxFQUVqQ0MsWUFGaUMsRUFHakNDLE1BSGlDLEVBSWpDQyxJQUppQyxDQUFwQixDQUFmLENBRlksQ0FRWjs7QUFDQSxhQUFPSSxPQUFPLENBQ1puQixNQURZLEVBRVpLLE1BRlksQ0FBUCxDQUdMWSxJQUhLLENBQVA7QUFJRDtBQUNGLEdBaEJELE1BZ0JPLElBQUlQLFFBQUosRUFBYztBQUNuQjs7QUFDQTs7OztBQUlBLFVBQU1yQixHQUFHLEdBQUdxQixRQUFRLENBQUNVLE9BQVQsQ0FBaUIsVUFBakIsRUFBNkIsRUFBN0IsQ0FBWjtBQUNBLFdBQU9uQyxnQkFBZ0IsQ0FDckJzQixHQUFHLENBQUNyQixNQURpQixFQUVyQjtBQUFDRyxNQUFBQSxHQUFEO0FBQU1DLE1BQUFBLElBQUksRUFBRWtCLE1BQU0sQ0FBQ2EsS0FBUCxJQUFnQjtBQUE1QixLQUZxQixFQUdyQmQsR0FBRyxDQUFDZSxJQUFKLElBQVksSUFIUyxDQUF2QjtBQUtELEdBWk0sTUFZQTtBQUNMLFdBQU8sSUFBUDtBQUNEO0FBQ0YsQ0FuQ21CLEdBbUNoQixJQW5DRyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7X18sIGN1cnJ5fSBmcm9tICdyYW1kYSc7XG5pbXBvcnQge1xuICBERUxFVEUsXG4gIElOU0VSVCxcbiAgU0VMRUNULFxuICBVUERBVEUsXG4gIGdldE1ldGhvZEZyb21UeXBlLFxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7RXhlY3V0YWJsZSwgSFRUUFJlcXVlc3R9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7Y29tcG9zZX0gZnJvbSAncmFtZGEnO1xuaW1wb3J0IHthZGRBcmd9IGZyb20gJy4vYXJncy5qcyc7XG5pbXBvcnQge2ZufSBmcm9tICcuL2NoYWluYWJsZS5qcyc7XG5cbi8vIFRPRE8gbW92ZSB0aGlzXG5pbXBvcnQge3BhcnNlU291cmNlVXJsfSBmcm9tICcuLi9xdWVyeS9jb25uZWN0aW9uLmpzJztcblxuY29uc3QgRVhFQ1VUQUJMRSA9IFN5bWJvbC5mb3IoJ2V4ZWN1dGFibGUnKTtcblxuY29uc3QgY3JlYXRlRXhlY3V0YWJsZSA9IGN1cnJ5PFxuICBzdHJpbmcsXG4gIEV4ZWN1dGFibGUsXG4gIHtbc3RyaW5nXTogbWl4ZWR9LFxuICBFeGVjdXRhYmxlLFxuPihcbiAgKFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIGNoYWluYWJsZTogRXhlY3V0YWJsZSxcbiAgICBkYXRhOiA/e1tzdHJpbmddOiBtaXhlZH0sXG4gICk6IEV4ZWN1dGFibGUgPT4gKHtcbiAgICBtZXRob2QsXG4gICAgdXJsOiBjaGFpbmFibGUudXJsLFxuICAgIGFyZ3M6IGNoYWluYWJsZS5hcmdzLCAvLyBTRUxFQ1QsIFVQREFURSwgREVMRVRFIHVzZSBhcmdzXG4gICAgdmVyc2lvbjogY2hhaW5hYmxlLnZlcnNpb24gfHwgbnVsbCxcbiAgICBkYXRhLCAvLyBVUERBVEUgYW5kIElOU0VSVCB1c2UgZGF0YVxuICAgIHR5cGU6IEVYRUNVVEFCTEUsXG4gIH0pLFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW52YWxpZEV4ZWN1dGFibGUoZXhlY3V0YWJsZTogRXhlY3V0YWJsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gIShleGVjdXRhYmxlLnR5cGUgPT09IEVYRUNVVEFCTEUpO1xufVxuXG4vLyAkRmxvd0ZpeE1lXG5leHBvcnQgY29uc3QgZGVsID0gY3JlYXRlRXhlY3V0YWJsZShnZXRNZXRob2RGcm9tVHlwZShERUxFVEUpLCAoX186IGFueSksIG51bGwpO1xuZXhwb3J0IGNvbnN0IGluc2VydCA9IGNyZWF0ZUV4ZWN1dGFibGUoZ2V0TWV0aG9kRnJvbVR5cGUoSU5TRVJUKSk7XG5leHBvcnQgY29uc3Qgc2VsZWN0ID0gY3JlYXRlRXhlY3V0YWJsZShcbiAgZ2V0TWV0aG9kRnJvbVR5cGUoU0VMRUNUKSxcbiAgKF9fOiBhbnkpLFxuICBudWxsLFxuKTtcbmV4cG9ydCBjb25zdCB1cGRhdGUgPSBjcmVhdGVFeGVjdXRhYmxlKGdldE1ldGhvZEZyb21UeXBlKFVQREFURSkpO1xuXG50eXBlIFBhcnNlZFVybCA9IHtcbiAgcGF0aG5hbWU/OiBzdHJpbmcsXG4gIHF1ZXJ5Pzoge1tzdHJpbmddOiBtaXhlZH0sXG59O1xuXG4vKipcbiAqIFBhcnNlIGh0dHAgcmVxdWVzdCBhbmQgcmV0dXJuIGV4ZWN1dGFibGVcbiAqXG4gKiBlLmcuXG4gKiBxdWVyeShcbiAqICAgY2xpZW50LmNvbm5lY3Rpb24oKSxcbiAqICAgZGF0YWJhc2UuaHR0cChyZXEpXG4gKiApLnRoZW4oLi4uKS5jYXRjaCguLi4pXG4gKlxuICogaHR0cCByZXF1ZXN0cyBhcmUgZWl0aGVyIGRhdHVtIGNhbGxzIG9yIHNvdXJjZSB1cmxzXG4gKiBzb3VyY2UgdXJscyByZXR1cm4gYSBzaW5nbGUgY29sdW1uIGFuZCBoYXZlIHRoZSBmb3JtYXQ6IC9kYi9zY2hlbWEvcmVsL25hbWUuY29sdW1uXG4gKi9cbmNvbnN0IHNvdXJjZVVybFJlZ2V4ID0gL15cXC9kYlxcLy4rXFwvLitcXC8uK1xcLi4rLztcbmNvbnN0IHNvdXJjZSA9IGFkZEFyZygnc291cmNlJywgdHJ1ZSk7XG5leHBvcnQgY29uc3QgaHR0cCA9IF9fTk9ERV9fID8gZnVuY3Rpb24gaHR0cChyZXE6IEhUVFBSZXF1ZXN0KTogRXhlY3V0YWJsZSB8IG51bGwge1xuICBjb25zdCBwYXJzZWQ6IFBhcnNlZFVybCA9IHVybC5wYXJzZShyZXEudXJsLCB0cnVlKTtcbiAgY29uc3Qge3BhdGhuYW1lfSA9IHBhcnNlZDtcblxuICBpZiAocGF0aG5hbWUgJiYgc291cmNlVXJsUmVnZXgudGVzdChwYXRobmFtZSkpIHtcbiAgICAvLyByZXR1cm4gY3JlYXRlRXhlY3V0YWJsZSgnR0VUJywge3VybDogcGF0aG5hbWUsIGFyZ3M6IHtzb3VyY2U6IHRydWV9fSwgbnVsbCk7XG4gICAgaWYgKF9fTk9ERV9fKSB7XG4gICAgICBjb25zdCB7c2NoZW1hTmFtZSwgcmVsYXRpb25OYW1lLCBjb2x1bW4sIG5hbWV9ID0gcGFyc2VTb3VyY2VVcmwocGF0aG5hbWUpO1xuICAgICAgY29uc3QgZnVuYyA9IGZuKCdlbmRwb2ludC5zb3VyY2UnLCBbXG4gICAgICAgIHNjaGVtYU5hbWUsXG4gICAgICAgIHJlbGF0aW9uTmFtZSxcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgXSk7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gY29tcG9zZShcbiAgICAgICAgc2VsZWN0LFxuICAgICAgICBzb3VyY2UsXG4gICAgICApKGZ1bmMpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwYXRobmFtZSkge1xuICAgIC8vIFRPRE86IGRvZXMgc29tZXRoaW5nIG5lZWQgdG8gaGFwcGVuIGhlcmUgd2l0aCB2ZXJzaW9ucz9cbiAgICAvKlxuICAgIGNvbnN0IFssIHZlcnNpb25dID0gL1xcLz8oLispXFwvLy5leGVjKHBhdGhuYW1lKTtcbiAgICBjb25zb2xlLmxvZyh2ZXJzaW9uKTtcbiAgICAqL1xuICAgIGNvbnN0IHVybCA9IHBhdGhuYW1lLnJlcGxhY2UoL1xcLz8uKz9cXC8vLCAnJyk7XG4gICAgcmV0dXJuIGNyZWF0ZUV4ZWN1dGFibGUoXG4gICAgICByZXEubWV0aG9kLFxuICAgICAge3VybCwgYXJnczogcGFyc2VkLnF1ZXJ5IHx8IHt9fSxcbiAgICAgIHJlcS5ib2R5IHx8IG51bGwsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSA6IG51bGw7XG4iXX0=