@eggjs/tegg-dal-plugin 4.0.0-beta.8 → 4.0.0-beta.9
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/dist/app.d.ts +9 -13
- package/dist/app.js +38 -37
- package/dist/index.d.ts +9 -10
- package/dist/index.js +10 -11
- package/dist/lib/DalModuleLoadUnitHook.d.ts +9 -2
- package/dist/lib/DalModuleLoadUnitHook.js +43 -4
- package/dist/lib/DalTableEggPrototypeHook.d.ts +7 -2
- package/dist/lib/DalTableEggPrototypeHook.js +24 -5
- package/dist/lib/DataSource.d.ts +8 -3
- package/dist/lib/DataSource.js +79 -7
- package/dist/lib/MysqlDataSourceManager.d.ts +11 -2
- package/dist/lib/MysqlDataSourceManager.js +55 -3
- package/dist/lib/SqlMapManager.d.ts +9 -2
- package/dist/lib/SqlMapManager.js +23 -3
- package/dist/lib/TableModelManager.d.ts +9 -2
- package/dist/lib/TableModelManager.js +23 -3
- package/dist/lib/TransactionPrototypeHook.d.ts +8 -2
- package/dist/lib/TransactionPrototypeHook.js +56 -5
- package/dist/lib/TransactionalAOP.d.ts +11 -2
- package/dist/lib/TransactionalAOP.js +28 -3
- package/dist/types.d.ts +1 -1
- package/dist/types.js +2 -3
- package/package.json +10 -10
- package/dist/DalModuleLoadUnitHook-BQjJ9Sf6.d.ts +0 -13
- package/dist/DalModuleLoadUnitHook-CrJVDTM5.js +0 -40
- package/dist/DalTableEggPrototypeHook-CW3ojxJE.d.ts +0 -11
- package/dist/DalTableEggPrototypeHook-DcDNlKdt.js +0 -25
- package/dist/DataSource-IPtIsuKR.d.ts +0 -12
- package/dist/DataSource-oPmPly4i.js +0 -79
- package/dist/MysqlDataSourceManager-Bl5dlpX7.js +0 -58
- package/dist/MysqlDataSourceManager-lrONMsdL.d.ts +0 -15
- package/dist/SqlMapManager-Dee8HrBh.js +0 -27
- package/dist/SqlMapManager-fyfTcuvE.d.ts +0 -13
- package/dist/TableModelManager-C9FVu5zw.js +0 -27
- package/dist/TableModelManager-D9HmMlTB.d.ts +0 -13
- package/dist/TransactionPrototypeHook-Cz3trnvZ.d.ts +0 -12
- package/dist/TransactionPrototypeHook-_PXHgwHf.js +0 -50
- package/dist/TransactionalAOP-Bm-mjuDZ.js +0 -30
- package/dist/TransactionalAOP-CRvc1-Sf.d.ts +0 -15
- package/dist/types-CSwhn03Z.d.ts +0 -1
- package/dist/types-Ct3xXZX7.js +0 -3
package/dist/app.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { Application, ILifecycleBoot } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
configWillLoad(): void;
|
|
11
|
-
beforeClose(): Promise<void>;
|
|
1
|
+
import type { Application, ILifecycleBoot } from 'egg';
|
|
2
|
+
export default class DalAppBootHook implements ILifecycleBoot {
|
|
3
|
+
private readonly app;
|
|
4
|
+
private dalTableEggPrototypeHook;
|
|
5
|
+
private dalModuleLoadUnitHook;
|
|
6
|
+
private transactionPrototypeHook;
|
|
7
|
+
constructor(app: Application);
|
|
8
|
+
configWillLoad(): void;
|
|
9
|
+
beforeClose(): Promise<void>;
|
|
12
10
|
}
|
|
13
|
-
//#endregion
|
|
14
|
-
export { DalAppBootHook as default };
|
package/dist/app.js
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { DalModuleLoadUnitHook } from "./DalModuleLoadUnitHook
|
|
6
|
-
import "./
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
import { DalTableEggPrototypeHook } from "./lib/DalTableEggPrototypeHook.js";
|
|
2
|
+
import { MysqlDataSourceManager } from "./lib/MysqlDataSourceManager.js";
|
|
3
|
+
import { SqlMapManager } from "./lib/SqlMapManager.js";
|
|
4
|
+
import { TableModelManager } from "./lib/TableModelManager.js";
|
|
5
|
+
import { DalModuleLoadUnitHook } from "./lib/DalModuleLoadUnitHook.js";
|
|
6
|
+
import { TransactionPrototypeHook } from "./lib/TransactionPrototypeHook.js";
|
|
7
|
+
export default class DalAppBootHook {
|
|
8
|
+
app;
|
|
9
|
+
dalTableEggPrototypeHook;
|
|
10
|
+
dalModuleLoadUnitHook;
|
|
11
|
+
transactionPrototypeHook;
|
|
12
|
+
constructor(app) {
|
|
13
|
+
this.app = app;
|
|
14
|
+
}
|
|
15
|
+
configWillLoad() {
|
|
16
|
+
this.dalModuleLoadUnitHook = new DalModuleLoadUnitHook(this.app.config.env, this.app.moduleConfigs);
|
|
17
|
+
this.dalTableEggPrototypeHook = new DalTableEggPrototypeHook(this.app.logger);
|
|
18
|
+
this.transactionPrototypeHook = new TransactionPrototypeHook(this.app.moduleConfigs, this.app.logger);
|
|
19
|
+
this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.dalTableEggPrototypeHook);
|
|
20
|
+
this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.transactionPrototypeHook);
|
|
21
|
+
this.app.loadUnitLifecycleUtil.registerLifecycle(this.dalModuleLoadUnitHook);
|
|
22
|
+
}
|
|
23
|
+
async beforeClose() {
|
|
24
|
+
if (this.dalTableEggPrototypeHook) {
|
|
25
|
+
this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.dalTableEggPrototypeHook);
|
|
26
|
+
}
|
|
27
|
+
if (this.dalModuleLoadUnitHook) {
|
|
28
|
+
this.app.loadUnitLifecycleUtil.deleteLifecycle(this.dalModuleLoadUnitHook);
|
|
29
|
+
}
|
|
30
|
+
if (this.transactionPrototypeHook) {
|
|
31
|
+
this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.transactionPrototypeHook);
|
|
32
|
+
}
|
|
33
|
+
MysqlDataSourceManager.instance.clear();
|
|
34
|
+
SqlMapManager.instance.clear();
|
|
35
|
+
TableModelManager.instance.clear();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFN0UsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFjO0lBQ2hCLEdBQUcsQ0FBYztJQUMxQix3QkFBd0IsQ0FBMkI7SUFDbkQscUJBQXFCLENBQXdCO0lBQzdDLHdCQUF3QixDQUEyQjtJQUUzRCxZQUFZLEdBQWdCO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUNELHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0NBQ0YifQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export { DalModuleLoadUnitHook, DalTableEggPrototypeHook, DataSourceDelegate, MysqlDataSourceManager, SqlMapManager, TableModelManager, TransactionPrototypeHook, TransactionalAOP, TransactionalParams };
|
|
1
|
+
import './types.ts';
|
|
2
|
+
export * from './lib/DalModuleLoadUnitHook.ts';
|
|
3
|
+
export * from './lib/DalTableEggPrototypeHook.ts';
|
|
4
|
+
export * from './lib/DataSource.ts';
|
|
5
|
+
export * from './lib/MysqlDataSourceManager.ts';
|
|
6
|
+
export * from './lib/SqlMapManager.ts';
|
|
7
|
+
export * from './lib/TableModelManager.ts';
|
|
8
|
+
export * from './lib/TransactionalAOP.ts';
|
|
9
|
+
export * from './lib/TransactionPrototypeHook.ts';
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export { DalModuleLoadUnitHook, DalTableEggPrototypeHook, DataSourceDelegate, MysqlDataSourceManager, SqlMapManager, TableModelManager, TransactionPrototypeHook, TransactionalAOP };
|
|
1
|
+
import "./types.js";
|
|
2
|
+
export * from "./lib/DalModuleLoadUnitHook.js";
|
|
3
|
+
export * from "./lib/DalTableEggPrototypeHook.js";
|
|
4
|
+
export * from "./lib/DataSource.js";
|
|
5
|
+
export * from "./lib/MysqlDataSourceManager.js";
|
|
6
|
+
export * from "./lib/SqlMapManager.js";
|
|
7
|
+
export * from "./lib/TableModelManager.js";
|
|
8
|
+
export * from "./lib/TransactionalAOP.js";
|
|
9
|
+
export * from "./lib/TransactionPrototypeHook.js";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUM7QUFFcEIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG1DQUFtQyxDQUFDIn0=
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { type LifecycleHook, type Logger, type ModuleConfigHolder } from '@eggjs/tegg';
|
|
2
|
+
import { type LoadUnit, type LoadUnitLifecycleContext } from '@eggjs/tegg/helper';
|
|
3
|
+
export declare class DalModuleLoadUnitHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
4
|
+
private readonly moduleConfigs;
|
|
5
|
+
private readonly env;
|
|
6
|
+
private readonly logger?;
|
|
7
|
+
constructor(env: string, moduleConfigs: Record<string, ModuleConfigHolder>, logger?: Logger);
|
|
8
|
+
preCreate(_: LoadUnitLifecycleContext, loadUnit: LoadUnit): Promise<void>;
|
|
9
|
+
}
|
|
@@ -1,4 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {} from '@eggjs/tegg';
|
|
2
|
+
import { DatabaseForker } from '@eggjs/dal-runtime';
|
|
3
|
+
import {} from '@eggjs/tegg/helper';
|
|
4
|
+
import { MysqlDataSourceManager } from "./MysqlDataSourceManager.js";
|
|
5
|
+
export class DalModuleLoadUnitHook {
|
|
6
|
+
moduleConfigs;
|
|
7
|
+
env;
|
|
8
|
+
logger;
|
|
9
|
+
constructor(env, moduleConfigs, logger) {
|
|
10
|
+
this.env = env;
|
|
11
|
+
this.moduleConfigs = moduleConfigs;
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
}
|
|
14
|
+
async preCreate(_, loadUnit) {
|
|
15
|
+
const moduleConfigHolder = this.moduleConfigs[loadUnit.name];
|
|
16
|
+
if (!moduleConfigHolder)
|
|
17
|
+
return;
|
|
18
|
+
const dataSourceConfig = moduleConfigHolder.config.dataSource;
|
|
19
|
+
if (!dataSourceConfig)
|
|
20
|
+
return;
|
|
21
|
+
await Promise.all(Object.entries(dataSourceConfig).map(async ([name, config]) => {
|
|
22
|
+
const dataSourceOptions = {
|
|
23
|
+
...config,
|
|
24
|
+
name,
|
|
25
|
+
logger: this.logger,
|
|
26
|
+
};
|
|
27
|
+
const forker = new DatabaseForker(this.env, dataSourceOptions);
|
|
28
|
+
if (forker.shouldFork()) {
|
|
29
|
+
await forker.forkDb(loadUnit.unitPath);
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
await MysqlDataSourceManager.instance.createDataSource(loadUnit.name, name, dataSourceOptions);
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
if (e instanceof Error) {
|
|
36
|
+
e.message = `create module ${loadUnit.name} datasource ${name} failed: ${e.message}`;
|
|
37
|
+
}
|
|
38
|
+
throw e;
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGFsTW9kdWxlTG9hZFVuaXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9EYWxNb2R1bGVMb2FkVW5pdEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0RCxNQUFNLGFBQWEsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBZ0QsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxNQUFNLE9BQU8scUJBQXFCO0lBQ2YsYUFBYSxDQUFxQztJQUNsRCxHQUFHLENBQVM7SUFDWixNQUFNLENBQVU7SUFFakMsWUFBWSxHQUFXLEVBQUUsYUFBaUQsRUFBRSxNQUFlO1FBQ3pGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBMkIsRUFBRSxRQUFrQjtRQUM3RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQW1ELGtCQUFrQixDQUFDLE1BQWMsQ0FBQyxVQUFVLENBQUM7UUFDdEgsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU87UUFDOUIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBRSxFQUFFLEVBQUU7WUFDaEYsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsR0FBRyxNQUFNO2dCQUNULElBQUk7Z0JBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ3BCLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDL0QsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sc0JBQXNCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDakcsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLFFBQVEsQ0FBQyxJQUFJLGVBQWUsSUFBSSxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkYsQ0FBQztnQkFDRCxNQUFNLENBQUMsQ0FBQztZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNGIn0=
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { type Logger, type LifecycleHook } from '@eggjs/tegg';
|
|
2
|
+
import { type EggPrototype, type EggPrototypeLifecycleContext } from '@eggjs/tegg/helper';
|
|
3
|
+
export declare class DalTableEggPrototypeHook implements LifecycleHook<EggPrototypeLifecycleContext, EggPrototype> {
|
|
4
|
+
private readonly logger;
|
|
5
|
+
constructor(logger: Logger);
|
|
6
|
+
preCreate(ctx: EggPrototypeLifecycleContext): Promise<void>;
|
|
7
|
+
}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import {} from '@eggjs/tegg';
|
|
2
|
+
import {} from '@eggjs/tegg/helper';
|
|
3
|
+
import { DaoInfoUtil, TableModel } from '@eggjs/dal-decorator';
|
|
4
|
+
import { SqlMapLoader } from '@eggjs/dal-runtime';
|
|
5
|
+
import { TableModelManager } from "./TableModelManager.js";
|
|
6
|
+
import { SqlMapManager } from "./SqlMapManager.js";
|
|
7
|
+
export class DalTableEggPrototypeHook {
|
|
8
|
+
logger;
|
|
9
|
+
constructor(logger) {
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
async preCreate(ctx) {
|
|
13
|
+
if (!DaoInfoUtil.getIsDao(ctx.clazz)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const tableClazz = ctx.clazz.clazzModel;
|
|
17
|
+
const tableModel = TableModel.build(tableClazz);
|
|
18
|
+
TableModelManager.instance.set(ctx.loadUnit.name, tableModel);
|
|
19
|
+
const loader = new SqlMapLoader(tableModel, ctx.clazz, this.logger);
|
|
20
|
+
const sqlMap = loader.load();
|
|
21
|
+
SqlMapManager.instance.set(ctx.loadUnit.name, sqlMap);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGFsVGFibGVFZ2dQcm90b3R5cGVIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9EYWxUYWJsZUVnZ1Byb3RvdHlwZUhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQXdELE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE1BQU0sT0FBTyx3QkFBd0I7SUFDbEIsTUFBTSxDQUFTO0lBRWhDLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFpQztRQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUF1QixVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0YifQ==
|
package/dist/lib/DataSource.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { type ObjectInfo } from '@eggjs/tegg';
|
|
2
|
+
import { DataSource } from '@eggjs/dal-runtime';
|
|
3
|
+
import { TransactionalAOP } from './TransactionalAOP.ts';
|
|
4
|
+
export declare class DataSourceDelegate<T> extends DataSource<T> {
|
|
5
|
+
private transactionalAOP;
|
|
6
|
+
objInfo: ObjectInfo;
|
|
7
|
+
constructor(transactionalAOP: TransactionalAOP, objInfo: ObjectInfo);
|
|
8
|
+
}
|
package/dist/lib/DataSource.js
CHANGED
|
@@ -1,7 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import assert from 'node:assert';
|
|
14
|
+
import { AccessLevel, Inject, LoadUnitNameQualifierAttribute, MultiInstanceInfo, MultiInstanceProto, ObjectInitType, } from '@eggjs/tegg';
|
|
15
|
+
import { EggLoadUnitType, LoaderFactory, ModuleConfigUtil, } from '@eggjs/tegg/helper';
|
|
16
|
+
import { DataSourceInjectName, DataSourceQualifierAttribute, TableInfoUtil, TableModel, } from '@eggjs/tegg/dal';
|
|
17
|
+
import { DataSource } from '@eggjs/dal-runtime';
|
|
18
|
+
import { TableModelManager } from "./TableModelManager.js";
|
|
19
|
+
import { MysqlDataSourceManager } from "./MysqlDataSourceManager.js";
|
|
20
|
+
import { SqlMapManager } from "./SqlMapManager.js";
|
|
21
|
+
import { TransactionalAOP } from "./TransactionalAOP.js";
|
|
22
|
+
let DataSourceDelegate = class DataSourceDelegate extends DataSource {
|
|
23
|
+
// @ts-expect-error ignore nerver use
|
|
24
|
+
transactionalAOP;
|
|
25
|
+
objInfo;
|
|
26
|
+
constructor(transactionalAOP, objInfo) {
|
|
27
|
+
const dataSourceQualifierValue = objInfo.qualifiers.find(t => t.attribute === DataSourceQualifierAttribute)?.value;
|
|
28
|
+
assert(dataSourceQualifierValue);
|
|
29
|
+
const [moduleName, dataSource, clazzName] = dataSourceQualifierValue.split('.');
|
|
30
|
+
const tableModel = TableModelManager.instance.get(moduleName, clazzName);
|
|
31
|
+
assert(tableModel, `not found table ${dataSourceQualifierValue}`);
|
|
32
|
+
const mysqlDataSource = MysqlDataSourceManager.instance.get(moduleName, dataSource);
|
|
33
|
+
assert(mysqlDataSource, `not found dataSource ${dataSource} in module ${moduleName}`);
|
|
34
|
+
const sqlMap = SqlMapManager.instance.get(moduleName, clazzName);
|
|
35
|
+
assert(sqlMap, `not found SqlMap ${clazzName} in module ${moduleName}`);
|
|
36
|
+
super(tableModel, mysqlDataSource, sqlMap);
|
|
37
|
+
this.transactionalAOP = transactionalAOP;
|
|
38
|
+
this.objInfo = objInfo;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
DataSourceDelegate = __decorate([
|
|
42
|
+
MultiInstanceProto({
|
|
43
|
+
accessLevel: AccessLevel.PUBLIC,
|
|
44
|
+
initType: ObjectInitType.SINGLETON,
|
|
45
|
+
async getObjects(ctx) {
|
|
46
|
+
const config = ModuleConfigUtil.loadModuleConfigSync(ctx.unitPath);
|
|
47
|
+
const dataSources = Object.keys(config?.dataSource || {});
|
|
48
|
+
const result = [];
|
|
49
|
+
const loader = LoaderFactory.createLoader(ctx.unitPath, EggLoadUnitType.MODULE);
|
|
50
|
+
const clazzList = await loader.load();
|
|
51
|
+
const tableClazzList = clazzList.filter(t => {
|
|
52
|
+
return TableInfoUtil.getIsTable(t);
|
|
53
|
+
});
|
|
54
|
+
const dataSourceLength = dataSources.length;
|
|
55
|
+
for (const dataSource of dataSources) {
|
|
56
|
+
const moduleClazzList = tableClazzList.filter(clazz => {
|
|
57
|
+
const tableParams = TableInfoUtil.getTableParams(clazz);
|
|
58
|
+
const dataSourceName = tableParams?.dataSourceName ?? 'default';
|
|
59
|
+
return dataSourceLength === 1 || dataSourceName === dataSource;
|
|
60
|
+
});
|
|
61
|
+
for (const clazz of moduleClazzList) {
|
|
62
|
+
result.push({
|
|
63
|
+
name: DataSourceInjectName,
|
|
64
|
+
qualifiers: [{
|
|
65
|
+
attribute: DataSourceQualifierAttribute,
|
|
66
|
+
value: `${ctx.moduleName}.${dataSource}.${clazz.name}`,
|
|
67
|
+
}],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
__param(0, Inject({ name: 'transactionalAOP' })),
|
|
75
|
+
__param(1, MultiInstanceInfo([DataSourceQualifierAttribute, LoadUnitNameQualifierAttribute])),
|
|
76
|
+
__metadata("design:paramtypes", [TransactionalAOP, Object])
|
|
77
|
+
], DataSourceDelegate);
|
|
78
|
+
export { DataSourceDelegate };
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvRGF0YVNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUNMLFdBQVcsRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQ25ELGlCQUFpQixFQUNqQixrQkFBa0IsRUFHbEIsY0FBYyxHQUNmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLGFBQWEsRUFDYixVQUFVLEdBQ1gsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBa0NsRCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFzQixTQUFRLFVBQWE7SUFDdEQscUNBQXFDO0lBQzdCLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQWE7SUFFcEIsWUFDd0MsZ0JBQWtDLEVBQ2EsT0FBbUI7UUFDeEcsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssNEJBQTRCLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDbkgsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFFLEdBQUksd0JBQW1DLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsZUFBZSxFQUFFLHdCQUF3QixVQUFVLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN0RixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsU0FBUyxjQUFjLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFeEUsS0FBSyxDQUFDLFVBQTJCLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0NBQ0YsQ0FBQTtBQXRCWSxrQkFBa0I7SUFoQzlCLGtCQUFrQixDQUFDO1FBQ2xCLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMvQixRQUFRLEVBQUUsY0FBYyxDQUFDLFNBQVM7UUFDbEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUE0QztZQUMzRCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFvQixDQUFDO1lBQ3RGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDMUMsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQzVDLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3BELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hELE1BQU0sY0FBYyxHQUFHLFdBQVcsRUFBRSxjQUFjLElBQUksU0FBUyxDQUFDO29CQUNoRSxPQUFPLGdCQUFnQixLQUFLLENBQUMsSUFBSSxjQUFjLEtBQUssVUFBVSxDQUFDO2dCQUNqRSxDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNWLElBQUksRUFBRSxvQkFBb0I7d0JBQzFCLFVBQVUsRUFBRSxDQUFDO2dDQUNYLFNBQVMsRUFBRSw0QkFBNEI7Z0NBQ3ZDLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7NkJBQ3ZELENBQUM7cUJBQ0gsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7SUFPRyxXQUFBLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUE7SUFDcEMsV0FBQSxpQkFBaUIsQ0FBQyxDQUFFLDRCQUE0QixFQUFFLDhCQUE4QixDQUFFLENBQUMsQ0FBQTtxQ0FENUIsZ0JBQWdCO0dBTi9ELGtCQUFrQixDQXNCOUIifQ==
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { type DataSourceOptions, MysqlDataSource } from '@eggjs/dal-runtime';
|
|
2
|
+
export declare class MysqlDataSourceManager {
|
|
3
|
+
static instance: MysqlDataSourceManager;
|
|
4
|
+
private readonly dataSourceIndices;
|
|
5
|
+
private readonly dataSources;
|
|
6
|
+
constructor();
|
|
7
|
+
get(moduleName: string, dataSourceName: string): MysqlDataSource | undefined;
|
|
8
|
+
createDataSource(moduleName: string, dataSourceName: string, config: DataSourceOptions): Promise<void>;
|
|
9
|
+
clear(): void;
|
|
10
|
+
static createDataSourceKey(dataSourceOptions: DataSourceOptions): string;
|
|
11
|
+
}
|
|
@@ -1,3 +1,55 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { MysqlDataSource } from '@eggjs/dal-runtime';
|
|
3
|
+
export class MysqlDataSourceManager {
|
|
4
|
+
static instance = new MysqlDataSourceManager();
|
|
5
|
+
dataSourceIndices;
|
|
6
|
+
dataSources;
|
|
7
|
+
constructor() {
|
|
8
|
+
this.dataSourceIndices = new Map();
|
|
9
|
+
this.dataSources = new Map();
|
|
10
|
+
}
|
|
11
|
+
get(moduleName, dataSourceName) {
|
|
12
|
+
const dataSourceIndex = this.dataSourceIndices.get(moduleName)
|
|
13
|
+
?.get(dataSourceName);
|
|
14
|
+
if (dataSourceIndex) {
|
|
15
|
+
return this.dataSources.get(dataSourceIndex);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async createDataSource(moduleName, dataSourceName, config) {
|
|
19
|
+
const { logger, ...dsConfig } = config || {};
|
|
20
|
+
const dataSourceConfig = {
|
|
21
|
+
...dsConfig,
|
|
22
|
+
name: dataSourceName,
|
|
23
|
+
};
|
|
24
|
+
const index = MysqlDataSourceManager.createDataSourceKey(dataSourceConfig);
|
|
25
|
+
let dataSource = this.dataSources.get(index);
|
|
26
|
+
if (!dataSource) {
|
|
27
|
+
dataSource = new MysqlDataSource({ ...dataSourceConfig, logger });
|
|
28
|
+
this.dataSources.set(index, dataSource);
|
|
29
|
+
}
|
|
30
|
+
let moduleDataSourceIndices = this.dataSourceIndices.get(moduleName);
|
|
31
|
+
if (!moduleDataSourceIndices) {
|
|
32
|
+
moduleDataSourceIndices = new Map();
|
|
33
|
+
this.dataSourceIndices.set(moduleName, moduleDataSourceIndices);
|
|
34
|
+
}
|
|
35
|
+
moduleDataSourceIndices.set(dataSourceName, index);
|
|
36
|
+
await dataSource.ready();
|
|
37
|
+
}
|
|
38
|
+
clear() {
|
|
39
|
+
this.dataSourceIndices.clear();
|
|
40
|
+
}
|
|
41
|
+
static createDataSourceKey(dataSourceOptions) {
|
|
42
|
+
const hash = crypto.createHash('md5');
|
|
43
|
+
const keys = Object.keys(dataSourceOptions)
|
|
44
|
+
.sort();
|
|
45
|
+
for (const key of keys) {
|
|
46
|
+
const value = dataSourceOptions[key];
|
|
47
|
+
if (value) {
|
|
48
|
+
hash.update(key);
|
|
49
|
+
hash.update(String(value));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return hash.digest('hex');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxEYXRhU291cmNlTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvTXlzcWxEYXRhU291cmNlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUEwQixlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3RSxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBRTlCLGlCQUFpQixDQUE0RjtJQUM3RyxXQUFXLENBQW9EO0lBRWhGO1FBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxHQUFHLENBQUMsVUFBa0IsRUFBRSxjQUFzQjtRQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUM1RCxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxjQUFzQixFQUFFLE1BQXlCO1FBQzFGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQzdDLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsR0FBRyxRQUFRO1lBQ1gsSUFBSSxFQUFFLGNBQWM7U0FDckIsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUM3Qix1QkFBdUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbkQsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBb0M7UUFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ3hDLElBQUksRUFBRSxDQUFDO1FBQ1YsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxHQUE4QixDQUFDLENBQUM7WUFDaEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUMifQ==
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { TableSqlMap } from '@eggjs/dal-runtime';
|
|
2
|
+
export declare class SqlMapManager {
|
|
3
|
+
static instance: SqlMapManager;
|
|
4
|
+
private sqlMaps;
|
|
5
|
+
constructor();
|
|
6
|
+
get(moduleName: string, clazzName: string): TableSqlMap | undefined;
|
|
7
|
+
set(moduleName: string, sqlMap: TableSqlMap): void;
|
|
8
|
+
clear(): void;
|
|
9
|
+
}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { TableSqlMap } from '@eggjs/dal-runtime';
|
|
2
|
+
export class SqlMapManager {
|
|
3
|
+
static instance = new SqlMapManager();
|
|
4
|
+
sqlMaps;
|
|
5
|
+
constructor() {
|
|
6
|
+
this.sqlMaps = new Map();
|
|
7
|
+
}
|
|
8
|
+
get(moduleName, clazzName) {
|
|
9
|
+
return this.sqlMaps.get(moduleName)?.get(clazzName);
|
|
10
|
+
}
|
|
11
|
+
set(moduleName, sqlMap) {
|
|
12
|
+
let tables = this.sqlMaps.get(moduleName);
|
|
13
|
+
if (!tables) {
|
|
14
|
+
tables = new Map();
|
|
15
|
+
this.sqlMaps.set(moduleName, tables);
|
|
16
|
+
}
|
|
17
|
+
tables.set(sqlMap.name, sqlMap);
|
|
18
|
+
}
|
|
19
|
+
clear() {
|
|
20
|
+
this.sqlMaps.clear();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsTWFwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvU3FsTWFwTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakQsTUFBTSxPQUFPLGFBQWE7SUFDeEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBRTlCLE9BQU8sQ0FBd0Q7SUFFdkU7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxVQUFrQixFQUFFLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxHQUFHLENBQUMsVUFBa0IsRUFBRSxNQUFtQjtRQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQyJ9
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { TableModel } from '@eggjs/dal-decorator';
|
|
2
|
+
export declare class TableModelManager {
|
|
3
|
+
static instance: TableModelManager;
|
|
4
|
+
private tableModels;
|
|
5
|
+
constructor();
|
|
6
|
+
get(moduleName: string, clazzName: string): TableModel | undefined;
|
|
7
|
+
set(moduleName: string, tableModel: TableModel): void;
|
|
8
|
+
clear(): void;
|
|
9
|
+
}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { TableModel } from '@eggjs/dal-decorator';
|
|
2
|
+
export class TableModelManager {
|
|
3
|
+
static instance = new TableModelManager();
|
|
4
|
+
tableModels;
|
|
5
|
+
constructor() {
|
|
6
|
+
this.tableModels = new Map();
|
|
7
|
+
}
|
|
8
|
+
get(moduleName, clazzName) {
|
|
9
|
+
return this.tableModels.get(moduleName)?.get(clazzName);
|
|
10
|
+
}
|
|
11
|
+
set(moduleName, tableModel) {
|
|
12
|
+
let tables = this.tableModels.get(moduleName);
|
|
13
|
+
if (!tables) {
|
|
14
|
+
tables = new Map();
|
|
15
|
+
this.tableModels.set(moduleName, tables);
|
|
16
|
+
}
|
|
17
|
+
tables.set(tableModel.clazz.name, tableModel);
|
|
18
|
+
}
|
|
19
|
+
clear() {
|
|
20
|
+
this.tableModels.clear();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVNb2RlbE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL1RhYmxlTW9kZWxNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBRWxDLFdBQVcsQ0FBdUQ7SUFFMUU7UUFDRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxVQUFrQixFQUFFLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxHQUFHLENBQUMsVUFBa0IsRUFBRSxVQUFzQjtRQUM1QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUMifQ==
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { type LifecycleHook, type ModuleConfigHolder, type Logger } from '@eggjs/tegg';
|
|
2
|
+
import { type EggPrototype, type EggPrototypeLifecycleContext } from '@eggjs/tegg-metadata';
|
|
3
|
+
export declare class TransactionPrototypeHook implements LifecycleHook<EggPrototypeLifecycleContext, EggPrototype> {
|
|
4
|
+
private readonly moduleConfigs;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
constructor(moduleConfigs: Record<string, ModuleConfigHolder>, logger: Logger);
|
|
7
|
+
preCreate(ctx: EggPrototypeLifecycleContext): Promise<void>;
|
|
8
|
+
}
|
|
@@ -1,5 +1,56 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import {} from '@eggjs/tegg';
|
|
3
|
+
import {} from '@eggjs/tegg-metadata';
|
|
4
|
+
import { PropagationType, TransactionMetaBuilder } from '@eggjs/tegg/transaction';
|
|
5
|
+
import { Pointcut } from '@eggjs/tegg/aop';
|
|
6
|
+
import { TransactionalAOP } from "./TransactionalAOP.js";
|
|
7
|
+
import { MysqlDataSourceManager } from "./MysqlDataSourceManager.js";
|
|
8
|
+
export class TransactionPrototypeHook {
|
|
9
|
+
moduleConfigs;
|
|
10
|
+
logger;
|
|
11
|
+
constructor(moduleConfigs, logger) {
|
|
12
|
+
this.moduleConfigs = moduleConfigs;
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
}
|
|
15
|
+
async preCreate(ctx) {
|
|
16
|
+
const builder = new TransactionMetaBuilder(ctx.clazz);
|
|
17
|
+
const transactionMetadataList = builder.build();
|
|
18
|
+
if (transactionMetadataList.length < 1) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const moduleName = ctx.loadUnit.name;
|
|
22
|
+
for (const transactionMetadata of transactionMetadataList) {
|
|
23
|
+
const clazzName = `${moduleName}.${ctx.clazz.name}.${String(transactionMetadata.method)}`;
|
|
24
|
+
const datasourceConfigs = this.moduleConfigs[moduleName]?.config?.dataSource || {};
|
|
25
|
+
let datasourceName;
|
|
26
|
+
if (transactionMetadata.datasourceName) {
|
|
27
|
+
assert(datasourceConfigs[transactionMetadata.datasourceName], `method ${clazzName} specified datasource ${transactionMetadata.datasourceName} not exists`);
|
|
28
|
+
datasourceName = transactionMetadata.datasourceName;
|
|
29
|
+
this.logger.info(`use datasource [${transactionMetadata.datasourceName}] for class ${clazzName}`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
const dataSources = Object.keys(datasourceConfigs);
|
|
33
|
+
if (dataSources.length === 1) {
|
|
34
|
+
datasourceName = dataSources[0];
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
throw new Error(`method ${clazzName} not specified datasource, module ${moduleName} has multi datasource, should specify datasource name`);
|
|
38
|
+
}
|
|
39
|
+
this.logger.info(`use default datasource ${dataSources[0]} for class ${clazzName}`);
|
|
40
|
+
}
|
|
41
|
+
const adviceParams = {
|
|
42
|
+
propagation: transactionMetadata.propagation,
|
|
43
|
+
dataSourceGetter: () => {
|
|
44
|
+
const mysqlDataSource = MysqlDataSourceManager.instance.get(moduleName, datasourceName);
|
|
45
|
+
if (!mysqlDataSource) {
|
|
46
|
+
throw new Error(`method ${clazzName} not found datasource ${datasourceName}`);
|
|
47
|
+
}
|
|
48
|
+
return mysqlDataSource;
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
assert(adviceParams.propagation === PropagationType.REQUIRED, 'Transactional propagation only support required for now');
|
|
52
|
+
Pointcut(TransactionalAOP, { adviceParams })(ctx.clazz.prototype, transactionMetadata.method);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25Qcm90b3R5cGVIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9UcmFuc2FjdGlvblByb3RvdHlwZUhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRWpDLE9BQU8sRUFBNEQsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUF3RCxNQUFNLHNCQUFzQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGdCQUFnQixFQUE0QixNQUFNLHVCQUF1QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJFLE1BQU0sT0FBTyx3QkFBd0I7SUFDbEIsYUFBYSxDQUFxQztJQUNsRCxNQUFNLENBQVM7SUFFaEMsWUFBWSxhQUFpRCxFQUFFLE1BQWM7UUFDM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEQsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNyQyxLQUFLLE1BQU0sbUJBQW1CLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUMxRCxNQUFNLFNBQVMsR0FBRyxHQUFHLFVBQVUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxRixNQUFNLGlCQUFpQixHQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBYyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFFNUYsSUFBSSxjQUFzQixDQUFDO1lBQzNCLElBQUksbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsRUFBRSxVQUFVLFNBQVMseUJBQXlCLG1CQUFtQixDQUFDLGNBQWMsYUFBYSxDQUFDLENBQUM7Z0JBQzNKLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixtQkFBbUIsQ0FBQyxjQUFjLGVBQWUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNwRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzdCLGNBQWMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsU0FBUyxxQ0FBcUMsVUFBVSx1REFBdUQsQ0FBQyxDQUFDO2dCQUM3SSxDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBQ0QsTUFBTSxZQUFZLEdBQXdCO2dCQUN4QyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVztnQkFDNUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO29CQUNyQixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDeEYsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsU0FBUyx5QkFBeUIsY0FBYyxFQUFFLENBQUMsQ0FBQztvQkFDaEYsQ0FBQztvQkFDRCxPQUFPLGVBQWUsQ0FBQztnQkFDekIsQ0FBQzthQUNGLENBQUM7WUFDRixNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFLHlEQUF5RCxDQUFDLENBQUM7WUFDekgsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBRSxHQUFHLENBQUMsS0FBYSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { type AdviceContext, type IAdvice } from '@eggjs/tegg/aop';
|
|
2
|
+
import { type EggProtoImplClass } from '@eggjs/tegg';
|
|
3
|
+
import { PropagationType } from '@eggjs/tegg/transaction';
|
|
4
|
+
import { MysqlDataSource } from '@eggjs/dal-runtime';
|
|
5
|
+
export interface TransactionalParams {
|
|
6
|
+
propagation: PropagationType;
|
|
7
|
+
dataSourceGetter: () => MysqlDataSource;
|
|
8
|
+
}
|
|
9
|
+
export declare class TransactionalAOP implements IAdvice<EggProtoImplClass, TransactionalParams> {
|
|
10
|
+
around(ctx: AdviceContext<EggProtoImplClass, TransactionalParams>, next: () => Promise<any>): Promise<void>;
|
|
11
|
+
}
|
|
@@ -1,3 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Advice } from '@eggjs/tegg/aop';
|
|
8
|
+
import { AccessLevel, ObjectInitType } from '@eggjs/tegg';
|
|
9
|
+
import { PropagationType } from '@eggjs/tegg/transaction';
|
|
10
|
+
import { MysqlDataSource } from '@eggjs/dal-runtime';
|
|
11
|
+
let TransactionalAOP = class TransactionalAOP {
|
|
12
|
+
async around(ctx, next) {
|
|
13
|
+
const { propagation, dataSourceGetter } = ctx.adviceParams;
|
|
14
|
+
const dataSource = dataSourceGetter();
|
|
15
|
+
if (propagation === PropagationType.ALWAYS_NEW) {
|
|
16
|
+
return await dataSource.beginTransactionScope(next);
|
|
17
|
+
}
|
|
18
|
+
return await dataSource.beginTransactionScope(next);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
TransactionalAOP = __decorate([
|
|
22
|
+
Advice({
|
|
23
|
+
accessLevel: AccessLevel.PUBLIC,
|
|
24
|
+
initType: ObjectInitType.SINGLETON,
|
|
25
|
+
})
|
|
26
|
+
], TransactionalAOP);
|
|
27
|
+
export { TransactionalAOP };
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25hbEFPUC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvVHJhbnNhY3Rpb25hbEFPUC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFvQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQTBCLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBVzlDLElBQU0sZ0JBQWdCLEdBQXRCLE1BQU0sZ0JBQWdCO0lBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBMEQsRUFBRSxJQUF3QjtRQUN0RyxNQUFNLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsR0FBRyxDQUFDLFlBQWEsQ0FBQztRQUM1RCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksV0FBVyxLQUFLLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxPQUFPLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRixDQUFBO0FBVFksZ0JBQWdCO0lBSjVCLE1BQU0sQ0FBQztRQUNOLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMvQixRQUFRLEVBQUUsY0FBYyxDQUFDLFNBQVM7S0FDbkMsQ0FBQztHQUNXLGdCQUFnQixDQVM1QiJ9
|
package/dist/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '@eggjs/tegg-plugin/types';
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export { };
|
|
1
|
+
import '@eggjs/tegg-plugin/types';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"eggModule": {
|
|
11
11
|
"name": "teggDal"
|
|
12
12
|
},
|
|
13
|
-
"version": "4.0.0-beta.
|
|
13
|
+
"version": "4.0.0-beta.9",
|
|
14
14
|
"description": "dal plugin for egg",
|
|
15
15
|
"keywords": [
|
|
16
16
|
"egg",
|
|
@@ -51,14 +51,14 @@
|
|
|
51
51
|
"node": ">=22.18.0"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@eggjs/tegg": "4.0.0-beta.
|
|
55
|
-
"@eggjs/dal-runtime": "4.0.0-beta.
|
|
56
|
-
"@eggjs/tegg-metadata": "4.0.0-beta.
|
|
57
|
-
"@eggjs/dal-decorator": "4.0.0-beta.
|
|
54
|
+
"@eggjs/tegg": "4.0.0-beta.9",
|
|
55
|
+
"@eggjs/dal-runtime": "4.0.0-beta.9",
|
|
56
|
+
"@eggjs/tegg-metadata": "4.0.0-beta.9",
|
|
57
|
+
"@eggjs/dal-decorator": "4.0.0-beta.9"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"egg": "beta",
|
|
61
|
-
"@eggjs/tegg-plugin": "4.0.0-beta.
|
|
61
|
+
"@eggjs/tegg-plugin": "4.0.0-beta.9"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@eggjs/bin": "beta",
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
"typescript": "^5.9.3",
|
|
73
73
|
"tsdown": "^0.15.6",
|
|
74
74
|
"unplugin-unused": "^0.5.3",
|
|
75
|
-
"@eggjs/tegg-
|
|
76
|
-
"@eggjs/tegg-
|
|
77
|
-
"@eggjs/tegg-plugin": "4.0.0-beta.
|
|
75
|
+
"@eggjs/tegg-config": "4.0.0-beta.9",
|
|
76
|
+
"@eggjs/tegg-aop-plugin": "4.0.0-beta.9",
|
|
77
|
+
"@eggjs/tegg-plugin": "4.0.0-beta.9"
|
|
78
78
|
},
|
|
79
79
|
"publishConfig": {
|
|
80
80
|
"access": "public"
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"test:mocha": "egg-bin test",
|
|
87
87
|
"cov:mocha": "egg-bin cov",
|
|
88
88
|
"clean": "rimraf dist",
|
|
89
|
-
"build": "tsdown",
|
|
89
|
+
"build": "tsdown && rimraf dist && tsc -b --clean && tsc",
|
|
90
90
|
"typecheck": "tsc --noEmit"
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { LifecycleHook, Logger, ModuleConfigHolder } from "@eggjs/tegg";
|
|
2
|
-
import { LoadUnit, LoadUnitLifecycleContext } from "@eggjs/tegg/helper";
|
|
3
|
-
|
|
4
|
-
//#region src/lib/DalModuleLoadUnitHook.d.ts
|
|
5
|
-
declare class DalModuleLoadUnitHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
6
|
-
private readonly moduleConfigs;
|
|
7
|
-
private readonly env;
|
|
8
|
-
private readonly logger?;
|
|
9
|
-
constructor(env: string, moduleConfigs: Record<string, ModuleConfigHolder>, logger?: Logger);
|
|
10
|
-
preCreate(_: LoadUnitLifecycleContext, loadUnit: LoadUnit): Promise<void>;
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { DalModuleLoadUnitHook };
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { MysqlDataSourceManager } from "./MysqlDataSourceManager-Bl5dlpX7.js";
|
|
2
|
-
import "@eggjs/tegg";
|
|
3
|
-
import "@eggjs/tegg/helper";
|
|
4
|
-
import { DatabaseForker } from "@eggjs/dal-runtime";
|
|
5
|
-
|
|
6
|
-
//#region src/lib/DalModuleLoadUnitHook.ts
|
|
7
|
-
var DalModuleLoadUnitHook = class {
|
|
8
|
-
moduleConfigs;
|
|
9
|
-
env;
|
|
10
|
-
logger;
|
|
11
|
-
constructor(env, moduleConfigs, logger) {
|
|
12
|
-
this.env = env;
|
|
13
|
-
this.moduleConfigs = moduleConfigs;
|
|
14
|
-
this.logger = logger;
|
|
15
|
-
}
|
|
16
|
-
async preCreate(_, loadUnit) {
|
|
17
|
-
const moduleConfigHolder = this.moduleConfigs[loadUnit.name];
|
|
18
|
-
if (!moduleConfigHolder) return;
|
|
19
|
-
const dataSourceConfig = moduleConfigHolder.config.dataSource;
|
|
20
|
-
if (!dataSourceConfig) return;
|
|
21
|
-
await Promise.all(Object.entries(dataSourceConfig).map(async ([name, config]) => {
|
|
22
|
-
const dataSourceOptions = {
|
|
23
|
-
...config,
|
|
24
|
-
name,
|
|
25
|
-
logger: this.logger
|
|
26
|
-
};
|
|
27
|
-
const forker = new DatabaseForker(this.env, dataSourceOptions);
|
|
28
|
-
if (forker.shouldFork()) await forker.forkDb(loadUnit.unitPath);
|
|
29
|
-
try {
|
|
30
|
-
await MysqlDataSourceManager.instance.createDataSource(loadUnit.name, name, dataSourceOptions);
|
|
31
|
-
} catch (e) {
|
|
32
|
-
if (e instanceof Error) e.message = `create module ${loadUnit.name} datasource ${name} failed: ${e.message}`;
|
|
33
|
-
throw e;
|
|
34
|
-
}
|
|
35
|
-
}));
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
//#endregion
|
|
40
|
-
export { DalModuleLoadUnitHook };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { LifecycleHook, Logger } from "@eggjs/tegg";
|
|
2
|
-
import { EggPrototype, EggPrototypeLifecycleContext } from "@eggjs/tegg/helper";
|
|
3
|
-
|
|
4
|
-
//#region src/lib/DalTableEggPrototypeHook.d.ts
|
|
5
|
-
declare class DalTableEggPrototypeHook implements LifecycleHook<EggPrototypeLifecycleContext, EggPrototype> {
|
|
6
|
-
private readonly logger;
|
|
7
|
-
constructor(logger: Logger);
|
|
8
|
-
preCreate(ctx: EggPrototypeLifecycleContext): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { DalTableEggPrototypeHook };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { TableModelManager } from "./TableModelManager-C9FVu5zw.js";
|
|
2
|
-
import { SqlMapManager } from "./SqlMapManager-Dee8HrBh.js";
|
|
3
|
-
import "@eggjs/tegg";
|
|
4
|
-
import "@eggjs/tegg/helper";
|
|
5
|
-
import { DaoInfoUtil, TableModel } from "@eggjs/dal-decorator";
|
|
6
|
-
import { SqlMapLoader } from "@eggjs/dal-runtime";
|
|
7
|
-
|
|
8
|
-
//#region src/lib/DalTableEggPrototypeHook.ts
|
|
9
|
-
var DalTableEggPrototypeHook = class {
|
|
10
|
-
logger;
|
|
11
|
-
constructor(logger) {
|
|
12
|
-
this.logger = logger;
|
|
13
|
-
}
|
|
14
|
-
async preCreate(ctx) {
|
|
15
|
-
if (!DaoInfoUtil.getIsDao(ctx.clazz)) return;
|
|
16
|
-
const tableClazz = ctx.clazz.clazzModel;
|
|
17
|
-
const tableModel = TableModel.build(tableClazz);
|
|
18
|
-
TableModelManager.instance.set(ctx.loadUnit.name, tableModel);
|
|
19
|
-
const sqlMap = new SqlMapLoader(tableModel, ctx.clazz, this.logger).load();
|
|
20
|
-
SqlMapManager.instance.set(ctx.loadUnit.name, sqlMap);
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
//#endregion
|
|
25
|
-
export { DalTableEggPrototypeHook };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TransactionalAOP } from "./TransactionalAOP-CRvc1-Sf.js";
|
|
2
|
-
import { ObjectInfo } from "@eggjs/tegg";
|
|
3
|
-
import { DataSource } from "@eggjs/dal-runtime";
|
|
4
|
-
|
|
5
|
-
//#region src/lib/DataSource.d.ts
|
|
6
|
-
declare class DataSourceDelegate<T> extends DataSource<T> {
|
|
7
|
-
private transactionalAOP;
|
|
8
|
-
objInfo: ObjectInfo;
|
|
9
|
-
constructor(transactionalAOP: TransactionalAOP, objInfo: ObjectInfo);
|
|
10
|
-
}
|
|
11
|
-
//#endregion
|
|
12
|
-
export { DataSourceDelegate };
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { TableModelManager } from "./TableModelManager-C9FVu5zw.js";
|
|
2
|
-
import { SqlMapManager } from "./SqlMapManager-Dee8HrBh.js";
|
|
3
|
-
import { MysqlDataSourceManager } from "./MysqlDataSourceManager-Bl5dlpX7.js";
|
|
4
|
-
import { TransactionalAOP, __decorate } from "./TransactionalAOP-Bm-mjuDZ.js";
|
|
5
|
-
import { AccessLevel, Inject, LoadUnitNameQualifierAttribute, MultiInstanceInfo, MultiInstanceProto, ObjectInitType } from "@eggjs/tegg";
|
|
6
|
-
import { EggLoadUnitType, LoaderFactory, ModuleConfigUtil } from "@eggjs/tegg/helper";
|
|
7
|
-
import { DataSource } from "@eggjs/dal-runtime";
|
|
8
|
-
import assert from "node:assert";
|
|
9
|
-
import { DataSourceInjectName, DataSourceQualifierAttribute, TableInfoUtil } from "@eggjs/tegg/dal";
|
|
10
|
-
|
|
11
|
-
//#region \0@oxc-project+runtime@0.93.0/helpers/decorateMetadata.js
|
|
12
|
-
function __decorateMetadata(k, v) {
|
|
13
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
//#endregion
|
|
17
|
-
//#region \0@oxc-project+runtime@0.93.0/helpers/decorateParam.js
|
|
18
|
-
function __decorateParam(paramIndex, decorator) {
|
|
19
|
-
return function(target, key) {
|
|
20
|
-
decorator(target, key, paramIndex);
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
//#endregion
|
|
25
|
-
//#region src/lib/DataSource.ts
|
|
26
|
-
var _ref;
|
|
27
|
-
let DataSourceDelegate = class DataSourceDelegate$1 extends DataSource {
|
|
28
|
-
transactionalAOP;
|
|
29
|
-
objInfo;
|
|
30
|
-
constructor(transactionalAOP, objInfo) {
|
|
31
|
-
const dataSourceQualifierValue = objInfo.qualifiers.find((t) => t.attribute === DataSourceQualifierAttribute)?.value;
|
|
32
|
-
assert(dataSourceQualifierValue);
|
|
33
|
-
const [moduleName, dataSource, clazzName] = dataSourceQualifierValue.split(".");
|
|
34
|
-
const tableModel = TableModelManager.instance.get(moduleName, clazzName);
|
|
35
|
-
assert(tableModel, `not found table ${dataSourceQualifierValue}`);
|
|
36
|
-
const mysqlDataSource = MysqlDataSourceManager.instance.get(moduleName, dataSource);
|
|
37
|
-
assert(mysqlDataSource, `not found dataSource ${dataSource} in module ${moduleName}`);
|
|
38
|
-
const sqlMap = SqlMapManager.instance.get(moduleName, clazzName);
|
|
39
|
-
assert(sqlMap, `not found SqlMap ${clazzName} in module ${moduleName}`);
|
|
40
|
-
super(tableModel, mysqlDataSource, sqlMap);
|
|
41
|
-
this.transactionalAOP = transactionalAOP;
|
|
42
|
-
this.objInfo = objInfo;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
DataSourceDelegate = __decorate([
|
|
46
|
-
MultiInstanceProto({
|
|
47
|
-
accessLevel: AccessLevel.PUBLIC,
|
|
48
|
-
initType: ObjectInitType.SINGLETON,
|
|
49
|
-
async getObjects(ctx) {
|
|
50
|
-
const config = ModuleConfigUtil.loadModuleConfigSync(ctx.unitPath);
|
|
51
|
-
const dataSources = Object.keys(config?.dataSource || {});
|
|
52
|
-
const result = [];
|
|
53
|
-
const tableClazzList = (await LoaderFactory.createLoader(ctx.unitPath, EggLoadUnitType.MODULE).load()).filter((t) => {
|
|
54
|
-
return TableInfoUtil.getIsTable(t);
|
|
55
|
-
});
|
|
56
|
-
const dataSourceLength = dataSources.length;
|
|
57
|
-
for (const dataSource of dataSources) {
|
|
58
|
-
const moduleClazzList = tableClazzList.filter((clazz) => {
|
|
59
|
-
const dataSourceName = TableInfoUtil.getTableParams(clazz)?.dataSourceName ?? "default";
|
|
60
|
-
return dataSourceLength === 1 || dataSourceName === dataSource;
|
|
61
|
-
});
|
|
62
|
-
for (const clazz of moduleClazzList) result.push({
|
|
63
|
-
name: DataSourceInjectName,
|
|
64
|
-
qualifiers: [{
|
|
65
|
-
attribute: DataSourceQualifierAttribute,
|
|
66
|
-
value: `${ctx.moduleName}.${dataSource}.${clazz.name}`
|
|
67
|
-
}]
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
}),
|
|
73
|
-
__decorateParam(0, Inject({ name: "transactionalAOP" })),
|
|
74
|
-
__decorateParam(1, MultiInstanceInfo([DataSourceQualifierAttribute, LoadUnitNameQualifierAttribute])),
|
|
75
|
-
__decorateMetadata("design:paramtypes", [typeof (_ref = typeof TransactionalAOP !== "undefined" && TransactionalAOP) === "function" ? _ref : Object, Object])
|
|
76
|
-
], DataSourceDelegate);
|
|
77
|
-
|
|
78
|
-
//#endregion
|
|
79
|
-
export { DataSourceDelegate };
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { MysqlDataSource } from "@eggjs/dal-runtime";
|
|
2
|
-
import crypto from "node:crypto";
|
|
3
|
-
|
|
4
|
-
//#region src/lib/MysqlDataSourceManager.ts
|
|
5
|
-
var MysqlDataSourceManager = class MysqlDataSourceManager {
|
|
6
|
-
static instance = new MysqlDataSourceManager();
|
|
7
|
-
dataSourceIndices;
|
|
8
|
-
dataSources;
|
|
9
|
-
constructor() {
|
|
10
|
-
this.dataSourceIndices = /* @__PURE__ */ new Map();
|
|
11
|
-
this.dataSources = /* @__PURE__ */ new Map();
|
|
12
|
-
}
|
|
13
|
-
get(moduleName, dataSourceName) {
|
|
14
|
-
const dataSourceIndex = this.dataSourceIndices.get(moduleName)?.get(dataSourceName);
|
|
15
|
-
if (dataSourceIndex) return this.dataSources.get(dataSourceIndex);
|
|
16
|
-
}
|
|
17
|
-
async createDataSource(moduleName, dataSourceName, config) {
|
|
18
|
-
const { logger,...dsConfig } = config || {};
|
|
19
|
-
const dataSourceConfig = {
|
|
20
|
-
...dsConfig,
|
|
21
|
-
name: dataSourceName
|
|
22
|
-
};
|
|
23
|
-
const index = MysqlDataSourceManager.createDataSourceKey(dataSourceConfig);
|
|
24
|
-
let dataSource = this.dataSources.get(index);
|
|
25
|
-
if (!dataSource) {
|
|
26
|
-
dataSource = new MysqlDataSource({
|
|
27
|
-
...dataSourceConfig,
|
|
28
|
-
logger
|
|
29
|
-
});
|
|
30
|
-
this.dataSources.set(index, dataSource);
|
|
31
|
-
}
|
|
32
|
-
let moduleDataSourceIndices = this.dataSourceIndices.get(moduleName);
|
|
33
|
-
if (!moduleDataSourceIndices) {
|
|
34
|
-
moduleDataSourceIndices = /* @__PURE__ */ new Map();
|
|
35
|
-
this.dataSourceIndices.set(moduleName, moduleDataSourceIndices);
|
|
36
|
-
}
|
|
37
|
-
moduleDataSourceIndices.set(dataSourceName, index);
|
|
38
|
-
await dataSource.ready();
|
|
39
|
-
}
|
|
40
|
-
clear() {
|
|
41
|
-
this.dataSourceIndices.clear();
|
|
42
|
-
}
|
|
43
|
-
static createDataSourceKey(dataSourceOptions) {
|
|
44
|
-
const hash = crypto.createHash("md5");
|
|
45
|
-
const keys = Object.keys(dataSourceOptions).sort();
|
|
46
|
-
for (const key of keys) {
|
|
47
|
-
const value = dataSourceOptions[key];
|
|
48
|
-
if (value) {
|
|
49
|
-
hash.update(key);
|
|
50
|
-
hash.update(String(value));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return hash.digest("hex");
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
//#endregion
|
|
58
|
-
export { MysqlDataSourceManager };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { DataSourceOptions, MysqlDataSource } from "@eggjs/dal-runtime";
|
|
2
|
-
|
|
3
|
-
//#region src/lib/MysqlDataSourceManager.d.ts
|
|
4
|
-
declare class MysqlDataSourceManager {
|
|
5
|
-
static instance: MysqlDataSourceManager;
|
|
6
|
-
private readonly dataSourceIndices;
|
|
7
|
-
private readonly dataSources;
|
|
8
|
-
constructor();
|
|
9
|
-
get(moduleName: string, dataSourceName: string): MysqlDataSource | undefined;
|
|
10
|
-
createDataSource(moduleName: string, dataSourceName: string, config: DataSourceOptions): Promise<void>;
|
|
11
|
-
clear(): void;
|
|
12
|
-
static createDataSourceKey(dataSourceOptions: DataSourceOptions): string;
|
|
13
|
-
}
|
|
14
|
-
//#endregion
|
|
15
|
-
export { MysqlDataSourceManager };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { TableSqlMap } from "@eggjs/dal-runtime";
|
|
2
|
-
|
|
3
|
-
//#region src/lib/SqlMapManager.ts
|
|
4
|
-
var SqlMapManager = class SqlMapManager {
|
|
5
|
-
static instance = new SqlMapManager();
|
|
6
|
-
sqlMaps;
|
|
7
|
-
constructor() {
|
|
8
|
-
this.sqlMaps = /* @__PURE__ */ new Map();
|
|
9
|
-
}
|
|
10
|
-
get(moduleName, clazzName) {
|
|
11
|
-
return this.sqlMaps.get(moduleName)?.get(clazzName);
|
|
12
|
-
}
|
|
13
|
-
set(moduleName, sqlMap) {
|
|
14
|
-
let tables = this.sqlMaps.get(moduleName);
|
|
15
|
-
if (!tables) {
|
|
16
|
-
tables = /* @__PURE__ */ new Map();
|
|
17
|
-
this.sqlMaps.set(moduleName, tables);
|
|
18
|
-
}
|
|
19
|
-
tables.set(sqlMap.name, sqlMap);
|
|
20
|
-
}
|
|
21
|
-
clear() {
|
|
22
|
-
this.sqlMaps.clear();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
//#endregion
|
|
27
|
-
export { SqlMapManager };
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { TableSqlMap } from "@eggjs/dal-runtime";
|
|
2
|
-
|
|
3
|
-
//#region src/lib/SqlMapManager.d.ts
|
|
4
|
-
declare class SqlMapManager {
|
|
5
|
-
static instance: SqlMapManager;
|
|
6
|
-
private sqlMaps;
|
|
7
|
-
constructor();
|
|
8
|
-
get(moduleName: string, clazzName: string): TableSqlMap | undefined;
|
|
9
|
-
set(moduleName: string, sqlMap: TableSqlMap): void;
|
|
10
|
-
clear(): void;
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { SqlMapManager };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { TableModel } from "@eggjs/dal-decorator";
|
|
2
|
-
|
|
3
|
-
//#region src/lib/TableModelManager.ts
|
|
4
|
-
var TableModelManager = class TableModelManager {
|
|
5
|
-
static instance = new TableModelManager();
|
|
6
|
-
tableModels;
|
|
7
|
-
constructor() {
|
|
8
|
-
this.tableModels = /* @__PURE__ */ new Map();
|
|
9
|
-
}
|
|
10
|
-
get(moduleName, clazzName) {
|
|
11
|
-
return this.tableModels.get(moduleName)?.get(clazzName);
|
|
12
|
-
}
|
|
13
|
-
set(moduleName, tableModel) {
|
|
14
|
-
let tables = this.tableModels.get(moduleName);
|
|
15
|
-
if (!tables) {
|
|
16
|
-
tables = /* @__PURE__ */ new Map();
|
|
17
|
-
this.tableModels.set(moduleName, tables);
|
|
18
|
-
}
|
|
19
|
-
tables.set(tableModel.clazz.name, tableModel);
|
|
20
|
-
}
|
|
21
|
-
clear() {
|
|
22
|
-
this.tableModels.clear();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
//#endregion
|
|
27
|
-
export { TableModelManager };
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { TableModel } from "@eggjs/dal-decorator";
|
|
2
|
-
|
|
3
|
-
//#region src/lib/TableModelManager.d.ts
|
|
4
|
-
declare class TableModelManager {
|
|
5
|
-
static instance: TableModelManager;
|
|
6
|
-
private tableModels;
|
|
7
|
-
constructor();
|
|
8
|
-
get(moduleName: string, clazzName: string): TableModel | undefined;
|
|
9
|
-
set(moduleName: string, tableModel: TableModel): void;
|
|
10
|
-
clear(): void;
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { TableModelManager };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { LifecycleHook, Logger, ModuleConfigHolder } from "@eggjs/tegg";
|
|
2
|
-
import { EggPrototype, EggPrototypeLifecycleContext } from "@eggjs/tegg-metadata";
|
|
3
|
-
|
|
4
|
-
//#region src/lib/TransactionPrototypeHook.d.ts
|
|
5
|
-
declare class TransactionPrototypeHook implements LifecycleHook<EggPrototypeLifecycleContext, EggPrototype> {
|
|
6
|
-
private readonly moduleConfigs;
|
|
7
|
-
private readonly logger;
|
|
8
|
-
constructor(moduleConfigs: Record<string, ModuleConfigHolder>, logger: Logger);
|
|
9
|
-
preCreate(ctx: EggPrototypeLifecycleContext): Promise<void>;
|
|
10
|
-
}
|
|
11
|
-
//#endregion
|
|
12
|
-
export { TransactionPrototypeHook };
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { MysqlDataSourceManager } from "./MysqlDataSourceManager-Bl5dlpX7.js";
|
|
2
|
-
import { TransactionalAOP } from "./TransactionalAOP-Bm-mjuDZ.js";
|
|
3
|
-
import "@eggjs/tegg";
|
|
4
|
-
import assert from "node:assert";
|
|
5
|
-
import "@eggjs/tegg-metadata";
|
|
6
|
-
import { PropagationType, TransactionMetaBuilder } from "@eggjs/tegg/transaction";
|
|
7
|
-
import { Pointcut } from "@eggjs/tegg/aop";
|
|
8
|
-
|
|
9
|
-
//#region src/lib/TransactionPrototypeHook.ts
|
|
10
|
-
var TransactionPrototypeHook = class {
|
|
11
|
-
moduleConfigs;
|
|
12
|
-
logger;
|
|
13
|
-
constructor(moduleConfigs, logger) {
|
|
14
|
-
this.moduleConfigs = moduleConfigs;
|
|
15
|
-
this.logger = logger;
|
|
16
|
-
}
|
|
17
|
-
async preCreate(ctx) {
|
|
18
|
-
const transactionMetadataList = new TransactionMetaBuilder(ctx.clazz).build();
|
|
19
|
-
if (transactionMetadataList.length < 1) return;
|
|
20
|
-
const moduleName = ctx.loadUnit.name;
|
|
21
|
-
for (const transactionMetadata of transactionMetadataList) {
|
|
22
|
-
const clazzName = `${moduleName}.${ctx.clazz.name}.${String(transactionMetadata.method)}`;
|
|
23
|
-
const datasourceConfigs = (this.moduleConfigs[moduleName]?.config)?.dataSource || {};
|
|
24
|
-
let datasourceName;
|
|
25
|
-
if (transactionMetadata.datasourceName) {
|
|
26
|
-
assert(datasourceConfigs[transactionMetadata.datasourceName], `method ${clazzName} specified datasource ${transactionMetadata.datasourceName} not exists`);
|
|
27
|
-
datasourceName = transactionMetadata.datasourceName;
|
|
28
|
-
this.logger.info(`use datasource [${transactionMetadata.datasourceName}] for class ${clazzName}`);
|
|
29
|
-
} else {
|
|
30
|
-
const dataSources = Object.keys(datasourceConfigs);
|
|
31
|
-
if (dataSources.length === 1) datasourceName = dataSources[0];
|
|
32
|
-
else throw new Error(`method ${clazzName} not specified datasource, module ${moduleName} has multi datasource, should specify datasource name`);
|
|
33
|
-
this.logger.info(`use default datasource ${dataSources[0]} for class ${clazzName}`);
|
|
34
|
-
}
|
|
35
|
-
const adviceParams = {
|
|
36
|
-
propagation: transactionMetadata.propagation,
|
|
37
|
-
dataSourceGetter: () => {
|
|
38
|
-
const mysqlDataSource = MysqlDataSourceManager.instance.get(moduleName, datasourceName);
|
|
39
|
-
if (!mysqlDataSource) throw new Error(`method ${clazzName} not found datasource ${datasourceName}`);
|
|
40
|
-
return mysqlDataSource;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
assert(adviceParams.propagation === PropagationType.REQUIRED, "Transactional propagation only support required for now");
|
|
44
|
-
Pointcut(TransactionalAOP, { adviceParams })(ctx.clazz.prototype, transactionMetadata.method);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
//#endregion
|
|
50
|
-
export { TransactionPrototypeHook };
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { AccessLevel, ObjectInitType } from "@eggjs/tegg";
|
|
2
|
-
import { MysqlDataSource } from "@eggjs/dal-runtime";
|
|
3
|
-
import { PropagationType } from "@eggjs/tegg/transaction";
|
|
4
|
-
import { Advice } from "@eggjs/tegg/aop";
|
|
5
|
-
|
|
6
|
-
//#region \0@oxc-project+runtime@0.93.0/helpers/decorate.js
|
|
7
|
-
function __decorate(decorators, target, key, desc) {
|
|
8
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
10
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
11
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
//#endregion
|
|
15
|
-
//#region src/lib/TransactionalAOP.ts
|
|
16
|
-
let TransactionalAOP = class TransactionalAOP$1 {
|
|
17
|
-
async around(ctx, next) {
|
|
18
|
-
const { propagation, dataSourceGetter } = ctx.adviceParams;
|
|
19
|
-
const dataSource = dataSourceGetter();
|
|
20
|
-
if (propagation === PropagationType.ALWAYS_NEW) return await dataSource.beginTransactionScope(next);
|
|
21
|
-
return await dataSource.beginTransactionScope(next);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
TransactionalAOP = __decorate([Advice({
|
|
25
|
-
accessLevel: AccessLevel.PUBLIC,
|
|
26
|
-
initType: ObjectInitType.SINGLETON
|
|
27
|
-
})], TransactionalAOP);
|
|
28
|
-
|
|
29
|
-
//#endregion
|
|
30
|
-
export { TransactionalAOP, __decorate };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { EggProtoImplClass } from "@eggjs/tegg";
|
|
2
|
-
import { MysqlDataSource } from "@eggjs/dal-runtime";
|
|
3
|
-
import { PropagationType } from "@eggjs/tegg/transaction";
|
|
4
|
-
import { AdviceContext, IAdvice } from "@eggjs/tegg/aop";
|
|
5
|
-
|
|
6
|
-
//#region src/lib/TransactionalAOP.d.ts
|
|
7
|
-
interface TransactionalParams {
|
|
8
|
-
propagation: PropagationType;
|
|
9
|
-
dataSourceGetter: () => MysqlDataSource;
|
|
10
|
-
}
|
|
11
|
-
declare class TransactionalAOP implements IAdvice<EggProtoImplClass, TransactionalParams> {
|
|
12
|
-
around(ctx: AdviceContext<EggProtoImplClass, TransactionalParams>, next: () => Promise<any>): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
//#endregion
|
|
15
|
-
export { TransactionalAOP, TransactionalParams };
|
package/dist/types-CSwhn03Z.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import "@eggjs/tegg-plugin/types";
|
package/dist/types-Ct3xXZX7.js
DELETED