sequelize-ts-boilerplate
Version:
A REST API scaffolding tool designed to scale and easily generate CRUD endpoints based on database schema design
106 lines • 4.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("./constants");
class Utils {
constructor() {
this.getType = (dialect, dbType) => {
if (dialect === "mssql")
return constants_1.CONSTANT.MSSQL_DATATYPES_MAP[dbType];
else if (dialect === "mysql") {
let lowerCaseDbType = dbType.toLowerCase();
if (lowerCaseDbType.startsWith("int") || lowerCaseDbType.startsWith("bigint") || lowerCaseDbType.indexOf("decimal") > -1)
return "number";
else if (lowerCaseDbType.startsWith("longtext") || lowerCaseDbType.startsWith("varchar") || lowerCaseDbType.startsWith("nvarchar") || lowerCaseDbType.startsWith("mediumtext") || lowerCaseDbType.startsWith("shorttext"))
return "string";
else if (lowerCaseDbType.indexOf("date") > -1 || lowerCaseDbType.indexOf("time") > -1)
return "Date";
else if (lowerCaseDbType.indexOf("tinyint") > -1 || lowerCaseDbType.indexOf("bit") > -1)
return "boolean";
else {
console.log("Type not registered (please make PR and add this property): ", dbType);
}
}
};
this.isTableAllowed = (tableName, skipTables) => {
const matches = skipTables.filter((skipTable) => skipTable === tableName);
return matches.length ? false : true;
};
this.isLookup = (propertyName, lookup) => {
if (lookup && lookup.tableName && lookup.identifier) {
if (propertyName.includes(lookup.identifier))
return true;
}
return false;
};
/***
* if start, slice out start; if end, slice out end. if nothing happens, send back propertyName + "_alias";
*/
this.makeLookupPropName = (propertyName, lookup) => {
return propertyName.replace(lookup.sliceOut, "");
};
this.makeLookupPropName_v1 = (propertyName, lookup) => {
let ret = propertyName;
let startLen = lookup.start.length;
let endIndex = propertyName.indexOf(lookup.end);
if (endIndex > -1) {
if (lookup.start && endIndex > -1) {
ret = propertyName.slice(startLen);
}
if (lookup.end && endIndex > -1) {
ret = propertyName.slice(0, endIndex);
}
}
// return ret === propertyName ? this.lowerCase(ret + "Object") : this.lowerCase(ret);
return ret === propertyName ? this.lowerCaseFirstLetter(ret.slice(0, ret.length - 3)) : this.lowerCaseFirstLetter(ret);
};
this.pluralize = (modelName) => {
const lastChar = modelName.charAt(modelName.length - 1);
const specialPlurlizeCase = constants_1.CONSTANT.SPECIAL_PLURALIZE_CASES[modelName.toLowerCase()];
if (specialPlurlizeCase) {
modelName = specialPlurlizeCase;
}
else if (lastChar === "y") {
modelName = modelName.slice(0, modelName.length - 1) + "ies";
}
else if (lastChar === "s") {
modelName += "es";
}
else {
modelName += "s";
}
return this.lowerCaseFirstLetter(modelName);
};
this.lowerCaseFirstLetter = (value) => {
const lowerCaseFirstChar = value.charAt(0).toLowerCase();
return lowerCaseFirstChar + value.slice(1);
};
this.isMapTable = (tableName, mapTableIdentifiers) => {
let ret = false;
if (mapTableIdentifiers.length) {
const matches = mapTableIdentifiers.filter((x) => tableName.indexOf(x) > -1);
if (matches.length === mapTableIdentifiers.length)
ret = true;
}
return ret;
};
this.isPrimaryKey = (property, isPrimaryKey, primaryKeyIdentifier) => {
let ret = false;
if (primaryKeyIdentifier) {
if (property === primaryKeyIdentifier)
ret = true;
}
else {
ret = isPrimaryKey;
}
return ret;
};
// public createModelName = (name) => {
// return name + "Model";
// }
}
capitalizeFirstLetter(value) {
return value.charAt(0).toUpperCase() + value.slice(1);
}
}
exports.default = new Utils();
//# sourceMappingURL=general-utils.js.map