@eggjs/tegg-orm-plugin 4.0.0-beta.1 → 4.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +12 -0
  2. package/{app.d.ts → dist/app.d.ts} +9 -1
  3. package/dist/app.js +46 -0
  4. package/dist/config/config.default.d.ts +16 -0
  5. package/dist/config/config.default.js +4 -0
  6. package/dist/index.d.ts +4 -0
  7. package/dist/index.js +5 -0
  8. package/{lib → dist/lib}/DataSourceManager.d.ts +2 -0
  9. package/dist/lib/DataSourceManager.js +21 -0
  10. package/{lib → dist/lib}/LeoricRegister.d.ts +4 -4
  11. package/dist/lib/LeoricRegister.js +82 -0
  12. package/{lib → dist/lib}/ModelProtoHook.d.ts +3 -3
  13. package/dist/lib/ModelProtoHook.js +19 -0
  14. package/{lib → dist/lib}/ModelProtoManager.d.ts +2 -2
  15. package/dist/lib/ModelProtoManager.js +14 -0
  16. package/{lib → dist/lib}/ORMLoadUnitHook.d.ts +2 -2
  17. package/dist/lib/ORMLoadUnitHook.js +19 -0
  18. package/{lib → dist/lib}/SingletonModelObject.d.ts +6 -6
  19. package/dist/lib/SingletonModelObject.js +47 -0
  20. package/{lib → dist/lib}/SingletonModelProto.d.ts +5 -5
  21. package/dist/lib/SingletonModelProto.js +40 -0
  22. package/{lib → dist/lib}/SingletonORM.d.ts +1 -1
  23. package/{lib → dist/lib}/SingletonORM.js +2 -2
  24. package/{lib → dist/lib}/types.d.ts +1 -1
  25. package/{lib → dist/lib}/types.js +1 -1
  26. package/dist/types.d.ts +7 -0
  27. package/dist/types.js +4 -0
  28. package/package.json +54 -49
  29. package/app.js +0 -44
  30. package/index.d.ts +0 -20
  31. package/index.js +0 -2
  32. package/lib/DataSourceManager.js +0 -21
  33. package/lib/LeoricRegister.js +0 -80
  34. package/lib/ModelProtoHook.js +0 -16
  35. package/lib/ModelProtoManager.js +0 -12
  36. package/lib/ORMLoadUnitHook.js +0 -18
  37. package/lib/SingletonModelObject.js +0 -46
  38. package/lib/SingletonModelProto.js +0 -40
package/README.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @eggjs/tegg-orm-plugin
2
2
 
3
+ [![NPM version][npm-image]][npm-url]
4
+ [![Known Vulnerabilities][snyk-image]][snyk-url]
5
+ [![npm download][download-image]][download-url]
6
+ [![Node.js Version](https://img.shields.io/node/v/@eggjs/tegg-orm-plugin.svg?style=flat)](https://nodejs.org/en/download/)
7
+
8
+ [npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-orm-plugin.svg?style=flat-square
9
+ [npm-url]: https://npmjs.org/package/@eggjs/tegg-orm-plugin
10
+ [snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-orm-plugin/badge.svg?style=flat-square
11
+ [snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-orm-plugin
12
+ [download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-orm-plugin.svg?style=flat-square
13
+ [download-url]: https://npmjs.org/package/@eggjs/tegg-orm-plugin
14
+
3
15
  使用注解的方式来开发 egg 中的 orm
4
16
 
5
17
  ## Install
@@ -1,4 +1,6 @@
1
- import { EggCore as Application } from '@eggjs/core';
1
+ import { Application } from 'egg';
2
+ import { Orm } from './lib/SingletonORM.ts';
3
+ import { LeoricRegister } from './lib/LeoricRegister.ts';
2
4
  export default class OrmAppBootHook {
3
5
  private readonly app;
4
6
  private readonly dataSourceManager;
@@ -12,3 +14,9 @@ export default class OrmAppBootHook {
12
14
  didLoad(): Promise<void>;
13
15
  beforeClose(): Promise<void>;
14
16
  }
17
+ declare module 'egg' {
18
+ interface Application {
19
+ leoricRegister: LeoricRegister;
20
+ orm: Orm;
21
+ }
22
+ }
package/dist/app.js ADDED
@@ -0,0 +1,46 @@
1
+ import { Application } from 'egg';
2
+ import { MODEL_PROTO_IMPL_TYPE } from '@eggjs/tegg-orm-decorator';
3
+ import { Orm } from "./lib/SingletonORM.js";
4
+ import { DataSourceManager } from "./lib/DataSourceManager.js";
5
+ import { LeoricRegister } from "./lib/LeoricRegister.js";
6
+ import { ModelProtoManager } from "./lib/ModelProtoManager.js";
7
+ import { ModelProtoHook } from "./lib/ModelProtoHook.js";
8
+ import SingletonModelProto from "./lib/SingletonModelProto.js";
9
+ import { SingletonModelObject } from "./lib/SingletonModelObject.js";
10
+ import { ORMLoadUnitHook } from "./lib/ORMLoadUnitHook.js";
11
+ export default class OrmAppBootHook {
12
+ constructor(app) {
13
+ this.app = app;
14
+ this.dataSourceManager = new DataSourceManager();
15
+ this.modelProtoManager = new ModelProtoManager();
16
+ this.leoricRegister = new LeoricRegister(this.modelProtoManager, this.dataSourceManager);
17
+ this.modelProtoHook = new ModelProtoHook(this.modelProtoManager);
18
+ this.app.eggPrototypeCreatorFactory.registerPrototypeCreator(MODEL_PROTO_IMPL_TYPE, SingletonModelProto.createProto);
19
+ this.app.leoricRegister = this.leoricRegister;
20
+ this.ormLoadUnitHook = new ORMLoadUnitHook();
21
+ }
22
+ configWillLoad() {
23
+ this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.modelProtoHook);
24
+ this.app.eggObjectFactory.registerEggObjectCreateMethod(SingletonModelProto, SingletonModelObject.createObject);
25
+ this.app.loadUnitLifecycleUtil.registerLifecycle(this.ormLoadUnitHook);
26
+ }
27
+ configDidLoad() {
28
+ const config = this.app.config.orm;
29
+ if (config.datasources) {
30
+ for (const datasource of config.datasources) {
31
+ this.dataSourceManager.addConfig(datasource);
32
+ }
33
+ }
34
+ else {
35
+ this.dataSourceManager.addDefaultConfig(config);
36
+ }
37
+ }
38
+ async didLoad() {
39
+ await this.app.moduleHandler.ready();
40
+ await this.leoricRegister.register();
41
+ }
42
+ async beforeClose() {
43
+ this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.modelProtoHook);
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sbUJBQW1CLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQVFqQyxZQUFZLEdBQWdCO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQyxxQkFBcUIsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNySCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsbUJBQW1CLEVBQUUsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDbkMsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkIsS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVc7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUNGIn0=
@@ -0,0 +1,16 @@
1
+ import type { OrmConfig } from '../lib/DataSourceManager.ts';
2
+ export interface AppOrmConfig extends OrmConfig {
3
+ datasources?: OrmConfig[];
4
+ }
5
+ declare const _default: {
6
+ orm: AppOrmConfig;
7
+ };
8
+ export default _default;
9
+ declare module 'egg' {
10
+ interface EggAppConfig {
11
+ /**
12
+ * orm config
13
+ */
14
+ orm: AppOrmConfig;
15
+ }
16
+ }
@@ -0,0 +1,4 @@
1
+ export default {
2
+ orm: {},
3
+ };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLGVBQWU7SUFDYixHQUFHLEVBQUUsRUFBa0I7Q0FDeEIsQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ import './types.ts';
2
+ import { LeoricRegister } from './lib/LeoricRegister.ts';
3
+ import { Orm } from './lib/SingletonORM.ts';
4
+ export { Orm, LeoricRegister };
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ import "./types.js";
2
+ import { LeoricRegister } from "./lib/LeoricRegister.js";
3
+ import { Orm } from "./lib/SingletonORM.js";
4
+ export { Orm, LeoricRegister };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUM7QUFFcEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDIn0=
@@ -6,6 +6,8 @@ export interface OrmConfig {
6
6
  user: string;
7
7
  define: object;
8
8
  options: object;
9
+ charset: string;
10
+ [key: string]: any;
9
11
  }
10
12
  export declare class DataSourceManager {
11
13
  private readonly dataSourceConfigs;
@@ -0,0 +1,21 @@
1
+ export class DataSourceManager {
2
+ constructor() {
3
+ this.dataSourceConfigs = [];
4
+ }
5
+ addDefaultConfig(config) {
6
+ this.defaultDataSourceConfig = config;
7
+ }
8
+ getDefaultConfig() {
9
+ return this.defaultDataSourceConfig;
10
+ }
11
+ addConfig(config) {
12
+ this.dataSourceConfigs.push(config);
13
+ }
14
+ getConfig(name) {
15
+ if (this.defaultDataSourceConfig?.database === name) {
16
+ return this.defaultDataSourceConfig;
17
+ }
18
+ return this.dataSourceConfigs.find(t => t.database === name);
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0RhdGFTb3VyY2VNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQThCQSxNQUFNLE9BQU8saUJBQWlCO0lBSTVCO1FBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBaUI7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFpQjtRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGIn0=
@@ -1,14 +1,14 @@
1
1
  import { Base } from 'sdk-base';
2
2
  import { ModelMetadata } from '@eggjs/tegg-orm-decorator';
3
- import { ModelProtoManager } from './ModelProtoManager.js';
4
- import { DataSourceManager, OrmConfig } from './DataSourceManager.js';
5
- import type { RealmType } from './types.js';
3
+ import { ModelProtoManager } from './ModelProtoManager.ts';
4
+ import { DataSourceManager, type OrmConfig } from './DataSourceManager.ts';
5
+ import type { RealmType } from './types.ts';
6
6
  export declare class LeoricRegister extends Base {
7
7
  private readonly modelProtoManager;
8
8
  private readonly dataSourceManager;
9
9
  readonly realmMap: Map<string, RealmType>;
10
10
  constructor(modelProtoManager: ModelProtoManager, dataSourceManager: DataSourceManager);
11
- getConfig(datasource?: string): OrmConfig | undefined;
11
+ getConfig(datasource?: string): OrmConfig;
12
12
  getRealm(config: OrmConfig | undefined): RealmType | undefined;
13
13
  getOrCreateRealm(datasource: string | undefined): any;
14
14
  generateLeoricAttributes(metadata: ModelMetadata): Record<string, any>;
@@ -0,0 +1,82 @@
1
+ import { Base } from 'sdk-base';
2
+ import Realm from 'leoric';
3
+ import { ModelMetadata, ModelMetadataUtil } from '@eggjs/tegg-orm-decorator';
4
+ import { ModelProtoManager } from "./ModelProtoManager.js";
5
+ import { DataSourceManager } from "./DataSourceManager.js";
6
+ export class LeoricRegister extends Base {
7
+ constructor(modelProtoManager, dataSourceManager) {
8
+ super();
9
+ this.modelProtoManager = modelProtoManager;
10
+ this.dataSourceManager = dataSourceManager;
11
+ this.realmMap = new Map();
12
+ }
13
+ getConfig(datasource) {
14
+ let config;
15
+ if (!datasource) {
16
+ config = this.dataSourceManager.getDefaultConfig();
17
+ }
18
+ else {
19
+ config = this.dataSourceManager.getConfig(datasource);
20
+ }
21
+ return config;
22
+ }
23
+ getRealm(config) {
24
+ if (!config?.database) {
25
+ return undefined;
26
+ }
27
+ const realm = this.realmMap.get(config.database);
28
+ return realm;
29
+ }
30
+ getOrCreateRealm(datasource) {
31
+ const config = this.getConfig(datasource);
32
+ let realm;
33
+ if (config) {
34
+ realm = this.getRealm(config);
35
+ if (realm) {
36
+ return realm;
37
+ }
38
+ }
39
+ realm = new Realm({ ...config });
40
+ this.realmMap.set(config.database, realm);
41
+ return realm;
42
+ }
43
+ generateLeoricAttributes(metadata) {
44
+ const attributes = {};
45
+ for (const attribute of metadata.attributes) {
46
+ attributes[attribute.propertyName] = {
47
+ columnName: attribute.attributeName,
48
+ type: attribute.dataType,
49
+ allowNull: attribute.allowNull,
50
+ primaryKey: attribute.primary,
51
+ unique: attribute.unique,
52
+ autoIncrement: attribute.autoIncrement,
53
+ };
54
+ }
55
+ return attributes;
56
+ }
57
+ async register() {
58
+ for (const { proto, clazz } of this.modelProtoManager.getProtos()) {
59
+ const metadata = ModelMetadataUtil.getModelMetadata(clazz);
60
+ if (!metadata)
61
+ throw new Error(`not found metadata for model ${proto.id}`);
62
+ const realm = this.getOrCreateRealm(metadata.dataSource);
63
+ realm.models[clazz.name] = clazz;
64
+ realm[clazz.name] = clazz;
65
+ const attributes = this.generateLeoricAttributes(metadata);
66
+ const hooks = {};
67
+ for (const hookName of Realm.hookNames) {
68
+ if (clazz[hookName]) {
69
+ hooks[hookName] = clazz[hookName];
70
+ }
71
+ }
72
+ clazz.init(attributes, {
73
+ tableName: metadata.tableName,
74
+ hooks,
75
+ }, {});
76
+ }
77
+ await Promise.all(Array.from(this.realmMap.values())
78
+ .map(realm => realm.connect()));
79
+ this.ready(true);
80
+ }
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVvcmljUmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL0xlb3JpY1JlZ2lzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFHM0UsTUFBTSxPQUFPLGNBQWUsU0FBUSxJQUFJO0lBS3RDLFlBQVksaUJBQW9DLEVBQUUsaUJBQW9DO1FBQ3BGLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxVQUFtQjtRQUMzQixJQUFJLE1BQTZCLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQTZCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDdEIsT0FBTyxTQUFTLENBQUM7UUFD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
@@ -1,6 +1,6 @@
1
- import { LifecycleHook } from '@eggjs/tegg';
2
- import { EggPrototype, EggPrototypeLifecycleContext } from '@eggjs/tegg-metadata';
3
- import { ModelProtoManager } from './ModelProtoManager.js';
1
+ import { type LifecycleHook } from '@eggjs/tegg';
2
+ import { type EggPrototype, type EggPrototypeLifecycleContext } from '@eggjs/tegg-metadata';
3
+ import { ModelProtoManager } from './ModelProtoManager.ts';
4
4
  export declare class ModelProtoHook implements LifecycleHook<EggPrototypeLifecycleContext, EggPrototype> {
5
5
  private readonly modelProtoManager;
6
6
  constructor(modelProtoManager: ModelProtoManager);
@@ -0,0 +1,19 @@
1
+ import {} from '@eggjs/tegg';
2
+ import {} from '@eggjs/tegg-metadata';
3
+ import { IS_MODEL, ModelMetaBuilder, ModelMetadataUtil } from '@eggjs/tegg-orm-decorator';
4
+ import { ModelProtoManager } from "./ModelProtoManager.js";
5
+ export class ModelProtoHook {
6
+ constructor(modelProtoManager) {
7
+ this.modelProtoManager = modelProtoManager;
8
+ }
9
+ async postCreate(ctx, obj) {
10
+ if (!obj.getMetaData(IS_MODEL)) {
11
+ return;
12
+ }
13
+ const builder = new ModelMetaBuilder(ctx.clazz);
14
+ const metadata = builder.build();
15
+ ModelMetadataUtil.setModelMetadata(ctx.clazz, metadata);
16
+ this.modelProtoManager.addProto(ctx.clazz, obj);
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxQcm90b0hvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL01vZGVsUHJvdG9Ib29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUF3RCxNQUFNLHNCQUFzQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxNQUFNLE9BQU8sY0FBYztJQUd6QixZQUFZLGlCQUFvQztRQUM5QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBaUMsRUFBRSxHQUFpQjtRQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRiJ9
@@ -1,5 +1,5 @@
1
- import { EggPrototype } from '@eggjs/tegg-metadata';
2
- import { EggProtoImplClass } from '@eggjs/tegg';
1
+ import { type EggPrototype } from '@eggjs/tegg-metadata';
2
+ import { type EggProtoImplClass } from '@eggjs/tegg';
3
3
  export interface ModelProtoPair {
4
4
  proto: EggPrototype;
5
5
  clazz: EggProtoImplClass;
@@ -0,0 +1,14 @@
1
+ import {} from '@eggjs/tegg-metadata';
2
+ import {} from '@eggjs/tegg';
3
+ export class ModelProtoManager {
4
+ constructor() {
5
+ this.protos = [];
6
+ }
7
+ addProto(clazz, proto) {
8
+ this.protos.push({ proto, clazz });
9
+ }
10
+ getProtos() {
11
+ return this.protos.slice();
12
+ }
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxQcm90b01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL01vZGVsUHJvdG9NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBT3JELE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFDbUIsV0FBTSxHQUEwQixFQUFFLENBQUM7SUFTdEQsQ0FBQztJQVBDLFFBQVEsQ0FBQyxLQUF3QixFQUFFLEtBQW1CO1FBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUNGIn0=
@@ -1,5 +1,5 @@
1
- import { LifecycleHook } from '@eggjs/tegg';
2
- import { LoadUnit, LoadUnitLifecycleContext } from '@eggjs/tegg-metadata';
1
+ import { type LifecycleHook } from '@eggjs/tegg';
2
+ import { type LoadUnit, type LoadUnitLifecycleContext } from '@eggjs/tegg-metadata';
3
3
  export declare class ORMLoadUnitHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
4
4
  postCreate(_ctx: LoadUnitLifecycleContext, loadUnit: LoadUnit): Promise<void>;
5
5
  }
@@ -0,0 +1,19 @@
1
+ import {} from '@eggjs/tegg';
2
+ import { EggLoadUnitType, EggPrototypeCreatorFactory, EggPrototypeFactory, } from '@eggjs/tegg-metadata';
3
+ import { Orm } from "./SingletonORM.js";
4
+ const REGISTER_CLAZZ = [
5
+ Orm,
6
+ ];
7
+ export class ORMLoadUnitHook {
8
+ async postCreate(_ctx, loadUnit) {
9
+ if (loadUnit.type === EggLoadUnitType.APP) {
10
+ for (const clazz of REGISTER_CLAZZ) {
11
+ const protos = await EggPrototypeCreatorFactory.createProto(clazz, loadUnit);
12
+ for (const proto of protos) {
13
+ EggPrototypeFactory.instance.registerPrototype(proto, loadUnit);
14
+ }
15
+ }
16
+ }
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT1JNTG9hZFVuaXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9PUk1Mb2FkVW5pdEhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLDBCQUEwQixFQUMxQixtQkFBbUIsR0FHcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEMsTUFBTSxjQUFjLEdBQUc7SUFDckIsR0FBRztDQUNKLENBQUM7QUFFRixNQUFNLE9BQU8sZUFBZTtJQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLElBQThCLEVBQUUsUUFBa0I7UUFDakUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzdFLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQzNCLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
@@ -1,9 +1,9 @@
1
- import { EggObject } from '@eggjs/tegg-runtime';
2
- import { EggPrototype } from '@eggjs/tegg-metadata';
3
- import { EggPrototypeName, EggObjectName } from '@eggjs/tegg';
4
- import { Id } from '@eggjs/tegg-lifecycle';
5
- import { Bone } from 'leoric';
6
- import SingletonModelProto from './SingletonModelProto.js';
1
+ import { type EggObject } from '@eggjs/tegg-runtime';
2
+ import type { EggPrototype } from '@eggjs/tegg-metadata';
3
+ import type { EggPrototypeName, EggObjectName } from '@eggjs/tegg';
4
+ import { type Id } from '@eggjs/tegg-lifecycle';
5
+ import type { Bone } from 'leoric';
6
+ import SingletonModelProto from './SingletonModelProto.ts';
7
7
  export declare class SingletonModelObject implements EggObject {
8
8
  private status;
9
9
  id: Id;
@@ -0,0 +1,47 @@
1
+ import { ContextHandler, EggObjectStatus } from '@eggjs/tegg-runtime';
2
+ import { IdenticalUtil } from '@eggjs/tegg-lifecycle';
3
+ import { EGG_CONTEXT } from '@eggjs/egg-module-common';
4
+ import SingletonModelProto from "./SingletonModelProto.js";
5
+ export class SingletonModelObject {
6
+ constructor(name, proto) {
7
+ this.status = EggObjectStatus.PENDING;
8
+ this.name = name;
9
+ this.proto = proto;
10
+ this.id = IdenticalUtil.createObjectId(this.proto.id);
11
+ }
12
+ async init() {
13
+ const clazz = class ContextModelClass extends this.proto.model {
14
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
+ // @ts-ignore
16
+ static get name() {
17
+ return super.name;
18
+ }
19
+ static get ctx() {
20
+ const ctx = ContextHandler.getContext();
21
+ if (ctx) {
22
+ return ctx.get(EGG_CONTEXT);
23
+ }
24
+ }
25
+ get ctx() {
26
+ return ContextModelClass.ctx;
27
+ }
28
+ };
29
+ this._obj = clazz;
30
+ this.status = EggObjectStatus.READY;
31
+ }
32
+ injectProperty() {
33
+ throw new Error('never call ModelObject#injectProperty');
34
+ }
35
+ get isReady() {
36
+ return this.status === EggObjectStatus.READY;
37
+ }
38
+ get obj() {
39
+ return this._obj;
40
+ }
41
+ static async createObject(name, proto) {
42
+ const modelObject = new SingletonModelObject(name, proto);
43
+ await modelObject.init();
44
+ return modelObject;
45
+ }
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xldG9uTW9kZWxPYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL1NpbmdsZXRvbk1vZGVsT2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWtCLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RGLE9BQU8sRUFBVyxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxtQkFBbUIsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sb0JBQW9CO0lBTy9CLFlBQVksSUFBbUIsRUFBRSxLQUEwQjtRQU5uRCxXQUFNLEdBQW9CLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFPeEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxLQUFLLEdBQUcsTUFBTSxpQkFBa0IsU0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFDNUQsNkRBQTZEO1lBQzdELGFBQWE7WUFDYixNQUFNLEtBQUssSUFBSTtnQkFDYixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDcEIsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHO2dCQUNaLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDUixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxHQUFHO2dCQUNMLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFtQixFQUFFLEtBQW1CO1FBQ2hFLE1BQU0sV0FBVyxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQTRCLENBQUMsQ0FBQztRQUNqRixNQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0NBQ0YifQ==
@@ -1,14 +1,14 @@
1
- import { EggPrototype, LoadUnit, EggPrototypeLifecycleContext } from '@eggjs/tegg-metadata';
2
- import { AccessLevel, EggPrototypeName, ObjectInitType, QualifierInfo, MetaDataKey, QualifierAttribute, QualifierValue } from '@eggjs/tegg';
3
- import { Id } from '@eggjs/tegg-lifecycle';
4
- import { Bone } from 'leoric';
1
+ import type { EggPrototype, LoadUnit, EggPrototypeLifecycleContext, InjectObjectProto, InjectConstructorProto } from '@eggjs/tegg-metadata';
2
+ import { AccessLevel, type EggPrototypeName, ObjectInitType, type QualifierInfo, type MetaDataKey, type QualifierAttribute, type QualifierValue } from '@eggjs/tegg';
3
+ import { type Id } from '@eggjs/tegg-lifecycle';
4
+ import type { Bone } from 'leoric';
5
5
  export default class SingletonModelProto implements EggPrototype {
6
6
  [key: symbol]: PropertyDescriptor;
7
7
  private readonly qualifiers;
8
8
  readonly accessLevel = AccessLevel.PUBLIC;
9
9
  id: Id;
10
10
  readonly initType = ObjectInitType.SINGLETON;
11
- readonly injectObjects: never[];
11
+ readonly injectObjects: (InjectObjectProto | InjectConstructorProto)[];
12
12
  readonly loadUnitId: string;
13
13
  readonly moduleName: string;
14
14
  readonly name: EggPrototypeName;
@@ -0,0 +1,40 @@
1
+ import { AccessLevel, ObjectInitType, QualifierUtil, MetadataUtil, } from '@eggjs/tegg';
2
+ import { IdenticalUtil } from '@eggjs/tegg-lifecycle';
3
+ export default class SingletonModelProto {
4
+ constructor(loadUnit, model) {
5
+ this.accessLevel = AccessLevel.PUBLIC;
6
+ this.initType = ObjectInitType.SINGLETON;
7
+ this.injectObjects = [];
8
+ this.model = model;
9
+ this.id = IdenticalUtil.createProtoId(loadUnit.id, `leoric:${model.name}`);
10
+ this.loadUnitId = loadUnit.id;
11
+ this.moduleName = loadUnit.name;
12
+ this.name = model.name;
13
+ this.qualifiers = QualifierUtil.getProtoQualifiers(model);
14
+ }
15
+ constructEggObject() {
16
+ return {};
17
+ }
18
+ getMetaData(metadataKey) {
19
+ return MetadataUtil.getMetaData(metadataKey, this.model);
20
+ }
21
+ verifyQualifier(qualifier) {
22
+ const selfQualifiers = this.qualifiers.find(t => t.attribute === qualifier.attribute);
23
+ return selfQualifiers?.value === qualifier.value;
24
+ }
25
+ verifyQualifiers(qualifiers) {
26
+ for (const qualifier of qualifiers) {
27
+ if (!this.verifyQualifier(qualifier)) {
28
+ return false;
29
+ }
30
+ }
31
+ return true;
32
+ }
33
+ getQualifier(attribute) {
34
+ return this.qualifiers.find(t => t.attribute === attribute)?.value;
35
+ }
36
+ static createProto(ctx) {
37
+ return new SingletonModelProto(ctx.loadUnit, ctx.clazz);
38
+ }
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xldG9uTW9kZWxQcm90by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvU2luZ2xldG9uTW9kZWxQcm90by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQ0wsV0FBVyxFQUVYLGNBQWMsRUFFZCxhQUFhLEVBQ2IsWUFBWSxHQUliLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBVyxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcvRCxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQVl0QyxZQUFZLFFBQWtCLEVBQUUsS0FBa0I7UUFUekMsZ0JBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBRWpDLGFBQVEsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQ3BDLGtCQUFhLEdBQW1ELEVBQUUsQ0FBQztRQU8xRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxVQUFVLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsV0FBVyxDQUFJLFdBQXdCO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxlQUFlLENBQUMsU0FBd0I7UUFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixPQUFPLGNBQWMsRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBMkI7UUFDMUMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQTZCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFpQztRQUNsRCxPQUFPLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsS0FBb0IsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiJ9
@@ -1,4 +1,4 @@
1
- import type { RealmType } from './types.js';
1
+ import type { RealmType } from './types.ts';
2
2
  export declare class Orm {
3
3
  private leoricRegister;
4
4
  get client(): RealmType;
@@ -8,7 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { AccessLevel, Inject, SingletonProto, } from '@eggjs/tegg';
11
- import { LeoricRegister } from './LeoricRegister.js';
11
+ import { LeoricRegister } from "./LeoricRegister.js";
12
12
  let Orm = class Orm {
13
13
  // default dataSource
14
14
  get client() {
@@ -33,4 +33,4 @@ Orm = __decorate([
33
33
  })
34
34
  ], Orm);
35
35
  export { Orm };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xldG9uT1JNLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiU2luZ2xldG9uT1JNLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLGNBQWMsR0FDZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNOUMsSUFBTSxHQUFHLEdBQVQsTUFBTSxHQUFHO0lBSWQscUJBQXFCO0lBQ3JCLElBQUksTUFBTTtRQUNSLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsU0FBUyxDQUFDLFVBQWtCO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxVQUFVLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBRSxDQUFDO0lBQ2hFLENBQUM7Q0FFRixDQUFBO0FBaEJTO0lBRFAsTUFBTSxFQUFFOzhCQUNlLGNBQWM7MkNBQUM7QUFGNUIsR0FBRztJQUhmLGNBQWMsQ0FBQztRQUNkLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTTtLQUNoQyxDQUFDO0dBQ1csR0FBRyxDQWtCZiJ9
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xldG9uT1JNLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9TaW5nbGV0b25PUk0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxNQUFNLEVBQ04sY0FBYyxHQUNmLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU05QyxJQUFNLEdBQUcsR0FBVCxNQUFNLEdBQUc7SUFJZCxxQkFBcUI7SUFDckIsSUFBSSxNQUFNO1FBQ1IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxTQUFTLENBQUMsVUFBa0I7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFFLENBQUM7SUFDaEUsQ0FBQztDQUVGLENBQUE7QUFoQlM7SUFEUCxNQUFNLEVBQUU7OEJBQ2UsY0FBYzsyQ0FBQztBQUY1QixHQUFHO0lBSGYsY0FBYyxDQUFDO1FBQ2QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNO0tBQ2hDLENBQUM7R0FDVyxHQUFHLENBa0JmIn0=
@@ -1,3 +1,3 @@
1
- import { AbstractDriver, connect } from 'leoric';
1
+ import type { AbstractDriver, connect } from 'leoric';
2
2
  export type DataType = AbstractDriver['DataType'];
3
3
  export type RealmType = Awaited<ReturnType<typeof connect>>;
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,7 @@
1
+ import '@eggjs/tegg-plugin/types';
2
+ import './app.ts';
3
+ import { type AttributeOptions } from '@eggjs/tegg-orm-decorator';
4
+ import type { DataType } from './lib/types.ts';
5
+ declare module '@eggjs/tegg-orm-decorator' {
6
+ function Attribute(dataType: DataType, options?: AttributeOptions): (target: any, propertyKey: PropertyKey) => void;
7
+ }
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ import '@eggjs/tegg-plugin/types';
2
+ import "./app.js";
3
+ import {} from '@eggjs/tegg-orm-decorator';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQXlCLE1BQU0sMkJBQTJCLENBQUMifQ==
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "tegg"
7
7
  ]
8
8
  },
9
- "version": "4.0.0-beta.1",
9
+ "version": "4.0.0-beta.11",
10
10
  "description": "orm decorator for egg",
11
11
  "keywords": [
12
12
  "egg",
@@ -18,35 +18,26 @@
18
18
  "leoric"
19
19
  ],
20
20
  "files": [
21
- "app.js",
22
- "app.d.ts",
23
- "lib/**/*.js",
24
- "lib/**/*.d.ts",
25
- "app/**/*.js",
26
- "app/**/*.d.ts",
27
- "index.js",
28
- "index.d.ts"
21
+ "dist"
29
22
  ],
30
23
  "type": "module",
31
24
  "exports": {
32
- ".": {
33
- "types": "./index.d.ts",
34
- "default": "./index.js"
35
- },
25
+ ".": "./dist/index.js",
26
+ "./app": "./dist/app.js",
27
+ "./config/config.default": "./dist/config/config.default.js",
28
+ "./lib/DataSourceManager": "./dist/lib/DataSourceManager.js",
29
+ "./lib/LeoricRegister": "./dist/lib/LeoricRegister.js",
30
+ "./lib/ModelProtoHook": "./dist/lib/ModelProtoHook.js",
31
+ "./lib/ModelProtoManager": "./dist/lib/ModelProtoManager.js",
32
+ "./lib/ORMLoadUnitHook": "./dist/lib/ORMLoadUnitHook.js",
33
+ "./lib/SingletonModelObject": "./dist/lib/SingletonModelObject.js",
34
+ "./lib/SingletonModelProto": "./dist/lib/SingletonModelProto.js",
35
+ "./lib/SingletonORM": "./dist/lib/SingletonORM.js",
36
+ "./lib/types": "./dist/lib/types.js",
37
+ "./types": "./dist/types.js",
36
38
  "./package.json": "./package.json"
37
39
  },
38
- "scripts": {
39
- "pretest": "npm run prepare-test",
40
- "test": "egg-bin test",
41
- "precov": "npm run prepare-test",
42
- "cov": "egg-bin cov",
43
- "clean": "tsc -b --clean",
44
- "tsc": "npm run clean && tsc -p ./tsconfig.pub.json",
45
- "tsc:pub": "npm run tsc",
46
- "prepublishOnly": "npm run tsc",
47
- "prepare-test": "node ./test/fixtures/prepare.js"
48
- },
49
- "homepage": "https://github.com/eggjs/tegg",
40
+ "homepage": "https://github.com/eggjs/tegg/tree/next/plugin/orm",
50
41
  "bugs": {
51
42
  "url": "https://github.com/eggjs/tegg/issues"
52
43
  },
@@ -56,36 +47,50 @@
56
47
  "directory": "plugin/orm"
57
48
  },
58
49
  "engines": {
59
- "node": ">=20.0.0"
50
+ "node": ">=22.18.0"
60
51
  },
61
52
  "dependencies": {
62
- "@eggjs/core": "^6.4.0",
63
- "@eggjs/egg-module-common": "^4.0.0-beta.1",
64
- "@eggjs/tegg": "^4.0.0-beta.1",
65
- "@eggjs/tegg-common-util": "^4.0.0-beta.1",
66
- "@eggjs/tegg-lifecycle": "^4.0.0-beta.1",
67
- "@eggjs/tegg-loader": "^4.0.0-beta.1",
68
- "@eggjs/tegg-metadata": "^4.0.0-beta.1",
69
- "@eggjs/tegg-orm-decorator": "^4.0.0-beta.1",
70
- "@eggjs/tegg-runtime": "^4.0.0-beta.1",
71
53
  "leoric": "^2.12.2",
72
- "sdk-base": "^5.0.1"
54
+ "sdk-base": "^5.0.1",
55
+ "@eggjs/egg-module-common": "4.0.0-beta.11",
56
+ "@eggjs/tegg": "4.0.0-beta.11",
57
+ "@eggjs/tegg-lifecycle": "4.0.0-beta.11",
58
+ "@eggjs/tegg-metadata": "4.0.0-beta.11",
59
+ "@eggjs/tegg-runtime": "4.0.0-beta.11",
60
+ "@eggjs/tegg-orm-decorator": "4.0.0-beta.11"
61
+ },
62
+ "peerDependencies": {
63
+ "egg": "beta",
64
+ "@eggjs/tegg-plugin": "4.0.0-beta.11"
73
65
  },
74
66
  "devDependencies": {
75
- "@eggjs/mock": "6",
76
- "@eggjs/module-test-util": "^4.0.0-beta.1",
77
- "@eggjs/tegg-config": "^4.0.0-beta.1",
78
- "@eggjs/tegg-plugin": "^4.0.0-beta.1",
79
- "@eggjs/tracer": "3",
80
- "@types/mocha": "10",
81
- "@types/node": "22",
82
- "egg": "4",
83
- "mysql2": "3",
84
- "ts-node": "10",
85
- "typescript": "5"
67
+ "@eggjs/bin": "beta",
68
+ "@eggjs/mock": "beta",
69
+ "@eggjs/tracer": "beta",
70
+ "@types/mocha": "^10.0.10",
71
+ "mocha": "^11.0.1",
72
+ "@types/node": "^22.10.5",
73
+ "egg": "beta",
74
+ "mysql2": "^3.12.0",
75
+ "typescript": "^5.9.3",
76
+ "tsdown": "^0.15.6",
77
+ "unplugin-unused": "^0.5.3",
78
+ "@eggjs/tegg-config": "4.0.0-beta.11",
79
+ "@eggjs/tegg-plugin": "4.0.0-beta.11",
80
+ "@eggjs/module-test-util": "4.0.0-beta.4"
86
81
  },
87
82
  "publishConfig": {
88
83
  "access": "public"
89
84
  },
90
- "gitHead": "79a22905272d6de7fe06152231dff65d213d9166"
91
- }
85
+ "main": "./dist/index.js",
86
+ "module": "./dist/index.js",
87
+ "types": "./dist/index.d.ts",
88
+ "scripts": {
89
+ "test:mocha": "npm run prepare-test && egg-bin test",
90
+ "cov:mocha": "npm run prepare-test && egg-bin cov",
91
+ "clean": "rimraf dist *.tsbuildinfo",
92
+ "build": "tsdown && npm run clean && tsc -p tsconfig.build.json",
93
+ "typecheck": "tsc --noEmit",
94
+ "prepare-test": "node ./test/fixtures/prepare.js"
95
+ }
96
+ }
package/app.js DELETED
@@ -1,44 +0,0 @@
1
- import { DataSourceManager } from './lib/DataSourceManager.js';
2
- import { LeoricRegister } from './lib/LeoricRegister.js';
3
- import { ModelProtoManager } from './lib/ModelProtoManager.js';
4
- import { ModelProtoHook } from './lib/ModelProtoHook.js';
5
- import { MODEL_PROTO_IMPL_TYPE } from '@eggjs/tegg-orm-decorator';
6
- import SingletonModelProto from './lib/SingletonModelProto.js';
7
- import { SingletonModelObject } from './lib/SingletonModelObject.js';
8
- import { ORMLoadUnitHook } from './lib/ORMLoadUnitHook.js';
9
- export default class OrmAppBootHook {
10
- constructor(app) {
11
- this.app = app;
12
- this.dataSourceManager = new DataSourceManager();
13
- this.modelProtoManager = new ModelProtoManager();
14
- this.leoricRegister = new LeoricRegister(this.modelProtoManager, this.dataSourceManager);
15
- this.modelProtoHook = new ModelProtoHook(this.modelProtoManager);
16
- this.app.eggPrototypeCreatorFactory.registerPrototypeCreator(MODEL_PROTO_IMPL_TYPE, SingletonModelProto.createProto);
17
- this.app.leoricRegister = this.leoricRegister;
18
- this.ormLoadUnitHook = new ORMLoadUnitHook();
19
- }
20
- configWillLoad() {
21
- this.app.eggPrototypeLifecycleUtil.registerLifecycle(this.modelProtoHook);
22
- this.app.eggObjectFactory.registerEggObjectCreateMethod(SingletonModelProto, SingletonModelObject.createObject);
23
- this.app.loadUnitLifecycleUtil.registerLifecycle(this.ormLoadUnitHook);
24
- }
25
- configDidLoad() {
26
- const config = this.app.config.orm;
27
- if (config.datasources) {
28
- for (const datasource of config.datasources) {
29
- this.dataSourceManager.addConfig(datasource);
30
- }
31
- }
32
- else {
33
- this.dataSourceManager.addDefaultConfig(config);
34
- }
35
- }
36
- async didLoad() {
37
- await this.app.moduleHandler.ready();
38
- await this.leoricRegister.register();
39
- }
40
- async beforeClose() {
41
- this.app.eggPrototypeLifecycleUtil.deleteLifecycle(this.modelProtoHook);
42
- }
43
- }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxtQkFBbUIsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFjO0lBUWpDLFlBQVksR0FBZ0I7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixDQUFDLHFCQUFxQixFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JILElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNuQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxRSxDQUFDO0NBQ0YifQ==
package/index.d.ts DELETED
@@ -1,20 +0,0 @@
1
- import '@eggjs/tegg-plugin';
2
- import { AttributeOptions } from '@eggjs/tegg-orm-decorator';
3
- import { LeoricRegister } from './lib/LeoricRegister.js';
4
- import { Orm } from './lib/SingletonORM.js';
5
- import type { OrmConfig } from './lib/DataSourceManager.js';
6
- import type { DataType } from './lib/types.js';
7
- declare module '@eggjs/tegg-orm-decorator' {
8
- function Attribute(dataType: DataType, options?: AttributeOptions): (target: any, propertyKey: PropertyKey) => void;
9
- }
10
- declare module '@eggjs/core' {
11
- interface EggAppConfig {
12
- orm: OrmConfig & {
13
- datasources?: OrmConfig[];
14
- };
15
- }
16
- interface EggCore {
17
- leoricRegister: LeoricRegister;
18
- orm: Orm;
19
- }
20
- }
package/index.js DELETED
@@ -1,2 +0,0 @@
1
- import '@eggjs/tegg-plugin';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLG9CQUFvQixDQUFDIn0=
@@ -1,21 +0,0 @@
1
- export class DataSourceManager {
2
- constructor() {
3
- this.dataSourceConfigs = [];
4
- }
5
- addDefaultConfig(config) {
6
- this.defaultDataSourceConfig = config;
7
- }
8
- getDefaultConfig() {
9
- return this.defaultDataSourceConfig;
10
- }
11
- addConfig(config) {
12
- this.dataSourceConfigs.push(config);
13
- }
14
- getConfig(name) {
15
- if (this.defaultDataSourceConfig?.database === name) {
16
- return this.defaultDataSourceConfig;
17
- }
18
- return this.dataSourceConfigs.find(t => t.database === name);
19
- }
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJEYXRhU291cmNlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0QkEsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QjtRQUNFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWlCO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBaUI7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDcEIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRiJ9
@@ -1,80 +0,0 @@
1
- import { Base } from 'sdk-base';
2
- import Realm from 'leoric';
3
- import { ModelMetadataUtil } from '@eggjs/tegg-orm-decorator';
4
- export class LeoricRegister extends Base {
5
- constructor(modelProtoManager, dataSourceManager) {
6
- super();
7
- this.modelProtoManager = modelProtoManager;
8
- this.dataSourceManager = dataSourceManager;
9
- this.realmMap = new Map();
10
- }
11
- getConfig(datasource) {
12
- let config;
13
- if (!datasource) {
14
- config = this.dataSourceManager.getDefaultConfig();
15
- }
16
- else {
17
- config = this.dataSourceManager.getConfig(datasource);
18
- }
19
- return config;
20
- }
21
- getRealm(config) {
22
- if (!config?.database) {
23
- return undefined;
24
- }
25
- const realm = this.realmMap.get(config.database);
26
- return realm;
27
- }
28
- getOrCreateRealm(datasource) {
29
- const config = this.getConfig(datasource);
30
- let realm;
31
- if (config) {
32
- realm = this.getRealm(config);
33
- if (realm) {
34
- return realm;
35
- }
36
- }
37
- realm = new Realm({ ...config });
38
- this.realmMap.set(config.database, realm);
39
- return realm;
40
- }
41
- generateLeoricAttributes(metadata) {
42
- const attributes = {};
43
- for (const attribute of metadata.attributes) {
44
- attributes[attribute.propertyName] = {
45
- columnName: attribute.attributeName,
46
- type: attribute.dataType,
47
- allowNull: attribute.allowNull,
48
- primaryKey: attribute.primary,
49
- unique: attribute.unique,
50
- autoIncrement: attribute.autoIncrement,
51
- };
52
- }
53
- return attributes;
54
- }
55
- async register() {
56
- for (const { proto, clazz } of this.modelProtoManager.getProtos()) {
57
- const metadata = ModelMetadataUtil.getModelMetadata(clazz);
58
- if (!metadata)
59
- throw new Error(`not found metadata for model ${proto.id}`);
60
- const realm = this.getOrCreateRealm(metadata.dataSource);
61
- realm.models[clazz.name] = clazz;
62
- realm[clazz.name] = clazz;
63
- const attributes = this.generateLeoricAttributes(metadata);
64
- const hooks = {};
65
- for (const hookName of Realm.hookNames) {
66
- if (clazz[hookName]) {
67
- hooks[hookName] = clazz[hookName];
68
- }
69
- }
70
- clazz.init(attributes, {
71
- tableName: metadata.tableName,
72
- hooks,
73
- }, {});
74
- }
75
- await Promise.all(Array.from(this.realmMap.values())
76
- .map(realm => realm.connect()));
77
- this.ready(true);
78
- }
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVvcmljUmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJMZW9yaWNSZWdpc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJN0UsTUFBTSxPQUFPLGNBQWUsU0FBUSxJQUFJO0lBS3RDLFlBQVksaUJBQW9DLEVBQUUsaUJBQW9DO1FBQ3BGLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxVQUFtQjtRQUMzQixJQUFJLE1BQTZCLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQTZCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDdEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUE4QjtRQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBNEIsQ0FBQztRQUNqQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxHQUFHLElBQUssS0FBYSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsd0JBQXdCLENBQUMsUUFBdUI7UUFDOUMsTUFBTSxVQUFVLEdBQXdCLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHO2dCQUNuQyxVQUFVLEVBQUUsU0FBUyxDQUFDLGFBQWE7Z0JBQ25DLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUTtnQkFDeEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO2dCQUM5QixVQUFVLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQzdCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDeEIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhO2FBQ3ZDLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxRQUFRO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCxNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFDO1lBQ3RDLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLEtBQUssQ0FBQyxRQUE4QixDQUFDLEVBQUUsQ0FBQztvQkFDMUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUE4QixDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDO1lBRUEsS0FBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzlCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsS0FBSzthQUNOLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
@@ -1,16 +0,0 @@
1
- import { IS_MODEL, ModelMetaBuilder, ModelMetadataUtil } from '@eggjs/tegg-orm-decorator';
2
- export class ModelProtoHook {
3
- constructor(modelProtoManager) {
4
- this.modelProtoManager = modelProtoManager;
5
- }
6
- async postCreate(ctx, obj) {
7
- if (!obj.getMetaData(IS_MODEL)) {
8
- return;
9
- }
10
- const builder = new ModelMetaBuilder(ctx.clazz);
11
- const metadata = builder.build();
12
- ModelMetadataUtil.setModelMetadata(ctx.clazz, metadata);
13
- this.modelProtoManager.addProto(ctx.clazz, obj);
14
- }
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxQcm90b0hvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJNb2RlbFByb3RvSG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHMUYsTUFBTSxPQUFPLGNBQWM7SUFHekIsWUFBWSxpQkFBb0M7UUFDOUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQzdDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQWlDLEVBQUUsR0FBaUI7UUFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0YifQ==
@@ -1,12 +0,0 @@
1
- export class ModelProtoManager {
2
- constructor() {
3
- this.protos = [];
4
- }
5
- addProto(clazz, proto) {
6
- this.protos.push({ proto, clazz });
7
- }
8
- getProtos() {
9
- return this.protos.slice();
10
- }
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxQcm90b01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJNb2RlbFByb3RvTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ21CLFdBQU0sR0FBMEIsRUFBRSxDQUFDO0lBU3RELENBQUM7SUFQQyxRQUFRLENBQUMsS0FBd0IsRUFBRSxLQUFtQjtRQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDRiJ9
@@ -1,18 +0,0 @@
1
- import { EggLoadUnitType, EggPrototypeCreatorFactory, EggPrototypeFactory, } from '@eggjs/tegg-metadata';
2
- import { Orm } from './SingletonORM.js';
3
- const REGISTER_CLAZZ = [
4
- Orm,
5
- ];
6
- export class ORMLoadUnitHook {
7
- async postCreate(_ctx, loadUnit) {
8
- if (loadUnit.type === EggLoadUnitType.APP) {
9
- for (const clazz of REGISTER_CLAZZ) {
10
- const protos = await EggPrototypeCreatorFactory.createProto(clazz, loadUnit);
11
- for (const proto of protos) {
12
- EggPrototypeFactory.instance.registerPrototype(proto, loadUnit);
13
- }
14
- }
15
- }
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT1JNTG9hZFVuaXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiT1JNTG9hZFVuaXRIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsMEJBQTBCLEVBQzFCLG1CQUFtQixHQUdwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV4QyxNQUFNLGNBQWMsR0FBRztJQUNyQixHQUFHO0NBQ0osQ0FBQztBQUVGLE1BQU0sT0FBTyxlQUFlO0lBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBOEIsRUFBRSxRQUFrQjtRQUNqRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFDLEtBQUssTUFBTSxLQUFLLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQTBCLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDN0UsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDM0IsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDbEUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -1,46 +0,0 @@
1
- import { ContextHandler, EggObjectStatus, } from '@eggjs/tegg-runtime';
2
- import { IdenticalUtil } from '@eggjs/tegg-lifecycle';
3
- import { EGG_CONTEXT } from '@eggjs/egg-module-common';
4
- export class SingletonModelObject {
5
- constructor(name, proto) {
6
- this.status = EggObjectStatus.PENDING;
7
- this.name = name;
8
- this.proto = proto;
9
- this.id = IdenticalUtil.createObjectId(this.proto.id);
10
- }
11
- async init() {
12
- const clazz = class ContextModelClass extends this.proto.model {
13
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
14
- // @ts-ignore
15
- static get name() {
16
- return super.name;
17
- }
18
- static get ctx() {
19
- const ctx = ContextHandler.getContext();
20
- if (ctx) {
21
- return ctx.get(EGG_CONTEXT);
22
- }
23
- }
24
- get ctx() {
25
- return ContextModelClass.ctx;
26
- }
27
- };
28
- this._obj = clazz;
29
- this.status = EggObjectStatus.READY;
30
- }
31
- injectProperty() {
32
- throw new Error('never call ModelObject#injectProperty');
33
- }
34
- get isReady() {
35
- return this.status === EggObjectStatus.READY;
36
- }
37
- get obj() {
38
- return this._obj;
39
- }
40
- static async createObject(name, proto) {
41
- const modelObject = new SingletonModelObject(name, proto);
42
- await modelObject.init();
43
- return modelObject;
44
- }
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xldG9uTW9kZWxPYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJTaW5nbGV0b25Nb2RlbE9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUVkLGVBQWUsR0FDaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQU0sYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3ZELE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsWUFBWSxJQUFtQixFQUFFLEtBQTBCO1FBTm5ELFdBQU0sR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQU94RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLEtBQUssR0FBRyxNQUFNLGlCQUFrQixTQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztZQUM1RCw2REFBNkQ7WUFDN0QsYUFBYTtZQUNiLE1BQU0sS0FBSyxJQUFJO2dCQUNiLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztZQUNwQixDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNSLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLEdBQUc7Z0JBQ0wsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7WUFDL0IsQ0FBQztTQUVGLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsS0FBSyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQW1CLEVBQUUsS0FBbUI7UUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBNEIsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiJ9
@@ -1,40 +0,0 @@
1
- import { AccessLevel, ObjectInitType, QualifierUtil, MetadataUtil, } from '@eggjs/tegg';
2
- import { IdenticalUtil } from '@eggjs/tegg-lifecycle';
3
- export default class SingletonModelProto {
4
- constructor(loadUnit, model) {
5
- this.accessLevel = AccessLevel.PUBLIC;
6
- this.initType = ObjectInitType.SINGLETON;
7
- this.injectObjects = [];
8
- this.model = model;
9
- this.id = IdenticalUtil.createProtoId(loadUnit.id, `leoric:${model.name}`);
10
- this.loadUnitId = loadUnit.id;
11
- this.moduleName = loadUnit.name;
12
- this.name = model.name;
13
- this.qualifiers = QualifierUtil.getProtoQualifiers(model);
14
- }
15
- constructEggObject() {
16
- return {};
17
- }
18
- getMetaData(metadataKey) {
19
- return MetadataUtil.getMetaData(metadataKey, this.model);
20
- }
21
- verifyQualifier(qualifier) {
22
- const selfQualifiers = this.qualifiers.find(t => t.attribute === qualifier.attribute);
23
- return selfQualifiers?.value === qualifier.value;
24
- }
25
- verifyQualifiers(qualifiers) {
26
- for (const qualifier of qualifiers) {
27
- if (!this.verifyQualifier(qualifier)) {
28
- return false;
29
- }
30
- }
31
- return true;
32
- }
33
- getQualifier(attribute) {
34
- return this.qualifiers.find(t => t.attribute === attribute)?.value;
35
- }
36
- static createProto(ctx) {
37
- return new SingletonModelProto(ctx.loadUnit, ctx.clazz);
38
- }
39
- }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xldG9uTW9kZWxQcm90by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlNpbmdsZXRvbk1vZGVsUHJvdG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFdBQVcsRUFFWCxjQUFjLEVBRWQsYUFBYSxFQUNiLFlBQVksR0FFYixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQU0sYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxtQkFBbUI7SUFZdEMsWUFBWSxRQUFrQixFQUFFLEtBQWtCO1FBVHpDLGdCQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUVqQyxhQUFRLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUNwQyxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQU8xQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxVQUFVLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsV0FBVyxDQUFJLFdBQXdCO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxlQUFlLENBQUMsU0FBd0I7UUFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixPQUFPLGNBQWMsRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBMkI7UUFDMUMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQTZCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFpQztRQUNsRCxPQUFPLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsS0FBb0IsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiJ9