aquameta-datum
Version:
Service layer for the Aquameta database API
101 lines (84 loc) • 9.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isInvalidExecutable = isInvalidExecutable;
exports.http = exports.update = exports.select = exports.insert = exports.del = void 0;
var _url = _interopRequireDefault(require("url"));
var _ramda = require("ramda");
var _constants = require("./constants.js");
var _args = require("./args.js");
var _chainable = require("./chainable.js");
var _connection = require("../query/connection.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// TODO move this
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 = true ? function http(req) {
const parsed = _url.default.parse(req.url, true);
const {
pathname
} = parsed;
if (pathname && sourceUrlRegex.test(pathname)) {
// return createExecutable('GET', {url: pathname, args: {source: true}}, null);
if (true) {
const {
schemaName,
relationName,
column,
name
} = (0, _connection.parseSourceUrl)(pathname);
const func = (0, _chainable.fn)('endpoint.source', [schemaName, relationName, column, name]); // $FlowFixMe
return (0, _ramda.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4ZWN1dGFibGUuanMiXSwibmFtZXMiOlsiRVhFQ1VUQUJMRSIsIlN5bWJvbCIsImZvciIsImNyZWF0ZUV4ZWN1dGFibGUiLCJtZXRob2QiLCJjaGFpbmFibGUiLCJkYXRhIiwidXJsIiwiYXJncyIsInZlcnNpb24iLCJ0eXBlIiwiaXNJbnZhbGlkRXhlY3V0YWJsZSIsImV4ZWN1dGFibGUiLCJkZWwiLCJERUxFVEUiLCJfXyIsImluc2VydCIsIklOU0VSVCIsInNlbGVjdCIsIlNFTEVDVCIsInVwZGF0ZSIsIlVQREFURSIsInNvdXJjZVVybFJlZ2V4Iiwic291cmNlIiwiaHR0cCIsInJlcSIsInBhcnNlZCIsInBhcnNlIiwicGF0aG5hbWUiLCJ0ZXN0Iiwic2NoZW1hTmFtZSIsInJlbGF0aW9uTmFtZSIsImNvbHVtbiIsIm5hbWUiLCJmdW5jIiwicmVwbGFjZSIsInF1ZXJ5IiwiYm9keSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFTQTs7QUFDQTs7QUFHQTs7OztBQURBO0FBR0EsTUFBTUEsVUFBVSxHQUFHQyxNQUFNLENBQUNDLEdBQVAsQ0FBVyxZQUFYLENBQW5CO0FBRUEsTUFBTUMsZ0JBQWdCLEdBQUcsa0JBTXZCLENBQ0VDLE1BREYsRUFFRUMsU0FGRixFQUdFQyxJQUhGLE1BSWtCO0FBQ2hCRixFQUFBQSxNQURnQjtBQUVoQkcsRUFBQUEsR0FBRyxFQUFFRixTQUFTLENBQUNFLEdBRkM7QUFHaEJDLEVBQUFBLElBQUksRUFBRUgsU0FBUyxDQUFDRyxJQUhBO0FBR007QUFDdEJDLEVBQUFBLE9BQU8sRUFBRUosU0FBUyxDQUFDSSxPQUFWLElBQXFCLElBSmQ7QUFLaEJILEVBQUFBLElBTGdCO0FBS1Y7QUFDTkksRUFBQUEsSUFBSSxFQUFFVjtBQU5VLENBSmxCLENBTnVCLENBQXpCOztBQW9CTyxTQUFTVyxtQkFBVCxDQUE2QkMsVUFBN0IsRUFBOEQ7QUFDbkUsU0FBTyxFQUFFQSxVQUFVLENBQUNGLElBQVgsS0FBb0JWLFVBQXRCLENBQVA7QUFDRCxDLENBRUQ7OztBQUNPLE1BQU1hLEdBQUcsR0FBR1YsZ0JBQWdCLENBQUMsa0NBQWtCVyxpQkFBbEIsQ0FBRCxFQUE2QkMsU0FBN0IsRUFBdUMsSUFBdkMsQ0FBNUI7O0FBQ0EsTUFBTUMsTUFBTSxHQUFHYixnQkFBZ0IsQ0FBQyxrQ0FBa0JjLGlCQUFsQixDQUFELENBQS9COztBQUNBLE1BQU1DLE1BQU0sR0FBR2YsZ0JBQWdCLENBQ3BDLGtDQUFrQmdCLGlCQUFsQixDQURvQyxFQUVuQ0osU0FGbUMsRUFHcEMsSUFIb0MsQ0FBL0I7O0FBS0EsTUFBTUssTUFBTSxHQUFHakIsZ0JBQWdCLENBQUMsa0NBQWtCa0IsaUJBQWxCLENBQUQsQ0FBL0I7OztBQU9QOzs7Ozs7Ozs7Ozs7QUFZQSxNQUFNQyxjQUFjLEdBQUcsdUJBQXZCO0FBQ0EsTUFBTUMsTUFBTSxHQUFHLGtCQUFPLFFBQVAsRUFBaUIsSUFBakIsQ0FBZjtBQUNPLE1BQU1DLElBQUksR0FBRyxPQUFXLFNBQVNBLElBQVQsQ0FBY0MsR0FBZCxFQUFtRDtBQUNoRixRQUFNQyxNQUFpQixHQUFHbkIsYUFBSW9CLEtBQUosQ0FBVUYsR0FBRyxDQUFDbEIsR0FBZCxFQUFtQixJQUFuQixDQUExQjs7QUFDQSxRQUFNO0FBQUNxQixJQUFBQTtBQUFELE1BQWFGLE1BQW5COztBQUVBLE1BQUlFLFFBQVEsSUFBSU4sY0FBYyxDQUFDTyxJQUFmLENBQW9CRCxRQUFwQixDQUFoQixFQUErQztBQUM3QztBQUNBLGNBQWM7QUFDWixZQUFNO0FBQUNFLFFBQUFBLFVBQUQ7QUFBYUMsUUFBQUEsWUFBYjtBQUEyQkMsUUFBQUEsTUFBM0I7QUFBbUNDLFFBQUFBO0FBQW5DLFVBQTJDLGdDQUFlTCxRQUFmLENBQWpEO0FBQ0EsWUFBTU0sSUFBSSxHQUFHLG1CQUFHLGlCQUFILEVBQXNCLENBQ2pDSixVQURpQyxFQUVqQ0MsWUFGaUMsRUFHakNDLE1BSGlDLEVBSWpDQyxJQUppQyxDQUF0QixDQUFiLENBRlksQ0FRWjs7QUFDQSxhQUFPLG9CQUNMZixNQURLLEVBRUxLLE1BRkssRUFHTFcsSUFISyxDQUFQO0FBSUQ7QUFDRixHQWhCRCxNQWdCTyxJQUFJTixRQUFKLEVBQWM7QUFDbkI7O0FBQ0E7Ozs7QUFJQSxVQUFNckIsR0FBRyxHQUFHcUIsUUFBUSxDQUFDTyxPQUFULENBQWlCLFVBQWpCLEVBQTZCLEVBQTdCLENBQVo7QUFDQSxXQUFPaEMsZ0JBQWdCLENBQ3JCc0IsR0FBRyxDQUFDckIsTUFEaUIsRUFFckI7QUFBQ0csTUFBQUEsR0FBRDtBQUFNQyxNQUFBQSxJQUFJLEVBQUVrQixNQUFNLENBQUNVLEtBQVAsSUFBZ0I7QUFBNUIsS0FGcUIsRUFHckJYLEdBQUcsQ0FBQ1ksSUFBSixJQUFZLElBSFMsQ0FBdkI7QUFLRCxHQVpNLE1BWUE7QUFDTCxXQUFPLElBQVA7QUFDRDtBQUNGLENBbkNtQixHQW1DaEIsSUFuQ0ciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuXG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQge19fLCBjdXJyeX0gZnJvbSAncmFtZGEnO1xuaW1wb3J0IHtcbiAgREVMRVRFLFxuICBJTlNFUlQsXG4gIFNFTEVDVCxcbiAgVVBEQVRFLFxuICBnZXRNZXRob2RGcm9tVHlwZSxcbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHR5cGUge0V4ZWN1dGFibGUsIEhUVFBSZXF1ZXN0fSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQge2NvbXBvc2V9IGZyb20gJ3JhbWRhJztcbmltcG9ydCB7YWRkQXJnfSBmcm9tICcuL2FyZ3MuanMnO1xuaW1wb3J0IHtmbn0gZnJvbSAnLi9jaGFpbmFibGUuanMnO1xuXG4vLyBUT0RPIG1vdmUgdGhpc1xuaW1wb3J0IHtwYXJzZVNvdXJjZVVybH0gZnJvbSAnLi4vcXVlcnkvY29ubmVjdGlvbi5qcyc7XG5cbmNvbnN0IEVYRUNVVEFCTEUgPSBTeW1ib2wuZm9yKCdleGVjdXRhYmxlJyk7XG5cbmNvbnN0IGNyZWF0ZUV4ZWN1dGFibGUgPSBjdXJyeTxcbiAgc3RyaW5nLFxuICBFeGVjdXRhYmxlLFxuICB7W3N0cmluZ106IG1peGVkfSxcbiAgRXhlY3V0YWJsZSxcbj4oXG4gIChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBjaGFpbmFibGU6IEV4ZWN1dGFibGUsXG4gICAgZGF0YTogP3tbc3RyaW5nXTogbWl4ZWR9LFxuICApOiBFeGVjdXRhYmxlID0+ICh7XG4gICAgbWV0aG9kLFxuICAgIHVybDogY2hhaW5hYmxlLnVybCxcbiAgICBhcmdzOiBjaGFpbmFibGUuYXJncywgLy8gU0VMRUNULCBVUERBVEUsIERFTEVURSB1c2UgYXJnc1xuICAgIHZlcnNpb246IGNoYWluYWJsZS52ZXJzaW9uIHx8IG51bGwsXG4gICAgZGF0YSwgLy8gVVBEQVRFIGFuZCBJTlNFUlQgdXNlIGRhdGFcbiAgICB0eXBlOiBFWEVDVVRBQkxFLFxuICB9KSxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludmFsaWRFeGVjdXRhYmxlKGV4ZWN1dGFibGU6IEV4ZWN1dGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuICEoZXhlY3V0YWJsZS50eXBlID09PSBFWEVDVVRBQkxFKTtcbn1cblxuLy8gJEZsb3dGaXhNZVxuZXhwb3J0IGNvbnN0IGRlbCA9IGNyZWF0ZUV4ZWN1dGFibGUoZ2V0TWV0aG9kRnJvbVR5cGUoREVMRVRFKSwgKF9fOiBhbnkpLCBudWxsKTtcbmV4cG9ydCBjb25zdCBpbnNlcnQgPSBjcmVhdGVFeGVjdXRhYmxlKGdldE1ldGhvZEZyb21UeXBlKElOU0VSVCkpO1xuZXhwb3J0IGNvbnN0IHNlbGVjdCA9IGNyZWF0ZUV4ZWN1dGFibGUoXG4gIGdldE1ldGhvZEZyb21UeXBlKFNFTEVDVCksXG4gIChfXzogYW55KSxcbiAgbnVsbCxcbik7XG5leHBvcnQgY29uc3QgdXBkYXRlID0gY3JlYXRlRXhlY3V0YWJsZShnZXRNZXRob2RGcm9tVHlwZShVUERBVEUpKTtcblxudHlwZSBQYXJzZWRVcmwgPSB7XG4gIHBhdGhuYW1lPzogc3RyaW5nLFxuICBxdWVyeT86IHtbc3RyaW5nXTogbWl4ZWR9LFxufTtcblxuLyoqXG4gKiBQYXJzZSBodHRwIHJlcXVlc3QgYW5kIHJldHVybiBleGVjdXRhYmxlXG4gKlxuICogZS5nLlxuICogcXVlcnkoXG4gKiAgIGNsaWVudC5jb25uZWN0aW9uKCksXG4gKiAgIGRhdGFiYXNlLmh0dHAocmVxKVxuICogKS50aGVuKC4uLikuY2F0Y2goLi4uKVxuICpcbiAqIGh0dHAgcmVxdWVzdHMgYXJlIGVpdGhlciBkYXR1bSBjYWxscyBvciBzb3VyY2UgdXJsc1xuICogc291cmNlIHVybHMgcmV0dXJuIGEgc2luZ2xlIGNvbHVtbiBhbmQgaGF2ZSB0aGUgZm9ybWF0OiAvZGIvc2NoZW1hL3JlbC9uYW1lLmNvbHVtblxuICovXG5jb25zdCBzb3VyY2VVcmxSZWdleCA9IC9eXFwvZGJcXC8uK1xcLy4rXFwvLitcXC4uKy87XG5jb25zdCBzb3VyY2UgPSBhZGRBcmcoJ3NvdXJjZScsIHRydWUpO1xuZXhwb3J0IGNvbnN0IGh0dHAgPSBfX05PREVfXyA/IGZ1bmN0aW9uIGh0dHAocmVxOiBIVFRQUmVxdWVzdCk6IEV4ZWN1dGFibGUgfCBudWxsIHtcbiAgY29uc3QgcGFyc2VkOiBQYXJzZWRVcmwgPSB1cmwucGFyc2UocmVxLnVybCwgdHJ1ZSk7XG4gIGNvbnN0IHtwYXRobmFtZX0gPSBwYXJzZWQ7XG5cbiAgaWYgKHBhdGhuYW1lICYmIHNvdXJjZVVybFJlZ2V4LnRlc3QocGF0aG5hbWUpKSB7XG4gICAgLy8gcmV0dXJuIGNyZWF0ZUV4ZWN1dGFibGUoJ0dFVCcsIHt1cmw6IHBhdGhuYW1lLCBhcmdzOiB7c291cmNlOiB0cnVlfX0sIG51bGwpO1xuICAgIGlmIChfX05PREVfXykge1xuICAgICAgY29uc3Qge3NjaGVtYU5hbWUsIHJlbGF0aW9uTmFtZSwgY29sdW1uLCBuYW1lfSA9IHBhcnNlU291cmNlVXJsKHBhdGhuYW1lKTtcbiAgICAgIGNvbnN0IGZ1bmMgPSBmbignZW5kcG9pbnQuc291cmNlJywgW1xuICAgICAgICBzY2hlbWFOYW1lLFxuICAgICAgICByZWxhdGlvbk5hbWUsXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgbmFtZSxcbiAgICAgIF0pO1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGNvbXBvc2UoXG4gICAgICAgIHNlbGVjdCxcbiAgICAgICAgc291cmNlLFxuICAgICAgKShmdW5jKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocGF0aG5hbWUpIHtcbiAgICAvLyBUT0RPOiBkb2VzIHNvbWV0aGluZyBuZWVkIHRvIGhhcHBlbiBoZXJlIHdpdGggdmVyc2lvbnM/XG4gICAgLypcbiAgICBjb25zdCBbLCB2ZXJzaW9uXSA9IC9cXC8/KC4rKVxcLy8uZXhlYyhwYXRobmFtZSk7XG4gICAgY29uc29sZS5sb2codmVyc2lvbik7XG4gICAgKi9cbiAgICBjb25zdCB1cmwgPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8/Lis/XFwvLywgJycpO1xuICAgIHJldHVybiBjcmVhdGVFeGVjdXRhYmxlKFxuICAgICAgcmVxLm1ldGhvZCxcbiAgICAgIHt1cmwsIGFyZ3M6IHBhcnNlZC5xdWVyeSB8fCB7fX0sXG4gICAgICByZXEuYm9keSB8fCBudWxsLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gOiBudWxsO1xuIl19