@eggjs/dal-runtime 4.0.0-beta.4 → 4.0.0-beta.6
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/dist/BaseSqlMap.d.ts +18 -0
- package/dist/BaseSqlMap.js +247 -0
- package/dist/CodeGenerator.d.ts +17 -0
- package/dist/CodeGenerator.js +114 -0
- package/dist/DaoLoader.d.ts +8 -0
- package/dist/DaoLoader.js +16 -0
- package/dist/DataSource.d.ts +32 -0
- package/dist/DataSource.js +72 -0
- package/dist/DatabaseForker.d.ts +16 -0
- package/dist/DatabaseForker.js +47 -0
- package/dist/MySqlDataSource.d.ts +27 -0
- package/dist/MySqlDataSource.js +49 -0
- package/dist/NunjucksConverter.d.ts +76 -0
- package/dist/NunjucksConverter.js +90 -0
- package/dist/NunjucksUtil.d.ts +9 -0
- package/dist/NunjucksUtil.js +64 -0
- package/dist/SqlGenerator.d.ts +13 -0
- package/dist/SqlGenerator.js +224 -0
- package/dist/SqlMapLoader.d.ts +14 -0
- package/dist/SqlMapLoader.js +22 -0
- package/dist/SqlUtil.d.ts +6 -0
- package/dist/SqlUtil.js +193 -0
- package/dist/TableModelInstanceBuilder.d.ts +10 -0
- package/dist/TableModelInstanceBuilder.js +25 -0
- package/dist/TableSqlMap.d.ts +18 -0
- package/dist/TableSqlMap.js +81 -0
- package/dist/TemplateUtil.d.ts +22 -0
- package/dist/TemplateUtil.js +78 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +16 -0
- package/package.json +27 -28
- package/src/BaseSqlMap.d.ts +0 -15
- package/src/BaseSqlMap.js +0 -303
- package/src/CodeGenerator.d.ts +0 -14
- package/src/CodeGenerator.js +0 -138
- package/src/DaoLoader.d.ts +0 -4
- package/src/DaoLoader.js +0 -13
- package/src/DataSource.d.ts +0 -28
- package/src/DataSource.js +0 -79
- package/src/DatabaseForker.d.ts +0 -12
- package/src/DatabaseForker.js +0 -49
- package/src/MySqlDataSource.d.ts +0 -23
- package/src/MySqlDataSource.js +0 -63
- package/src/NunjucksConverter.d.ts +0 -73
- package/src/NunjucksConverter.js +0 -93
- package/src/NunjucksUtil.d.ts +0 -5
- package/src/NunjucksUtil.js +0 -74
- package/src/SqlGenerator.d.ts +0 -9
- package/src/SqlGenerator.js +0 -391
- package/src/SqlMapLoader.d.ts +0 -10
- package/src/SqlMapLoader.js +0 -19
- package/src/SqlUtil.d.ts +0 -3
- package/src/SqlUtil.js +0 -221
- package/src/TableModelInstanceBuilder.d.ts +0 -6
- package/src/TableModelInstanceBuilder.js +0 -22
- package/src/TableSqlMap.d.ts +0 -19
- package/src/TableSqlMap.js +0 -91
- package/src/TemplateUtil.d.ts +0 -19
- package/src/TemplateUtil.js +0 -86
- package/src/index.d.ts +0 -15
- package/src/index.js +0 -16
package/src/DatabaseForker.js
DELETED
|
@@ -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==
|
package/src/MySqlDataSource.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { RDSClientOptions } from '@eggjs/rds';
|
|
2
|
-
import { Base } from 'sdk-base';
|
|
3
|
-
import { Logger } from '@eggjs/tegg-types';
|
|
4
|
-
export interface DataSourceOptions extends RDSClientOptions {
|
|
5
|
-
name: string;
|
|
6
|
-
initSql?: string;
|
|
7
|
-
forkDb?: boolean;
|
|
8
|
-
initRetryTimes?: number;
|
|
9
|
-
logger?: Logger;
|
|
10
|
-
}
|
|
11
|
-
export declare class MysqlDataSource extends Base {
|
|
12
|
-
#private;
|
|
13
|
-
private client;
|
|
14
|
-
private readonly initSql;
|
|
15
|
-
readonly name: string;
|
|
16
|
-
readonly timezone?: string;
|
|
17
|
-
readonly rdsOptions: RDSClientOptions;
|
|
18
|
-
readonly forkDb?: boolean;
|
|
19
|
-
constructor(options: DataSourceOptions);
|
|
20
|
-
protected _init(): Promise<void>;
|
|
21
|
-
query<T = any>(sql: string): Promise<T>;
|
|
22
|
-
beginTransactionScope<T>(scope: () => Promise<T>): Promise<T>;
|
|
23
|
-
}
|
package/src/MySqlDataSource.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
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");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _MysqlDataSource_instances, _MysqlDataSource_initRetryTimes, _MysqlDataSource_logger, _MysqlDataSource_doInit;
|
|
13
|
-
import { RDSClient } from '@eggjs/rds';
|
|
14
|
-
import { Base } from 'sdk-base';
|
|
15
|
-
const DEFAULT_OPTIONS = {
|
|
16
|
-
supportBigNumbers: true,
|
|
17
|
-
bigNumberStrings: true,
|
|
18
|
-
trace: true,
|
|
19
|
-
};
|
|
20
|
-
export class MysqlDataSource extends Base {
|
|
21
|
-
constructor(options) {
|
|
22
|
-
super({ initMethod: '_init' });
|
|
23
|
-
_MysqlDataSource_instances.add(this);
|
|
24
|
-
_MysqlDataSource_initRetryTimes.set(this, void 0);
|
|
25
|
-
_MysqlDataSource_logger.set(this, void 0);
|
|
26
|
-
const { name, initSql, forkDb, initRetryTimes, logger, ...mysqlOptions } = options;
|
|
27
|
-
__classPrivateFieldSet(this, _MysqlDataSource_logger, logger, "f");
|
|
28
|
-
this.forkDb = forkDb;
|
|
29
|
-
this.initSql = initSql ?? 'SELECT 1 + 1';
|
|
30
|
-
__classPrivateFieldSet(this, _MysqlDataSource_initRetryTimes, initRetryTimes, "f");
|
|
31
|
-
this.name = name;
|
|
32
|
-
this.timezone = options.timezone;
|
|
33
|
-
this.rdsOptions = Object.assign({}, DEFAULT_OPTIONS, mysqlOptions);
|
|
34
|
-
this.client = new RDSClient(this.rdsOptions);
|
|
35
|
-
}
|
|
36
|
-
async _init() {
|
|
37
|
-
if (this.initSql) {
|
|
38
|
-
await __classPrivateFieldGet(this, _MysqlDataSource_instances, "m", _MysqlDataSource_doInit).call(this, 1);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async query(sql) {
|
|
42
|
-
return this.client.query(sql);
|
|
43
|
-
}
|
|
44
|
-
async beginTransactionScope(scope) {
|
|
45
|
-
return await this.client.beginTransactionScope(scope);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
_MysqlDataSource_initRetryTimes = new WeakMap(), _MysqlDataSource_logger = new WeakMap(), _MysqlDataSource_instances = new WeakSet(), _MysqlDataSource_doInit = async function _MysqlDataSource_doInit(tryTimes) {
|
|
49
|
-
try {
|
|
50
|
-
__classPrivateFieldGet(this, _MysqlDataSource_logger, "f")?.log(`${tryTimes} try to initialize dataSource ${this.name}`);
|
|
51
|
-
const st = Date.now();
|
|
52
|
-
await this.client.query(this.initSql);
|
|
53
|
-
__classPrivateFieldGet(this, _MysqlDataSource_logger, "f")?.info(`dataSource initialization cost: ${Date.now() - st}, tryTimes: ${tryTimes}`);
|
|
54
|
-
}
|
|
55
|
-
catch (e) {
|
|
56
|
-
__classPrivateFieldGet(this, _MysqlDataSource_logger, "f")?.warn(`failed to initialize dataSource ${this.name}, tryTimes ${tryTimes}`, e);
|
|
57
|
-
if (!__classPrivateFieldGet(this, _MysqlDataSource_initRetryTimes, "f") || tryTimes >= __classPrivateFieldGet(this, _MysqlDataSource_initRetryTimes, "f")) {
|
|
58
|
-
throw e;
|
|
59
|
-
}
|
|
60
|
-
await __classPrivateFieldGet(this, _MysqlDataSource_instances, "m", _MysqlDataSource_doInit).call(this, tryTimes + 1);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlTcWxEYXRhU291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTXlTcWxEYXRhU291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVloQyxNQUFNLGVBQWUsR0FBcUI7SUFDeEMsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sT0FBTyxlQUFnQixTQUFRLElBQUk7SUFVdkMsWUFBWSxPQUEwQjtRQUNwQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzs7UUFKeEIsa0RBQXlCO1FBQ3pCLDBDQUFpQjtRQUl4QixNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNuRix1QkFBQSxJQUFJLDJCQUFXLE1BQU0sTUFBQSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLGNBQWMsQ0FBQztRQUN6Qyx1QkFBQSxJQUFJLG1DQUFtQixjQUFjLE1BQUEsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVTLEtBQUssQ0FBQyxLQUFLO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sdUJBQUEsSUFBSSwyREFBUSxNQUFaLElBQUksRUFBUyxDQUFDLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQWlCRCxLQUFLLENBQUMsS0FBSyxDQUFVLEdBQVc7UUFDOUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFJLEtBQXVCO1FBQ3BELE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRjtnS0F0QkMsS0FBSyxrQ0FBUyxRQUFnQjtJQUM1QixJQUFJLENBQUM7UUFDSCx1QkFBQSxJQUFJLCtCQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxpQ0FBaUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLHVCQUFBLElBQUksK0JBQVEsRUFBRSxJQUFJLENBQUMsbUNBQW1DLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGVBQWUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHVCQUFBLElBQUksK0JBQVEsRUFBRSxJQUFJLENBQUMsbUNBQW1DLElBQUksQ0FBQyxJQUFJLGNBQWMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLHVCQUFBLElBQUksdUNBQWdCLElBQUksUUFBUSxJQUFJLHVCQUFBLElBQUksdUNBQWdCLEVBQUUsQ0FBQztZQUM5RCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCxNQUFNLHVCQUFBLElBQUksMkRBQVEsTUFBWixJQUFJLEVBQVMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
export declare class NunjucksConverter {
|
|
2
|
-
/**
|
|
3
|
-
* 将变量 HTML 转义的逻辑改为 MySQL 防注入转义
|
|
4
|
-
*
|
|
5
|
-
* eg:
|
|
6
|
-
*
|
|
7
|
-
* output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, "allColumns")
|
|
8
|
-
*
|
|
9
|
-
* 转换为
|
|
10
|
-
*
|
|
11
|
-
* output += runtime.escapeSQL.call(this, "allColumns", runtime.contextOrFrameLookup(context, frame, "allColumns")
|
|
12
|
-
*
|
|
13
|
-
* @param {String} code 转换前的代码
|
|
14
|
-
* @return {String} 转换后的代码
|
|
15
|
-
*/
|
|
16
|
-
static convertNormalVariableCode(code: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* 三目运算的 MySQL 防注入转义
|
|
19
|
-
*
|
|
20
|
-
* eg:
|
|
21
|
-
*
|
|
22
|
-
* output += runtime.suppressValue((runtime.contextOrFrameLookup(context, frame, "$gmtCreate") !== \
|
|
23
|
-
* runtime.contextOrFrameLookup(context, frame, "undefined")?runtime.contextOrFrameLookup(context,\
|
|
24
|
-
* frame, "$gmtCreate"):"NOW()"), env.opts.autoescape);
|
|
25
|
-
*
|
|
26
|
-
* 转换为
|
|
27
|
-
*
|
|
28
|
-
* output += runtime.suppressValue((runtime.contextOrFrameLookup(...) != ...) ?
|
|
29
|
-
* runtime.escapeSQL.call(this, "...", runtime.contextOrFrameLookup(...)) :
|
|
30
|
-
* ...)
|
|
31
|
-
*
|
|
32
|
-
* @param {String} code 转换前的代码
|
|
33
|
-
* @return {String} 转换后的代码
|
|
34
|
-
*/
|
|
35
|
-
static convertTernaryCode(code: string): string;
|
|
36
|
-
/**
|
|
37
|
-
* 对象的属性,如 `user.id` 防注入转义
|
|
38
|
-
*
|
|
39
|
-
* eg:
|
|
40
|
-
* output += runtime.suppressValue(runtime.memberLookup(\
|
|
41
|
-
* (runtime.contextOrFrameLookup(context, frame, "user")),"id"), env.opts.autoescape);
|
|
42
|
-
*
|
|
43
|
-
* 转换为
|
|
44
|
-
*
|
|
45
|
-
* output += runtime.escapeSQL.call(this, "<...>", runtime.memberLookup(...), env.opts.autoescape);
|
|
46
|
-
*
|
|
47
|
-
* 由于 escapeSQL 中是根据 key 与预定义 block 匹配决定是否转义,而 memberLookup 的状态下总的 key 肯定不会匹配,
|
|
48
|
-
* 所以找一个绝对不会匹配的 "<...>" 传入。事实上它可以是任意一个不会被匹配的字符串,比如说 ">_<" 等。
|
|
49
|
-
*
|
|
50
|
-
* @param {String} code 转换前的代码
|
|
51
|
-
* @return {String} 转换后的代码
|
|
52
|
-
*/
|
|
53
|
-
static convertNestedObjectCode(code: string): string;
|
|
54
|
-
/**
|
|
55
|
-
* For 中的 `t_xxx` 要被转义:
|
|
56
|
-
*
|
|
57
|
-
* eg:
|
|
58
|
-
* frame.set("...", t_...);
|
|
59
|
-
* ...
|
|
60
|
-
* output += runtime.suppressValue(t_.., env.opts.autoscape);
|
|
61
|
-
*
|
|
62
|
-
* 转换为
|
|
63
|
-
*
|
|
64
|
-
* output += runtime.escapeSQL.call(this, "for.t_...", t_..., env.opts.autoescape);
|
|
65
|
-
*
|
|
66
|
-
* 由于 escapeSQL 中是根据 key 与预定义 block 匹配决定是否转义,而 memberLookup 的状态下总的 key 肯定不会匹配,
|
|
67
|
-
* 所以找一个绝对不会匹配的 "for.t_..." 传入。事实上它可以是任意一个不会被匹配的字符串,比如说 ">_<" 等。
|
|
68
|
-
*
|
|
69
|
-
* @param {String} code 转换前的代码
|
|
70
|
-
* @return {String} 转换后的代码
|
|
71
|
-
*/
|
|
72
|
-
static convertValueInsideFor(code: string): string;
|
|
73
|
-
}
|
package/src/NunjucksConverter.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
export class NunjucksConverter {
|
|
2
|
-
/**
|
|
3
|
-
* 将变量 HTML 转义的逻辑改为 MySQL 防注入转义
|
|
4
|
-
*
|
|
5
|
-
* eg:
|
|
6
|
-
*
|
|
7
|
-
* output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, "allColumns")
|
|
8
|
-
*
|
|
9
|
-
* 转换为
|
|
10
|
-
*
|
|
11
|
-
* output += runtime.escapeSQL.call(this, "allColumns", runtime.contextOrFrameLookup(context, frame, "allColumns")
|
|
12
|
-
*
|
|
13
|
-
* @param {String} code 转换前的代码
|
|
14
|
-
* @return {String} 转换后的代码
|
|
15
|
-
*/
|
|
16
|
-
static convertNormalVariableCode(code) {
|
|
17
|
-
return code.replace(/\Woutput\W*?\+=\W*?runtime\.suppressValue\(runtime\.contextOrFrameLookup\((.+?),(.*?),\W*?"(.+?)"\)/g, '\noutput += runtime.escapeSQL.call(this, "$3", runtime.contextOrFrameLookup($1, $2, "$3")');
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 三目运算的 MySQL 防注入转义
|
|
21
|
-
*
|
|
22
|
-
* eg:
|
|
23
|
-
*
|
|
24
|
-
* output += runtime.suppressValue((runtime.contextOrFrameLookup(context, frame, "$gmtCreate") !== \
|
|
25
|
-
* runtime.contextOrFrameLookup(context, frame, "undefined")?runtime.contextOrFrameLookup(context,\
|
|
26
|
-
* frame, "$gmtCreate"):"NOW()"), env.opts.autoescape);
|
|
27
|
-
*
|
|
28
|
-
* 转换为
|
|
29
|
-
*
|
|
30
|
-
* output += runtime.suppressValue((runtime.contextOrFrameLookup(...) != ...) ?
|
|
31
|
-
* runtime.escapeSQL.call(this, "...", runtime.contextOrFrameLookup(...)) :
|
|
32
|
-
* ...)
|
|
33
|
-
*
|
|
34
|
-
* @param {String} code 转换前的代码
|
|
35
|
-
* @return {String} 转换后的代码
|
|
36
|
-
*/
|
|
37
|
-
static convertTernaryCode(code) {
|
|
38
|
-
// 先找到所有的 runtime.suppressValue((...?...:...), env...)
|
|
39
|
-
const ternaryBefore = code.match(/\Woutput\W*?\+=\W*?runtime\.suppressValue\(\(.*\W*?\?\W*?.*?:.*\),\W*?env\.opts\.autoescape/g) || [];
|
|
40
|
-
// 进行逐一处理
|
|
41
|
-
const ternaryAfter = ternaryBefore.map(str => {
|
|
42
|
-
return str.replace(/([?:])runtime\.contextOrFrameLookup\((.+?),(.*?),\W*?"(.+?)"\)/g, '$1runtime.escapeSQL.call(this, "$4", runtime.contextOrFrameLookup($2, $3, "$4"))')
|
|
43
|
-
.replace(/env.opts.autoescape$/g, 'false');
|
|
44
|
-
});
|
|
45
|
-
// 统一替换
|
|
46
|
-
for (let i = 0; i < ternaryBefore.length; i++) {
|
|
47
|
-
code = code.replace(ternaryBefore[i], ternaryAfter[i]);
|
|
48
|
-
}
|
|
49
|
-
return code;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* 对象的属性,如 `user.id` 防注入转义
|
|
53
|
-
*
|
|
54
|
-
* eg:
|
|
55
|
-
* output += runtime.suppressValue(runtime.memberLookup(\
|
|
56
|
-
* (runtime.contextOrFrameLookup(context, frame, "user")),"id"), env.opts.autoescape);
|
|
57
|
-
*
|
|
58
|
-
* 转换为
|
|
59
|
-
*
|
|
60
|
-
* output += runtime.escapeSQL.call(this, "<...>", runtime.memberLookup(...), env.opts.autoescape);
|
|
61
|
-
*
|
|
62
|
-
* 由于 escapeSQL 中是根据 key 与预定义 block 匹配决定是否转义,而 memberLookup 的状态下总的 key 肯定不会匹配,
|
|
63
|
-
* 所以找一个绝对不会匹配的 "<...>" 传入。事实上它可以是任意一个不会被匹配的字符串,比如说 ">_<" 等。
|
|
64
|
-
*
|
|
65
|
-
* @param {String} code 转换前的代码
|
|
66
|
-
* @return {String} 转换后的代码
|
|
67
|
-
*/
|
|
68
|
-
static convertNestedObjectCode(code) {
|
|
69
|
-
return code.replace(/\Woutput\W*?\+=\W*?runtime\.suppressValue\(runtime\.memberLookup\((.+?)\), env\.opts\.autoescape\)/g, '\noutput += runtime.escapeSQL.call(this, "<...>", runtime.memberLookup($1), env.opts.autoescape)');
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* For 中的 `t_xxx` 要被转义:
|
|
73
|
-
*
|
|
74
|
-
* eg:
|
|
75
|
-
* frame.set("...", t_...);
|
|
76
|
-
* ...
|
|
77
|
-
* output += runtime.suppressValue(t_.., env.opts.autoscape);
|
|
78
|
-
*
|
|
79
|
-
* 转换为
|
|
80
|
-
*
|
|
81
|
-
* output += runtime.escapeSQL.call(this, "for.t_...", t_..., env.opts.autoescape);
|
|
82
|
-
*
|
|
83
|
-
* 由于 escapeSQL 中是根据 key 与预定义 block 匹配决定是否转义,而 memberLookup 的状态下总的 key 肯定不会匹配,
|
|
84
|
-
* 所以找一个绝对不会匹配的 "for.t_..." 传入。事实上它可以是任意一个不会被匹配的字符串,比如说 ">_<" 等。
|
|
85
|
-
*
|
|
86
|
-
* @param {String} code 转换前的代码
|
|
87
|
-
* @return {String} 转换后的代码
|
|
88
|
-
*/
|
|
89
|
-
static convertValueInsideFor(code) {
|
|
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)');
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVuanVja3NDb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJOdW5qdWNrc0NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxNQUFNLENBQUMseUJBQXlCLENBQUMsSUFBWTtRQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLHNHQUFzRyxFQUN0RywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBWTtRQUNwQyxzREFBc0Q7UUFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDOUIsOEZBQThGLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEcsU0FBUztRQUNULE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUNoQixpRUFBaUUsRUFDakUsa0ZBQWtGLENBQ25GO2lCQUNFLE9BQU8sQ0FDTix1QkFBdUIsRUFDdkIsT0FBTyxDQUNSLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBWTtRQUN6QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLHFHQUFxRyxFQUNyRyxrR0FBa0csQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBWTtRQUN2QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLDhFQUE4RSxFQUM5RSw2RUFBNkUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7Q0FFRiJ9
|
package/src/NunjucksUtil.d.ts
DELETED
package/src/NunjucksUtil.js
DELETED
|
@@ -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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
|
package/src/SqlGenerator.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { TableModel } from '@eggjs/dal-decorator';
|
|
2
|
-
export declare class SqlGenerator {
|
|
3
|
-
private formatComment;
|
|
4
|
-
private generateColumn;
|
|
5
|
-
private generateColumnType;
|
|
6
|
-
private generateIndex;
|
|
7
|
-
private generateTableOptions;
|
|
8
|
-
generate(tableModel: TableModel): string;
|
|
9
|
-
}
|