sequelize-ts-boilerplate
Version:
A REST API scaffolding tool designed to scale and easily generate CRUD endpoints based on database schema design
117 lines (89 loc) • 4.23 kB
text/typescript
import { CONSTANT } from "./constants";
class Utils {
public getType = (dialect, dbType) => {
if (dialect === "mssql") return 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);
}
}
}
public isTableAllowed = (tableName, skipTables) => {
const matches = skipTables.filter((skipTable) => skipTable === tableName);
return matches.length ? false : true;
}
public 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";
*/
public makeLookupPropName = (propertyName, lookup) => {
return propertyName.replace(lookup.sliceOut, "")
}
public 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);
}
public pluralize = (modelName: string) => {
const lastChar = modelName.charAt(modelName.length - 1);
const specialPlurlizeCase = 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);
}
public lowerCaseFirstLetter = (value: string) => {
const lowerCaseFirstChar = value.charAt(0).toLowerCase();
return lowerCaseFirstChar + value.slice(1);
}
public capitalizeFirstLetter(value: string) {
return value.charAt(0).toUpperCase() + value.slice(1);
}
public isMapTable = (tableName: string, mapTableIdentifiers: Array<string>) => {
let ret = false;
if (mapTableIdentifiers.length) {
const matches = mapTableIdentifiers.filter((x) => tableName.indexOf(x) > -1);
if (matches.length === mapTableIdentifiers.length) ret = true;
}
return ret;
}
public 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";
// }
}
export default new Utils();