@eggjs/dal-runtime 4.0.0-beta.3 → 4.0.0-beta.30
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.
- package/README.md +13 -1
- package/{src → dist}/BaseSqlMap.d.ts +1 -1
- package/{src → dist}/BaseSqlMap.js +27 -27
- package/dist/CodeGenerator.js +150 -0
- package/{src → dist}/DaoLoader.d.ts +1 -1
- package/dist/DaoLoader.js +14 -0
- package/{src → dist}/DataSource.d.ts +2 -2
- package/dist/DataSource.js +75 -0
- package/{src → dist}/DatabaseForker.d.ts +2 -2
- package/dist/DatabaseForker.js +52 -0
- package/{src → dist}/MySqlDataSource.d.ts +1 -1
- package/dist/MySqlDataSource.js +56 -0
- package/{src → dist}/NunjucksConverter.js +4 -3
- package/dist/NunjucksUtil.d.ts +5 -0
- package/dist/NunjucksUtil.js +74 -0
- package/dist/SqlGenerator.js +386 -0
- package/{src → dist}/SqlMapLoader.d.ts +2 -2
- package/dist/SqlMapLoader.js +23 -0
- package/{src → dist}/SqlUtil.js +8 -7
- package/{src → dist}/TableModelInstanceBuilder.d.ts +2 -2
- package/dist/TableModelInstanceBuilder.js +23 -0
- package/dist/TableSqlMap.js +89 -0
- package/dist/TemplateUtil.js +86 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +16 -0
- package/package.json +35 -35
- package/src/CodeGenerator.js +0 -138
- package/src/DaoLoader.js +0 -13
- package/src/DataSource.js +0 -79
- package/src/DatabaseForker.js +0 -49
- package/src/MySqlDataSource.js +0 -63
- package/src/NunjucksUtil.d.ts +0 -5
- package/src/NunjucksUtil.js +0 -74
- package/src/SqlGenerator.js +0 -391
- package/src/SqlMapLoader.js +0 -19
- package/src/TableModelInstanceBuilder.js +0 -22
- package/src/TableSqlMap.js +0 -91
- package/src/TemplateUtil.js +0 -86
- package/src/index.d.ts +0 -15
- package/src/index.js +0 -16
- /package/{src → dist}/CodeGenerator.d.ts +0 -0
- /package/{src → dist}/NunjucksConverter.d.ts +0 -0
- /package/{src → dist}/SqlGenerator.d.ts +0 -0
- /package/{src → dist}/SqlUtil.d.ts +0 -0
- /package/{src → dist}/TableSqlMap.d.ts +0 -0
- /package/{src → dist}/TemplateUtil.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# `@eggjs/dal-runtime`
|
|
2
2
|
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
5
|
+
[![npm download][download-image]][download-url]
|
|
6
|
+
[](https://nodejs.org/en/download/)
|
|
7
|
+
|
|
8
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/dal-runtime.svg?style=flat-square
|
|
9
|
+
[npm-url]: https://npmjs.org/package/@eggjs/dal-runtime
|
|
10
|
+
[snyk-image]: https://snyk.io/test/npm/@eggjs/dal-runtime/badge.svg?style=flat-square
|
|
11
|
+
[snyk-url]: https://snyk.io/test/npm/@eggjs/dal-runtime
|
|
12
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/dal-runtime.svg?style=flat-square
|
|
13
|
+
[download-url]: https://npmjs.org/package/@eggjs/dal-runtime
|
|
14
|
+
|
|
3
15
|
## Usage
|
|
4
16
|
|
|
5
|
-
Please read [@eggjs/
|
|
17
|
+
Please read [@eggjs/dal-plugin](../../plugin/dal/README.md)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TableModel } from '@eggjs/dal-decorator';
|
|
2
|
-
import { SqlMap } from '@eggjs/tegg-types';
|
|
2
|
+
import { type SqlMap } from '@eggjs/tegg-types';
|
|
3
3
|
import type { Logger, GenerateSqlMap } from '@eggjs/tegg-types';
|
|
4
4
|
export declare class BaseSqlMapGenerator {
|
|
5
5
|
private readonly tableModel;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
+
import { TableModel } from '@eggjs/dal-decorator';
|
|
2
3
|
import { ColumnType, IndexType, SqlType } from '@eggjs/tegg-types';
|
|
3
|
-
import { TemplateUtil } from
|
|
4
|
+
import { TemplateUtil } from "./TemplateUtil.js";
|
|
4
5
|
export class BaseSqlMapGenerator {
|
|
6
|
+
tableModel;
|
|
7
|
+
logger;
|
|
5
8
|
constructor(tableModel, logger) {
|
|
6
9
|
this.tableModel = tableModel;
|
|
7
10
|
this.logger = logger;
|
|
8
11
|
}
|
|
9
12
|
generateAllColumns(countIf) {
|
|
10
|
-
const str = this.tableModel.columns.map(t => `\`${t.columnName}\``)
|
|
11
|
-
.join(',');
|
|
13
|
+
const str = this.tableModel.columns.map((t) => `\`${t.columnName}\``).join(',');
|
|
12
14
|
return countIf ? `{% if $$count == true %}0{% else %}${str}{% endif %}` : str;
|
|
13
15
|
}
|
|
14
16
|
generateFindByPrimary() {
|
|
@@ -21,8 +23,7 @@ export class BaseSqlMapGenerator {
|
|
|
21
23
|
let sql = `SELECT ${this.generateAllColumns(true)}
|
|
22
24
|
FROM \`${this.tableModel.name}\`
|
|
23
25
|
WHERE `;
|
|
24
|
-
sql += primary.keys.map(indexKey => `\`${indexKey.columnName}\` = {{$${indexKey.propertyName}}}`)
|
|
25
|
-
.join(' AND ');
|
|
26
|
+
sql += primary.keys.map((indexKey) => `\`${indexKey.columnName}\` = {{$${indexKey.propertyName}}}`).join(' AND ');
|
|
26
27
|
if (primary.keys.length === 1) {
|
|
27
28
|
result.push({
|
|
28
29
|
type: SqlType.SELECT,
|
|
@@ -46,7 +47,8 @@ export class BaseSqlMapGenerator {
|
|
|
46
47
|
let sql = `SELECT ${this.generateAllColumns(true)}
|
|
47
48
|
FROM \`${this.tableModel.name}\`
|
|
48
49
|
WHERE `;
|
|
49
|
-
sql += index.keys
|
|
50
|
+
sql += index.keys
|
|
51
|
+
.map((indexKey) => {
|
|
50
52
|
const s = `\`${indexKey.columnName}\` {{ "IS" if $${indexKey.propertyName} == null else "=" }} {{$${indexKey.propertyName}}}`;
|
|
51
53
|
return s;
|
|
52
54
|
})
|
|
@@ -82,7 +84,7 @@ export class BaseSqlMapGenerator {
|
|
|
82
84
|
// - toMultiLine
|
|
83
85
|
// - toMultiPolygon
|
|
84
86
|
// - toGeometryCollection
|
|
85
|
-
keys.push(
|
|
87
|
+
keys.push(`
|
|
86
88
|
{% if $${propertyName} !== undefined %}
|
|
87
89
|
{% if ___first %}
|
|
88
90
|
{% set ___first = false %}
|
|
@@ -92,10 +94,10 @@ export class BaseSqlMapGenerator {
|
|
|
92
94
|
|
|
93
95
|
\`${columnName}\`
|
|
94
96
|
{% endif %}
|
|
95
|
-
|
|
97
|
+
`.trim());
|
|
96
98
|
if (TemplateUtil.isSpatialType(column)) {
|
|
97
99
|
const filter = TemplateUtil.getSpatialFilter(column.type.type);
|
|
98
|
-
values.push(
|
|
100
|
+
values.push(`
|
|
99
101
|
{% if $${propertyName} !== undefined %}
|
|
100
102
|
{% if ___first %}
|
|
101
103
|
{% set ___first = false %}
|
|
@@ -105,10 +107,10 @@ export class BaseSqlMapGenerator {
|
|
|
105
107
|
|
|
106
108
|
{{$${propertyName} | ${filter}}}
|
|
107
109
|
{% endif %}
|
|
108
|
-
|
|
110
|
+
`.trim());
|
|
109
111
|
}
|
|
110
112
|
else if (column.type.type === ColumnType.JSON) {
|
|
111
|
-
values.push(
|
|
113
|
+
values.push(`
|
|
112
114
|
{% if $${propertyName} !== undefined %}
|
|
113
115
|
{% if ___first %}
|
|
114
116
|
{% set ___first = false %}
|
|
@@ -118,10 +120,10 @@ export class BaseSqlMapGenerator {
|
|
|
118
120
|
|
|
119
121
|
{{$${propertyName} | toJson}}
|
|
120
122
|
{% endif %}
|
|
121
|
-
|
|
123
|
+
`.trim());
|
|
122
124
|
}
|
|
123
125
|
else {
|
|
124
|
-
values.push(
|
|
126
|
+
values.push(`
|
|
125
127
|
{% if $${propertyName} !== undefined %}
|
|
126
128
|
{% if ___first %}
|
|
127
129
|
{% set ___first = false %}
|
|
@@ -131,7 +133,7 @@ export class BaseSqlMapGenerator {
|
|
|
131
133
|
|
|
132
134
|
{{$${propertyName}}}
|
|
133
135
|
{% endif %}
|
|
134
|
-
|
|
136
|
+
`.trim());
|
|
135
137
|
}
|
|
136
138
|
}
|
|
137
139
|
else {
|
|
@@ -154,7 +156,7 @@ export class BaseSqlMapGenerator {
|
|
|
154
156
|
else {
|
|
155
157
|
this.logger.warn(`unknown type ${type.type} for ${propertyName}`);
|
|
156
158
|
}
|
|
157
|
-
keys.push(
|
|
159
|
+
keys.push(`
|
|
158
160
|
{% if ___first %}
|
|
159
161
|
{% set ___first = false %}
|
|
160
162
|
{% else %}
|
|
@@ -162,8 +164,8 @@ export class BaseSqlMapGenerator {
|
|
|
162
164
|
{% endif %}
|
|
163
165
|
|
|
164
166
|
\`${columnName}\`
|
|
165
|
-
|
|
166
|
-
values.push(
|
|
167
|
+
`.trim());
|
|
168
|
+
values.push(`
|
|
167
169
|
{% if ___first %}
|
|
168
170
|
{% set ___first = false %}
|
|
169
171
|
{% else %}
|
|
@@ -171,7 +173,7 @@ export class BaseSqlMapGenerator {
|
|
|
171
173
|
{% endif %}
|
|
172
174
|
|
|
173
175
|
{{ $${propertyName} if $${propertyName} !== undefined else '${now}' }}
|
|
174
|
-
|
|
176
|
+
`.trim());
|
|
175
177
|
}
|
|
176
178
|
}
|
|
177
179
|
sql += `(${keys.join('')})`;
|
|
@@ -203,8 +205,8 @@ export class BaseSqlMapGenerator {
|
|
|
203
205
|
now = type.precision ? `NOW(${type.precision})` : 'NOW()';
|
|
204
206
|
}
|
|
205
207
|
// 若无更新时间字段,则自动更新该字段
|
|
206
|
-
const temp = propertyName !== 'gmtModified'
|
|
207
|
-
`
|
|
208
|
+
const temp = propertyName !== 'gmtModified'
|
|
209
|
+
? `
|
|
208
210
|
{% if $${propertyName} !== undefined %}
|
|
209
211
|
{% if ___first %}
|
|
210
212
|
{% set ___first = false %}
|
|
@@ -214,8 +216,8 @@ export class BaseSqlMapGenerator {
|
|
|
214
216
|
|
|
215
217
|
\`${columnName}\` = {{$${propertyName}}}
|
|
216
218
|
{% endif %}
|
|
217
|
-
`
|
|
218
|
-
`
|
|
219
|
+
`
|
|
220
|
+
: `
|
|
219
221
|
{% if ___first %}
|
|
220
222
|
{% set ___first = false %}
|
|
221
223
|
{% else %}
|
|
@@ -228,8 +230,7 @@ export class BaseSqlMapGenerator {
|
|
|
228
230
|
kv.push(temp);
|
|
229
231
|
}
|
|
230
232
|
sql += kv.join('');
|
|
231
|
-
sql += `WHERE ${primary.keys.map(indexKey => `\`${indexKey.columnName}\` = {{primary.${indexKey.propertyName}}}`)
|
|
232
|
-
.join(' AND ')}`;
|
|
233
|
+
sql += `WHERE ${primary.keys.map((indexKey) => `\`${indexKey.columnName}\` = {{primary.${indexKey.propertyName}}}`).join(' AND ')}`;
|
|
233
234
|
return sql;
|
|
234
235
|
}
|
|
235
236
|
generateDelete() {
|
|
@@ -241,8 +242,7 @@ export class BaseSqlMapGenerator {
|
|
|
241
242
|
let sql = `DELETE
|
|
242
243
|
FROM \`${this.tableModel.name}\`
|
|
243
244
|
WHERE `;
|
|
244
|
-
sql += primary.keys.map(indexKey => `\`${indexKey.columnName}\` = {{${indexKey.propertyName}}}`)
|
|
245
|
-
.join(' AND ');
|
|
245
|
+
sql += primary.keys.map((indexKey) => `\`${indexKey.columnName}\` = {{${indexKey.propertyName}}}`).join(' AND ');
|
|
246
246
|
return sql;
|
|
247
247
|
}
|
|
248
248
|
load() {
|
|
@@ -300,4 +300,4 @@ export class BaseSqlMapGenerator {
|
|
|
300
300
|
return map;
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVNxbE1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlU3FsTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFHaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE1BQU0sT0FBTyxtQkFBbUI7SUFDYixVQUFVLENBQWE7SUFDdkIsTUFBTSxDQUFTO0lBRWhDLFlBQVksVUFBc0IsRUFBRSxNQUFjO1FBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFnQjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxzQ0FBc0MsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNoRixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sTUFBTSxHQUEwQixFQUFFLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFB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
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import js_beautify from 'js-beautify';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import nunjucks, {} from 'nunjucks';
|
|
6
|
+
import { Templates } from '@eggjs/tegg-types';
|
|
7
|
+
import { ColumnModel, TableModel } from '@eggjs/dal-decorator';
|
|
8
|
+
import { PrototypeUtil } from '@eggjs/core-decorator';
|
|
9
|
+
import { SqlGenerator } from "./SqlGenerator.js";
|
|
10
|
+
import { TemplateUtil } from "./TemplateUtil.js";
|
|
11
|
+
export class CodeGenerator {
|
|
12
|
+
moduleDir;
|
|
13
|
+
moduleName;
|
|
14
|
+
teggPkg;
|
|
15
|
+
dalPkg;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.moduleDir = options.moduleDir;
|
|
18
|
+
this.moduleName = options.moduleName;
|
|
19
|
+
this.teggPkg = options.teggPkg ?? '@eggjs/tegg';
|
|
20
|
+
this.dalPkg = options.dalPkg ?? '@eggjs/tegg/dal';
|
|
21
|
+
this.createNunjucksEnv();
|
|
22
|
+
}
|
|
23
|
+
njkEnv;
|
|
24
|
+
createNunjucksEnv() {
|
|
25
|
+
this.njkEnv = nunjucks.configure(path.join(__dirname, './templates'), {
|
|
26
|
+
autoescape: false,
|
|
27
|
+
});
|
|
28
|
+
this.njkEnv.addFilter('pascalCase', (name) => _.upperFirst(_.camelCase(name)));
|
|
29
|
+
this.njkEnv.addFilter('camelCase', (name) => _.camelCase(name));
|
|
30
|
+
this.njkEnv.addFilter('dbTypeToTSType', TemplateUtil.dbTypeToTsType);
|
|
31
|
+
}
|
|
32
|
+
genCode(tplName, filePath, tableModel) {
|
|
33
|
+
let tableModelAbsolutePath = PrototypeUtil.getFilePath(tableModel.clazz);
|
|
34
|
+
tableModelAbsolutePath = tableModelAbsolutePath.substring(0, tableModelAbsolutePath.length - 3);
|
|
35
|
+
const data = {
|
|
36
|
+
table: tableModel,
|
|
37
|
+
file: filePath,
|
|
38
|
+
fileName: path.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.importPath(tableModelAbsolutePath, path.dirname(filePath)) + '.ts',
|
|
46
|
+
extensionPath: `../../extension/${tableModel.clazz.name}Extension.ts`,
|
|
47
|
+
structurePath: `../../structure/${tableModel.clazz.name}.json`,
|
|
48
|
+
// FIXME: not support with { type: 'json' } in nunjucks
|
|
49
|
+
// importStructurePathWithJSON: `import Structure from '../../structure/${tableModel.clazz.name}.json' with { type: 'json' }`,
|
|
50
|
+
sqlPath: `../../structure/${tableModel.clazz.name}.sql`,
|
|
51
|
+
columnMap: tableModel.columns.reduce((p, c) => {
|
|
52
|
+
p[c.propertyName] = c;
|
|
53
|
+
return p;
|
|
54
|
+
}, {}),
|
|
55
|
+
};
|
|
56
|
+
return this.njkEnv.render(`${tplName}.njk`, data);
|
|
57
|
+
}
|
|
58
|
+
async generate(tableModel) {
|
|
59
|
+
let dalDir;
|
|
60
|
+
try {
|
|
61
|
+
await fs.access(path.join(this.moduleDir, 'src'));
|
|
62
|
+
dalDir = path.join(this.moduleDir, 'src/dal');
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
dalDir = path.join(this.moduleDir, 'dal');
|
|
66
|
+
}
|
|
67
|
+
// const tableName = tableModel.name;
|
|
68
|
+
// const clazzName = tableModel.clazz.name;
|
|
69
|
+
const clazzFileName = path.basename(PrototypeUtil.getFilePath(tableModel.clazz));
|
|
70
|
+
const baseFileName = path.basename(clazzFileName, '.ts');
|
|
71
|
+
// 要动的一些文件
|
|
72
|
+
const paths = {
|
|
73
|
+
// e.g. app/dal/dao/base/example.ts
|
|
74
|
+
baseBizDAO: path.join(dalDir, `dao/base/Base${baseFileName}DAO.ts`),
|
|
75
|
+
// e.g. app/dal/dao/example.ts
|
|
76
|
+
bizDAO: path.join(dalDir, `dao/${baseFileName}DAO.ts`),
|
|
77
|
+
// e.g. app/dal/extension/example.ts
|
|
78
|
+
extension: path.join(dalDir, `extension/${baseFileName}Extension.ts`),
|
|
79
|
+
// e.g. app/dal/structure/example.json
|
|
80
|
+
structure: path.join(dalDir, `structure/${baseFileName}.json`),
|
|
81
|
+
// e.g. app/dal/structure/example.sql
|
|
82
|
+
structureSql: path.join(dalDir, `structure/${baseFileName}.sql`),
|
|
83
|
+
};
|
|
84
|
+
// 建立 structure 文件
|
|
85
|
+
await fs.mkdir(path.dirname(paths.structure), {
|
|
86
|
+
recursive: true,
|
|
87
|
+
});
|
|
88
|
+
await fs.writeFile(paths.structure, JSON.stringify(tableModel, null, 2), 'utf8');
|
|
89
|
+
const sqlGenerator = new SqlGenerator();
|
|
90
|
+
const structureSql = sqlGenerator.generate(tableModel);
|
|
91
|
+
await fs.writeFile(paths.structureSql, structureSql, 'utf8');
|
|
92
|
+
const codes = [
|
|
93
|
+
{
|
|
94
|
+
templates: Templates.BASE_DAO,
|
|
95
|
+
filePath: paths.baseBizDAO,
|
|
96
|
+
beautify: true,
|
|
97
|
+
overwrite: true,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
templates: Templates.DAO,
|
|
101
|
+
filePath: paths.bizDAO,
|
|
102
|
+
beautify: true,
|
|
103
|
+
overwrite: false,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
templates: Templates.EXTENSION,
|
|
107
|
+
filePath: paths.extension,
|
|
108
|
+
beautify: false,
|
|
109
|
+
overwrite: false,
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
for (const { templates, filePath, beautify, overwrite } of codes) {
|
|
113
|
+
await fs.mkdir(path.dirname(filePath), {
|
|
114
|
+
recursive: true,
|
|
115
|
+
});
|
|
116
|
+
const code = this.genCode(templates, filePath, tableModel);
|
|
117
|
+
let beautified;
|
|
118
|
+
if (beautify) {
|
|
119
|
+
beautified = js_beautify(code, {
|
|
120
|
+
brace_style: 'preserve-inline',
|
|
121
|
+
indent_size: 2,
|
|
122
|
+
jslint_happy: true,
|
|
123
|
+
preserve_newlines: false,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
beautified = code;
|
|
128
|
+
}
|
|
129
|
+
beautified = beautified
|
|
130
|
+
.replace(/( )*\/\/ empty-line( )*/g, '')
|
|
131
|
+
.replace(/Promise( )*<( )*(.+?)( )*>/g, 'Promise<$3>')
|
|
132
|
+
.replace(/Optional( )*<( )*(.+?)( )*>/g, 'Optional<$3>')
|
|
133
|
+
.replace(/Record( )*<( )*(.+?)( )*>/g, 'Record<$3>')
|
|
134
|
+
.replace(/Partial( )*<( )*(.+?)( )*>/g, 'Partial<$3>')
|
|
135
|
+
.replace(/DataSource( )*<( )*(.+?)( )*>/g, 'DataSource<$3>')
|
|
136
|
+
.replace(/ \? :/g, '?:');
|
|
137
|
+
if (overwrite !== true) {
|
|
138
|
+
try {
|
|
139
|
+
await fs.access(filePath);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// file not exists
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
await fs.writeFile(filePath, beautified, 'utf8');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZUdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Db2RlR2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sUUFBUSxFQUFFLEVBQW9CLE1BQU0sVUFBVSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE1BQU0sT0FBTyxhQUFhO0lBQ1AsU0FBUyxDQUFTO0lBQ2xCLFVBQVUsQ0FBUztJQUNuQixPQUFPLENBQVM7SUFDaEIsTUFBTSxDQUFTO0lBRWhDLFlBQVksT0FBNkI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQztRQUNsRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sTUFBTSxDQUFjO0lBRTVCLGlCQUFpQjtRQUNmLElBQUksQ0FB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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EggLoadUnitType } from '@eggjs/tegg-types';
|
|
2
|
+
import { DaoInfoUtil } from '@eggjs/dal-decorator';
|
|
3
|
+
import {} from '@eggjs/tegg-types/dal';
|
|
4
|
+
import { LoaderFactory } from '@eggjs/tegg-loader';
|
|
5
|
+
export class DaoLoader {
|
|
6
|
+
static async loadDaos(moduleDir) {
|
|
7
|
+
const loader = LoaderFactory.createLoader(moduleDir, EggLoadUnitType.MODULE);
|
|
8
|
+
const clazzList = await loader.load();
|
|
9
|
+
return clazzList.filter((t) => {
|
|
10
|
+
return DaoInfoUtil.getIsDao(t);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGFvTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Rhb0xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBb0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsTUFBTSxPQUFPLFNBQVM7SUFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBaUI7UUFDckMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBb0IsRUFBRTtZQUM5QyxPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TableModel } from '@eggjs/dal-decorator';
|
|
2
2
|
import type { DataSource as IDataSource, PaginateData, SqlType } from '@eggjs/tegg-types';
|
|
3
|
-
import { MysqlDataSource } from './MySqlDataSource.
|
|
4
|
-
import { TableSqlMap } from './TableSqlMap.
|
|
3
|
+
import { MysqlDataSource } from './MySqlDataSource.ts';
|
|
4
|
+
import { TableSqlMap } from './TableSqlMap.ts';
|
|
5
5
|
export interface ExecuteSql {
|
|
6
6
|
sql: string;
|
|
7
7
|
template: string;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { TableModel } from '@eggjs/dal-decorator';
|
|
2
|
+
import { MysqlDataSource } from "./MySqlDataSource.js";
|
|
3
|
+
import { TableSqlMap } from "./TableSqlMap.js";
|
|
4
|
+
import { TableModelInstanceBuilder } from "./TableModelInstanceBuilder.js";
|
|
5
|
+
const PAGINATE_COUNT_WRAPPER = ['SELECT COUNT(0) as count FROM (', ') AS T'];
|
|
6
|
+
export class DataSource {
|
|
7
|
+
tableModel;
|
|
8
|
+
mysqlDataSource;
|
|
9
|
+
sqlMap;
|
|
10
|
+
constructor(tableModel, mysqlDataSource, sqlMap) {
|
|
11
|
+
this.tableModel = tableModel;
|
|
12
|
+
this.mysqlDataSource = mysqlDataSource;
|
|
13
|
+
this.sqlMap = sqlMap;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* public for aop execute to implement sql hint append
|
|
17
|
+
* @param sqlName - sql name
|
|
18
|
+
* @param data - sql data
|
|
19
|
+
*/
|
|
20
|
+
async generateSql(sqlName, data) {
|
|
21
|
+
const sql = this.sqlMap.generate(sqlName, data, this.mysqlDataSource.timezone);
|
|
22
|
+
const sqlType = this.sqlMap.getType(sqlName);
|
|
23
|
+
const template = this.sqlMap.getTemplateString(sqlName);
|
|
24
|
+
return {
|
|
25
|
+
sql,
|
|
26
|
+
sqlType,
|
|
27
|
+
template,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async count(sqlName, data) {
|
|
31
|
+
const newData = Object.assign({ $$count: true }, data);
|
|
32
|
+
const executeSql = await this.generateSql(sqlName, newData);
|
|
33
|
+
return await this.#paginateCount(executeSql.sql);
|
|
34
|
+
}
|
|
35
|
+
async execute(sqlName, data) {
|
|
36
|
+
const executeSql = await this.generateSql(sqlName, data);
|
|
37
|
+
const rows = await this.mysqlDataSource.query(executeSql.sql);
|
|
38
|
+
return rows.map((t) => {
|
|
39
|
+
return TableModelInstanceBuilder.buildInstance(this.tableModel, t);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async executeRaw(sqlName, data) {
|
|
43
|
+
const executeSql = await this.generateSql(sqlName, data);
|
|
44
|
+
return await this.mysqlDataSource.query(executeSql.sql);
|
|
45
|
+
}
|
|
46
|
+
async executeScalar(sqlName, data) {
|
|
47
|
+
const ret = await this.execute(sqlName, data);
|
|
48
|
+
if (!Array.isArray(ret))
|
|
49
|
+
return ret || null;
|
|
50
|
+
return ret[0] || null;
|
|
51
|
+
}
|
|
52
|
+
async executeRawScalar(sqlName, data) {
|
|
53
|
+
const ret = await this.executeRaw(sqlName, data);
|
|
54
|
+
if (!Array.isArray(ret))
|
|
55
|
+
return (ret || null);
|
|
56
|
+
return ret[0] || null;
|
|
57
|
+
}
|
|
58
|
+
async paginate(sqlName, data, currentPage, perPageCount) {
|
|
59
|
+
const limit = `LIMIT ${(currentPage - 1) * perPageCount}, ${perPageCount}`;
|
|
60
|
+
const sql = (await this.generateSql(sqlName, data)).sql + ' ' + limit;
|
|
61
|
+
const countSql = (await this.generateSql(sqlName, Object.assign({ $$count: true }, data))).sql;
|
|
62
|
+
const ret = await Promise.all([this.mysqlDataSource.query(sql), this.#paginateCount(countSql)]);
|
|
63
|
+
return {
|
|
64
|
+
total: Number(ret[1]),
|
|
65
|
+
pageNum: currentPage,
|
|
66
|
+
rows: ret[0].map((t) => TableModelInstanceBuilder.buildInstance(this.tableModel, t)),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async #paginateCount(baseSQL) {
|
|
70
|
+
const sql = `${PAGINATE_COUNT_WRAPPER[0]}${baseSQL}${PAGINATE_COUNT_WRAPPER[1]}`;
|
|
71
|
+
const result = await this.mysqlDataSource.query(sql);
|
|
72
|
+
return result[0].count;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9EYXRhU291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBUTNFLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUU3RSxNQUFNLE9BQU8sVUFBVTtJQUNKLFVBQVUsQ0FBZ0I7SUFDMUIsZUFBZSxDQUFrQjtJQUNqQyxNQUFNLENBQWM7SUFFckMsWUFBWSxVQUF5QixFQUFFLGVBQWdDLEVBQUUsTUFBbUI7UUFDMUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQWUsRUFBRSxJQUFZO1FBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFTLENBQUMsQ0FBQztRQUNoRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE9BQU87WUFDTCxHQUFHO1lBQ0gsT0FBTztZQUNQLFFBQVE7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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { DataSourceOptions } from './MySqlDataSource.
|
|
1
|
+
import { type DataSourceOptions } from './MySqlDataSource.ts';
|
|
2
2
|
export declare class DatabaseForker {
|
|
3
3
|
private readonly env;
|
|
4
4
|
private readonly options;
|
|
5
5
|
constructor(env: string, options: DataSourceOptions);
|
|
6
|
-
shouldFork(): boolean
|
|
6
|
+
shouldFork(): boolean;
|
|
7
7
|
forkDb(moduleDir: string): Promise<void>;
|
|
8
8
|
private forkTables;
|
|
9
9
|
private doForkTable;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { RDSClient } from '@eggjs/rds';
|
|
3
|
+
import {} from "./MySqlDataSource.js";
|
|
4
|
+
import { DaoLoader } from "./DaoLoader.js";
|
|
5
|
+
export class DatabaseForker {
|
|
6
|
+
env;
|
|
7
|
+
options;
|
|
8
|
+
constructor(env, options) {
|
|
9
|
+
this.env = env;
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
shouldFork() {
|
|
13
|
+
return this.env === 'unittest' && !!this.options.forkDb;
|
|
14
|
+
}
|
|
15
|
+
async forkDb(moduleDir) {
|
|
16
|
+
assert(this.shouldFork(), 'fork db only run in unittest');
|
|
17
|
+
// 尽早判断不应该 fork,避免对 rds pool 配置造成污染
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
19
|
+
const { name, initSql, forkDb, database, ...mysqlOptions } = this.options;
|
|
20
|
+
const client = new RDSClient(Object.assign(mysqlOptions));
|
|
21
|
+
const conn = await client.getConnection();
|
|
22
|
+
await this.doCreateUtDb(conn);
|
|
23
|
+
await this.forkTables(conn, moduleDir);
|
|
24
|
+
conn.release();
|
|
25
|
+
await client.end();
|
|
26
|
+
}
|
|
27
|
+
async forkTables(conn, moduleDir) {
|
|
28
|
+
const daoClazzList = await DaoLoader.loadDaos(moduleDir);
|
|
29
|
+
for (const clazz of daoClazzList) {
|
|
30
|
+
await this.doForkTable(conn, clazz.tableSql);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async doForkTable(conn, sqlFile) {
|
|
34
|
+
const sqls = sqlFile.split(';').filter((t) => !!t.trim());
|
|
35
|
+
for (const sql of sqls) {
|
|
36
|
+
await conn.query(sql);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async doCreateUtDb(conn) {
|
|
40
|
+
await conn.query(`CREATE DATABASE IF NOT EXISTS ${this.options.database};`);
|
|
41
|
+
await conn.query(`use ${this.options.database};`);
|
|
42
|
+
}
|
|
43
|
+
async destroy() {
|
|
44
|
+
assert(this.shouldFork(), 'fork db only run in unittest');
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
46
|
+
const { name, initSql, forkDb, database, ...mysqlOptions } = this.options;
|
|
47
|
+
const client = new RDSClient(Object.assign(mysqlOptions));
|
|
48
|
+
await client.query(`DROP DATABASE ${database}`);
|
|
49
|
+
await client.end();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YWJhc2VGb3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRGF0YWJhc2VGb3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJdkMsT0FBTyxFQUEwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLE9BQU8sY0FBYztJQUNSLEdBQUcsQ0FBUztJQUNaLE9BQU8sQ0FBb0I7SUFFNUMsWUFBWSxHQUFXLEVBQUUsT0FBMEI7UUFDakQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQWlCO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUMxRCxtQ0FBbUM7UUFDbkMsNkRBQTZEO1FBQzdELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFtQixFQUFFLFNBQWlCO1FBQzdELE1BQU0sWUFBWSxHQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxLQUFLLE1BQU0sS0FBSyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFtQixFQUFFLE9BQWU7UUFDNUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBbUI7UUFDNUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDNUUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUMxRCw2REFBNkQ7UUFDN0QsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0NBQ0YifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RDSClientOptions } from '@eggjs/rds';
|
|
2
2
|
import { Base } from 'sdk-base';
|
|
3
|
-
import { Logger } from '@eggjs/tegg-types';
|
|
3
|
+
import type { Logger } from '@eggjs/tegg-types';
|
|
4
4
|
export interface DataSourceOptions extends RDSClientOptions {
|
|
5
5
|
name: string;
|
|
6
6
|
initSql?: string;
|