UNPKG

functional-models-orm-sql

Version:
116 lines 4.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.toToObjectResult = exports.toJsonAble = exports.BasicPropertyTypeToParser = exports.bestGuessParser = exports.dateParser = exports.booleanParser = exports.jsonParser = exports.floatParser = exports.integerParser = exports.stringParser = exports.nullParser = exports.toSimpleSqlObject = exports.toSimpleSqlValue = void 0; const functional_models_1 = require("functional-models"); const merge_1 = __importDefault(require("lodash/merge")); const toSimpleSqlValue = (propertyType, value) => { if (value === null || value === undefined) { return null; } // Arrays to stringified arrays. if (Array.isArray(value)) { return JSON.stringify(value); } if (typeof value === 'object') { return JSON.stringify(value); } return value; }; exports.toSimpleSqlValue = toSimpleSqlValue; const toSimpleSqlObject = (definition, obj) => { const properties = definition.properties; if (!obj) { return {}; } return Object.entries(properties) .map(([key, property]) => ({ key, property: property.getPropertyType(), })) .reduce((acc, { key, property }) => { const value = obj[key]; const sqlValue = (0, exports.toSimpleSqlValue)(property, value); return (0, merge_1.default)(acc, { [key]: sqlValue }); }, {}); }; exports.toSimpleSqlObject = toSimpleSqlObject; const nullParser = (func) => (value) => { if (value === undefined || value === null) { return null; } return func(value); }; exports.nullParser = nullParser; exports.stringParser = (0, exports.nullParser)((value) => `${value}`); exports.integerParser = (0, exports.nullParser)(parseInt); exports.floatParser = (0, exports.nullParser)(parseFloat); exports.jsonParser = (0, exports.nullParser)((value) => JSON.parse(value)); exports.booleanParser = (0, exports.nullParser)((value) => { if (typeof value === 'boolean') { return value; } return Boolean(value); }); exports.dateParser = (0, exports.nullParser)((value) => new Date(value).toISOString()); exports.bestGuessParser = (0, exports.nullParser)((value) => { const theType = typeof value; if (theType === 'number' || theType === 'boolean' || theType === 'object') { return value; } // Could be a stringified json... if (theType === 'string') { // eslint-disable-next-line try { const asJson = JSON.parse(theType); return asJson; // eslint-disable-next-line } catch (_a) { } return value; } throw new Error(`Cannot determine type of ${value}! Type: ${theType}`); }); exports.BasicPropertyTypeToParser = { [functional_models_1.PropertyType.UniqueId]: exports.stringParser, [functional_models_1.PropertyType.Date]: exports.dateParser, [functional_models_1.PropertyType.Datetime]: exports.dateParser, [functional_models_1.PropertyType.Object]: exports.jsonParser, [functional_models_1.PropertyType.Array]: exports.jsonParser, [functional_models_1.PropertyType.ModelReference]: exports.stringParser, [functional_models_1.PropertyType.Integer]: exports.integerParser, [functional_models_1.PropertyType.Text]: exports.stringParser, [functional_models_1.PropertyType.BigText]: exports.stringParser, [functional_models_1.PropertyType.Number]: exports.floatParser, [functional_models_1.PropertyType.Email]: exports.stringParser, [functional_models_1.PropertyType.Boolean]: exports.booleanParser, }; const toJsonAble = (propertyTypeToParser) => (propertyType, value) => { if (value === undefined || value === null) { return null; } const parser = propertyTypeToParser[propertyType]; if (!parser) { return (0, exports.bestGuessParser)(value); } return parser(value); }; exports.toJsonAble = toJsonAble; const toToObjectResult = (propertyTypeToParser) => (definition, obj) => { const properties = definition.properties; const parsers = (0, exports.toJsonAble)(propertyTypeToParser); return Object.entries(properties) .map(([key, property]) => ({ key, property: property.getPropertyType(), })) .reduce((acc, { key, property }) => { const value = obj[key]; const jsonAble = parsers(property, value); return (0, merge_1.default)(acc, { [key]: jsonAble }); }, {}); }; exports.toToObjectResult = toToObjectResult; //# sourceMappingURL=parsers.js.map