UNPKG

@sterblue/sterblue-sdk

Version:

Sterblue Graph SDK for graphile.sterblue.com

86 lines (77 loc) 4.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.enhanceSdk = void 0; var _fp = require("lodash/fp"); var _streamQuery = require("./stream-query"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const getRegex = /get(.*)/; const createRegex = /create(.*)/; const updateRegex = /update(.*)/; const deleteRegex = /delete(.*)/; const countRegex = /count(.*)/; const listRegex = /list(.*)/; /** * Type to get result of a promise */ /** * Process a Sdk and apply naming conventions to create Entity fields in the Sdk * which contains standard methods for each entity * @param sdk */ const enhanceSdk = originalSdk => { return (0, _fp.reduce)((sdk, [key, value]) => { if (getRegex.test(key)) { // It is a special getXxx function, // Add its simplified version to the entity const [, name] = key.match(getRegex); return (0, _fp.set)([name, "get"], (0, _streamQuery.getResultFromResultFunction)(value), _objectSpread(_objectSpread({}, sdk), {}, { [key]: value })); } else if (createRegex.test(key)) { // It is a special createXxx function, // Add its simplified version to the entity const [, name] = key.match(createRegex); return (0, _fp.set)([name, "create"], (0, _streamQuery.getResultFromResultFunction)(value), _objectSpread(_objectSpread({}, sdk), {}, { [key]: value })); } else if (updateRegex.test(key)) { // It is a special updateXxx function, // Add its simplified version to the entity const [, name] = key.match(updateRegex); return (0, _fp.set)([name, "update"], (0, _streamQuery.getResultFromResultFunction)(value), _objectSpread(_objectSpread({}, sdk), {}, { [key]: value })); } else if (deleteRegex.test(key)) { // It is a special deleteXxx function, // Add its simplified version to the entity const [, name] = key.match(deleteRegex); return (0, _fp.set)([name, "delete"], (0, _streamQuery.getResultFromResultFunction)(value), _objectSpread(_objectSpread({}, sdk), {}, { [key]: value })); } else if (countRegex.test(key)) { // It is a special countXxx function, // Add its simplified version to the entity const [, name] = key.match(countRegex); return (0, _fp.set)([name, "count"], (0, _streamQuery.getResultFromCountFunction)(value), _objectSpread(_objectSpread({}, sdk), {}, { [key]: value })); } else if (listRegex.test(key)) { // It is a special listXxx function // Add its simplified version to the entity // And add the associated "stream" function to the entity const [, name] = key.match(listRegex); return (0, _fp.set)([name, "stream"], (0, _streamQuery.streamQuery)(value, (0, _fp.get)(`count${name}`, originalSdk)), (0, _fp.set)([name, "list"], (0, _streamQuery.getResultFromListFunction)(value), _objectSpread(_objectSpread({}, sdk), {}, { [key]: value }))); } else { return _objectSpread(_objectSpread({}, sdk), {}, { [key]: value }); } }, {}, (0, _fp.toPairs)(originalSdk)); }; exports.enhanceSdk = enhanceSdk;