@eggjs/dal-runtime 3.52.0 → 4.0.0-beta.2

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 (47) hide show
  1. package/package.json +27 -25
  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 +1 -1
  13. package/{dist/src → src}/MySqlDataSource.js +5 -12
  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/NunjucksUtil.js +0 -104
  36. package/dist/src/SqlGenerator.js +0 -395
  37. package/dist/src/SqlMapLoader.js +0 -23
  38. package/dist/src/TableModelInstanceBuilder.js +0 -26
  39. package/dist/src/TableSqlMap.js +0 -95
  40. package/dist/src/TemplateUtil.js +0 -93
  41. package/dist/src/templates/base_dao.njk +0 -164
  42. package/dist/src/templates/dao.njk +0 -17
  43. package/dist/src/templates/extension.njk +0 -17
  44. /package/{dist/src → src}/NunjucksConverter.d.ts +0 -0
  45. /package/{dist/src → src}/NunjucksUtil.d.ts +0 -0
  46. /package/{dist/src → src}/SqlUtil.d.ts +0 -0
  47. /package/{dist/src → src}/TableSqlMap.d.ts +0 -0
@@ -0,0 +1,79 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkRhdGFTb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFRM0UsTUFBTSxzQkFBc0IsR0FBRyxDQUFFLGlDQUFpQyxFQUFFLFFBQVEsQ0FBRSxDQUFDO0FBRS9FLE1BQU0sT0FBTyxVQUFVO0lBS3JCLFlBQVksVUFBeUIsRUFBRSxlQUFnQyxFQUFFLE1BQW1COztRQUMxRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBZSxFQUFFLElBQVk7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsT0FBTztZQUNMLEdBQUc7WUFDSCxPQUFPO1lBQ1AsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUQsT0FBTyxNQUFNLHVCQUFBLElBQUksd0RBQWUsTUFBbkIsSUFBSSxFQUFnQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBZSxFQUFFLElBQVU7UUFDdkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUN6QixPQUFPLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBZSxFQUFFLElBQVU7UUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQWUsRUFBRSxJQUFVO1FBQzdDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDO1FBQzVDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQWUsRUFBRSxJQUFVO1FBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQVEsQ0FBQztRQUNyRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBZSxFQUFFLElBQVMsRUFBRSxXQUFtQixFQUFFLFlBQW9CO1FBQ2xGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQzNFLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFHL0YsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUMvQix1QkFBQSxJQUFJLHdEQUFlLE1BQW5CLElBQUksRUFBZ0IsUUFBUSxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixPQUFPLEVBQUUsV0FBVztZQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUYsQ0FBQztJQUNKLENBQUM7Q0FTRjttRUFQQyxLQUFLLG9DQUFnQixPQUFlO0lBQ2xDLE1BQU0sR0FBRyxHQUFHLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFakYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVyRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDekIsQ0FBQyJ9
@@ -1,4 +1,4 @@
1
- import { DataSourceOptions } from './MySqlDataSource';
1
+ import { DataSourceOptions } from './MySqlDataSource.js';
2
2
  export declare class DatabaseForker {
3
3
  private readonly env;
4
4
  private readonly options;
@@ -0,0 +1,49 @@
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,5 +1,5 @@
1
1
  import type { RDSClientOptions } from '@eggjs/rds';
2
- import Base from 'sdk-base';
2
+ import { Base } from 'sdk-base';
3
3
  import { Logger } from '@eggjs/tegg-types';
4
4
  export interface DataSourceOptions extends RDSClientOptions {
5
5
  name: string;
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
2
  if (kind === "m") throw new TypeError("Private method is not writable");
4
3
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
@@ -10,20 +9,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
9
  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");
11
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
11
  };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
12
  var _MysqlDataSource_instances, _MysqlDataSource_initRetryTimes, _MysqlDataSource_logger, _MysqlDataSource_doInit;
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.MysqlDataSource = void 0;
19
- const rds_1 = require("@eggjs/rds");
20
- const sdk_base_1 = __importDefault(require("sdk-base"));
13
+ import { RDSClient } from '@eggjs/rds';
14
+ import { Base } from 'sdk-base';
21
15
  const DEFAULT_OPTIONS = {
22
16
  supportBigNumbers: true,
23
17
  bigNumberStrings: true,
24
18
  trace: true,
25
19
  };
26
- class MysqlDataSource extends sdk_base_1.default {
20
+ export class MysqlDataSource extends Base {
27
21
  constructor(options) {
28
22
  super({ initMethod: '_init' });
29
23
  _MysqlDataSource_instances.add(this);
@@ -37,7 +31,7 @@ class MysqlDataSource extends sdk_base_1.default {
37
31
  this.name = name;
38
32
  this.timezone = options.timezone;
39
33
  this.rdsOptions = Object.assign({}, DEFAULT_OPTIONS, mysqlOptions);
40
- this.client = new rds_1.RDSClient(this.rdsOptions);
34
+ this.client = new RDSClient(this.rdsOptions);
41
35
  }
42
36
  async _init() {
43
37
  if (this.initSql) {
@@ -51,7 +45,6 @@ class MysqlDataSource extends sdk_base_1.default {
51
45
  return await this.client.beginTransactionScope(scope);
52
46
  }
53
47
  }
54
- exports.MysqlDataSource = MysqlDataSource;
55
48
  _MysqlDataSource_initRetryTimes = new WeakMap(), _MysqlDataSource_logger = new WeakMap(), _MysqlDataSource_instances = new WeakSet(), _MysqlDataSource_doInit = async function _MysqlDataSource_doInit(tryTimes) {
56
49
  try {
57
50
  __classPrivateFieldGet(this, _MysqlDataSource_logger, "f")?.log(`${tryTimes} try to initialize dataSource ${this.name}`);
@@ -67,4 +60,4 @@ _MysqlDataSource_initRetryTimes = new WeakMap(), _MysqlDataSource_logger = new W
67
60
  await __classPrivateFieldGet(this, _MysqlDataSource_instances, "m", _MysqlDataSource_doInit).call(this, tryTimes + 1);
68
61
  }
69
62
  };
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlTcWxEYXRhU291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL015U3FsRGF0YVNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvQ0FBdUM7QUFFdkMsd0RBQTRCO0FBWTVCLE1BQU0sZUFBZSxHQUFxQjtJQUN4QyxpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBYSxlQUFnQixTQUFRLGtCQUFJO0lBVXZDLFlBQVksT0FBMEI7UUFDcEMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7O1FBSnhCLGtEQUF5QjtRQUN6QiwwQ0FBaUI7UUFJeEIsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDbkYsdUJBQUEsSUFBSSwyQkFBVyxNQUFNLE1BQUEsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxjQUFjLENBQUM7UUFDekMsdUJBQUEsSUFBSSxtQ0FBbUIsY0FBYyxNQUFBLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFUyxLQUFLLENBQUMsS0FBSztRQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLHVCQUFBLElBQUksMkRBQVEsTUFBWixJQUFJLEVBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFpQkQsS0FBSyxDQUFDLEtBQUssQ0FBVSxHQUFXO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FBSSxLQUF1QjtRQUNwRCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0Y7QUFuREQsMENBbURDO2dLQXRCQyxLQUFLLGtDQUFTLFFBQWdCO0lBQzVCLElBQUksQ0FBQztRQUNILHVCQUFBLElBQUksK0JBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsdUJBQUEsSUFBSSwrQkFBUSxFQUFFLElBQUksQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsZUFBZSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsdUJBQUEsSUFBSSwrQkFBUSxFQUFFLElBQUksQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLElBQUksY0FBYyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsdUJBQUEsSUFBSSx1Q0FBZ0IsSUFBSSxRQUFRLElBQUksdUJBQUEsSUFBSSx1Q0FBZ0IsRUFBRSxDQUFDO1lBQzlELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUNELE1BQU0sdUJBQUEsSUFBSSwyREFBUSxNQUFaLElBQUksRUFBUyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztBQUNILENBQUMifQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlTcWxEYXRhU291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTXlTcWxEYXRhU291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVloQyxNQUFNLGVBQWUsR0FBcUI7SUFDeEMsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sT0FBTyxlQUFnQixTQUFRLElBQUk7SUFVdkMsWUFBWSxPQUEwQjtRQUNwQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzs7UUFKeEIsa0RBQXlCO1FBQ3pCLDBDQUFpQjtRQUl4QixNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNuRix1QkFBQSxJQUFJLDJCQUFXLE1BQU0sTUFBQSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLGNBQWMsQ0FBQztRQUN6Qyx1QkFBQSxJQUFJLG1DQUFtQixjQUFjLE1BQUEsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVTLEtBQUssQ0FBQyxLQUFLO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sdUJBQUEsSUFBSSwyREFBUSxNQUFaLElBQUksRUFBUyxDQUFDLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQWlCRCxLQUFLLENBQUMsS0FBSyxDQUFVLEdBQVc7UUFDOUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFJLEtBQXVCO1FBQ3BELE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRjtnS0F0QkMsS0FBSyxrQ0FBUyxRQUFnQjtJQUM1QixJQUFJLENBQUM7UUFDSCx1QkFBQSxJQUFJLCtCQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxpQ0FBaUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLHVCQUFBLElBQUksK0JBQVEsRUFBRSxJQUFJLENBQUMsbUNBQW1DLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGVBQWUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHVCQUFBLElBQUksK0JBQVEsRUFBRSxJQUFJLENBQUMsbUNBQW1DLElBQUksQ0FBQyxJQUFJLGNBQWMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLHVCQUFBLElBQUksdUNBQWdCLElBQUksUUFBUSxJQUFJLHVCQUFBLElBQUksdUNBQWdCLEVBQUUsQ0FBQztZQUM5RCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCxNQUFNLHVCQUFBLElBQUksMkRBQVEsTUFBWixJQUFJLEVBQVMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDIn0=
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NunjucksConverter = void 0;
4
- class NunjucksConverter {
1
+ export class NunjucksConverter {
5
2
  /**
6
3
  * 将变量 HTML 转义的逻辑改为 MySQL 防注入转义
7
4
  *
@@ -42,7 +39,7 @@ class NunjucksConverter {
42
39
  const ternaryBefore = code.match(/\Woutput\W*?\+=\W*?runtime\.suppressValue\(\(.*\W*?\?\W*?.*?:.*\),\W*?env\.opts\.autoescape/g) || [];
43
40
  // 进行逐一处理
44
41
  const ternaryAfter = ternaryBefore.map(str => {
45
- return str.replace(/([\?:])runtime\.contextOrFrameLookup\((.+?),(.*?),\W*?"(.+?)"\)/g, '$1runtime.escapeSQL.call(this, "$4", runtime.contextOrFrameLookup($2, $3, "$4"))')
42
+ return str.replace(/([?:])runtime\.contextOrFrameLookup\((.+?),(.*?),\W*?"(.+?)"\)/g, '$1runtime.escapeSQL.call(this, "$4", runtime.contextOrFrameLookup($2, $3, "$4"))')
46
43
  .replace(/env.opts.autoescape$/g, 'false');
47
44
  });
48
45
  // 统一替换
@@ -93,5 +90,4 @@ class NunjucksConverter {
93
90
  return code.replace(/\Woutput\W*?\+=\W*?runtime\.suppressValue\((t_\d+), env\.opts\.autoescape\)/g, '\noutput += runtime.escapeSQL.call(this, "for.$1", $1, env.opts.autoescape)');
94
91
  }
95
92
  }
96
- exports.NunjucksConverter = NunjucksConverter;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVuanVja3NDb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvTnVuanVja3NDb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxpQkFBaUI7SUFDNUI7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxJQUFZO1FBQzNDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FDakIsc0dBQXNHLEVBQ3RHLDJGQUEyRixDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ3BDLHNEQUFzRDtRQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM5Qiw4RkFBOEYsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV4RyxTQUFTO1FBQ1QsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQ2hCLGtFQUFrRSxFQUNsRSxrRkFBa0YsQ0FDbkY7aUJBQ0UsT0FBTyxDQUNOLHVCQUF1QixFQUN2QixPQUFPLENBQ1IsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFZO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FDakIscUdBQXFHLEVBQ3JHLGtHQUFrRyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FDakIsOEVBQThFLEVBQzlFLDZFQUE2RSxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUVGO0FBL0dELDhDQStHQyJ9
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVuanVja3NDb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJOdW5qdWNrc0NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxNQUFNLENBQUMseUJBQXlCLENBQUMsSUFBWTtRQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLHNHQUFzRyxFQUN0RywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBWTtRQUNwQyxzREFBc0Q7UUFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDOUIsOEZBQThGLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEcsU0FBUztRQUNULE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUNoQixpRUFBaUUsRUFDakUsa0ZBQWtGLENBQ25GO2lCQUNFLE9BQU8sQ0FDTix1QkFBdUIsRUFDdkIsT0FBTyxDQUNSLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBWTtRQUN6QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLHFHQUFxRyxFQUNyRyxrR0FBa0csQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBWTtRQUN2QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLDhFQUE4RSxFQUM5RSw2RUFBNkUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7Q0FFRiJ9
@@ -0,0 +1,74 @@
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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
@@ -1,4 +1,4 @@
1
- import { TableModel } from '@eggjs/tegg/dal';
1
+ import { TableModel } from '@eggjs/dal-decorator';
2
2
  export declare class SqlGenerator {
3
3
  private formatComment;
4
4
  private generateColumn;