aquameta-datum
Version:
Service layer for the Aquameta database API
70 lines (48 loc) • 9.3 kB
JavaScript
import { cond, curry, T } from 'ramda';
// (a) => bool
const isFalsy = val => !val; // (a) => bool
const isArray = arr => arr instanceof Array; // (a|[a]) => [a]
const asArray = cond([[isFalsy, () => []], [isArray, i => i], [T, val => [val]]]); // ([a], [b]) => [a, b]
function concat(val1, val2) {
return [].concat(val1, val2);
} // (fn, str, str, exec) => exec
const applyOrderArgs = curry((fn, direction, column, chainable) => fn({
column,
direction
}, chainable)); // (fn, str, str, exec) => exec
const applyWhereArgs = curry((fn, op, name, value, chainable) => fn({
name,
op,
value
}, chainable)); // (fn, str, any, exec) => exec
const setProp = curry((functor, clause, val, chainable) => {
if (!(chainable && chainable.args)) {
throw new TypeError('chainable: invalid chainable');
}
const argValue = functor(chainable.args[clause], val);
if (typeof argValue === 'undefined' || argValue == null) {
throw new TypeError('chainable: invalid argument value');
}
return { ...chainable,
args: { ...chainable.args,
[clause]: argValue
}
};
}); // (a, b) => b
function valIdentity(previous, val) {
return val;
} // (a|[a], b|[b]) => [a, b]
function concatAsArrays(val1, val2) {
return concat(asArray(val1), asArray(val2));
} // (a|[a], b|[b]) => [[a, b]]
function concatAsNestedArrays(val1, val2) {
// TODO: This is super hacky. endpoint.rows_select expects a nested array [['val']]
// $FlowFixMe
return [concat(asArray(val1 ? val1[0] : []), asArray(val2))];
} // (str, any, chainable) => chainable
export const addArg = setProp(valIdentity);
export const addArrayArg = setProp(concatAsArrays);
export const addNestedArrayArg = setProp(concatAsNestedArrays); // (str, str, chainable) => chainable
export const addOrder = applyOrderArgs(addArrayArg('order')); // (str, str, any, chainable) => chainable
export const addWhere = applyWhereArgs(addArrayArg('where'));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFyZ3MuanMiXSwibmFtZXMiOlsiY29uZCIsImN1cnJ5IiwiVCIsImlzRmFsc3kiLCJ2YWwiLCJpc0FycmF5IiwiYXJyIiwiQXJyYXkiLCJhc0FycmF5IiwiaSIsImNvbmNhdCIsInZhbDEiLCJ2YWwyIiwiYXBwbHlPcmRlckFyZ3MiLCJmbiIsImRpcmVjdGlvbiIsImNvbHVtbiIsImNoYWluYWJsZSIsImFwcGx5V2hlcmVBcmdzIiwib3AiLCJuYW1lIiwidmFsdWUiLCJzZXRQcm9wIiwiZnVuY3RvciIsImNsYXVzZSIsImFyZ3MiLCJUeXBlRXJyb3IiLCJhcmdWYWx1ZSIsInZhbElkZW50aXR5IiwicHJldmlvdXMiLCJjb25jYXRBc0FycmF5cyIsImNvbmNhdEFzTmVzdGVkQXJyYXlzIiwiYWRkQXJnIiwiYWRkQXJyYXlBcmciLCJhZGROZXN0ZWRBcnJheUFyZyIsImFkZE9yZGVyIiwiYWRkV2hlcmUiXSwibWFwcGluZ3MiOiJBQUVBLFNBQVFBLElBQVIsRUFBY0MsS0FBZCxFQUFxQkMsQ0FBckIsUUFBNkIsT0FBN0I7O0FBR0E7QUFDQSxNQUFNQyxPQUE0QixHQUFHQyxHQUFHLElBQUksQ0FBQ0EsR0FBN0MsQyxDQUVBOzs7QUFDQSxNQUFNQyxPQUE0QixHQUFHQyxHQUFHLElBQUlBLEdBQUcsWUFBWUMsS0FBM0QsQyxDQUVBOzs7QUFDQSxNQUFNQyxPQUErQyxHQUFHUixJQUFJLENBQUMsQ0FDM0QsQ0FBQ0csT0FBRCxFQUFVLE1BQU0sRUFBaEIsQ0FEMkQsRUFFM0QsQ0FBQ0UsT0FBRCxFQUFXSSxDQUFELElBQTBCQSxDQUFwQyxDQUYyRCxFQUczRCxDQUFDUCxDQUFELEVBQUtFLEdBQUQsSUFBZ0IsQ0FBQ0EsR0FBRCxDQUFwQixDQUgyRCxDQUFELENBQTVELEMsQ0FNQTs7QUFDQSxTQUFTTSxNQUFULENBQWdCQyxJQUFoQixFQUFvQ0MsSUFBcEMsRUFBc0U7QUFDcEUsU0FBTyxHQUFHRixNQUFILENBQVVDLElBQVYsRUFBZ0JDLElBQWhCLENBQVA7QUFDRCxDLENBRUQ7OztBQUNBLE1BQU1DLGNBQWMsR0FBR1osS0FBSyxDQU8xQixDQUNFYSxFQURGLEVBRUVDLFNBRkYsRUFHRUMsTUFIRixFQUlFQyxTQUpGLEtBS2lCSCxFQUFFLENBQUM7QUFBQ0UsRUFBQUEsTUFBRDtBQUFTRCxFQUFBQTtBQUFULENBQUQsRUFBc0JFLFNBQXRCLENBWk8sQ0FBNUIsQyxDQWVBOztBQUNBLE1BQU1DLGNBQWMsR0FBR2pCLEtBQUssQ0FRMUIsQ0FDRWEsRUFERixFQUVFSyxFQUZGLEVBR0VDLElBSEYsRUFJRUMsS0FKRixFQUtFSixTQUxGLEtBTWlCSCxFQUFFLENBQUM7QUFBQ00sRUFBQUEsSUFBRDtBQUFPRCxFQUFBQSxFQUFQO0FBQVdFLEVBQUFBO0FBQVgsQ0FBRCxFQUFvQkosU0FBcEIsQ0FkTyxDQUE1QixDLENBaUJBOztBQUNBLE1BQU1LLE9BQU8sR0FBR3JCLEtBQUssQ0FDbkIsQ0FDRXNCLE9BREYsRUFFRUMsTUFGRixFQUdFcEIsR0FIRixFQUlFYSxTQUpGLEtBS0s7QUFDSCxNQUFJLEVBQUVBLFNBQVMsSUFBSUEsU0FBUyxDQUFDUSxJQUF6QixDQUFKLEVBQW9DO0FBQ2xDLFVBQU0sSUFBSUMsU0FBSixDQUFjLDhCQUFkLENBQU47QUFDRDs7QUFFRCxRQUFNQyxRQUFRLEdBQUdKLE9BQU8sQ0FBQ04sU0FBUyxDQUFDUSxJQUFWLENBQWVELE1BQWYsQ0FBRCxFQUF5QnBCLEdBQXpCLENBQXhCOztBQUVBLE1BQUksT0FBT3VCLFFBQVAsS0FBb0IsV0FBcEIsSUFBbUNBLFFBQVEsSUFBSSxJQUFuRCxFQUF5RDtBQUN2RCxVQUFNLElBQUlELFNBQUosQ0FBYyxtQ0FBZCxDQUFOO0FBQ0Q7O0FBRUQsU0FBTyxFQUNMLEdBQUdULFNBREU7QUFFTFEsSUFBQUEsSUFBSSxFQUFFLEVBQ0osR0FBR1IsU0FBUyxDQUFDUSxJQURUO0FBRUosT0FBQ0QsTUFBRCxHQUFVRztBQUZOO0FBRkQsR0FBUDtBQU9ELENBeEJrQixDQUFyQixDLENBMkJBOztBQUNBLFNBQVNDLFdBQVQsQ0FBcUJDLFFBQXJCLEVBQW9DekIsR0FBcEMsRUFBbUQ7QUFDakQsU0FBT0EsR0FBUDtBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBUzBCLGNBQVQsQ0FBd0JuQixJQUF4QixFQUFvREMsSUFBcEQsRUFBK0U7QUFDN0UsU0FBT0YsTUFBTSxDQUFDRixPQUFPLENBQUNHLElBQUQsQ0FBUixFQUFnQkgsT0FBTyxDQUFDSSxJQUFELENBQXZCLENBQWI7QUFDRCxDLENBRUQ7OztBQUNBLFNBQVNtQixvQkFBVCxDQUNFcEIsSUFERixFQUVFQyxJQUZGLEVBR2dCO0FBQ2Q7QUFDQTtBQUNBLFNBQU8sQ0FBQ0YsTUFBTSxDQUFDRixPQUFPLENBQUNHLElBQUksR0FBR0EsSUFBSSxDQUFDLENBQUQsQ0FBUCxHQUFhLEVBQWxCLENBQVIsRUFBK0JILE9BQU8sQ0FBQ0ksSUFBRCxDQUF0QyxDQUFQLENBQVA7QUFDRCxDLENBRUQ7OztBQUNBLE9BQU8sTUFBTW9CLE1BQU0sR0FBR1YsT0FBTyxDQUFDTSxXQUFELENBQXRCO0FBQ1AsT0FBTyxNQUFNSyxXQUFXLEdBQUdYLE9BQU8sQ0FBQ1EsY0FBRCxDQUEzQjtBQUNQLE9BQU8sTUFBTUksaUJBQWlCLEdBQUdaLE9BQU8sQ0FBQ1Msb0JBQUQsQ0FBakMsQyxDQUVQOztBQUNBLE9BQU8sTUFBTUksUUFBUSxHQUFHdEIsY0FBYyxDQUFDb0IsV0FBVyxDQUFDLE9BQUQsQ0FBWixDQUEvQixDLENBRVA7O0FBQ0EsT0FBTyxNQUFNRyxRQUFRLEdBQUdsQixjQUFjLENBQUNlLFdBQVcsQ0FBQyxPQUFELENBQVosQ0FBL0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuXG5pbXBvcnQge2NvbmQsIGN1cnJ5LCBUfSBmcm9tICdyYW1kYSc7XG5pbXBvcnQgdHlwZSB7RGlyZWN0aW9uLCBFeGVjdXRhYmxlLCBXaGVyZU9wc30gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyAoYSkgPT4gYm9vbFxuY29uc3QgaXNGYWxzeTogKD9taXhlZCkgPT4gYm9vbGVhbiA9IHZhbCA9PiAhdmFsO1xuXG4vLyAoYSkgPT4gYm9vbFxuY29uc3QgaXNBcnJheTogKD9taXhlZCkgPT4gYm9vbGVhbiA9IGFyciA9PiBhcnIgaW5zdGFuY2VvZiBBcnJheTtcblxuLy8gKGF8W2FdKSA9PiBbYV1cbmNvbnN0IGFzQXJyYXk6IChtaXhlZCB8IEFycmF5PG1peGVkPikgPT4gQXJyYXk8bWl4ZWQ+ID0gY29uZChbXG4gIFtpc0ZhbHN5LCAoKSA9PiBbXV0sXG4gIFtpc0FycmF5LCAoaTogYW55KTogQXJyYXk8bWl4ZWQ+ID0+IGldLFxuICBbVCwgKHZhbDogbWl4ZWQpID0+IFt2YWxdXSxcbl0pO1xuXG4vLyAoW2FdLCBbYl0pID0+IFthLCBiXVxuZnVuY3Rpb24gY29uY2F0KHZhbDE6IEFycmF5PG1peGVkPiwgdmFsMjogQXJyYXk8bWl4ZWQ+KTogQXJyYXk8bWl4ZWQ+IHtcbiAgcmV0dXJuIFtdLmNvbmNhdCh2YWwxLCB2YWwyKTtcbn1cblxuLy8gKGZuLCBzdHIsIHN0ciwgZXhlYykgPT4gZXhlY1xuY29uc3QgYXBwbHlPcmRlckFyZ3MgPSBjdXJyeTxcbiAgKGFueSwgRXhlY3V0YWJsZSkgPT4gRXhlY3V0YWJsZSxcbiAgRGlyZWN0aW9uLFxuICBzdHJpbmcsXG4gIEV4ZWN1dGFibGUsXG4gIEV4ZWN1dGFibGUsXG4+KFxuICAoXG4gICAgZm46IChhbnksIEV4ZWN1dGFibGUpID0+IEV4ZWN1dGFibGUsXG4gICAgZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gICAgY29sdW1uOiBzdHJpbmcsXG4gICAgY2hhaW5hYmxlOiBFeGVjdXRhYmxlLFxuICApOiBFeGVjdXRhYmxlID0+IGZuKHtjb2x1bW4sIGRpcmVjdGlvbn0sIGNoYWluYWJsZSksXG4pO1xuXG4vLyAoZm4sIHN0ciwgc3RyLCBleGVjKSA9PiBleGVjXG5jb25zdCBhcHBseVdoZXJlQXJncyA9IGN1cnJ5PFxuICAoYW55LCBFeGVjdXRhYmxlKSA9PiBFeGVjdXRhYmxlLFxuICBXaGVyZU9wcyxcbiAgc3RyaW5nLFxuICBhbnksXG4gIEV4ZWN1dGFibGUsXG4gIEV4ZWN1dGFibGUsXG4+KFxuICAoXG4gICAgZm46IChhbnksIEV4ZWN1dGFibGUpID0+IEV4ZWN1dGFibGUsXG4gICAgb3A6IFdoZXJlT3BzLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGNoYWluYWJsZTogRXhlY3V0YWJsZSxcbiAgKTogRXhlY3V0YWJsZSA9PiBmbih7bmFtZSwgb3AsIHZhbHVlfSwgY2hhaW5hYmxlKSxcbik7XG5cbi8vIChmbiwgc3RyLCBhbnksIGV4ZWMpID0+IGV4ZWNcbmNvbnN0IHNldFByb3AgPSBjdXJyeTwobWl4ZWQsIG1peGVkKSA9PiBtaXhlZCwgc3RyaW5nLCBhbnksIEV4ZWN1dGFibGUsIGFueT4oXG4gIChcbiAgICBmdW5jdG9yOiAobWl4ZWQsIG1peGVkKSA9PiBtaXhlZCxcbiAgICBjbGF1c2U6IHN0cmluZyxcbiAgICB2YWw6IGFueSxcbiAgICBjaGFpbmFibGU6IEV4ZWN1dGFibGUsXG4gICkgPT4ge1xuICAgIGlmICghKGNoYWluYWJsZSAmJiBjaGFpbmFibGUuYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NoYWluYWJsZTogaW52YWxpZCBjaGFpbmFibGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdWYWx1ZSA9IGZ1bmN0b3IoY2hhaW5hYmxlLmFyZ3NbY2xhdXNlXSwgdmFsKTtcblxuICAgIGlmICh0eXBlb2YgYXJnVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGFyZ1ZhbHVlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NoYWluYWJsZTogaW52YWxpZCBhcmd1bWVudCB2YWx1ZScpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jaGFpbmFibGUsXG4gICAgICBhcmdzOiB7XG4gICAgICAgIC4uLmNoYWluYWJsZS5hcmdzLFxuICAgICAgICBbY2xhdXNlXTogYXJnVmFsdWUsXG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4pO1xuXG4vLyAoYSwgYikgPT4gYlxuZnVuY3Rpb24gdmFsSWRlbnRpdHkocHJldmlvdXM6IGFueSwgdmFsOiBhbnkpOiBhbnkge1xuICByZXR1cm4gdmFsO1xufVxuXG4vLyAoYXxbYV0sIGJ8W2JdKSA9PiBbYSwgYl1cbmZ1bmN0aW9uIGNvbmNhdEFzQXJyYXlzKHZhbDE6IG1peGVkIHwgQXJyYXk8bWl4ZWQ+LCB2YWwyOiBtaXhlZCk6IEFycmF5PG1peGVkPiB7XG4gIHJldHVybiBjb25jYXQoYXNBcnJheSh2YWwxKSwgYXNBcnJheSh2YWwyKSk7XG59XG5cbi8vIChhfFthXSwgYnxbYl0pID0+IFtbYSwgYl1dXG5mdW5jdGlvbiBjb25jYXRBc05lc3RlZEFycmF5cyhcbiAgdmFsMTogbWl4ZWQgfCBBcnJheTxtaXhlZD4sXG4gIHZhbDI6IG1peGVkLFxuKTogQXJyYXk8bWl4ZWQ+IHtcbiAgLy8gVE9ETzogVGhpcyBpcyBzdXBlciBoYWNreS4gZW5kcG9pbnQucm93c19zZWxlY3QgZXhwZWN0cyBhIG5lc3RlZCBhcnJheSBbWyd2YWwnXV1cbiAgLy8gJEZsb3dGaXhNZVxuICByZXR1cm4gW2NvbmNhdChhc0FycmF5KHZhbDEgPyB2YWwxWzBdIDogW10pLCBhc0FycmF5KHZhbDIpKV07XG59XG5cbi8vIChzdHIsIGFueSwgY2hhaW5hYmxlKSA9PiBjaGFpbmFibGVcbmV4cG9ydCBjb25zdCBhZGRBcmcgPSBzZXRQcm9wKHZhbElkZW50aXR5KTtcbmV4cG9ydCBjb25zdCBhZGRBcnJheUFyZyA9IHNldFByb3AoY29uY2F0QXNBcnJheXMpO1xuZXhwb3J0IGNvbnN0IGFkZE5lc3RlZEFycmF5QXJnID0gc2V0UHJvcChjb25jYXRBc05lc3RlZEFycmF5cyk7XG5cbi8vIChzdHIsIHN0ciwgY2hhaW5hYmxlKSA9PiBjaGFpbmFibGVcbmV4cG9ydCBjb25zdCBhZGRPcmRlciA9IGFwcGx5T3JkZXJBcmdzKGFkZEFycmF5QXJnKCdvcmRlcicpKTtcblxuLy8gKHN0ciwgc3RyLCBhbnksIGNoYWluYWJsZSkgPT4gY2hhaW5hYmxlXG5leHBvcnQgY29uc3QgYWRkV2hlcmUgPSBhcHBseVdoZXJlQXJncyhhZGRBcnJheUFyZygnd2hlcmUnKSk7XG4iXX0=