@eggjs/dal-runtime 3.51.2 → 4.0.0-beta.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 (48) hide show
  1. package/package.json +27 -24
  2. package/{dist/src → src}/BaseSqlMap.d.ts +1 -1
  3. package/src/BaseSqlMap.js +303 -0
  4. package/{dist/src → src}/CodeGenerator.d.ts +1 -1
  5. package/src/CodeGenerator.js +138 -0
  6. package/{dist/src → src}/DaoLoader.d.ts +1 -1
  7. package/src/DaoLoader.js +13 -0
  8. package/{dist/src → src}/DataSource.d.ts +5 -5
  9. package/src/DataSource.js +79 -0
  10. package/{dist/src → src}/DatabaseForker.d.ts +1 -1
  11. package/src/DatabaseForker.js +49 -0
  12. package/{dist/src → src}/MySqlDataSource.d.ts +5 -1
  13. package/src/MySqlDataSource.js +63 -0
  14. package/{dist/src → src}/NunjucksConverter.js +3 -7
  15. package/src/NunjucksUtil.js +74 -0
  16. package/{dist/src → src}/SqlGenerator.d.ts +1 -1
  17. package/src/SqlGenerator.js +391 -0
  18. package/{dist/src → src}/SqlMapLoader.d.ts +2 -2
  19. package/src/SqlMapLoader.js +19 -0
  20. package/{dist/src → src}/SqlUtil.js +2 -6
  21. package/{dist/src → src}/TableModelInstanceBuilder.d.ts +1 -1
  22. package/src/TableModelInstanceBuilder.js +22 -0
  23. package/src/TableSqlMap.js +91 -0
  24. package/{dist/src → src}/TemplateUtil.d.ts +3 -12
  25. package/src/TemplateUtil.js +86 -0
  26. package/src/index.d.ts +15 -0
  27. package/src/index.js +16 -0
  28. package/dist/index.d.ts +0 -9
  29. package/dist/index.js +0 -28
  30. package/dist/src/BaseSqlMap.js +0 -310
  31. package/dist/src/CodeGenerator.js +0 -145
  32. package/dist/src/DaoLoader.js +0 -17
  33. package/dist/src/DataSource.js +0 -83
  34. package/dist/src/DatabaseForker.js +0 -56
  35. package/dist/src/MySqlDataSource.js +0 -38
  36. package/dist/src/NunjucksUtil.js +0 -104
  37. package/dist/src/SqlGenerator.js +0 -395
  38. package/dist/src/SqlMapLoader.js +0 -23
  39. package/dist/src/TableModelInstanceBuilder.js +0 -26
  40. package/dist/src/TableSqlMap.js +0 -95
  41. package/dist/src/TemplateUtil.js +0 -93
  42. package/dist/src/templates/base_dao.njk +0 -164
  43. package/dist/src/templates/dao.njk +0 -17
  44. package/dist/src/templates/extension.njk +0 -17
  45. /package/{dist/src → src}/NunjucksConverter.d.ts +0 -0
  46. /package/{dist/src → src}/NunjucksUtil.d.ts +0 -0
  47. /package/{dist/src → src}/SqlUtil.d.ts +0 -0
  48. /package/{dist/src → src}/TableSqlMap.d.ts +0 -0
@@ -0,0 +1,86 @@
1
+ import path from 'node:path';
2
+ import { SpatialHelper } from '@eggjs/dal-decorator';
3
+ import { ColumnType } from '@eggjs/tegg-types';
4
+ export class TemplateUtil {
5
+ static isSpatialType(columnModel) {
6
+ switch (columnModel.type.type) {
7
+ case ColumnType.GEOMETRY:
8
+ case ColumnType.POINT:
9
+ case ColumnType.LINESTRING:
10
+ case ColumnType.POLYGON:
11
+ case ColumnType.MULTIPOINT:
12
+ case ColumnType.MULTILINESTRING:
13
+ case ColumnType.MULTIPOLYGON:
14
+ case ColumnType.GEOMETRYCOLLECTION: {
15
+ return true;
16
+ }
17
+ default: {
18
+ return false;
19
+ }
20
+ }
21
+ }
22
+ static importPath(tableModelPath, currentPath) {
23
+ return path.relative(currentPath, tableModelPath);
24
+ }
25
+ static dbTypeToTsType(columnType) {
26
+ return `ColumnTsType['${columnType}']`;
27
+ }
28
+ static toJson(value) {
29
+ return JSON.stringify(JSON.stringify(value));
30
+ }
31
+ static toPoint(point) {
32
+ if (typeof point.x !== 'number' || typeof point.y !== 'number') {
33
+ throw new Error(`invalidate point ${JSON.stringify(point)}`);
34
+ }
35
+ return `Point(${point.x}, ${point.y})`;
36
+ }
37
+ static toLine(val) {
38
+ const points = val.map(t => TemplateUtil.toPoint(t));
39
+ return `LINESTRING(${points.join(',')})`;
40
+ }
41
+ static toPolygon(val) {
42
+ const lines = val.map(t => TemplateUtil.toLine(t));
43
+ return `POLYGON(${lines.join(',')})`;
44
+ }
45
+ static toGeometry(val) {
46
+ const type = SpatialHelper.getGeometryType(val);
47
+ const filterName = TemplateUtil.getSpatialFilter(type);
48
+ return TemplateUtil[filterName](val);
49
+ }
50
+ static toMultiPoint(val) {
51
+ const points = val.map(t => TemplateUtil.toPoint(t));
52
+ return `MULTIPOINT(${points.join(',')})`;
53
+ }
54
+ static toMultiLine(val) {
55
+ const lines = val.map(t => TemplateUtil.toLine(t));
56
+ return `MULTILINESTRING(${lines.join(',')})`;
57
+ }
58
+ static toMultiPolygon(val) {
59
+ const polygon = val.map(t => TemplateUtil.toPolygon(t));
60
+ return `MULTIPOLYGON(${polygon.join(',')})`;
61
+ }
62
+ static toGeometryCollection(val) {
63
+ const geometries = val.map(t => {
64
+ return TemplateUtil.toGeometry(t);
65
+ });
66
+ return `GEOMETRYCOLLECTION(${geometries.join(',')})`;
67
+ }
68
+ static getSpatialFilter(columnType) {
69
+ const filter = TemplateUtil.spatialFilter[columnType];
70
+ if (!filter) {
71
+ throw new Error(`type ${columnType} is not spatial type`);
72
+ }
73
+ return filter;
74
+ }
75
+ }
76
+ TemplateUtil.spatialFilter = {
77
+ [ColumnType.POINT]: 'toPoint',
78
+ [ColumnType.LINESTRING]: 'toLine',
79
+ [ColumnType.POLYGON]: 'toPolygon',
80
+ [ColumnType.GEOMETRY]: 'toGeometry',
81
+ [ColumnType.MULTIPOINT]: 'toMultiPoint',
82
+ [ColumnType.MULTILINESTRING]: 'toMultiLine',
83
+ [ColumnType.MULTIPOLYGON]: 'toMultiPolygon',
84
+ [ColumnType.GEOMETRYCOLLECTION]: 'toGeometryCollection',
85
+ };
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVtcGxhdGVVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiVGVtcGxhdGVVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBWS9DLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBd0I7UUFDM0MsUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN6QixLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDdEIsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQzNCLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN4QixLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDM0IsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDO1lBQ2hDLEtBQUssVUFBVSxDQUFDLFlBQVksQ0FBQztZQUM3QixLQUFLLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQXNCLEVBQUUsV0FBbUI7UUFDM0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFzQjtRQUMxQyxPQUFPLGlCQUFpQixVQUFVLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxL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
package/src/index.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ export * from './BaseSqlMap.js';
2
+ export * from './CodeGenerator.js';
3
+ export * from './CodeGenerator.js';
4
+ export * from './DaoLoader.js';
5
+ export * from './DatabaseForker.js';
6
+ export * from './DataSource.js';
7
+ export * from './MySqlDataSource.js';
8
+ export * from './NunjucksConverter.js';
9
+ export * from './NunjucksUtil.js';
10
+ export * from './SqlGenerator.js';
11
+ export * from './SqlMapLoader.js';
12
+ export * from './SqlUtil.js';
13
+ export * from './TableModelInstanceBuilder.js';
14
+ export { TableSqlMap } from './TableSqlMap.js';
15
+ export * from './TemplateUtil.js';
package/src/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export * from './BaseSqlMap.js';
2
+ export * from './CodeGenerator.js';
3
+ export * from './CodeGenerator.js';
4
+ export * from './DaoLoader.js';
5
+ export * from './DatabaseForker.js';
6
+ export * from './DataSource.js';
7
+ export * from './MySqlDataSource.js';
8
+ export * from './NunjucksConverter.js';
9
+ export * from './NunjucksUtil.js';
10
+ export * from './SqlGenerator.js';
11
+ export * from './SqlMapLoader.js';
12
+ export * from './SqlUtil.js';
13
+ export * from './TableModelInstanceBuilder.js';
14
+ export { TableSqlMap } from './TableSqlMap.js';
15
+ export * from './TemplateUtil.js';
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsY0FBYyxtQkFBbUIsQ0FBQyJ9
package/dist/index.d.ts DELETED
@@ -1,9 +0,0 @@
1
- export * from './src/SqlGenerator';
2
- export * from './src/CodeGenerator';
3
- export { TableSqlMap } from './src/TableSqlMap';
4
- export * from './src/SqlMapLoader';
5
- export * from './src/DataSource';
6
- export * from './src/MySqlDataSource';
7
- export * from './src/TableModelInstanceBuilder';
8
- export * from './src/DatabaseForker';
9
- export * from './src/DaoLoader';
package/dist/index.js DELETED
@@ -1,28 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.TableSqlMap = void 0;
18
- __exportStar(require("./src/SqlGenerator"), exports);
19
- __exportStar(require("./src/CodeGenerator"), exports);
20
- var TableSqlMap_1 = require("./src/TableSqlMap");
21
- Object.defineProperty(exports, "TableSqlMap", { enumerable: true, get: function () { return TableSqlMap_1.TableSqlMap; } });
22
- __exportStar(require("./src/SqlMapLoader"), exports);
23
- __exportStar(require("./src/DataSource"), exports);
24
- __exportStar(require("./src/MySqlDataSource"), exports);
25
- __exportStar(require("./src/TableModelInstanceBuilder"), exports);
26
- __exportStar(require("./src/DatabaseForker"), exports);
27
- __exportStar(require("./src/DaoLoader"), exports);
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsaURBQWdEO0FBQXZDLDBHQUFBLFdBQVcsT0FBQTtBQUNwQixxREFBbUM7QUFFbkMsbURBQWlDO0FBQ2pDLHdEQUFzQztBQUN0QyxrRUFBZ0Q7QUFDaEQsdURBQXFDO0FBQ3JDLGtEQUFnQyJ9
@@ -1,310 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.BaseSqlMapGenerator = void 0;
7
- const lodash_1 = __importDefault(require("lodash"));
8
- const tegg_types_1 = require("@eggjs/tegg-types");
9
- const TemplateUtil_1 = require("./TemplateUtil");
10
- class BaseSqlMapGenerator {
11
- constructor(tableModel, logger) {
12
- this.tableModel = tableModel;
13
- this.logger = logger;
14
- }
15
- generateAllColumns(countIf) {
16
- const str = this.tableModel.columns.map(t => `\`${t.columnName}\``)
17
- .join(',');
18
- return countIf ? `{% if $$count == true %}0{% else %}${str}{% endif %}` : str;
19
- }
20
- generateFindByPrimary() {
21
- const result = [];
22
- const primary = this.tableModel.getPrimary();
23
- if (!primary) {
24
- this.logger.warn(`表 \`${this.tableModel.name}\` 没有主键,无法生成主键查询语句。`);
25
- return result;
26
- }
27
- let sql = `SELECT ${this.generateAllColumns(true)}
28
- FROM \`${this.tableModel.name}\`
29
- WHERE `;
30
- sql += primary.keys.map(indexKey => `\`${indexKey.columnName}\` = {{$${indexKey.propertyName}}}`)
31
- .join(' AND ');
32
- if (primary.keys.length === 1) {
33
- result.push({
34
- type: tegg_types_1.SqlType.SELECT,
35
- name: `findBy${lodash_1.default.upperFirst(primary.keys[0].propertyName)}`,
36
- sql,
37
- });
38
- }
39
- result.push({
40
- name: 'findByPrimary',
41
- type: tegg_types_1.SqlType.SELECT,
42
- sql,
43
- });
44
- return result;
45
- }
46
- // TODO index 的左匹配
47
- generateFindByIndexes() {
48
- const sqlMaps = [];
49
- for (const index of this.tableModel.indices) {
50
- if (index.type === tegg_types_1.IndexType.PRIMARY)
51
- continue;
52
- let sql = `SELECT ${this.generateAllColumns(true)}
53
- FROM \`${this.tableModel.name}\`
54
- WHERE `;
55
- sql += index.keys.map(indexKey => {
56
- const s = `\`${indexKey.columnName}\` {{ "IS" if $${indexKey.propertyName} == null else "=" }} {{$${indexKey.propertyName}}}`;
57
- return s;
58
- })
59
- .join(' AND ');
60
- const tempName = lodash_1.default.upperFirst(lodash_1.default.camelCase(index.keys.length === 1 ? index.keys[0].propertyName : index.name));
61
- sqlMaps.push({
62
- name: `findBy${tempName}`,
63
- type: tegg_types_1.SqlType.SELECT,
64
- sql,
65
- });
66
- sqlMaps.push({
67
- name: `findOneBy${tempName}`,
68
- type: tegg_types_1.SqlType.SELECT,
69
- sql: `${sql} LIMIT 0, 1`,
70
- });
71
- }
72
- return sqlMaps;
73
- }
74
- generateInsert() {
75
- let sql = `INSERT INTO \`${this.tableModel.name}\` `;
76
- sql += '{% set ___first = true %}';
77
- const keys = [];
78
- const values = [];
79
- for (const column of this.tableModel.columns) {
80
- const { propertyName, columnName, type } = column;
81
- if (column.propertyName !== 'gmtCreate' && column.propertyName !== 'gmtModified') {
82
- // Add filter for Spatial Type
83
- // - toPoint
84
- // - toLine
85
- // - toPolygon
86
- // - toGeometry
87
- // - toMultiPoint
88
- // - toMultiLine
89
- // - toMultiPolygon
90
- // - toGeometryCollection
91
- keys.push((`
92
- {% if $${propertyName} !== undefined %}
93
- {% if ___first %}
94
- {% set ___first = false %}
95
- {% else %}
96
- ,
97
- {% endif %}
98
-
99
- \`${columnName}\`
100
- {% endif %}
101
- `).trim());
102
- if (TemplateUtil_1.TemplateUtil.isSpatialType(column)) {
103
- const filter = TemplateUtil_1.TemplateUtil.getSpatialFilter(column.type.type);
104
- values.push((`
105
- {% if $${propertyName} !== undefined %}
106
- {% if ___first %}
107
- {% set ___first = false %}
108
- {% else %}
109
- ,
110
- {% endif %}
111
-
112
- {{$${propertyName} | ${filter}}}
113
- {% endif %}
114
- `).trim());
115
- }
116
- else if (column.type.type === tegg_types_1.ColumnType.JSON) {
117
- values.push((`
118
- {% if $${propertyName} !== undefined %}
119
- {% if ___first %}
120
- {% set ___first = false %}
121
- {% else %}
122
- ,
123
- {% endif %}
124
-
125
- {{$${propertyName} | toJson}}
126
- {% endif %}
127
- `).trim());
128
- }
129
- else {
130
- values.push((`
131
- {% if $${propertyName} !== undefined %}
132
- {% if ___first %}
133
- {% set ___first = false %}
134
- {% else %}
135
- ,
136
- {% endif %}
137
-
138
- {{$${propertyName}}}
139
- {% endif %}
140
- `).trim());
141
- }
142
- }
143
- else {
144
- let now;
145
- // Default value for gmtCreate/gmtModified
146
- // int:UNIX_TEIMESTAMP
147
- // bigint: ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)
148
- // datetime/timestamp Now()
149
- if (type.type === tegg_types_1.ColumnType.INT) {
150
- // 秒级时间戳
151
- now = 'UNIX_TIMESTAMP()';
152
- }
153
- else if (type.type === tegg_types_1.ColumnType.BIGINT) {
154
- // 毫秒级时间戳
155
- now = 'ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)';
156
- }
157
- else if (type.type === tegg_types_1.ColumnType.DATETIME || type.type === tegg_types_1.ColumnType.TIMESTAMP) {
158
- now = type.precision ? `NOW(${type.precision})` : 'NOW()';
159
- }
160
- else {
161
- this.logger.warn(`unknown type ${type.type} for ${propertyName}`);
162
- }
163
- keys.push((`
164
- {% if ___first %}
165
- {% set ___first = false %}
166
- {% else %}
167
- ,
168
- {% endif %}
169
-
170
- \`${columnName}\`
171
- `).trim());
172
- values.push((`
173
- {% if ___first %}
174
- {% set ___first = false %}
175
- {% else %}
176
- ,
177
- {% endif %}
178
-
179
- {{ $${propertyName} if $${propertyName} !== undefined else '${now}' }}
180
- `).trim());
181
- }
182
- }
183
- sql += `(${keys.join('')})`;
184
- sql += '{% set ___first = true %}';
185
- sql += `VALUES(${values.join('')});`;
186
- return sql;
187
- }
188
- generateUpdate() {
189
- const primary = this.tableModel.getPrimary();
190
- if (!primary) {
191
- this.logger.warn(`表 \`${this.tableModel.name}\` 没有主键,无法生成主键更新语句。`);
192
- return;
193
- }
194
- let sql = `UPDATE \`${this.tableModel.name}\` SET`;
195
- sql += '{% set ___first = true %}';
196
- const kv = [];
197
- for (const column of this.tableModel.columns) {
198
- const { type, propertyName, columnName } = column;
199
- let now;
200
- if (type.type === tegg_types_1.ColumnType.INT) {
201
- // 秒级时间戳
202
- now = 'UNIX_TIMESTAMP()';
203
- }
204
- else if (type.type === tegg_types_1.ColumnType.BIGINT) {
205
- // 毫秒级时间戳
206
- now = 'ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)';
207
- }
208
- else if (type.type === tegg_types_1.ColumnType.TIMESTAMP || type.type === tegg_types_1.ColumnType.DATETIME) {
209
- now = type.precision ? `NOW(${type.precision})` : 'NOW()';
210
- }
211
- // 若无更新时间字段,则自动更新该字段
212
- const temp = propertyName !== 'gmtModified' ?
213
- `
214
- {% if $${propertyName} !== undefined %}
215
- {% if ___first %}
216
- {% set ___first = false %}
217
- {% else %}
218
- ,
219
- {% endif %}
220
-
221
- \`${columnName}\` = {{$${propertyName}}}
222
- {% endif %}
223
- ` :
224
- `
225
- {% if ___first %}
226
- {% set ___first = false %}
227
- {% else %}
228
- ,
229
- {% endif %}
230
-
231
- \`${columnName}\` =
232
- {{ $${propertyName} if $${propertyName} !== undefined else '${now}' }}
233
- `;
234
- kv.push(temp);
235
- }
236
- sql += kv.join('');
237
- sql += `WHERE ${primary.keys.map(indexKey => `\`${indexKey.columnName}\` = {{primary.${indexKey.propertyName}}}`)
238
- .join(' AND ')}`;
239
- return sql;
240
- }
241
- generateDelete() {
242
- const primary = this.tableModel.getPrimary();
243
- if (!primary) {
244
- this.logger.warn(`表 \`${this.tableModel.name}\` 没有主键,无法生成主键删除语句。`);
245
- return;
246
- }
247
- let sql = `DELETE
248
- FROM \`${this.tableModel.name}\`
249
- WHERE `;
250
- sql += primary.keys.map(indexKey => `\`${indexKey.columnName}\` = {{${indexKey.propertyName}}}`)
251
- .join(' AND ');
252
- return sql;
253
- }
254
- load() {
255
- const map = {};
256
- map.allColumns = {
257
- type: tegg_types_1.SqlType.BLOCK,
258
- content: this.generateAllColumns(false),
259
- };
260
- const sqlMaps = [
261
- /**
262
- * 以主键进行索引
263
- *
264
- * + `findByPrimary`
265
- * + 若为单主键,则再加 `findBy键名`
266
- */
267
- ...this.generateFindByPrimary(),
268
- /**
269
- * findBy 各索引
270
- *
271
- * + 若为多列索引,则为 `findBy索引名`
272
- * + 若为单列索引,则为 `findBy列名`
273
- */
274
- ...this.generateFindByIndexes(),
275
- /**
276
- * 插入
277
- */
278
- {
279
- name: 'insert',
280
- type: tegg_types_1.SqlType.INSERT,
281
- sql: this.generateInsert(),
282
- },
283
- /**
284
- * 主键更新
285
- */
286
- {
287
- name: 'update',
288
- type: tegg_types_1.SqlType.UPDATE,
289
- sql: this.generateUpdate(),
290
- },
291
- /**
292
- * 主键删除
293
- */
294
- {
295
- name: 'delete',
296
- type: tegg_types_1.SqlType.DELETE,
297
- sql: this.generateDelete(),
298
- },
299
- ];
300
- for (const sqlMap of sqlMaps) {
301
- map[sqlMap.name] = {
302
- type: sqlMap.type,
303
- sql: sqlMap.sql,
304
- };
305
- }
306
- return map;
307
- }
308
- }
309
- exports.BaseSqlMapGenerator = BaseSqlMapGenerator;
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVNxbE1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9CYXNlU3FsTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUF1QjtBQUV2QixrREFBMkU7QUFFM0UsaURBQThDO0FBRTlDLE1BQWEsbUJBQW1CO0lBSTlCLFlBQVksVUFBc0IsRUFBRSxNQUFjO1FBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFnQjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQzthQUNoRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsc0NBQXNDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDaEYsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUkscUJBQXFCLENBQUMsQ0FBQztZQUNuRSxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUcsVUFBVSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO3dCQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7c0JBQ3RCLENBQUM7UUFFbkIsR0FBRyxJQUFJLE9BQU8s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
@@ -1,145 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CodeGenerator = void 0;
7
- const promises_1 = __importDefault(require("node:fs/promises"));
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const js_beautify_1 = require("js-beautify");
10
- const lodash_1 = __importDefault(require("lodash"));
11
- const nunjucks_1 = __importDefault(require("nunjucks"));
12
- const tegg_types_1 = require("@eggjs/tegg-types");
13
- const tegg_1 = require("@eggjs/tegg");
14
- const SqlGenerator_1 = require("./SqlGenerator");
15
- const TemplateUtil_1 = require("./TemplateUtil");
16
- class CodeGenerator {
17
- constructor(options) {
18
- this.moduleDir = options.moduleDir;
19
- this.moduleName = options.moduleName;
20
- this.teggPkg = options.teggPkg ?? '@eggjs/tegg';
21
- this.dalPkg = options.dalPkg ?? '@eggjs/tegg/dal';
22
- this.createNunjucksEnv();
23
- }
24
- createNunjucksEnv() {
25
- this.njkEnv = nunjucks_1.default.configure(node_path_1.default.join(__dirname, './templates'), {
26
- autoescape: false,
27
- });
28
- this.njkEnv.addFilter('pascalCase', name => lodash_1.default.upperFirst(lodash_1.default.camelCase(name)));
29
- this.njkEnv.addFilter('camelCase', name => lodash_1.default.camelCase(name));
30
- this.njkEnv.addFilter('dbTypeToTSType', TemplateUtil_1.TemplateUtil.dbTypeToTsType);
31
- }
32
- genCode(tplName, filePath, tableModel) {
33
- let tableModelAbsolutePath = tegg_1.PrototypeUtil.getFilePath(tableModel.clazz);
34
- tableModelAbsolutePath = tableModelAbsolutePath.substring(0, tableModelAbsolutePath.length - 3);
35
- const data = {
36
- table: tableModel,
37
- file: filePath,
38
- fileName: node_path_1.default.basename(filePath),
39
- clazzName: tableModel.clazz.name,
40
- moduleName: this.moduleName,
41
- teggPkg: this.teggPkg,
42
- dalPkg: this.dalPkg,
43
- id: tableModel.columns.find(t => t.propertyName === 'id'),
44
- primaryIndex: tableModel.getPrimary(),
45
- tableModelPath: TemplateUtil_1.TemplateUtil.importPath(tableModelAbsolutePath, node_path_1.default.dirname(filePath)),
46
- extensionPath: `../../extension/${tableModel.clazz.name}Extension`,
47
- structurePath: `../../structure/${tableModel.clazz.name}.json`,
48
- sqlPath: `../../structure/${tableModel.clazz.name}.sql`,
49
- columnMap: tableModel.columns.reduce((p, c) => {
50
- p[c.propertyName] = c;
51
- return p;
52
- }, {}),
53
- };
54
- return this.njkEnv.render(`${tplName}.njk`, data);
55
- }
56
- async generate(tableModel) {
57
- let dalDir;
58
- try {
59
- await promises_1.default.access(node_path_1.default.join(this.moduleDir, 'src'));
60
- dalDir = node_path_1.default.join(this.moduleDir, 'src/dal');
61
- }
62
- catch {
63
- dalDir = node_path_1.default.join(this.moduleDir, 'dal');
64
- }
65
- // const tableName = tableModel.name;
66
- // const clazzName = tableModel.clazz.name;
67
- const clazzFileName = node_path_1.default.basename(tegg_1.PrototypeUtil.getFilePath(tableModel.clazz));
68
- const baseFileName = node_path_1.default.basename(clazzFileName, '.ts');
69
- // 要动的一些文件
70
- const paths = {
71
- // e.g. app/dal/dao/base/example.ts
72
- baseBizDAO: node_path_1.default.join(dalDir, `dao/base/Base${baseFileName}DAO.ts`),
73
- // e.g. app/dal/dao/example.ts
74
- bizDAO: node_path_1.default.join(dalDir, `dao/${baseFileName}DAO.ts`),
75
- // e.g. app/dal/extension/example.ts
76
- extension: node_path_1.default.join(dalDir, `extension/${baseFileName}Extension.ts`),
77
- // e.g. app/dal/structure/example.json
78
- structure: node_path_1.default.join(dalDir, `structure/${baseFileName}.json`),
79
- // e.g. app/dal/structure/example.sql
80
- structureSql: node_path_1.default.join(dalDir, `structure/${baseFileName}.sql`),
81
- };
82
- // 建立 structure 文件
83
- await promises_1.default.mkdir(node_path_1.default.dirname(paths.structure), {
84
- recursive: true,
85
- });
86
- await promises_1.default.writeFile(paths.structure, JSON.stringify(tableModel, null, 2), 'utf8');
87
- const sqlGenerator = new SqlGenerator_1.SqlGenerator();
88
- const structureSql = sqlGenerator.generate(tableModel);
89
- await promises_1.default.writeFile(paths.structureSql, structureSql, 'utf8');
90
- const codes = [{
91
- templates: tegg_types_1.Templates.BASE_DAO,
92
- filePath: paths.baseBizDAO,
93
- beautify: true,
94
- overwrite: true,
95
- }, {
96
- templates: tegg_types_1.Templates.DAO,
97
- filePath: paths.bizDAO,
98
- beautify: true,
99
- overwrite: false,
100
- }, {
101
- templates: tegg_types_1.Templates.EXTENSION,
102
- filePath: paths.extension,
103
- beautify: false,
104
- overwrite: false,
105
- }];
106
- for (const { templates, filePath, beautify, overwrite } of codes) {
107
- await promises_1.default.mkdir(node_path_1.default.dirname(filePath), {
108
- recursive: true,
109
- });
110
- const code = this.genCode(templates, filePath, tableModel);
111
- let beautified;
112
- if (beautify) {
113
- beautified = (0, js_beautify_1.js_beautify)(code, {
114
- brace_style: 'preserve-inline',
115
- indent_size: 2,
116
- jslint_happy: true,
117
- preserve_newlines: false,
118
- });
119
- }
120
- else {
121
- beautified = code;
122
- }
123
- beautified = beautified
124
- .replace(/( )*\/\/ empty-line( )*/g, '')
125
- .replace(/Promise( )*<( )*(.+?)( )*>/g, 'Promise<$3>')
126
- .replace(/Optional( )*<( )*(.+?)( )*>/g, 'Optional<$3>')
127
- .replace(/Record( )*<( )*(.+?)( )*>/g, 'Record<$3>')
128
- .replace(/Partial( )*<( )*(.+?)( )*>/g, 'Partial<$3>')
129
- .replace(/DataSource( )*<( )*(.+?)( )*>/g, 'DataSource<$3>')
130
- .replace(/ \? :/g, '?:');
131
- if (overwrite !== true) {
132
- try {
133
- await promises_1.default.access(filePath);
134
- continue;
135
- }
136
- catch {
137
- // file not exists
138
- }
139
- }
140
- await promises_1.default.writeFile(filePath, beautified, 'utf8');
141
- }
142
- }
143
- }
144
- exports.CodeGenerator = CodeGenerator;
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZUdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db2RlR2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFrQztBQUNsQywwREFBNkI7QUFDN0IsNkNBQTBDO0FBQzFDLG9EQUF1QjtBQUN2Qix3REFBc0Q7QUFDdEQsa0RBQThDO0FBRzlDLHNDQUE0QztBQUM1QyxpREFBOEM7QUFDOUMsaURBQThDO0FBRTlDLE1BQWEsYUFBYTtJQU14QixZQUFZLE9BQTZCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksaUJBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ3BFLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFDLENBQUMsVUFBVSxDQUFDLGdCQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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