@eggjs/tegg-dal-plugin 4.0.0-beta.4 → 4.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +13 -1
  2. package/dist/_virtual/_@oxc-project_runtime@0.93.0/helpers/decorate.js +10 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.93.0/helpers/decorateMetadata.js +7 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.93.0/helpers/decorateParam.js +9 -0
  5. package/dist/app.d.ts +14 -0
  6. package/dist/app.js +36 -0
  7. package/dist/index.d.ts +9 -0
  8. package/dist/index.js +11 -0
  9. package/dist/lib/DalModuleLoadUnitHook.d.ts +13 -0
  10. package/dist/lib/DalModuleLoadUnitHook.js +40 -0
  11. package/dist/lib/DalTableEggPrototypeHook.d.ts +11 -0
  12. package/dist/lib/DalTableEggPrototypeHook.js +25 -0
  13. package/dist/lib/DataSource.d.ts +12 -0
  14. package/dist/lib/DataSource.js +68 -0
  15. package/dist/lib/MysqlDataSourceManager.d.ts +15 -0
  16. package/dist/lib/MysqlDataSourceManager.js +58 -0
  17. package/dist/lib/SqlMapManager.d.ts +13 -0
  18. package/dist/lib/SqlMapManager.js +27 -0
  19. package/dist/lib/TableModelManager.d.ts +13 -0
  20. package/dist/lib/TableModelManager.js +27 -0
  21. package/dist/lib/TransactionPrototypeHook.d.ts +12 -0
  22. package/dist/lib/TransactionPrototypeHook.js +50 -0
  23. package/dist/lib/TransactionalAOP.d.ts +15 -0
  24. package/dist/lib/TransactionalAOP.js +22 -0
  25. package/dist/types.d.ts +1 -0
  26. package/dist/types.js +3 -0
  27. package/package.json +48 -38
  28. package/app.d.ts +0 -10
  29. package/app.js +0 -38
  30. package/index.d.ts +0 -10
  31. package/index.js +0 -11
  32. package/lib/DalModuleLoadUnitHook.d.ts +0 -9
  33. package/lib/DalModuleLoadUnitHook.js +0 -41
  34. package/lib/DalTableEggPrototypeHook.d.ts +0 -7
  35. package/lib/DalTableEggPrototypeHook.js +0 -21
  36. package/lib/DataSource.d.ts +0 -8
  37. package/lib/DataSource.js +0 -81
  38. package/lib/MysqlDataSourceManager.d.ts +0 -11
  39. package/lib/MysqlDataSourceManager.js +0 -55
  40. package/lib/SqlMapManager.d.ts +0 -9
  41. package/lib/SqlMapManager.js +0 -22
  42. package/lib/TableModelManager.d.ts +0 -9
  43. package/lib/TableModelManager.js +0 -22
  44. package/lib/TransactionPrototypeHook.d.ts +0 -8
  45. package/lib/TransactionPrototypeHook.js +0 -54
  46. package/lib/TransactionalAOP.d.ts +0 -11
  47. package/lib/TransactionalAOP.js +0 -27
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "eggModule": {
11
11
  "name": "teggDal"
12
12
  },
13
- "version": "4.0.0-beta.4",
13
+ "version": "4.0.0-beta.5",
14
14
  "description": "dal plugin for egg",
15
15
  "keywords": [
16
16
  "egg",
@@ -21,32 +21,24 @@
21
21
  "dal"
22
22
  ],
23
23
  "files": [
24
- "app.js",
25
- "app.d.ts",
26
- "lib/**/*.js",
27
- "lib/**/*.d.ts",
28
- "app/**/*.js",
29
- "app/**/*.d.ts",
30
- "index.js",
31
- "index.d.ts"
24
+ "dist"
32
25
  ],
33
26
  "type": "module",
34
27
  "exports": {
35
- ".": {
36
- "types": "./index.d.ts",
37
- "default": "./index.js"
38
- },
28
+ ".": "./dist/index.js",
29
+ "./app": "./dist/app.js",
30
+ "./lib/DalModuleLoadUnitHook": "./dist/lib/DalModuleLoadUnitHook.js",
31
+ "./lib/DalTableEggPrototypeHook": "./dist/lib/DalTableEggPrototypeHook.js",
32
+ "./lib/DataSource": "./dist/lib/DataSource.js",
33
+ "./lib/MysqlDataSourceManager": "./dist/lib/MysqlDataSourceManager.js",
34
+ "./lib/SqlMapManager": "./dist/lib/SqlMapManager.js",
35
+ "./lib/TableModelManager": "./dist/lib/TableModelManager.js",
36
+ "./lib/TransactionalAOP": "./dist/lib/TransactionalAOP.js",
37
+ "./lib/TransactionPrototypeHook": "./dist/lib/TransactionPrototypeHook.js",
38
+ "./types": "./dist/types.js",
39
39
  "./package.json": "./package.json"
40
40
  },
41
- "scripts": {
42
- "test": "egg-bin test",
43
- "cov": "egg-bin cov",
44
- "clean": "tsc -b --clean",
45
- "tsc": "npm run clean && tsc -p ./tsconfig.pub.json",
46
- "tsc:pub": "npm run tsc",
47
- "prepublishOnly": "npm run tsc"
48
- },
49
- "homepage": "https://github.com/eggjs/tegg",
41
+ "homepage": "https://github.com/eggjs/tegg/tree/next/plugin/dal",
50
42
  "bugs": {
51
43
  "url": "https://github.com/eggjs/tegg/issues"
52
44
  },
@@ -56,27 +48,45 @@
56
48
  "directory": "plugin/dal"
57
49
  },
58
50
  "engines": {
59
- "node": ">=20.0.0"
51
+ "node": ">=22.18.0"
60
52
  },
61
53
  "dependencies": {
62
- "@eggjs/core": "^6.4.0",
63
- "@eggjs/dal-runtime": "^4.0.0-beta.4"
54
+ "@eggjs/dal-runtime": "4.0.0-beta.5",
55
+ "@eggjs/tegg": "4.0.0-beta.5",
56
+ "@eggjs/tegg-metadata": "4.0.0-beta.5",
57
+ "@eggjs/dal-decorator": "4.0.0-beta.5"
58
+ },
59
+ "peerDependencies": {
60
+ "egg": "beta",
61
+ "@eggjs/tegg-plugin": "4.0.0-beta.5"
64
62
  },
65
63
  "devDependencies": {
66
- "@eggjs/mock": "6",
67
- "@eggjs/tegg-aop-plugin": "^4.0.0-beta.4",
68
- "@eggjs/tegg-config": "^4.0.0-beta.4",
69
- "@eggjs/tegg-plugin": "^4.0.0-beta.4",
70
- "@eggjs/tracer": "3",
71
- "@types/mocha": "10",
72
- "@types/node": "22",
73
- "egg": "4",
74
- "globby": "14",
75
- "ts-node": "10",
76
- "typescript": "5"
64
+ "@eggjs/bin": "beta",
65
+ "@eggjs/mock": "beta",
66
+ "@eggjs/tracer": "beta",
67
+ "@types/node": "^22.10.5",
68
+ "@types/mocha": "^10.0.10",
69
+ "egg": "beta",
70
+ "globby": "^14.1.0",
71
+ "mocha": "^11.0.1",
72
+ "typescript": "^5.9.3",
73
+ "tsdown": "^0.15.6",
74
+ "unplugin-unused": "^0.5.3",
75
+ "@eggjs/tegg-aop-plugin": "4.0.0-beta.5",
76
+ "@eggjs/tegg-plugin": "4.0.0-beta.5",
77
+ "@eggjs/tegg-config": "4.0.0-beta.5"
77
78
  },
78
79
  "publishConfig": {
79
80
  "access": "public"
80
81
  },
81
- "gitHead": "9ba90bed3ab9f641ceaa6a7db560095817b7e52c"
82
- }
82
+ "main": "./dist/index.js",
83
+ "module": "./dist/index.js",
84
+ "types": "./dist/index.d.ts",
85
+ "scripts": {
86
+ "test:mocha": "egg-bin test",
87
+ "cov:mocha": "egg-bin cov",
88
+ "clean": "rimraf dist",
89
+ "build": "tsdown",
90
+ "typecheck": "tsc --noEmit"
91
+ }
92
+ }
package/app.d.ts DELETED
@@ -1,10 +0,0 @@
1
- import { EggCore as Application, ILifecycleBoot } from '@eggjs/core';
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>;
10
- }
package/app.js DELETED
@@ -1,38 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU3RSxNQUFNLENBQUMsT0FBTyxPQUFPLGNBQWM7SUFDaEIsR0FBRyxDQUFjO0lBQzFCLHdCQUF3QixDQUEyQjtJQUNuRCxxQkFBcUIsQ0FBd0I7SUFDN0Msd0JBQXdCLENBQTJCO0lBRTNELFlBQVksR0FBZ0I7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0Qsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7Q0FDRiJ9
package/index.d.ts DELETED
@@ -1,10 +0,0 @@
1
- import '@eggjs/tegg-config';
2
- import '@eggjs/tegg-plugin';
3
- export * from './lib/DalModuleLoadUnitHook.js';
4
- export * from './lib/DalTableEggPrototypeHook.js';
5
- export * from './lib/DataSource.js';
6
- export * from './lib/MysqlDataSourceManager.js';
7
- export * from './lib/SqlMapManager.js';
8
- export * from './lib/TableModelManager.js';
9
- export * from './lib/TransactionalAOP.js';
10
- export * from './lib/TransactionPrototypeHook.js';
package/index.js DELETED
@@ -1,11 +0,0 @@
1
- import '@eggjs/tegg-config';
2
- import '@eggjs/tegg-plugin';
3
- export * from './lib/DalModuleLoadUnitHook.js';
4
- export * from './lib/DalTableEggPrototypeHook.js';
5
- export * from './lib/DataSource.js';
6
- export * from './lib/MysqlDataSourceManager.js';
7
- export * from './lib/SqlMapManager.js';
8
- export * from './lib/TableModelManager.js';
9
- export * from './lib/TransactionalAOP.js';
10
- export * from './lib/TransactionPrototypeHook.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sb0JBQW9CLENBQUM7QUFFNUIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG1DQUFtQyxDQUFDIn0=
@@ -1,9 +0,0 @@
1
- import { LifecycleHook, Logger, ModuleConfigHolder } from '@eggjs/tegg';
2
- import { LoadUnit, 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,41 +0,0 @@
1
- import { DatabaseForker } from '@eggjs/dal-runtime';
2
- import { MysqlDataSourceManager } from './MysqlDataSourceManager.js';
3
- export class DalModuleLoadUnitHook {
4
- moduleConfigs;
5
- env;
6
- logger;
7
- constructor(env, moduleConfigs, logger) {
8
- this.env = env;
9
- this.moduleConfigs = moduleConfigs;
10
- this.logger = logger;
11
- }
12
- async preCreate(_, loadUnit) {
13
- const moduleConfigHolder = this.moduleConfigs[loadUnit.name];
14
- if (!moduleConfigHolder)
15
- return;
16
- const dataSourceConfig = moduleConfigHolder.config.dataSource;
17
- if (!dataSourceConfig)
18
- return;
19
- await Promise.all(Object.entries(dataSourceConfig).map(async ([name, config]) => {
20
- const dataSourceOptions = {
21
- ...config,
22
- name,
23
- logger: this.logger,
24
- };
25
- const forker = new DatabaseForker(this.env, dataSourceOptions);
26
- if (forker.shouldFork()) {
27
- await forker.forkDb(loadUnit.unitPath);
28
- }
29
- try {
30
- await MysqlDataSourceManager.instance.createDataSource(loadUnit.name, name, dataSourceOptions);
31
- }
32
- catch (e) {
33
- if (e instanceof Error) {
34
- e.message = `create module ${loadUnit.name} datasource ${name} failed: ${e.message}`;
35
- }
36
- throw e;
37
- }
38
- }));
39
- }
40
- }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGFsTW9kdWxlTG9hZFVuaXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRGFsTW9kdWxlTG9hZFVuaXRIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sb0JBQW9CLENBQUM7QUFFdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFckUsTUFBTSxPQUFPLHFCQUFxQjtJQUNmLGFBQWEsQ0FBcUM7SUFDbEQsR0FBRyxDQUFTO0lBQ1osTUFBTSxDQUFVO0lBRWpDLFlBQVksR0FBVyxFQUFFLGFBQWlELEVBQUUsTUFBZTtRQUN6RixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQTJCLEVBQUUsUUFBa0I7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCO1lBQUUsT0FBTztRQUNoQyxNQUFNLGdCQUFnQixHQUFtRCxrQkFBa0IsQ0FBQyxNQUFjLENBQUMsVUFBVSxDQUFDO1FBQ3RILElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBQzlCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFFLElBQUksRUFBRSxNQUFNLENBQUUsRUFBRSxFQUFFO1lBQ2hGLE1BQU0saUJBQWlCLEdBQUc7Z0JBQ3hCLEdBQUcsTUFBTTtnQkFDVCxJQUFJO2dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9ELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELElBQUksQ0FBQztnQkFDSCxNQUFNLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pHLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO29CQUN2QixDQUFDLENBQUMsT0FBTyxHQUFHLGlCQUFpQixRQUFRLENBQUMsSUFBSSxlQUFlLElBQUksWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZGLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDRiJ9
@@ -1,7 +0,0 @@
1
- import { Logger, LifecycleHook } from '@eggjs/tegg';
2
- import { EggPrototype, 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,21 +0,0 @@
1
- import { DaoInfoUtil, TableModel } from '@eggjs/dal-decorator';
2
- import { SqlMapLoader } from '@eggjs/dal-runtime';
3
- import { TableModelManager } from './TableModelManager.js';
4
- import { SqlMapManager } from './SqlMapManager.js';
5
- export class DalTableEggPrototypeHook {
6
- logger;
7
- constructor(logger) {
8
- this.logger = logger;
9
- }
10
- async preCreate(ctx) {
11
- if (!DaoInfoUtil.getIsDao(ctx.clazz))
12
- return;
13
- const tableClazz = ctx.clazz.clazzModel;
14
- const tableModel = TableModel.build(tableClazz);
15
- TableModelManager.instance.set(ctx.loadUnit.name, tableModel);
16
- const loader = new SqlMapLoader(tableModel, ctx.clazz, this.logger);
17
- const sqlMap = loader.load();
18
- SqlMapManager.instance.set(ctx.loadUnit.name, sqlMap);
19
- }
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGFsVGFibGVFZ2dQcm90b3R5cGVIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRGFsVGFibGVFZ2dQcm90b3R5cGVIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLE1BQU0sQ0FBUztJQUVoQyxZQUFZLE1BQWM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBaUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDN0MsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQXVCLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiJ9
@@ -1,8 +0,0 @@
1
- import { ObjectInfo } from '@eggjs/tegg';
2
- import { DataSource } from '@eggjs/dal-runtime';
3
- import { TransactionalAOP } from './TransactionalAOP.js';
4
- export declare class DataSourceDelegate<T> extends DataSource<T> {
5
- private transactionalAOP;
6
- objInfo: ObjectInfo;
7
- constructor(transactionalAOP: TransactionalAOP, objInfo: ObjectInfo);
8
- }
package/lib/DataSource.js DELETED
@@ -1,81 +0,0 @@
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, } 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
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
24
- // @ts-ignore
25
- transactionalAOP;
26
- objInfo;
27
- constructor(transactionalAOP, objInfo) {
28
- const dataSourceQualifierValue = objInfo.qualifiers.find(t => t.attribute === DataSourceQualifierAttribute)?.value;
29
- assert(dataSourceQualifierValue);
30
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
- const [moduleName, dataSource, clazzName] = dataSourceQualifierValue.split('.');
32
- const tableModel = TableModelManager.instance.get(moduleName, clazzName);
33
- assert(tableModel, `not found table ${dataSourceQualifierValue}`);
34
- const mysqlDataSource = MysqlDataSourceManager.instance.get(moduleName, dataSource);
35
- assert(mysqlDataSource, `not found dataSource ${dataSource} in module ${moduleName}`);
36
- const sqlMap = SqlMapManager.instance.get(moduleName, clazzName);
37
- assert(sqlMap, `not found SqlMap ${clazzName} in module ${moduleName}`);
38
- super(tableModel, mysqlDataSource, sqlMap);
39
- this.transactionalAOP = transactionalAOP;
40
- this.objInfo = objInfo;
41
- }
42
- };
43
- DataSourceDelegate = __decorate([
44
- MultiInstanceProto({
45
- accessLevel: AccessLevel.PUBLIC,
46
- initType: ObjectInitType.SINGLETON,
47
- async getObjects(ctx) {
48
- const config = ModuleConfigUtil.loadModuleConfigSync(ctx.unitPath);
49
- const dataSources = Object.keys(config?.dataSource || {});
50
- const result = [];
51
- const loader = LoaderFactory.createLoader(ctx.unitPath, EggLoadUnitType.MODULE);
52
- const clazzList = await loader.load();
53
- const tableClazzList = clazzList.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 tableParams = TableInfoUtil.getTableParams(clazz);
60
- const dataSourceName = tableParams?.dataSourceName ?? 'default';
61
- return dataSourceLength === 1 || dataSourceName === dataSource;
62
- });
63
- for (const clazz of moduleClazzList) {
64
- result.push({
65
- name: DataSourceInjectName,
66
- qualifiers: [{
67
- attribute: DataSourceQualifierAttribute,
68
- value: `${ctx.moduleName}.${dataSource}.${clazz.name}`,
69
- }],
70
- });
71
- }
72
- }
73
- return result;
74
- },
75
- }),
76
- __param(0, Inject({ name: 'transactionalAOP' })),
77
- __param(1, MultiInstanceInfo([DataSourceQualifierAttribute, LoadUnitNameQualifierAttribute])),
78
- __metadata("design:paramtypes", [TransactionalAOP, Object])
79
- ], DataSourceDelegate);
80
- export { DataSourceDelegate };
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkRhdGFTb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFDTCxXQUFXLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixFQUNuRCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBR2xCLGNBQWMsR0FDZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixnQkFBZ0IsR0FDakIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1QixhQUFhLEdBRWQsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBa0NsRCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFzQixTQUFRLFVBQWE7SUFDdEQsNkRBQTZEO0lBQzdELGFBQWE7SUFDTCxnQkFBZ0IsQ0FBbUI7SUFDM0MsT0FBTyxDQUFhO0lBRXBCLFlBQ3dDLGdCQUFrQyxFQUNhLE9BQW1CO1FBQ3hHLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLDRCQUE0QixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ25ILE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2pDLDZEQUE2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
@@ -1,11 +0,0 @@
1
- import { 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,55 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxEYXRhU291cmNlTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIk15c3FsRGF0YVNvdXJjZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBcUIsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEUsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztJQUU5QixpQkFBaUIsQ0FBNEY7SUFDN0csV0FBVyxDQUFvRDtJQUVoRjtRQUNFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsR0FBRyxDQUFDLFVBQWtCLEVBQUUsY0FBc0I7UUFDNUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDNUQsRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEIsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsY0FBc0IsRUFBRSxNQUF5QjtRQUMxRixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLHVCQUF1QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDN0IsdUJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRW5ELE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsaUJBQW9DO1FBQzdELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzthQUN4QyxJQUFJLEVBQUUsQ0FBQztRQUNWLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsR0FBOEIsQ0FBQyxDQUFDO1lBQ2hFLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDIn0=
@@ -1,9 +0,0 @@
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,22 +0,0 @@
1
- export class SqlMapManager {
2
- static instance = new SqlMapManager();
3
- sqlMaps;
4
- constructor() {
5
- this.sqlMaps = new Map();
6
- }
7
- get(moduleName, clazzName) {
8
- return this.sqlMaps.get(moduleName)?.get(clazzName);
9
- }
10
- set(moduleName, sqlMap) {
11
- let tables = this.sqlMaps.get(moduleName);
12
- if (!tables) {
13
- tables = new Map();
14
- this.sqlMaps.set(moduleName, tables);
15
- }
16
- tables.set(sqlMap.name, sqlMap);
17
- }
18
- clear() {
19
- this.sqlMaps.clear();
20
- }
21
- }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsTWFwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlNxbE1hcE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGFBQWE7SUFDeEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBRTlCLE9BQU8sQ0FBd0Q7SUFFdkU7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxVQUFrQixFQUFFLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxHQUFHLENBQUMsVUFBa0IsRUFBRSxNQUFtQjtRQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQyJ9
@@ -1,9 +0,0 @@
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,22 +0,0 @@
1
- export class TableModelManager {
2
- static instance = new TableModelManager();
3
- tableModels;
4
- constructor() {
5
- this.tableModels = new Map();
6
- }
7
- get(moduleName, clazzName) {
8
- return this.tableModels.get(moduleName)?.get(clazzName);
9
- }
10
- set(moduleName, tableModel) {
11
- let tables = this.tableModels.get(moduleName);
12
- if (!tables) {
13
- tables = new Map();
14
- this.tableModels.set(moduleName, tables);
15
- }
16
- tables.set(tableModel.clazz.name, tableModel);
17
- }
18
- clear() {
19
- this.tableModels.clear();
20
- }
21
- }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGVNb2RlbE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJUYWJsZU1vZGVsTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBRWxDLFdBQVcsQ0FBdUQ7SUFFMUU7UUFDRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxVQUFrQixFQUFFLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxHQUFHLENBQUMsVUFBa0IsRUFBRSxVQUFzQjtRQUM1QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUMifQ==
@@ -1,8 +0,0 @@
1
- import { LifecycleHook, ModuleConfigHolder, Logger } from '@eggjs/tegg';
2
- import { EggPrototype, 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,54 +0,0 @@
1
- import assert from 'node:assert';
2
- import { PropagationType, TransactionMetaBuilder } from '@eggjs/tegg/transaction';
3
- import { Pointcut } from '@eggjs/tegg/aop';
4
- import { TransactionalAOP } from './TransactionalAOP.js';
5
- import { MysqlDataSourceManager } from './MysqlDataSourceManager.js';
6
- export class TransactionPrototypeHook {
7
- moduleConfigs;
8
- logger;
9
- constructor(moduleConfigs, logger) {
10
- this.moduleConfigs = moduleConfigs;
11
- this.logger = logger;
12
- }
13
- async preCreate(ctx) {
14
- const builder = new TransactionMetaBuilder(ctx.clazz);
15
- const transactionMetadataList = builder.build();
16
- if (transactionMetadataList.length < 1) {
17
- return;
18
- }
19
- const moduleName = ctx.loadUnit.name;
20
- for (const transactionMetadata of transactionMetadataList) {
21
- const clazzName = `${moduleName}.${ctx.clazz.name}.${String(transactionMetadata.method)}`;
22
- const datasourceConfigs = this.moduleConfigs[moduleName]?.config?.dataSource || {};
23
- let datasourceName;
24
- if (transactionMetadata.datasourceName) {
25
- assert(datasourceConfigs[transactionMetadata.datasourceName], `method ${clazzName} specified datasource ${transactionMetadata.datasourceName} not exists`);
26
- datasourceName = transactionMetadata.datasourceName;
27
- this.logger.info(`use datasource [${transactionMetadata.datasourceName}] for class ${clazzName}`);
28
- }
29
- else {
30
- const dataSources = Object.keys(datasourceConfigs);
31
- if (dataSources.length === 1) {
32
- datasourceName = dataSources[0];
33
- }
34
- else {
35
- throw new Error(`method ${clazzName} not specified datasource, module ${moduleName} has multi datasource, should specify datasource name`);
36
- }
37
- this.logger.info(`use default datasource ${dataSources[0]} for class ${clazzName}`);
38
- }
39
- const adviceParams = {
40
- propagation: transactionMetadata.propagation,
41
- dataSourceGetter: () => {
42
- const mysqlDataSource = MysqlDataSourceManager.instance.get(moduleName, datasourceName);
43
- if (!mysqlDataSource) {
44
- throw new Error(`method ${clazzName} not found datasource ${datasourceName}`);
45
- }
46
- return mysqlDataSource;
47
- },
48
- };
49
- assert(adviceParams.propagation === PropagationType.REQUIRED, 'Transactional propagation only support required for now');
50
- Pointcut(TransactionalAOP, { adviceParams })(ctx.clazz.prototype, transactionMetadata.method);
51
- }
52
- }
53
- }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25Qcm90b3R5cGVIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiVHJhbnNhY3Rpb25Qcm90b3R5cGVIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUdqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLGFBQWEsQ0FBcUM7SUFDbEQsTUFBTSxDQUFTO0lBRWhDLFlBQVksYUFBaUQsRUFBRSxNQUFjO1FBQzNFLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQWlDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELElBQUksdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDckMsS0FBSyxNQUFNLG1CQUFtQixJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDMUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxVQUFVLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUYsTUFBTSxpQkFBaUIsR0FBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQWMsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO1lBRTVGLElBQUksY0FBc0IsQ0FBQztZQUMzQixJQUFJLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEVBQUUsVUFBVSxTQUFTLHlCQUF5QixtQkFBbUIsQ0FBQyxjQUFjLGFBQWEsQ0FBQyxDQUFDO2dCQUMzSixjQUFjLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsbUJBQW1CLENBQUMsY0FBYyxlQUFlLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDcEcsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM3QixjQUFjLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLFNBQVMscUNBQXFDLFVBQVUsdURBQXVELENBQUMsQ0FBQztnQkFDN0ksQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUF3QjtnQkFDeEMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVc7Z0JBQzVDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtvQkFDckIsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7b0JBQ3hGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLFNBQVMseUJBQXlCLGNBQWMsRUFBRSxDQUFDLENBQUM7b0JBQ2hGLENBQUM7b0JBQ0QsT0FBTyxlQUFlLENBQUM7Z0JBQ3pCLENBQUM7YUFDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSx5REFBeUQsQ0FBQyxDQUFDO1lBQ3pILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUUsR0FBRyxDQUFDLEtBQWEsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekcsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
@@ -1,11 +0,0 @@
1
- import { AdviceContext, IAdvice } from '@eggjs/tegg/aop';
2
- import { 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,27 +0,0 @@
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
- let TransactionalAOP = class TransactionalAOP {
11
- async around(ctx, next) {
12
- const { propagation, dataSourceGetter } = ctx.adviceParams;
13
- const dataSource = dataSourceGetter();
14
- if (propagation === PropagationType.ALWAYS_NEW) {
15
- return await dataSource.beginTransactionScope(next);
16
- }
17
- return await dataSource.beginTransactionScope(next);
18
- }
19
- };
20
- TransactionalAOP = __decorate([
21
- Advice({
22
- accessLevel: AccessLevel.PUBLIC,
23
- initType: ObjectInitType.SINGLETON,
24
- })
25
- ], TransactionalAOP);
26
- export { TransactionalAOP };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25hbEFPUC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlRyYW5zYWN0aW9uYWxBT1AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFxQixjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBWW5ELElBQU0sZ0JBQWdCLEdBQXRCLE1BQU0sZ0JBQWdCO0lBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBMEQsRUFBRSxJQUF3QjtRQUN0RyxNQUFNLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsR0FBRyxDQUFDLFlBQWEsQ0FBQztRQUM1RCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksV0FBVyxLQUFLLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxPQUFPLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRixDQUFBO0FBVFksZ0JBQWdCO0lBSjVCLE1BQU0sQ0FBQztRQUNOLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMvQixRQUFRLEVBQUUsY0FBYyxDQUFDLFNBQVM7S0FDbkMsQ0FBQztHQUNXLGdCQUFnQixDQVM1QiJ9