ts-helper.js
4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// put in seperate file to keep main sequelize-auto clean
'use strict';
var Sequelize = require('sequelize');
var _ = Sequelize.Utils._;
function getModelFileStart(indentation, spaces, tableName) {
var fileStart = "/* jshint indent: " + indentation + " */\n";
fileStart += '// tslint:disable\n';
fileStart += 'import * as sequelize from \'sequelize\';\n';
fileStart += 'import {DataTypes} from \'sequelize\';\n';
fileStart += 'import {' + tableName + 'Instance, ' + tableName + 'Attribute} from \'./db\';\n\n';
fileStart += "module.exports = function(sequelize: sequelize.Sequelize, DataTypes: DataTypes) {\n";
fileStart += spaces + 'return sequelize.define<' + tableName + 'Instance, ' + tableName + 'Attribute>(\'' + tableName + '\', {\n';
return fileStart;
}
function generateTableModels(tableNames, isSpaces, indentation, isCamelCase, isCamelCaseForFile) {
var spaces = '';
for (var i = 0; i < indentation; ++i) {
spaces += (isSpaces === true ? ' ' : "\t");
}
return generateImports() + generateInterface() + generateTableMapper();
function generateImports() {
var fileTextOutput = '// tslint:disable\n';
fileTextOutput += 'import * as path from \'path\';\n';
fileTextOutput += 'import * as sequelize from \'sequelize\';\n';
fileTextOutput += 'import * as def from \'./db\';\n\n';
return fileTextOutput;
}
function generateInterface() {
var fileTextOutput = 'export interface ITables {\n';
for (var i = 0; i < tableNames.length; i++) {
var table = isCamelCase ? _.camelCase(tableNames[i]) : tableNames[i];
fileTextOutput += spaces + table + ':def.' + table + 'Model;\n';
}
fileTextOutput += '}\n\n';
return fileTextOutput;
}
function generateTableMapper() {
var fileTextOutput = 'export const getModels = function(seq:sequelize.Sequelize):ITables {\n';
fileTextOutput += spaces + 'const tables:ITables = {\n';
for (var i = 0; i < tableNames.length; i++) {
var tableForClass = isCamelCase ? _.camelCase(tableNames[i]) : tableNames[i];
var tableForFile = isCamelCaseForFile ? _.camelCase(tableNames[i]) : tableNames[i];
fileTextOutput += spaces + spaces + tableForClass + ': seq.import(path.join(__dirname, \'./' + tableForFile + '\')),\n';
}
fileTextOutput += spaces + '};\n';
fileTextOutput += spaces + 'return tables;\n';
fileTextOutput += '};\n';
return fileTextOutput;
}
}
exports.model = {
getModelFileStart,
generateTableModels
};
function getDefinitionFileStart() {
return '// tslint:disable\nimport * as Sequelize from \'sequelize\';\n\n';
}
function getTableDefinition(tsTableDefAttr, tableName) {
var tableDef = '\n// table: ' + tableName + '\n';
tableDef += tsTableDefAttr + '\n}\n';
tableDef += 'export interface ' + tableName + 'Instance extends Sequelize.Instance<' + tableName + 'Attribute>, ' + tableName + 'Attribute { }\n';
tableDef += 'export interface ' + tableName + 'Model extends Sequelize.Model<' + tableName + 'Instance, ' + tableName + 'Attribute> { }\n';
return tableDef;
}
// doing this in ts helper to not clutter up main index if statement
function getMemberDefinition(spaces, fieldName, val, allowNull) {
if (fieldName === undefined) return '';
var m = '\n' + spaces + fieldName + (allowNull === true ? '?:' : ':');
if (val === undefined) {
m += 'any';
} else if (val.indexOf('DataTypes.BOOLEAN') > -1) {
m += 'boolean';
} else if (val.indexOf('DataTypes.INTEGER') > -1) {
m += 'number';
} else if (val.indexOf('DataTypes.BIGINT') > -1) {
m += 'number';
} else if (val.indexOf('DataTypes.STRING') > -1) {
m += 'string';
} else if (val.indexOf('DataTypes.CHAR') > -1) {
m += 'string';
} else if (val.indexOf('DataTypes.REAL') > -1) {
m += 'number';
} else if (val.indexOf('DataTypes.TEXT') > -1) {
m += 'string';
} else if (val.indexOf('DataTypes.DATE') > -1) {
m += 'Date';
} else if (val.indexOf('DataTypes.FLOAT') > -1) {
m += 'number';
} else if (val.indexOf('DataTypes.DECIMAL') > -1) {
m += 'number';
} else if (val.indexOf('DataTypes.DOUBLE') > -1) {
m += 'number';
} else if (val.indexOf('DataTypes.UUIDV4') > -1) {
m += 'string';
} else {
m += 'any';
}
return m + ';';
}
exports.def = {
getDefinitionFileStart,
getTableDefinition,
getMemberDefinition
};