UNPKG

aquameta-datum

Version:

Service layer for the Aquameta database API

101 lines (84 loc) 9.73 kB
"use strict"; 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