@eggjs/dal-runtime 4.0.0-beta.1 → 4.0.0-beta.11

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 (43) hide show
  1. package/README.md +13 -1
  2. package/{src → dist}/BaseSqlMap.d.ts +3 -3
  3. package/{src → dist}/BaseSqlMap.js +3 -2
  4. package/dist/CodeGenerator.js +139 -0
  5. package/{src → dist}/DaoLoader.d.ts +1 -1
  6. package/dist/DaoLoader.js +14 -0
  7. package/{src → dist}/DataSource.d.ts +2 -2
  8. package/dist/DataSource.js +82 -0
  9. package/{src → dist}/DatabaseForker.d.ts +2 -2
  10. package/dist/DatabaseForker.js +50 -0
  11. package/{src → dist}/MySqlDataSource.d.ts +1 -1
  12. package/{src → dist}/MySqlDataSource.js +1 -1
  13. package/{src → dist}/NunjucksConverter.js +1 -1
  14. package/dist/NunjucksUtil.js +74 -0
  15. package/dist/SqlGenerator.js +392 -0
  16. package/{src → dist}/SqlMapLoader.d.ts +2 -2
  17. package/dist/SqlMapLoader.js +20 -0
  18. package/{src → dist}/SqlUtil.js +1 -1
  19. package/dist/TableModelInstanceBuilder.js +23 -0
  20. package/{src → dist}/TableSqlMap.js +4 -3
  21. package/dist/TemplateUtil.js +86 -0
  22. package/dist/index.d.ts +15 -0
  23. package/dist/index.js +16 -0
  24. package/package.json +27 -28
  25. package/src/CodeGenerator.js +0 -138
  26. package/src/DaoLoader.js +0 -13
  27. package/src/DataSource.js +0 -79
  28. package/src/DatabaseForker.js +0 -49
  29. package/src/NunjucksUtil.js +0 -74
  30. package/src/SqlGenerator.js +0 -391
  31. package/src/SqlMapLoader.js +0 -19
  32. package/src/TableModelInstanceBuilder.js +0 -22
  33. package/src/TemplateUtil.js +0 -86
  34. package/src/index.d.ts +0 -15
  35. package/src/index.js +0 -16
  36. /package/{src → dist}/CodeGenerator.d.ts +0 -0
  37. /package/{src → dist}/NunjucksConverter.d.ts +0 -0
  38. /package/{src → dist}/NunjucksUtil.d.ts +0 -0
  39. /package/{src → dist}/SqlGenerator.d.ts +0 -0
  40. /package/{src → dist}/SqlUtil.d.ts +0 -0
  41. /package/{src → dist}/TableModelInstanceBuilder.d.ts +0 -0
  42. /package/{src → dist}/TableSqlMap.d.ts +0 -0
  43. /package/{src → dist}/TemplateUtil.d.ts +0 -0
@@ -0,0 +1,15 @@
1
+ export * from './BaseSqlMap.ts';
2
+ export * from './CodeGenerator.ts';
3
+ export * from './CodeGenerator.ts';
4
+ export * from './DaoLoader.ts';
5
+ export * from './DatabaseForker.ts';
6
+ export * from './DataSource.ts';
7
+ export * from './MySqlDataSource.ts';
8
+ export * from './NunjucksConverter.ts';
9
+ export * from './NunjucksUtil.ts';
10
+ export * from './SqlGenerator.ts';
11
+ export * from './SqlMapLoader.ts';
12
+ export * from './SqlUtil.ts';
13
+ export * from './TableModelInstanceBuilder.ts';
14
+ export { TableSqlMap } from './TableSqlMap.ts';
15
+ export * from './TemplateUtil.ts';
package/dist/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLGNBQWMsbUJBQW1CLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/dal-runtime",
3
- "version": "4.0.0-beta.1",
3
+ "version": "4.0.0-beta.11",
4
4
  "description": "tegg dal decorator",
5
5
  "keywords": [
6
6
  "egg",
@@ -11,24 +11,15 @@
11
11
  ],
12
12
  "type": "module",
13
13
  "exports": {
14
- ".": {
15
- "types": "./src/index.d.ts",
16
- "default": "./src/index.js"
17
- }
14
+ ".": "./dist/index.js",
15
+ "./package.json": "./package.json"
18
16
  },
19
17
  "files": [
20
- "src/**/*.js",
21
- "src/**/*.d.ts"
18
+ "dist"
22
19
  ],
23
- "scripts": {
24
- "clean": "tsc -b --clean",
25
- "tsc": "npm run clean && tsc -p ./tsconfig.json",
26
- "tsc:pub": "npm run tsc",
27
- "prepublishOnly": "npm run tsc"
28
- },
29
20
  "author": "killagu <killa123@126.com>",
30
21
  "license": "MIT",
31
- "homepage": "https://github.com/eggjs/tegg",
22
+ "homepage": "https://github.com/eggjs/tegg/tree/next/core/dal-runtime",
32
23
  "bugs": {
33
24
  "url": "https://github.com/eggjs/tegg/issues"
34
25
  },
@@ -38,31 +29,39 @@
38
29
  "directory": "core/dal-decorator"
39
30
  },
40
31
  "engines": {
41
- "node": ">=20.0.0"
32
+ "node": ">=22.18.0"
42
33
  },
43
34
  "dependencies": {
44
- "@eggjs/core-decorator": "^4.0.0-beta.1",
45
- "@eggjs/dal-decorator": "^4.0.0-beta.1",
46
- "@eggjs/rds": "^1.0.0",
47
- "@eggjs/tegg-loader": "^4.0.0-beta.1",
48
- "@eggjs/tegg-types": "^4.0.0-beta.1",
35
+ "@eggjs/rds": "^1.3.0",
49
36
  "js-beautify": "^1.15.3",
50
37
  "lodash": "^4.17.21",
51
38
  "nunjucks": "^3.2.4",
52
39
  "sdk-base": "^5.0.1",
53
- "sqlstring": "^2.3.3"
40
+ "sqlstring": "^2.3.3",
41
+ "@eggjs/dal-decorator": "4.0.0-beta.11",
42
+ "@eggjs/tegg-loader": "4.0.0-beta.11",
43
+ "@eggjs/core-decorator": "4.0.0-beta.11",
44
+ "@eggjs/tegg-types": "4.0.0-beta.11"
54
45
  },
55
46
  "publishConfig": {
56
47
  "access": "public"
57
48
  },
58
49
  "devDependencies": {
59
50
  "@types/js-beautify": "^1.14.3",
60
- "@types/lodash": "4",
61
- "@types/node": "22",
62
- "@types/nunjucks": "3",
51
+ "@types/lodash": "^4.17.20",
52
+ "@types/node": "^22.10.5",
53
+ "@types/nunjucks": "^3.2.6",
63
54
  "@types/sqlstring": "^2.3.2",
64
- "ts-node": "10",
65
- "typescript": "5"
55
+ "typescript": "^5.9.3",
56
+ "tsdown": "^0.15.6",
57
+ "unplugin-unused": "^0.5.3"
66
58
  },
67
- "gitHead": "79a22905272d6de7fe06152231dff65d213d9166"
68
- }
59
+ "main": "./dist/index.js",
60
+ "module": "./dist/index.js",
61
+ "types": "./dist/index.d.ts",
62
+ "scripts": {
63
+ "clean": "rimraf dist *.tsbuildinfo",
64
+ "build": "tsdown && npm run clean && tsc -p tsconfig.build.json",
65
+ "typecheck": "tsc --noEmit"
66
+ }
67
+ }
@@ -1,138 +0,0 @@
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 { PrototypeUtil } from '@eggjs/core-decorator';
8
- import { SqlGenerator } from './SqlGenerator.js';
9
- import { TemplateUtil } from './TemplateUtil.js';
10
- export class CodeGenerator {
11
- constructor(options) {
12
- this.moduleDir = options.moduleDir;
13
- this.moduleName = options.moduleName;
14
- this.teggPkg = options.teggPkg ?? '@eggjs/tegg';
15
- this.dalPkg = options.dalPkg ?? '@eggjs/tegg/dal';
16
- this.createNunjucksEnv();
17
- }
18
- createNunjucksEnv() {
19
- this.njkEnv = nunjucks.configure(path.join(__dirname, './templates'), {
20
- autoescape: false,
21
- });
22
- this.njkEnv.addFilter('pascalCase', name => _.upperFirst(_.camelCase(name)));
23
- this.njkEnv.addFilter('camelCase', name => _.camelCase(name));
24
- this.njkEnv.addFilter('dbTypeToTSType', TemplateUtil.dbTypeToTsType);
25
- }
26
- genCode(tplName, filePath, tableModel) {
27
- let tableModelAbsolutePath = PrototypeUtil.getFilePath(tableModel.clazz);
28
- tableModelAbsolutePath = tableModelAbsolutePath.substring(0, tableModelAbsolutePath.length - 3);
29
- const data = {
30
- table: tableModel,
31
- file: filePath,
32
- fileName: path.basename(filePath),
33
- clazzName: tableModel.clazz.name,
34
- moduleName: this.moduleName,
35
- teggPkg: this.teggPkg,
36
- dalPkg: this.dalPkg,
37
- id: tableModel.columns.find(t => t.propertyName === 'id'),
38
- primaryIndex: tableModel.getPrimary(),
39
- tableModelPath: TemplateUtil.importPath(tableModelAbsolutePath, path.dirname(filePath)),
40
- extensionPath: `../../extension/${tableModel.clazz.name}Extension`,
41
- structurePath: `../../structure/${tableModel.clazz.name}.json`,
42
- sqlPath: `../../structure/${tableModel.clazz.name}.sql`,
43
- columnMap: tableModel.columns.reduce((p, c) => {
44
- p[c.propertyName] = c;
45
- return p;
46
- }, {}),
47
- };
48
- return this.njkEnv.render(`${tplName}.njk`, data);
49
- }
50
- async generate(tableModel) {
51
- let dalDir;
52
- try {
53
- await fs.access(path.join(this.moduleDir, 'src'));
54
- dalDir = path.join(this.moduleDir, 'src/dal');
55
- }
56
- catch {
57
- dalDir = path.join(this.moduleDir, 'dal');
58
- }
59
- // const tableName = tableModel.name;
60
- // const clazzName = tableModel.clazz.name;
61
- const clazzFileName = path.basename(PrototypeUtil.getFilePath(tableModel.clazz));
62
- const baseFileName = path.basename(clazzFileName, '.ts');
63
- // 要动的一些文件
64
- const paths = {
65
- // e.g. app/dal/dao/base/example.ts
66
- baseBizDAO: path.join(dalDir, `dao/base/Base${baseFileName}DAO.ts`),
67
- // e.g. app/dal/dao/example.ts
68
- bizDAO: path.join(dalDir, `dao/${baseFileName}DAO.ts`),
69
- // e.g. app/dal/extension/example.ts
70
- extension: path.join(dalDir, `extension/${baseFileName}Extension.ts`),
71
- // e.g. app/dal/structure/example.json
72
- structure: path.join(dalDir, `structure/${baseFileName}.json`),
73
- // e.g. app/dal/structure/example.sql
74
- structureSql: path.join(dalDir, `structure/${baseFileName}.sql`),
75
- };
76
- // 建立 structure 文件
77
- await fs.mkdir(path.dirname(paths.structure), {
78
- recursive: true,
79
- });
80
- await fs.writeFile(paths.structure, JSON.stringify(tableModel, null, 2), 'utf8');
81
- const sqlGenerator = new SqlGenerator();
82
- const structureSql = sqlGenerator.generate(tableModel);
83
- await fs.writeFile(paths.structureSql, structureSql, 'utf8');
84
- const codes = [{
85
- templates: Templates.BASE_DAO,
86
- filePath: paths.baseBizDAO,
87
- beautify: true,
88
- overwrite: true,
89
- }, {
90
- templates: Templates.DAO,
91
- filePath: paths.bizDAO,
92
- beautify: true,
93
- overwrite: false,
94
- }, {
95
- templates: Templates.EXTENSION,
96
- filePath: paths.extension,
97
- beautify: false,
98
- overwrite: false,
99
- }];
100
- for (const { templates, filePath, beautify, overwrite } of codes) {
101
- await fs.mkdir(path.dirname(filePath), {
102
- recursive: true,
103
- });
104
- const code = this.genCode(templates, filePath, tableModel);
105
- let beautified;
106
- if (beautify) {
107
- beautified = js_beautify(code, {
108
- brace_style: 'preserve-inline',
109
- indent_size: 2,
110
- jslint_happy: true,
111
- preserve_newlines: false,
112
- });
113
- }
114
- else {
115
- beautified = code;
116
- }
117
- beautified = beautified
118
- .replace(/( )*\/\/ empty-line( )*/g, '')
119
- .replace(/Promise( )*<( )*(.+?)( )*>/g, 'Promise<$3>')
120
- .replace(/Optional( )*<( )*(.+?)( )*>/g, 'Optional<$3>')
121
- .replace(/Record( )*<( )*(.+?)( )*>/g, 'Record<$3>')
122
- .replace(/Partial( )*<( )*(.+?)( )*>/g, 'Partial<$3>')
123
- .replace(/DataSource( )*<( )*(.+?)( )*>/g, 'DataSource<$3>')
124
- .replace(/ \? :/g, '?:');
125
- if (overwrite !== true) {
126
- try {
127
- await fs.access(filePath);
128
- continue;
129
- }
130
- catch {
131
- // file not exists
132
- }
133
- }
134
- await fs.writeFile(filePath, beautified, 'utf8');
135
- }
136
- }
137
- }
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZUdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvZGVHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxRQUE4QixNQUFNLFVBQVUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsTUFBTSxPQUFPLGFBQWE7SUFNeEIsWUFBWSxPQUE2QjtRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLGlCQUFpQixDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFJRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDcEUsVUFBVSxFQUFFLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMs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
package/src/DaoLoader.js DELETED
@@ -1,13 +0,0 @@
1
- import { EggLoadUnitType } from '@eggjs/tegg-types';
2
- import { DaoInfoUtil } from '@eggjs/dal-decorator';
3
- import { LoaderFactory } from '@eggjs/tegg-loader';
4
- export class DaoLoader {
5
- static async loadDaos(moduleDir) {
6
- const loader = LoaderFactory.createLoader(moduleDir, EggLoadUnitType.MODULE);
7
- const clazzList = await loader.load();
8
- return clazzList.filter((t) => {
9
- return DaoInfoUtil.getIsDao(t);
10
- });
11
- }
12
- }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGFvTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRGFvTG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQWlCO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQW9CLEVBQUU7WUFDOUMsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
package/src/DataSource.js DELETED
@@ -1,79 +0,0 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var _DataSource_instances, _DataSource_paginateCount;
7
- import { TableModelInstanceBuilder } from './TableModelInstanceBuilder.js';
8
- const PAGINATE_COUNT_WRAPPER = ['SELECT COUNT(0) as count FROM (', ') AS T'];
9
- export class DataSource {
10
- constructor(tableModel, mysqlDataSource, sqlMap) {
11
- _DataSource_instances.add(this);
12
- this.tableModel = tableModel;
13
- this.mysqlDataSource = mysqlDataSource;
14
- this.sqlMap = sqlMap;
15
- }
16
- /**
17
- * public for aop execute to implement sql hint append
18
- * @param sqlName - sql name
19
- * @param data - sql data
20
- */
21
- async generateSql(sqlName, data) {
22
- const sql = this.sqlMap.generate(sqlName, data, this.mysqlDataSource.timezone);
23
- const sqlType = this.sqlMap.getType(sqlName);
24
- const template = this.sqlMap.getTemplateString(sqlName);
25
- return {
26
- sql,
27
- sqlType,
28
- template,
29
- };
30
- }
31
- async count(sqlName, data) {
32
- const newData = Object.assign({ $$count: true }, data);
33
- const executeSql = await this.generateSql(sqlName, newData);
34
- return await __classPrivateFieldGet(this, _DataSource_instances, "m", _DataSource_paginateCount).call(this, executeSql.sql);
35
- }
36
- async execute(sqlName, data) {
37
- const executeSql = await this.generateSql(sqlName, data);
38
- const rows = await this.mysqlDataSource.query(executeSql.sql);
39
- return rows.map((t) => {
40
- return TableModelInstanceBuilder.buildInstance(this.tableModel, t);
41
- });
42
- }
43
- async executeRaw(sqlName, data) {
44
- const executeSql = await this.generateSql(sqlName, data);
45
- return await this.mysqlDataSource.query(executeSql.sql);
46
- }
47
- async executeScalar(sqlName, data) {
48
- const ret = await this.execute(sqlName, data);
49
- if (!Array.isArray(ret))
50
- return ret || null;
51
- return ret[0] || null;
52
- }
53
- async executeRawScalar(sqlName, data) {
54
- const ret = await this.executeRaw(sqlName, data);
55
- if (!Array.isArray(ret))
56
- return (ret || null);
57
- return ret[0] || null;
58
- }
59
- async paginate(sqlName, data, currentPage, perPageCount) {
60
- const limit = `LIMIT ${(currentPage - 1) * perPageCount}, ${perPageCount}`;
61
- const sql = (await this.generateSql(sqlName, data)).sql + ' ' + limit;
62
- const countSql = (await this.generateSql(sqlName, Object.assign({ $$count: true }, data))).sql;
63
- const ret = await Promise.all([
64
- this.mysqlDataSource.query(sql),
65
- __classPrivateFieldGet(this, _DataSource_instances, "m", _DataSource_paginateCount).call(this, countSql),
66
- ]);
67
- return {
68
- total: Number(ret[1]),
69
- pageNum: currentPage,
70
- rows: ret[0].map((t) => TableModelInstanceBuilder.buildInstance(this.tableModel, t)),
71
- };
72
- }
73
- }
74
- _DataSource_instances = new WeakSet(), _DataSource_paginateCount = async function _DataSource_paginateCount(baseSQL) {
75
- const sql = `${PAGINATE_COUNT_WRAPPER[0]}${baseSQL}${PAGINATE_COUNT_WRAPPER[1]}`;
76
- const result = await this.mysqlDataSource.query(sql);
77
- return result[0].count;
78
- };
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkRhdGFTb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFRM0UsTUFBTSxzQkFBc0IsR0FBRyxDQUFFLGlDQUFpQyxFQUFFLFFBQVEsQ0FBRSxDQUFDO0FBRS9FLE1BQU0sT0FBTyxVQUFVO0lBS3JCLFlBQVksVUFBeUIsRUFBRSxlQUFnQyxFQUFFLE1BQW1COztRQUMxRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBZSxFQUFFLElBQVk7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsT0FBTztZQUNMLEdBQUc7WUFDSCxPQUFPO1lBQ1AsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxD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
@@ -1,49 +0,0 @@
1
- import assert from 'node:assert';
2
- import { RDSClient } from '@eggjs/rds';
3
- import { DaoLoader } from './DaoLoader.js';
4
- export class DatabaseForker {
5
- constructor(env, options) {
6
- this.env = env;
7
- this.options = options;
8
- }
9
- shouldFork() {
10
- return this.env === 'unittest' && this.options.forkDb;
11
- }
12
- async forkDb(moduleDir) {
13
- assert(this.shouldFork(), 'fork db only run in unittest');
14
- // 尽早判断不应该 fork,避免对 rds pool 配置造成污染
15
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
- const { name, initSql, forkDb, database, ...mysqlOptions } = this.options;
17
- const client = new RDSClient(Object.assign(mysqlOptions));
18
- const conn = await client.getConnection();
19
- await this.doCreateUtDb(conn);
20
- await this.forkTables(conn, moduleDir);
21
- conn.release();
22
- await client.end();
23
- }
24
- async forkTables(conn, moduleDir) {
25
- const daoClazzList = await DaoLoader.loadDaos(moduleDir);
26
- for (const clazz of daoClazzList) {
27
- await this.doForkTable(conn, clazz.tableSql);
28
- }
29
- }
30
- async doForkTable(conn, sqlFile) {
31
- const sqls = sqlFile.split(';').filter(t => !!t.trim());
32
- for (const sql of sqls) {
33
- await conn.query(sql);
34
- }
35
- }
36
- async doCreateUtDb(conn) {
37
- await conn.query(`CREATE DATABASE IF NOT EXISTS ${this.options.database};`);
38
- await conn.query(`use ${this.options.database};`);
39
- }
40
- async destroy() {
41
- assert(this.shouldFork(), 'fork db only run in unittest');
42
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
43
- const { name, initSql, forkDb, database, ...mysqlOptions } = this.options;
44
- const client = new RDSClient(Object.assign(mysqlOptions));
45
- await client.query(`DROP DATABASE ${database}`);
46
- await client.end();
47
- }
48
- }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YWJhc2VGb3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJEYXRhYmFzZUZvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsTUFBTSxPQUFPLGNBQWM7SUFJekIsWUFBWSxHQUFXLEVBQUUsT0FBMEI7UUFDakQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBaUI7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1FBQzFELG1DQUFtQztRQUNuQyw2REFBNkQ7UUFDN0QsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQW1CLEVBQUUsU0FBaUI7UUFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQW1CLEVBQUUsT0FBZTtRQUM1RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBbUI7UUFDNUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDNUUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUMxRCw2REFBNkQ7UUFDN0QsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0NBQ0YifQ==
@@ -1,74 +0,0 @@
1
- import nunjucks, { Template } from 'nunjucks';
2
- import sqlstring from 'sqlstring';
3
- import { NunjucksConverter } from './NunjucksConverter.js';
4
- import { SqlUtil } from './SqlUtil.js';
5
- const compiler = nunjucks.compiler;
6
- const envs = {};
7
- const ROOT_RENDER_FUNC = Symbol('rootRenderFunc');
8
- const RUNTIME = Object.assign({}, nunjucks.runtime, {
9
- escapeSQL: function escapeSQL(key, value) {
10
- // 如果是预定义 block 则不转义
11
- if (this.env.globals[key])
12
- return value;
13
- return sqlstring.escape(value, true, this.env.timezone);
14
- },
15
- });
16
- function _replaceCodeWithSQLFeature(source) {
17
- const funcs = [
18
- 'convertNormalVariableCode', // 普通变量
19
- 'convertTernaryCode', // 三目运算
20
- 'convertNestedObjectCode', // 对象中的变量,如 `user.id`
21
- 'convertValueInsideFor', // for 中的值需要转义
22
- ];
23
- return funcs.reduce((source, func) => NunjucksConverter[func](source), source);
24
- }
25
- /**
26
- * compile the string into function
27
- * @see https://github.com/mozilla/nunjucks/blob/2fd547f/src/environment.js#L571-L592
28
- */
29
- function _compile() {
30
- let source = compiler.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts);
31
- /**
32
- * 将一些 Nunjucks 的 HTML 转义的代码转换成 SQL 防注入的代码
33
- */
34
- source = _replaceCodeWithSQLFeature(source);
35
- // eslint-disable-next-line
36
- const props = (new Function(source))();
37
- this.blocks = this._getBlocks(props);
38
- this[ROOT_RENDER_FUNC] = props.root;
39
- this.rootRenderFunc = function (env, context, frame, _runtime, cb) {
40
- /**
41
- * 1. 将 runtime 遗弃,用新的
42
- * 2. 移除 SQL 语句中多余空白符
43
- */
44
- return this[ROOT_RENDER_FUNC](env, context, frame, RUNTIME, function (err, ret) {
45
- // istanbul ignore if
46
- if (err)
47
- return cb(err, ret);
48
- return cb(err, SqlUtil.minify(ret || ''));
49
- });
50
- };
51
- this.compiled = true;
52
- }
53
- export class NunjucksUtils {
54
- static createEnv(modelName) {
55
- if (envs[modelName])
56
- return envs[modelName];
57
- const env = envs[modelName] = nunjucks.configure({
58
- autoescape: false,
59
- });
60
- return env;
61
- }
62
- static compile(modelName, sqlName, sql) {
63
- // istanbul ignore if
64
- if (!envs[modelName]) {
65
- throw new Error(`you should create an Environment for ${modelName} first.`);
66
- }
67
- const template = new Template(sql, envs[modelName], `egg-dal:MySQL:${modelName}:${sqlName}`, false);
68
- // 做一些 hack,使得支持 MySQL 的一些 Escape
69
- template._compile = _compile;
70
- template.compile();
71
- return template;
72
- }
73
- }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVuanVja3NVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTnVuanVja3NVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFvQixNQUFNLFVBQVUsQ0FBQztBQUNoRSxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV2QyxNQUFNLFFBQVEsR0FBSSxRQUFnQixDQUFDLFFBQVEsQ0FBQztBQUM1QyxNQUFNLElBQUksR0FBZ0MsRUFBRSxDQUFDO0FBRTdDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNsRCxTQUFTLEVBQUUsU0FBUyxTQUFTLENBQVksR0FBVyxFQUFFLEtBQWM7UUFDbEUsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsU0FBUywwQkFBMEIsQ0FBQyxNQUFjO0lBQ2hELE1BQU0sS0FBSyxHQUFHO1FBQ1osMkJBQTJCLEVBQUUsT0FBTztRQUNwQyxvQkFBb0IsRUFBRSxPQUFPO1FBQzdCLHlCQUF5QixFQUFFLHFCQUFxQjtRQUNoRCx1QkFBdUIsRUFBRSxjQUFjO0tBQy9CLENBQUM7SUFFWCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxN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