typesql-cli 0.9.6 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +2 -3
  2. package/cli.js +76 -78
  3. package/cli.js.map +1 -1
  4. package/code-generator.d.ts +7 -7
  5. package/code-generator.d.ts.map +1 -1
  6. package/code-generator.js +193 -194
  7. package/code-generator.js.map +1 -1
  8. package/describe-dynamic-query.d.ts +1 -1
  9. package/describe-dynamic-query.d.ts.map +1 -1
  10. package/describe-dynamic-query.js +47 -42
  11. package/describe-dynamic-query.js.map +1 -1
  12. package/describe-nested-query.d.ts +2 -2
  13. package/describe-nested-query.d.ts.map +1 -1
  14. package/describe-nested-query.js +28 -25
  15. package/describe-nested-query.js.map +1 -1
  16. package/describe-query.d.ts +4 -4
  17. package/describe-query.d.ts.map +1 -1
  18. package/describe-query.js +24 -25
  19. package/describe-query.js.map +1 -1
  20. package/drivers/libsql.d.ts +2 -2
  21. package/drivers/libsql.d.ts.map +1 -1
  22. package/drivers/libsql.js +4 -5
  23. package/drivers/libsql.js.map +1 -1
  24. package/mysql-mapping.d.ts +1 -1
  25. package/mysql-mapping.d.ts.map +1 -1
  26. package/mysql-mapping.js +13 -13
  27. package/mysql-mapping.js.map +1 -1
  28. package/mysql-query-analyzer/collect-constraints.d.ts +4 -4
  29. package/mysql-query-analyzer/collect-constraints.d.ts.map +1 -1
  30. package/mysql-query-analyzer/collect-constraints.js +29 -31
  31. package/mysql-query-analyzer/collect-constraints.js.map +1 -1
  32. package/mysql-query-analyzer/infer-column-nullability.d.ts +2 -2
  33. package/mysql-query-analyzer/infer-column-nullability.d.ts.map +1 -1
  34. package/mysql-query-analyzer/infer-column-nullability.js +61 -63
  35. package/mysql-query-analyzer/infer-column-nullability.js.map +1 -1
  36. package/mysql-query-analyzer/infer-param-nullability.d.ts +2 -2
  37. package/mysql-query-analyzer/infer-param-nullability.d.ts.map +1 -1
  38. package/mysql-query-analyzer/infer-param-nullability.js +13 -14
  39. package/mysql-query-analyzer/infer-param-nullability.js.map +1 -1
  40. package/mysql-query-analyzer/parse.d.ts +2 -2
  41. package/mysql-query-analyzer/parse.d.ts.map +1 -1
  42. package/mysql-query-analyzer/parse.js +42 -40
  43. package/mysql-query-analyzer/parse.js.map +1 -1
  44. package/mysql-query-analyzer/select-columns.d.ts +4 -4
  45. package/mysql-query-analyzer/select-columns.d.ts.map +1 -1
  46. package/mysql-query-analyzer/select-columns.js +70 -65
  47. package/mysql-query-analyzer/select-columns.js.map +1 -1
  48. package/mysql-query-analyzer/traverse.d.ts +4 -4
  49. package/mysql-query-analyzer/traverse.d.ts.map +1 -1
  50. package/mysql-query-analyzer/traverse.js +211 -188
  51. package/mysql-query-analyzer/traverse.js.map +1 -1
  52. package/mysql-query-analyzer/types.d.ts +5 -5
  53. package/mysql-query-analyzer/types.d.ts.map +1 -1
  54. package/mysql-query-analyzer/unify.d.ts +2 -2
  55. package/mysql-query-analyzer/unify.d.ts.map +1 -1
  56. package/mysql-query-analyzer/unify.js +485 -487
  57. package/mysql-query-analyzer/unify.js.map +1 -1
  58. package/mysql-query-analyzer/util.d.ts.map +1 -1
  59. package/mysql-query-analyzer/util.js +4 -6
  60. package/mysql-query-analyzer/util.js.map +1 -1
  61. package/mysql-query-analyzer/verify-multiple-result.d.ts +2 -2
  62. package/mysql-query-analyzer/verify-multiple-result.d.ts.map +1 -1
  63. package/mysql-query-analyzer/verify-multiple-result.js +9 -9
  64. package/mysql-query-analyzer/verify-multiple-result.js.map +1 -1
  65. package/package.json +46 -44
  66. package/queryExectutor.d.ts +4 -4
  67. package/queryExectutor.d.ts.map +1 -1
  68. package/queryExectutor.js +48 -51
  69. package/queryExectutor.js.map +1 -1
  70. package/sql-generator.d.ts +2 -2
  71. package/sql-generator.d.ts.map +1 -1
  72. package/sql-generator.js +30 -29
  73. package/sql-generator.js.map +1 -1
  74. package/sqlite-query-analyzer/code-generator.d.ts +6 -6
  75. package/sqlite-query-analyzer/code-generator.d.ts.map +1 -1
  76. package/sqlite-query-analyzer/code-generator.js +226 -177
  77. package/sqlite-query-analyzer/code-generator.js.map +1 -1
  78. package/sqlite-query-analyzer/parser.d.ts +4 -4
  79. package/sqlite-query-analyzer/parser.d.ts.map +1 -1
  80. package/sqlite-query-analyzer/parser.js +17 -18
  81. package/sqlite-query-analyzer/parser.js.map +1 -1
  82. package/sqlite-query-analyzer/query-executor.d.ts +6 -6
  83. package/sqlite-query-analyzer/query-executor.d.ts.map +1 -1
  84. package/sqlite-query-analyzer/query-executor.js +42 -33
  85. package/sqlite-query-analyzer/query-executor.js.map +1 -1
  86. package/sqlite-query-analyzer/replace-list-params.d.ts +1 -1
  87. package/sqlite-query-analyzer/replace-list-params.d.ts.map +1 -1
  88. package/sqlite-query-analyzer/replace-list-params.js +5 -5
  89. package/sqlite-query-analyzer/replace-list-params.js.map +1 -1
  90. package/sqlite-query-analyzer/sqlite-describe-nested-query.d.ts +4 -4
  91. package/sqlite-query-analyzer/sqlite-describe-nested-query.d.ts.map +1 -1
  92. package/sqlite-query-analyzer/sqlite-describe-nested-query.js +19 -17
  93. package/sqlite-query-analyzer/sqlite-describe-nested-query.js.map +1 -1
  94. package/sqlite-query-analyzer/traverse.d.ts +5 -5
  95. package/sqlite-query-analyzer/traverse.d.ts.map +1 -1
  96. package/sqlite-query-analyzer/traverse.js +185 -155
  97. package/sqlite-query-analyzer/traverse.js.map +1 -1
  98. package/ts-dynamic-query-descriptor.d.ts +1 -1
  99. package/ts-dynamic-query-descriptor.d.ts.map +1 -1
  100. package/ts-dynamic-query-descriptor.js +7 -8
  101. package/ts-dynamic-query-descriptor.js.map +1 -1
  102. package/ts-nested-descriptor.d.ts +4 -4
  103. package/ts-nested-descriptor.d.ts.map +1 -1
  104. package/ts-nested-descriptor.js +13 -14
  105. package/ts-nested-descriptor.js.map +1 -1
  106. package/types.d.ts +18 -15
  107. package/types.d.ts.map +1 -1
  108. package/util.d.ts.map +1 -1
  109. package/util.js.map +1 -1
  110. package/utility-types.d.ts.map +1 -1
package/code-generator.js CHANGED
@@ -35,9 +35,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.generateTsFileFromContent = exports.generateTsFile = exports.convertToCamelCaseName = exports.capitalize = exports.writeFile = exports.replaceOrderByParam = exports.hasDateColumn = exports.hasStringColumn = exports.escapeInvalidTsField = exports.renameInvalidNames = exports.removeDuplicatedParameters2 = exports.removeDuplicatedParameters = exports.generateTsDescriptor = exports.writeTypeBlock = exports.generateRelationType = exports.getOperator = exports.generateTsCodeForMySQL = void 0;
39
- const fs_1 = __importDefault(require("fs"));
40
- const path_1 = __importStar(require("path"));
38
+ exports.generateTsCodeForMySQL = generateTsCodeForMySQL;
39
+ exports.getOperator = getOperator;
40
+ exports.generateRelationType = generateRelationType;
41
+ exports.writeTypeBlock = writeTypeBlock;
42
+ exports.generateTsDescriptor = generateTsDescriptor;
43
+ exports.removeDuplicatedParameters = removeDuplicatedParameters;
44
+ exports.removeDuplicatedParameters2 = removeDuplicatedParameters2;
45
+ exports.renameInvalidNames = renameInvalidNames;
46
+ exports.escapeInvalidTsField = escapeInvalidTsField;
47
+ exports.hasStringColumn = hasStringColumn;
48
+ exports.hasDateColumn = hasDateColumn;
49
+ exports.replaceOrderByParam = replaceOrderByParam;
50
+ exports.writeFile = writeFile;
51
+ exports.capitalize = capitalize;
52
+ exports.convertToCamelCaseName = convertToCamelCaseName;
53
+ exports.generateTsFile = generateTsFile;
54
+ exports.generateTsFileFromContent = generateTsFileFromContent;
55
+ const node_fs_1 = __importDefault(require("node:fs"));
56
+ const node_path_1 = __importStar(require("node:path"));
41
57
  const camelcase_1 = __importDefault(require("camelcase"));
42
58
  const Either_1 = require("fp-ts/lib/Either");
43
59
  const mysql_mapping_1 = require("./mysql-mapping");
@@ -45,33 +61,29 @@ const describe_query_1 = require("./describe-query");
45
61
  const code_block_writer_1 = __importDefault(require("code-block-writer"));
46
62
  const ts_nested_descriptor_1 = require("./ts-nested-descriptor");
47
63
  const ts_dynamic_query_descriptor_1 = require("./ts-dynamic-query-descriptor");
48
- const os_1 = require("os");
64
+ const node_os_1 = require("node:os");
49
65
  const code_generator_1 = require("./sqlite-query-analyzer/code-generator");
50
- function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
66
+ function generateTsCodeForMySQL(tsDescriptor, fileName, crud = false) {
51
67
  var _a;
52
68
  const writer = new code_block_writer_1.default();
53
69
  const camelCaseName = convertToCamelCaseName(fileName);
54
70
  const capitalizedName = capitalize(camelCaseName);
55
- const dataTypeName = capitalizedName + 'Data';
56
- const paramsTypeName = capitalizedName + 'Params';
57
- const resultTypeName = capitalizedName + 'Result';
58
- const dynamicParamsTypeName = capitalizedName + 'DynamicParams';
59
- const selectColumnsTypeName = capitalizedName + 'Select';
60
- const whereTypeName = capitalizedName + 'Where';
61
- const orderByTypeName = capitalizedName + 'OrderBy';
71
+ const dataTypeName = `${capitalizedName}Data`;
72
+ const paramsTypeName = `${capitalizedName}Params`;
73
+ const resultTypeName = `${capitalizedName}Result`;
74
+ const dynamicParamsTypeName = `${capitalizedName}DynamicParams`;
75
+ const selectColumnsTypeName = `${capitalizedName}Select`;
76
+ const whereTypeName = `${capitalizedName}Where`;
77
+ const orderByTypeName = `${capitalizedName}OrderBy`;
62
78
  const generateOrderBy = tsDescriptor.orderByColumns != null && tsDescriptor.orderByColumns.length > 0;
63
79
  // Import declarations
64
- if (target == 'deno') {
65
- writer.writeLine(`import { Client } from "https://deno.land/x/mysql/mod.ts";`);
66
- }
67
- else {
68
- writer.writeLine(`import type { Connection } from 'mysql2/promise';`);
69
- if (tsDescriptor.dynamicQuery != null) {
70
- writer.writeLine(`import { EOL } from 'os';`);
71
- }
80
+ writer.writeLine(`import type { Connection } from 'mysql2/promise';`);
81
+ if (tsDescriptor.dynamicQuery != null) {
82
+ writer.writeLine(`import { EOL } from 'os';`);
72
83
  }
73
84
  writer.blankLine();
74
- if (tsDescriptor.data) { //update
85
+ if (tsDescriptor.data) {
86
+ //update
75
87
  writeTypeBlock(writer, tsDescriptor.data, dataTypeName, crud);
76
88
  }
77
89
  const orderByField = generateOrderBy ? `orderBy: [${orderByTypeName}, ...${orderByTypeName}[]]` : undefined;
@@ -95,7 +107,7 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
95
107
  if (tsDescriptor.dynamicQuery) {
96
108
  const selectFields = (0, ts_dynamic_query_descriptor_1.mapToDynamicSelectColumns)(tsDescriptor.columns);
97
109
  writeTypeBlock(writer, selectFields, selectColumnsTypeName, false);
98
- writer.write(`const selectFragments = `).inlineBlock(() => {
110
+ writer.write('const selectFragments = ').inlineBlock(() => {
99
111
  var _a;
100
112
  (_a = tsDescriptor.dynamicQuery) === null || _a === void 0 ? void 0 : _a.select.forEach((fragment, index) => {
101
113
  const field = tsDescriptor.columns[index].name;
@@ -105,17 +117,16 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
105
117
  writer.write(' as const;');
106
118
  if (orderByField != null) {
107
119
  writer.blankLine();
108
- writer.write(`const orderByFragments = `).inlineBlock(() => {
109
- var _a;
110
- (_a = tsDescriptor.orderByColumns) === null || _a === void 0 ? void 0 : _a.forEach((col) => {
120
+ writer.write('const orderByFragments = ').inlineBlock(() => {
121
+ for (const col of tsDescriptor.orderByColumns || []) {
111
122
  writer.writeLine(`'${col}': \`${col}\`,`);
112
- });
123
+ }
113
124
  });
114
125
  writer.write(' as const;');
115
126
  }
116
127
  writer.blankLine();
117
128
  writer.writeLine(`const NumericOperatorList = ['=', '<>', '>', '<', '>=', '<='] as const;`);
118
- writer.writeLine(`type NumericOperator = typeof NumericOperatorList[number];`);
129
+ writer.writeLine('type NumericOperator = typeof NumericOperatorList[number];');
119
130
  if (hasStringColumn(tsDescriptor.columns)) {
120
131
  writer.writeLine(`type StringOperator = '=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE';`);
121
132
  }
@@ -123,41 +134,43 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
123
134
  writer.writeLine(`type BetweenOperator = 'BETWEEN';`);
124
135
  writer.blankLine();
125
136
  writer.write(`export type ${whereTypeName} =`).indent(() => {
126
- tsDescriptor.columns.forEach(col => {
137
+ for (const col of tsDescriptor.columns) {
127
138
  writer.writeLine(`| ['${col.name}', ${getOperator(col.tsType)}, ${col.tsType} | null]`);
128
139
  writer.writeLine(`| ['${col.name}', SetOperator, ${col.tsType}[]]`);
129
140
  writer.writeLine(`| ['${col.name}', BetweenOperator, ${col.tsType} | null, ${col.tsType} | null]`);
130
- });
141
+ }
131
142
  });
132
143
  writer.blankLine();
133
144
  }
134
145
  let functionReturnType = resultTypeName;
135
- functionReturnType += tsDescriptor.multipleRowsResult ? '[]' : tsDescriptor.queryType == 'Select' ? ' | null' : '';
136
- let functionArguments = target == 'deno' ? 'client: Client' : 'connection: Connection';
137
- functionArguments += tsDescriptor.data && tsDescriptor.data.length > 0 ? ', data: ' + dataTypeName : '';
146
+ functionReturnType += tsDescriptor.multipleRowsResult ? '[]' : tsDescriptor.queryType === 'Select' ? ' | null' : '';
147
+ let functionArguments = 'connection: Connection';
148
+ functionArguments += tsDescriptor.data && tsDescriptor.data.length > 0 ? `, data: ${dataTypeName}` : '';
138
149
  if (tsDescriptor.dynamicQuery == null) {
139
- functionArguments += tsDescriptor.parameters.length > 0 || generateOrderBy ? ', params: ' + paramsTypeName : '';
150
+ functionArguments += tsDescriptor.parameters.length > 0 || generateOrderBy ? `, params: ${paramsTypeName}` : '';
140
151
  }
141
152
  else {
142
153
  functionArguments += `, ${orderByField ? 'params' : 'params?'}: ${dynamicParamsTypeName}`;
143
154
  }
144
- const allParameters = tsDescriptor.data ? tsDescriptor.data.map((field, index) => {
145
- //:nameIsSet, :name, :valueIsSet, :value....
146
- if (crud && index % 2 == 0) {
147
- const nextField = tsDescriptor.data[index + 1];
148
- return `data.${nextField.name} !== undefined`;
149
- }
150
- return 'data.' + field.name;
151
- }) : [];
152
- allParameters.push(...tsDescriptor.parameterNames.map((paramName) => generateParam(target, paramName)));
153
- const queryParams = allParameters.length > 0 ? ', [' + allParameters.join(', ') + ']' : '';
155
+ const allParameters = tsDescriptor.data
156
+ ? tsDescriptor.data.map((field, index) => {
157
+ //:nameIsSet, :name, :valueIsSet, :value....
158
+ if (crud && index % 2 === 0) {
159
+ const nextField = tsDescriptor.data[index + 1];
160
+ return `data.${nextField.name} !== undefined`;
161
+ }
162
+ return `data.${field.name}`;
163
+ })
164
+ : [];
165
+ allParameters.push(...tsDescriptor.parameterNames.map((paramName) => generateParam(paramName)));
166
+ const queryParams = allParameters.length > 0 ? `, [${allParameters.join(', ')}]` : '';
154
167
  const escapedBackstick = scapeBackStick(tsDescriptor.sql);
155
168
  const processedSql = replaceOrderByParam(escapedBackstick);
156
169
  const sqlSplit = processedSql.split('\n');
157
170
  writer.write(`export async function ${camelCaseName}(${functionArguments}): Promise<${functionReturnType}>`).block(() => {
158
171
  if (tsDescriptor.dynamicQuery == null) {
159
172
  writer.writeLine('const sql = `');
160
- sqlSplit.forEach(sqlLine => {
173
+ sqlSplit.forEach((sqlLine) => {
161
174
  writer.indent().write(sqlLine);
162
175
  writer.newLine();
163
176
  });
@@ -165,34 +178,36 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
165
178
  writer.blankLine();
166
179
  }
167
180
  else {
168
- writer.writeLine(`const where = whereConditionsToObject(params?.where);`);
181
+ writer.writeLine('const where = whereConditionsToObject(params?.where);');
169
182
  if (orderByField != null) {
170
- writer.writeLine(`const orderBy = orderByToObject(params.orderBy);`);
183
+ writer.writeLine('const orderBy = orderByToObject(params.orderBy);');
171
184
  }
172
185
  writer.writeLine('const paramsValues: any = [];');
173
186
  if (tsDescriptor.dynamicQuery.with) {
174
187
  writer.writeLine(`let withClause = '';`);
175
- tsDescriptor.dynamicQuery.with.forEach(withFragment => {
188
+ tsDescriptor.dynamicQuery.with.forEach((withFragment) => {
176
189
  generateDynamicQueryFrom(writer, 'withClause', withFragment, tsDescriptor.columns);
177
190
  });
178
191
  }
179
192
  writer.writeLine(`let sql = 'SELECT';`);
180
- tsDescriptor.dynamicQuery.select.forEach(fragment => {
181
- writer.write(`if (params?.select == null || ${fragment.dependOnFields.map(fieldIndex => 'params.select.' + tsDescriptor.columns[fieldIndex].name).join('&&')})`).block(() => {
193
+ tsDescriptor.dynamicQuery.select.forEach((fragment) => {
194
+ writer
195
+ .write(`if (params?.select == null || ${fragment.dependOnFields.map((fieldIndex) => `params.select.${tsDescriptor.columns[fieldIndex].name}`).join('&&')})`)
196
+ .block(() => {
182
197
  writer.write(`sql = appendSelect(sql, \`${fragment.fragment}\`);`);
183
198
  });
184
199
  });
185
- tsDescriptor.dynamicQuery.from.forEach(fragment => {
200
+ tsDescriptor.dynamicQuery.from.forEach((fragment) => {
186
201
  generateDynamicQueryFrom(writer, 'sql', fragment, tsDescriptor.columns, tsDescriptor.orderByColumns != null);
187
202
  });
188
- writer.writeLine(`sql += EOL + \`WHERE 1 = 1\`;`);
189
- tsDescriptor.dynamicQuery.where.forEach(fragment => {
190
- const ifParamConditions = fragment.dependOnParams.map(param => 'params?.params?.' + param + ' != null');
191
- const paramValues = fragment.parameters.map(param => 'params.params.' + param);
203
+ writer.writeLine('sql += EOL + `WHERE 1 = 1`;');
204
+ tsDescriptor.dynamicQuery.where.forEach((fragment) => {
205
+ const ifParamConditions = fragment.dependOnParams.map((param) => `params?.params?.${param} != null`);
206
+ const paramValues = fragment.parameters.map((param) => `params.params.${param}`);
192
207
  if (ifParamConditions.length > 0) {
193
208
  writer.write(`if (${ifParamConditions.join(' || ')})`).block(() => {
194
209
  writer.writeLine(`sql += EOL + \`${fragment.fragment}\`;`);
195
- paramValues.forEach(paramValues => {
210
+ paramValues.forEach((paramValues) => {
196
211
  writer.writeLine(`paramsValues.push(${paramValues});`);
197
212
  });
198
213
  });
@@ -206,11 +221,11 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
206
221
  writer.writeLine(`sql = 'WITH ' + withClause + EOL + sql;`);
207
222
  });
208
223
  }
209
- writer.write(`params?.where?.forEach(condition => `).inlineBlock(() => {
210
- writer.writeLine(`const where = whereCondition(condition);`);
211
- writer.write(`if (where?.hasValue)`).block(() => {
224
+ writer.write('params?.where?.forEach(condition => ').inlineBlock(() => {
225
+ writer.writeLine('const where = whereCondition(condition);');
226
+ writer.write('if (where?.hasValue)').block(() => {
212
227
  writer.writeLine(`sql += EOL + 'AND ' + where.sql;`);
213
- writer.write(`paramsValues.push(...where.values);`);
228
+ writer.write('paramsValues.push(...where.values);');
214
229
  });
215
230
  });
216
231
  writer.write(');');
@@ -218,37 +233,31 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
218
233
  writer.writeLine('sql += EOL + `ORDER BY ${escapeOrderBy(params.orderBy)}`;');
219
234
  }
220
235
  }
221
- const singleRowSelect = tsDescriptor.queryType == 'Select' && tsDescriptor.multipleRowsResult === false;
222
- if (target == 'deno') {
223
- writer.writeLine(`return client.query(sql${queryParams})`);
224
- writer.indent().write(`.then(res => res${singleRowSelect ? '[0]' : ''});`);
225
- }
226
- else {
227
- if (tsDescriptor.queryType == 'Select') {
228
- if (tsDescriptor.dynamicQuery == null) {
229
- writer.writeLine(`return connection.query({sql, rowsAsArray: true}${queryParams})`);
230
- writer.indent().write(`.then(res => res[0] as any[])`);
231
- writer.newLine().indent().write(`.then(res => res.map(data => mapArrayTo${resultTypeName}(data)))`);
232
- }
233
- else {
234
- writer.writeLine(`return connection.query({ sql, rowsAsArray: true }, paramsValues)`);
235
- writer.indent().write(`.then(res => res[0] as any[])`);
236
- writer.newLine().indent().write(`.then(res => res.map(data => mapArrayTo${resultTypeName}(data, params?.select)))`);
237
- }
238
- }
239
- else {
240
- writer.writeLine(`return connection.query(sql${queryParams})`);
241
- writer.indent().write(`.then(res => res[0] as ${resultTypeName})`);
242
- }
243
- if (tsDescriptor.queryType == 'Select' && tsDescriptor.multipleRowsResult == false) {
244
- writer.newLine().indent().write(`.then(res => res[0]);`);
236
+ const singleRowSelect = tsDescriptor.queryType === 'Select' && tsDescriptor.multipleRowsResult === false;
237
+ if (tsDescriptor.queryType === 'Select') {
238
+ if (tsDescriptor.dynamicQuery == null) {
239
+ writer.writeLine(`return connection.query({sql, rowsAsArray: true}${queryParams})`);
240
+ writer.indent().write('.then(res => res[0] as any[])');
241
+ writer.newLine().indent().write(`.then(res => res.map(data => mapArrayTo${resultTypeName}(data)))`);
245
242
  }
246
243
  else {
247
- writer.write(';');
244
+ writer.writeLine('return connection.query({ sql, rowsAsArray: true }, paramsValues)');
245
+ writer.indent().write('.then(res => res[0] as any[])');
246
+ writer.newLine().indent().write(`.then(res => res.map(data => mapArrayTo${resultTypeName}(data, params?.select)))`);
248
247
  }
249
248
  }
249
+ else {
250
+ writer.writeLine(`return connection.query(sql${queryParams})`);
251
+ writer.indent().write(`.then(res => res[0] as ${resultTypeName})`);
252
+ }
253
+ if (tsDescriptor.queryType === 'Select' && tsDescriptor.multipleRowsResult === false) {
254
+ writer.newLine().indent().write('.then(res => res[0]);');
255
+ }
256
+ else {
257
+ writer.write(';');
258
+ }
250
259
  });
251
- if (target == 'node' && tsDescriptor.queryType == 'Select') {
260
+ if (tsDescriptor.queryType === 'Select') {
252
261
  writer.blankLine();
253
262
  if (tsDescriptor.dynamicQuery == null) {
254
263
  writer.write(`function mapArrayTo${resultTypeName}(data: any)`).block(() => {
@@ -263,7 +272,7 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
263
272
  else {
264
273
  writer.write(`function mapArrayTo${resultTypeName}(data: any, select?: ${selectColumnsTypeName})`).block(() => {
265
274
  writer.writeLine(`const result = {} as ${resultTypeName};`);
266
- writer.writeLine(`let rowIndex = 0;`);
275
+ writer.writeLine('let rowIndex = 0;');
267
276
  tsDescriptor.columns.forEach((tsField) => {
268
277
  writer.write(`if (select == null || select.${tsField.name})`).block(() => {
269
278
  writer.writeLine(`result.${tsField.name} = data[rowIndex++];`);
@@ -272,39 +281,39 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
272
281
  writer.write('return result;');
273
282
  });
274
283
  writer.blankLine();
275
- writer.write(`function appendSelect(sql: string, selectField: string)`).block(() => {
284
+ writer.write('function appendSelect(sql: string, selectField: string)').block(() => {
276
285
  writer.write(`if (sql == 'SELECT')`).block(() => {
277
- writer.writeLine(`return sql + EOL + selectField;`);
286
+ writer.writeLine('return sql + EOL + selectField;');
278
287
  });
279
- writer.write(`else`).block(() => {
288
+ writer.write('else').block(() => {
280
289
  writer.writeLine(`return sql + ', ' + EOL + selectField;`);
281
290
  });
282
291
  });
283
292
  writer.blankLine();
284
293
  writer.write(`function whereConditionsToObject(whereConditions?: ${whereTypeName}[])`).block(() => {
285
- writer.writeLine(`const obj = {} as any;`);
286
- writer.write(`whereConditions?.forEach(condition => `).inlineBlock(() => {
287
- writer.writeLine(`const where = whereCondition(condition);`);
288
- writer.write(`if (where?.hasValue) `).block(() => {
289
- writer.writeLine(`obj[condition[0]] = true;`);
294
+ writer.writeLine('const obj = {} as any;');
295
+ writer.write('whereConditions?.forEach(condition => ').inlineBlock(() => {
296
+ writer.writeLine('const where = whereCondition(condition);');
297
+ writer.write('if (where?.hasValue) ').block(() => {
298
+ writer.writeLine('obj[condition[0]] = true;');
290
299
  });
291
300
  });
292
301
  writer.write(');');
293
- writer.writeLine(`return obj;`);
302
+ writer.writeLine('return obj;');
294
303
  });
295
304
  if (orderByField != null) {
296
305
  writer.blankLine();
297
306
  writer.write(`function orderByToObject(${orderByField})`).block(() => {
298
- writer.writeLine(`const obj = {} as any;`);
299
- writer.write(`orderBy?.forEach(order => `).inlineBlock(() => {
300
- writer.writeLine(`obj[order.column] = true;`);
307
+ writer.writeLine('const obj = {} as any;');
308
+ writer.write('orderBy?.forEach(order => ').inlineBlock(() => {
309
+ writer.writeLine('obj[order.column] = true;');
301
310
  });
302
311
  writer.write(');');
303
- writer.writeLine(`return obj;`);
312
+ writer.writeLine('return obj;');
304
313
  });
305
314
  }
306
315
  writer.blankLine();
307
- writer.write(`type WhereConditionResult = `).block(() => {
316
+ writer.write('type WhereConditionResult = ').block(() => {
308
317
  writer.writeLine('sql: string;');
309
318
  writer.writeLine('hasValue: boolean;');
310
319
  writer.writeLine('values: any[];');
@@ -317,29 +326,29 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
317
326
  writer.blankLine();
318
327
  if (hasStringColumn(tsDescriptor.columns)) {
319
328
  writer.write(`if (operator == 'LIKE') `).block(() => {
320
- writer.write(`return `).block(() => {
321
- writer.writeLine('sql: `${selectFragment} LIKE concat(\'%\', ?, \'%\')`,');
329
+ writer.write('return ').block(() => {
330
+ writer.writeLine("sql: `${selectFragment} LIKE concat('%', ?, '%')`,");
322
331
  writer.writeLine('hasValue: condition[2] != null,');
323
332
  writer.writeLine('values: [condition[2]]');
324
333
  });
325
334
  });
326
335
  }
327
336
  writer.write(`if (operator == 'BETWEEN') `).block(() => {
328
- writer.write(`return `).block(() => {
337
+ writer.write('return ').block(() => {
329
338
  writer.writeLine('sql: `${selectFragment} BETWEEN ? AND ?`,');
330
339
  writer.writeLine('hasValue: condition[2] != null && condition[3] != null,');
331
340
  writer.writeLine('values: [condition[2], condition[3]]');
332
341
  });
333
342
  });
334
343
  writer.write(`if (operator == 'IN' || operator == 'NOT IN') `).block(() => {
335
- writer.write(`return `).block(() => {
344
+ writer.write('return ').block(() => {
336
345
  writer.writeLine('sql: `${selectFragment} ${operator} (?)`,');
337
346
  writer.writeLine('hasValue: condition[2] != null && condition[2].length > 0,');
338
347
  writer.writeLine('values: [condition[2]]');
339
348
  });
340
349
  });
341
- writer.write(`if (NumericOperatorList.includes(operator)) `).block(() => {
342
- writer.write(`return `).block(() => {
350
+ writer.write('if (NumericOperatorList.includes(operator)) ').block(() => {
351
+ writer.write('return ').block(() => {
343
352
  writer.writeLine('sql: `${selectFragment} ${operator} ?`,');
344
353
  writer.writeLine('hasValue: condition[2] != null,');
345
354
  writer.writeLine('values: [condition[2]]');
@@ -349,14 +358,14 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
349
358
  }
350
359
  }
351
360
  if (generateOrderBy) {
352
- const orderByColumnsType = (_a = tsDescriptor.orderByColumns) === null || _a === void 0 ? void 0 : _a.map(col => `'${col}'`).join(' | ');
361
+ const orderByColumnsType = (_a = tsDescriptor.orderByColumns) === null || _a === void 0 ? void 0 : _a.map((col) => `'${col}'`).join(' | ');
353
362
  writer.blankLine();
354
363
  writer.write(`export type ${orderByTypeName} = `).block(() => {
355
364
  if (tsDescriptor.dynamicQuery == null) {
356
365
  writer.writeLine(`column: ${orderByColumnsType};`);
357
366
  }
358
367
  else {
359
- writer.writeLine(`column: keyof typeof orderByFragments;`);
368
+ writer.writeLine('column: keyof typeof orderByFragments;');
360
369
  }
361
370
  writer.writeLine(`direction: 'asc' | 'desc';`);
362
371
  });
@@ -376,12 +385,12 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
376
385
  const relationType = generateRelationType(capitalizedName, relation.name);
377
386
  writer.blankLine();
378
387
  writer.write(`export type ${relationType} = `).block(() => {
379
- const uniqueNameFields = renameInvalidNames(relation.fields.map(f => f.name));
388
+ const uniqueNameFields = renameInvalidNames(relation.fields.map((f) => f.name));
380
389
  relation.fields.forEach((field, index) => {
381
- if (field.type == 'field') {
390
+ if (field.type === 'field') {
382
391
  writer.writeLine(`${uniqueNameFields[index]}: ${field.tsType};`);
383
392
  }
384
- if (field.type == 'relation') {
393
+ if (field.type === 'relation') {
385
394
  const nestedRelationType = generateRelationType(capitalizedName, field.tsType);
386
395
  const nullableOperator = field.notNull ? '' : '?';
387
396
  writer.writeLine(`${field.name}${nullableOperator}: ${nestedRelationType};`);
@@ -391,7 +400,8 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
391
400
  });
392
401
  relations.forEach((relation, index) => {
393
402
  const relationType = generateRelationType(capitalizedName, relation.name);
394
- if (index == 0) { //first
403
+ if (index === 0) {
404
+ //first
395
405
  writer.blankLine();
396
406
  writer.write(`export async function ${camelCaseName}Nested(${functionArguments}): Promise<${relationType}[]>`).block(() => {
397
407
  const params = tsDescriptor.parameters.length > 0 ? ', params' : '';
@@ -412,19 +422,19 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
412
422
  });
413
423
  writer.blankLine();
414
424
  writer.write(`function ${mapFunctionName}(selectResult: ${resultTypeName}[]): ${relationType}`).block(() => {
415
- writer.writeLine(`const firstRow = selectResult[0];`);
425
+ writer.writeLine('const firstRow = selectResult[0];');
416
426
  writer.write(`const result: ${relationType} = `).block(() => {
417
- const uniqueNameFields = renameInvalidNames(relation.fields.map(f => f.name));
427
+ const uniqueNameFields = renameInvalidNames(relation.fields.map((f) => f.name));
418
428
  relation.fields.forEach((field, index) => {
419
429
  const separator = commaSeparator(relation.fields.length, index);
420
- if (field.type == 'field') {
430
+ if (field.type === 'field') {
421
431
  const fieldName = tsDescriptor.columns[field.index].name;
422
- writer.writeLine(`${uniqueNameFields[index]}: firstRow.${fieldName}!` + separator);
432
+ writer.writeLine(`${uniqueNameFields[index]}: firstRow.${fieldName}!${separator}`);
423
433
  }
424
- if (field.type == 'relation') {
434
+ if (field.type === 'relation') {
425
435
  const nestedRelationType = generateRelationType(capitalizedName, field.name);
426
436
  const cardinality = field.list ? '' : '[0]';
427
- writer.writeLine(`${field.name}: collect${nestedRelationType}(selectResult)${cardinality}` + separator);
437
+ writer.writeLine(`${field.name}: collect${nestedRelationType}(selectResult)${cardinality}${separator}`);
428
438
  }
429
439
  });
430
440
  });
@@ -433,90 +443,90 @@ function generateTsCodeForMySQL(tsDescriptor, fileName, target, crud = false) {
433
443
  });
434
444
  writer.blankLine();
435
445
  writer.write('const groupBy = <T, Q>(array: T[], predicate: (value: T, index: number, array: T[]) => Q) =>').block(() => {
436
- writer.write('return array.reduce((map, value, index, array) => ').inlineBlock(() => {
446
+ writer
447
+ .write('return array.reduce((map, value, index, array) => ')
448
+ .inlineBlock(() => {
437
449
  writer.writeLine('const key = predicate(value, index, array);');
438
450
  writer.writeLine('map.get(key)?.push(value) ?? map.set(key, [value]);');
439
451
  writer.writeLine('return map;');
440
- }).write(', new Map<Q, T[]>());');
452
+ })
453
+ .write(', new Map<Q, T[]>());');
441
454
  });
442
455
  }
443
456
  return writer.toString();
444
457
  }
445
- exports.generateTsCodeForMySQL = generateTsCodeForMySQL;
446
458
  function generateDynamicQueryFrom(writer, sqlVar, fragment, columns, includeOrderBy = false) {
447
459
  var _a;
448
- const selectConditions = fragment.dependOnFields.map(fieldIndex => 'params.select.' + columns[fieldIndex].name);
460
+ const selectConditions = fragment.dependOnFields.map((fieldIndex) => `params.select.${columns[fieldIndex].name}`);
449
461
  if (selectConditions.length > 0) {
450
462
  selectConditions.unshift('params?.select == null');
451
463
  }
452
- const paramConditions = fragment.dependOnParams.map(param => 'params.params?.' + param + ' != null');
453
- const whereConditions = fragment.dependOnFields.map(fieldIndex => 'where.' + columns[fieldIndex].name + ' != null');
454
- const orderByConditions = includeOrderBy ? ((_a = fragment.dependOnOrderBy) === null || _a === void 0 ? void 0 : _a.map(orderBy => 'orderBy[\'' + orderBy + '\'] != null')) || [] : [];
464
+ const paramConditions = fragment.dependOnParams.map((param) => `params.params?.${param} != null`);
465
+ const whereConditions = fragment.dependOnFields.map((fieldIndex) => `where.${columns[fieldIndex].name} != null`);
466
+ const orderByConditions = includeOrderBy ? ((_a = fragment.dependOnOrderBy) === null || _a === void 0 ? void 0 : _a.map((orderBy) => `orderBy['${orderBy}'] != null`)) || [] : [];
455
467
  const allConditions = [...selectConditions, ...paramConditions, ...whereConditions, ...orderByConditions];
456
- const paramValues = fragment.parameters.map(param => 'params?.params?.' + param);
468
+ const paramValues = fragment.parameters.map((param) => `params?.params?.${param}`);
457
469
  if (allConditions.length > 0) {
458
- writer.write(`if (${allConditions.join(os_1.EOL + ' || ')})`).block(() => {
470
+ writer.write(`if (${allConditions.join(`${node_os_1.EOL} || `)})`).block(() => {
459
471
  writer.write(`${sqlVar} += EOL + \`${fragment.fragment}\`;`);
460
- paramValues.forEach(paramValues => {
461
- writer.writeLine(`paramsValues.push(${paramValues});`);
462
- });
472
+ for (const paramValue of paramValues) {
473
+ writer.writeLine(`paramsValues.push(${paramValue});`);
474
+ }
463
475
  });
464
476
  }
465
477
  else {
466
478
  writer.writeLine(`${sqlVar} += EOL + \`${fragment.fragment}\`;`);
467
- paramValues.forEach(paramValues => {
468
- writer.writeLine(`paramsValues.push(${paramValues});`);
469
- });
479
+ for (const paramValue of paramValues) {
480
+ writer.writeLine(`paramsValues.push(${paramValue});`);
481
+ }
470
482
  }
471
483
  }
472
484
  function getOperator(type) {
473
- if (type == 'number' || type == 'Date') {
485
+ if (type === 'number' || type === 'Date') {
474
486
  return 'NumericOperator';
475
487
  }
476
488
  return 'StringOperator';
477
489
  }
478
- exports.getOperator = getOperator;
479
- function generateParam(target, param) {
480
- if (target == 'node' && param.isList) {
490
+ function generateParam(param) {
491
+ if (param.isList) {
481
492
  return `params.${param.name}.length == 0? null : params.${param.name}`;
482
493
  }
483
494
  return `params.${param.name}`;
484
495
  }
485
496
  function generateRelationType(capitalizedName, relationName) {
486
- return capitalizedName + 'Nested' + capitalizeStr(relationName);
497
+ return `${capitalizedName}Nested${capitalizeStr(relationName)}`;
487
498
  }
488
- exports.generateRelationType = generateRelationType;
489
499
  function writeTypeBlock(writer, fields, typeName, updateCrud, extraField) {
490
500
  const writeBlockCond = fields.length > 0 || extraField != null;
491
501
  if (writeBlockCond) {
492
502
  writer.write(`export type ${typeName} =`).block(() => {
493
503
  fields.forEach((tsField, index) => {
494
504
  // :nameSet, :name, valueSet, :value...
495
- if (updateCrud && index % 2 != 0) { //only odd fields (:name, :value)
496
- writer.writeLine(tsFieldToStr(tsField, true) + ';');
505
+ if (updateCrud && index % 2 !== 0) {
506
+ //only odd fields (:name, :value)
507
+ writer.writeLine(`${tsFieldToStr(tsField, true)};`);
497
508
  }
498
509
  else if (!updateCrud) {
499
- writer.writeLine(tsFieldToStr(tsField, false) + ';');
510
+ writer.writeLine(`${tsFieldToStr(tsField, false)};`);
500
511
  }
501
512
  });
502
513
  if (extraField) {
503
- writer.write(extraField + ';');
514
+ writer.write(`${extraField};`);
504
515
  }
505
516
  });
506
517
  writer.blankLine();
507
518
  }
508
519
  }
509
- exports.writeTypeBlock = writeTypeBlock;
510
520
  function tsFieldToStr(tsField, isCrudUpdate) {
511
521
  if (isCrudUpdate) {
512
522
  //all fields are optionals
513
- return tsField.name + '?: ' + tsField.tsType + (tsField.notNull == false ? ' | null' : '');
523
+ return `${tsField.name}?: ${tsField.tsType}${tsField.notNull === false ? ' | null' : ''}`;
514
524
  }
515
525
  return tsField.name + (tsField.notNull ? ': ' : '?: ') + tsField.tsType;
516
526
  }
517
527
  function generateTsDescriptor(queryInfo) {
518
528
  var _a;
519
- const escapedColumnsNames = renameInvalidNames(queryInfo.columns.map(col => col.columnName));
529
+ const escapedColumnsNames = renameInvalidNames(queryInfo.columns.map((col) => col.columnName));
520
530
  const columns = queryInfo.columns.map((col, columnIndex) => {
521
531
  const tsDesc = {
522
532
  name: escapedColumnsNames[columnIndex],
@@ -525,15 +535,15 @@ function generateTsDescriptor(queryInfo) {
525
535
  };
526
536
  return tsDesc;
527
537
  });
528
- const parameterNames = queryInfo.parameters.map(p => {
538
+ const parameterNames = queryInfo.parameters.map((p) => {
529
539
  const paramInfo = {
530
540
  name: p.name,
531
- isList: p.columnType.endsWith('[]') ? true : false
541
+ isList: !!p.columnType.endsWith('[]')
532
542
  };
533
543
  return paramInfo;
534
544
  });
535
545
  const uniqueParams = removeDuplicatedParameters(queryInfo.parameters);
536
- const escapedParametersNames = renameInvalidNames(uniqueParams.map(col => col.name));
546
+ const escapedParametersNames = renameInvalidNames(uniqueParams.map((col) => col.name));
537
547
  const parameters = uniqueParams.map((col, paramIndex) => {
538
548
  const arraySymbol = col.list ? '[]' : '';
539
549
  const tsDesc = {
@@ -543,7 +553,7 @@ function generateTsDescriptor(queryInfo) {
543
553
  };
544
554
  return tsDesc;
545
555
  });
546
- const escapedDataNames = queryInfo.data ? renameInvalidNames(queryInfo.data.map(col => col.name)) : [];
556
+ const escapedDataNames = queryInfo.data ? renameInvalidNames(queryInfo.data.map((col) => col.name)) : [];
547
557
  const data = (_a = queryInfo.data) === null || _a === void 0 ? void 0 : _a.map((col, dataIndex) => {
548
558
  const tsDesc = {
549
559
  name: escapedDataNames[dataIndex],
@@ -560,7 +570,7 @@ function generateTsDescriptor(queryInfo) {
560
570
  orderByColumns: queryInfo.orderByColumns,
561
571
  parameterNames,
562
572
  parameters,
563
- data,
573
+ data
564
574
  };
565
575
  if (queryInfo.nestedResultInfo) {
566
576
  const nestedDescriptor = (0, ts_nested_descriptor_1.createNestedTsDescriptor)(queryInfo.columns, queryInfo.nestedResultInfo);
@@ -575,13 +585,13 @@ function generateTsDescriptor(queryInfo) {
575
585
  }
576
586
  return result;
577
587
  }
578
- exports.generateTsDescriptor = generateTsDescriptor;
579
588
  function removeDuplicatedParameters(parameters) {
580
589
  const columnsCount = new Map();
581
- parameters.forEach(param => {
590
+ parameters.forEach((param) => {
582
591
  const dupParam = columnsCount.get(param.name);
583
- if (dupParam != null) { //duplicated - two parameter null and notNull, resturn the null param (notNull == false)
584
- if (param.notNull == false) {
592
+ if (dupParam != null) {
593
+ //duplicated - two parameter null and notNull, resturn the null param (notNull == false)
594
+ if (param.notNull === false) {
585
595
  columnsCount.set(param.name, param);
586
596
  }
587
597
  // return param;
@@ -592,14 +602,14 @@ function removeDuplicatedParameters(parameters) {
592
602
  });
593
603
  return [...columnsCount.values()];
594
604
  }
595
- exports.removeDuplicatedParameters = removeDuplicatedParameters;
596
605
  //TODO - remove duplicated code
597
606
  function removeDuplicatedParameters2(parameters) {
598
607
  const columnsCount = new Map();
599
- parameters.forEach(param => {
608
+ parameters.forEach((param) => {
600
609
  const dupParam = columnsCount.get(param.name);
601
- if (dupParam != null) { //duplicated - two parameter null and notNull, resturn the null param (notNull == false)
602
- if (param.notNull == false) {
610
+ if (dupParam != null) {
611
+ //duplicated - two parameter null and notNull, resturn the null param (notNull == false)
612
+ if (param.notNull === false) {
603
613
  columnsCount.set(param.name, param);
604
614
  }
605
615
  // return param;
@@ -610,26 +620,22 @@ function removeDuplicatedParameters2(parameters) {
610
620
  });
611
621
  return [...columnsCount.values()];
612
622
  }
613
- exports.removeDuplicatedParameters2 = removeDuplicatedParameters2;
614
623
  function renameInvalidNames(columnNames) {
615
624
  const columnsCount = new Map();
616
- return columnNames.map(columnName => {
625
+ return columnNames.map((columnName) => {
617
626
  if (columnsCount.has(columnName)) {
618
627
  const count = columnsCount.get(columnName) + 1;
619
628
  columnsCount.set(columnName, count);
620
- const newName = columnName + '_' + count;
629
+ const newName = `${columnName}_${count}`;
621
630
  return escapeInvalidTsField(newName);
622
631
  }
623
- else {
624
- columnsCount.set(columnName, 1);
625
- return escapeInvalidTsField(columnName);
626
- }
632
+ columnsCount.set(columnName, 1);
633
+ return escapeInvalidTsField(columnName);
627
634
  });
628
635
  }
629
- exports.renameInvalidNames = renameInvalidNames;
630
636
  function scapeBackStick(sql) {
631
637
  const pattern = /`/g;
632
- return sql.replace(pattern, "\\`");
638
+ return sql.replace(pattern, '\\`');
633
639
  }
634
640
  function escapeInvalidTsField(columnName) {
635
641
  const validPattern = /^[a-zA-Z0-9_$]+$/g;
@@ -638,38 +644,32 @@ function escapeInvalidTsField(columnName) {
638
644
  }
639
645
  return columnName;
640
646
  }
641
- exports.escapeInvalidTsField = escapeInvalidTsField;
642
647
  function mapColumnType(columnType) {
643
- if (columnType == 'any')
648
+ if (columnType === 'any')
644
649
  return 'any';
645
650
  const types = [].concat(columnType);
646
- const mappedTypes = types.map(type => (0, mysql_mapping_1.converToTsType)(type));
651
+ const mappedTypes = types.map((type) => (0, mysql_mapping_1.converToTsType)(type));
647
652
  return mappedTypes.join(' | '); // number | string
648
653
  }
649
654
  function hasStringColumn(columns) {
650
- return columns.some(c => c.tsType == 'string');
655
+ return columns.some((c) => c.tsType === 'string');
651
656
  }
652
- exports.hasStringColumn = hasStringColumn;
653
657
  function hasDateColumn(columns) {
654
- return columns.some(c => c.tsType == 'Date');
658
+ return columns.some((c) => c.tsType === 'Date');
655
659
  }
656
- exports.hasDateColumn = hasDateColumn;
657
660
  function replaceOrderByParam(sql) {
658
661
  const patern = /(.*order\s+by\s*)(\?)(.\n$)*/i;
659
- const newSql = sql.replace(patern, "$1${escapeOrderBy(params.orderBy)}$3");
662
+ const newSql = sql.replace(patern, '$1${escapeOrderBy(params.orderBy)}$3');
660
663
  return newSql;
661
664
  }
662
- exports.replaceOrderByParam = replaceOrderByParam;
663
665
  function writeFile(filePath, tsContent) {
664
- fs_1.default.writeFileSync(filePath, tsContent);
666
+ node_fs_1.default.writeFileSync(filePath, tsContent);
665
667
  }
666
- exports.writeFile = writeFile;
667
668
  function capitalize(name) {
668
669
  return capitalizeStr(name);
669
670
  }
670
- exports.capitalize = capitalize;
671
671
  function capitalizeStr(name) {
672
- if (name.length == 0)
672
+ if (name.length === 0)
673
673
  return name;
674
674
  return name.charAt(0).toUpperCase() + name.slice(1);
675
675
  }
@@ -677,19 +677,20 @@ function convertToCamelCaseName(name) {
677
677
  const camelCaseStr = (0, camelcase_1.default)(name);
678
678
  return camelCaseStr;
679
679
  }
680
- exports.convertToCamelCaseName = convertToCamelCaseName;
681
680
  function generateTsFile(client, sqlFile, dbSchema, isCrudFile) {
682
681
  return __awaiter(this, void 0, void 0, function* () {
683
- const sqlContent = fs_1.default.readFileSync(sqlFile, 'utf8');
684
- if (sqlContent.trim() == '') { //ignore empty file
682
+ const sqlContent = node_fs_1.default.readFileSync(sqlFile, 'utf8');
683
+ if (sqlContent.trim() === '') {
684
+ //ignore empty file
685
685
  return;
686
686
  }
687
- const fileName = (0, path_1.parse)(sqlFile).name;
688
- const dirPath = (0, path_1.parse)(sqlFile).dir;
687
+ const fileName = (0, node_path_1.parse)(sqlFile).name;
688
+ const dirPath = (0, node_path_1.parse)(sqlFile).dir;
689
689
  const queryName = convertToCamelCaseName(fileName);
690
- const tsContentResult = client.type == 'mysql' ? yield generateTsFileFromContent(client, queryName, sqlContent, 'node', isCrudFile)
690
+ const tsContentResult = client.type === 'mysql2'
691
+ ? yield generateTsFileFromContent(client, queryName, sqlContent, isCrudFile)
691
692
  : (0, code_generator_1.validateAndGenerateCode)(client, sqlContent, queryName, dbSchema, isCrudFile);
692
- const tsFilePath = path_1.default.resolve(dirPath, fileName) + ".ts";
693
+ const tsFilePath = `${node_path_1.default.resolve(dirPath, fileName)}.ts`;
693
694
  if ((0, Either_1.isLeft)(tsContentResult)) {
694
695
  console.error('ERROR: ', tsContentResult.left.description);
695
696
  console.error('at ', sqlFile);
@@ -700,20 +701,18 @@ function generateTsFile(client, sqlFile, dbSchema, isCrudFile) {
700
701
  writeFile(tsFilePath, tsContent);
701
702
  });
702
703
  }
703
- exports.generateTsFile = generateTsFile;
704
- function generateTsFileFromContent(client_1, queryName_1, sqlContent_1, target_1) {
705
- return __awaiter(this, arguments, void 0, function* (client, queryName, sqlContent, target, crud = false) {
704
+ function generateTsFileFromContent(client_1, queryName_1, sqlContent_1) {
705
+ return __awaiter(this, arguments, void 0, function* (client, queryName, sqlContent, crud = false) {
706
706
  const queryInfoResult = yield (0, describe_query_1.parseSql)(client, sqlContent);
707
707
  if ((0, Either_1.isLeft)(queryInfoResult)) {
708
708
  return queryInfoResult;
709
709
  }
710
710
  const tsDescriptor = generateTsDescriptor(queryInfoResult.right);
711
- const tsContent = generateTsCodeForMySQL(tsDescriptor, queryName, target, crud);
711
+ const tsContent = generateTsCodeForMySQL(tsDescriptor, queryName, crud);
712
712
  return (0, Either_1.right)(tsContent);
713
713
  });
714
714
  }
715
- exports.generateTsFileFromContent = generateTsFileFromContent;
716
715
  function commaSeparator(length, index) {
717
- return length > 1 && index != length - 1 ? ',' : '';
716
+ return length > 1 && index !== length - 1 ? ',' : '';
718
717
  }
719
718
  //# sourceMappingURL=code-generator.js.map