database-builder
Version:
Library to assist in creating and maintaining SQL commands.
159 lines (158 loc) • 7.31 kB
JavaScript
"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;