UNPKG

database-builder

Version:

Library to assist in creating and maintaining SQL commands.

159 lines (158 loc) 7.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DatabaseHelper = void 0; var datetime_utils_1 = require("./datetime-utils"); var utils_1 = require("./core/utils"); var field_type_1 = require("./core/enums/field-type"); var column_type_1 = require("./core/enums/column-type"); var errors_1 = require("./core/errors"); var mapper_utils_1 = require("./mapper/mapper-utils"); var DatabaseHelper = /** @class */ (function () { function DatabaseHelper() { } DatabaseHelper.prototype.isFlag = function (value, flag) { return !!(value & flag); }; DatabaseHelper.prototype.isTypeSimpleByType = function (type) { return !this.isFlag(type, field_type_1.FieldType.OBJECT) && !this.isFlag(type, field_type_1.FieldType.FUNCTION) && !this.isFlag(type, field_type_1.FieldType.ARRAY); }; DatabaseHelper.prototype.isTypeSimple = function (value) { var type = this.getType(value); return this.isTypeSimpleByType(type); }; DatabaseHelper.prototype.isTypeIgnoredInMapperByType = function (type) { return this.isFlag(type, field_type_1.FieldType.ARRAY); }; DatabaseHelper.prototype.isTypeIgnoredInMapper = function (value) { var type = this.getType(value); return this.isTypeIgnoredInMapperByType(type); }; DatabaseHelper.prototype.getFieldType = function (type, constructorName) { var typeCase = typeof type === 'string' ? type : mapper_utils_1.MapperUtils.resolveKey(type).toLowerCase(); switch (typeCase) { case "string": return field_type_1.FieldType.STRING; case "number": return field_type_1.FieldType.NUMBER; case "boolean": return field_type_1.FieldType.BOOLEAN; case "object": if (constructorName) { // tratar date como inteiro if (constructorName === "Date" || constructorName === "Moment") { return field_type_1.FieldType.DATE; } if (constructorName === "Array") { return field_type_1.FieldType.ARRAY; } } // serializar todos os objetos return field_type_1.FieldType.OBJECT; case "date": case "moment": return field_type_1.FieldType.DATE; case "function": return field_type_1.FieldType.FUNCTION; case "undefined": return field_type_1.FieldType.NULL; default: if (!utils_1.Utils.isString(type) && type.constructor.length === 0 ? new type() : {} instanceof Object) { return field_type_1.FieldType.OBJECT; } throw new errors_1.DatabaseBuilderError("type: '".concat(type, "', constructor name: '").concat(constructorName, "' n\u00E3o configurado!")); } }; DatabaseHelper.prototype.getType = function (value) { var valueFormatted = this.preFormatValue(value); var tipo = typeof valueFormatted; return this.getFieldType(tipo, valueFormatted === null || valueFormatted === void 0 ? void 0 : valueFormatted.constructor.name); }; DatabaseHelper.prototype.parseToColumnType = function (type) { // TODO: list if (this.isFlag(type, field_type_1.FieldType.ARRAY) && type !== field_type_1.FieldType.ARRAY) { return column_type_1.ColumnType.TABLE_REFERENCE; } if (this.isFlag(type, field_type_1.FieldType.STRING) || this.isFlag(type, field_type_1.FieldType.ARRAY) || this.isFlag(type, field_type_1.FieldType.OBJECT)) { return column_type_1.ColumnType.TEXT; } if (this.isFlag(type, field_type_1.FieldType.DATE) || this.isFlag(type, field_type_1.FieldType.NUMBER)) { return column_type_1.ColumnType.INTEGER; } if (this.isFlag(type, field_type_1.FieldType.BOOLEAN)) { return column_type_1.ColumnType.BOOLEAN; } if (utils_1.Utils.isNull(type)) { return void 0; } throw new errors_1.DatabaseBuilderError("type '".concat(type, "' n\u00E3o configurado!")); }; DatabaseHelper.prototype.parseToValueType = function (value, type) { if (type === void 0) { type = this.getType(value); } var valueFormatted = this.preFormatValue(value, type); return this.valueToDatabase(valueFormatted, type); }; DatabaseHelper.prototype.preFormatValue = function (value, type) { var regexISODatetime = /^(\d{4})-(\d{2})-(\d{2})(T(\d{2})\:(\d{2})\:(\d{2}))?((([+-](\d{2})\:(\d{2}))|Z{1})?)$/gm; if (typeof value === "string" && (type === void 0 || type === field_type_1.FieldType.DATE) && regexISODatetime.test(value)) { return datetime_utils_1.DatetimeUtils.datetimeToDatabase(value); } return value; }; DatabaseHelper.prototype.databaseToValue = function (columnValue, fieldType) { if ((this.isFlag(fieldType, field_type_1.FieldType.ARRAY) || this.isFlag(fieldType, field_type_1.FieldType.OBJECT)) && columnValue) { return JSON.parse(columnValue); } if (this.isFlag(fieldType, field_type_1.FieldType.DATE)) { return datetime_utils_1.DatetimeUtils.databaseToDatetime(columnValue); } if (this.isFlag(fieldType, field_type_1.FieldType.BOOLEAN)) { return utils_1.Utils.isValueBoolean(columnValue) ? this.toBoolean(columnValue) : columnValue; } return columnValue; }; DatabaseHelper.prototype.toBoolean = function (value) { return utils_1.Utils.isString(value) ? value === "true" : utils_1.Utils.isNumber(value) ? value === 1 : value; }; DatabaseHelper.prototype.valueToDatabase = function (value, fieldType) { if (this.isFlag(fieldType, field_type_1.FieldType.ARRAY) || this.isFlag(fieldType, field_type_1.FieldType.OBJECT)) { return JSON.stringify(value); } if (this.isFlag(fieldType, field_type_1.FieldType.DATE)) { return datetime_utils_1.DatetimeUtils.datetimeToDatabase(value); } return value; }; DatabaseHelper.prototype.getValue = function (instance, fieldReference) { return this.getValueByProperties(instance, fieldReference.split(".")); }; DatabaseHelper.prototype.getValueByProperties = function (instance, properties) { var shiftField = properties.shift(); if (shiftField) { if (instance.hasOwnProperty(shiftField)) { return this.getValueByProperties(instance[shiftField], properties); } return void 0; } return instance; }; return DatabaseHelper; }()); exports.DatabaseHelper = DatabaseHelper;