@eggjs/tegg-orm-decorator 4.0.0-beta.8 → 4.0.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/builder/AttributeMetaBuilder.d.ts +8 -0
  2. package/dist/builder/AttributeMetaBuilder.js +24 -0
  3. package/dist/builder/IndexMetaBuilder.d.ts +9 -0
  4. package/dist/builder/IndexMetaBuilder.js +33 -0
  5. package/dist/builder/ModelMetaBuilder.d.ts +7 -0
  6. package/dist/builder/ModelMetaBuilder.js +20 -0
  7. package/dist/builder/index.d.ts +3 -0
  8. package/dist/builder/index.js +4 -0
  9. package/dist/decorator/Attribute.d.ts +2 -0
  10. package/dist/decorator/Attribute.js +10 -0
  11. package/dist/decorator/DataSource.d.ts +2 -0
  12. package/dist/decorator/DataSource.js +7 -0
  13. package/dist/decorator/Model.d.ts +2 -0
  14. package/dist/decorator/Model.js +21 -0
  15. package/dist/decorator/ModelIndex.d.ts +2 -0
  16. package/dist/decorator/ModelIndex.js +7 -0
  17. package/dist/decorator/index.d.ts +4 -0
  18. package/dist/decorator/index.js +5 -0
  19. package/dist/index.d.ts +5 -116
  20. package/dist/index.js +6 -251
  21. package/dist/model/AttributeMeta.d.ts +10 -0
  22. package/dist/model/AttributeMeta.js +19 -0
  23. package/dist/model/IndexMeta.d.ts +7 -0
  24. package/dist/model/IndexMeta.js +13 -0
  25. package/dist/model/ModelMetadata.d.ts +9 -0
  26. package/dist/model/ModelMetadata.js +15 -0
  27. package/dist/model/index.d.ts +3 -0
  28. package/dist/model/index.js +4 -0
  29. package/dist/util/ModelInfoUtil.d.ts +15 -0
  30. package/dist/util/ModelInfoUtil.js +43 -0
  31. package/dist/util/ModelMetadataUtil.d.ts +7 -0
  32. package/dist/util/ModelMetadataUtil.js +12 -0
  33. package/dist/util/NameUtil.d.ts +22 -0
  34. package/dist/util/NameUtil.js +32 -0
  35. package/dist/util/index.d.ts +3 -0
  36. package/dist/util/index.js +4 -0
  37. package/package.json +4 -4
@@ -0,0 +1,8 @@
1
+ import type { EggProtoImplClass } from '@eggjs/tegg-types';
2
+ import { AttributeMeta } from '../model/index.ts';
3
+ export declare class AttributeMetaBuilder {
4
+ private readonly clazz;
5
+ constructor(clazz: EggProtoImplClass);
6
+ build(): Array<AttributeMeta>;
7
+ private buildAttributeMeta;
8
+ }
@@ -0,0 +1,24 @@
1
+ import { AttributeMeta } from "../model/index.js";
2
+ import { ModelInfoUtil, NameUtil } from "../util/index.js";
3
+ export class AttributeMetaBuilder {
4
+ clazz;
5
+ constructor(clazz) {
6
+ this.clazz = clazz;
7
+ }
8
+ build() {
9
+ const modelAttributes = ModelInfoUtil.getModelAttributes(this.clazz);
10
+ const attributes = [];
11
+ if (!modelAttributes) {
12
+ throw new Error(`model ${this.clazz.name} has no attributes`);
13
+ }
14
+ for (const [propertyName, attributeInfo] of modelAttributes) {
15
+ const attribute = this.buildAttributeMeta(propertyName, attributeInfo);
16
+ attributes.push(attribute);
17
+ }
18
+ return attributes;
19
+ }
20
+ buildAttributeMeta(propertyName, attributeInfo) {
21
+ return new AttributeMeta(attributeInfo.dataType, propertyName, attributeInfo.options?.name ?? NameUtil.getAttributeName(propertyName), attributeInfo.options?.allowNull ?? true, attributeInfo.options?.autoIncrement ?? false, attributeInfo.options?.primary ?? false, attributeInfo.options?.unique ?? false);
22
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0cmlidXRlTWV0YUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGRlci9BdHRyaWJ1dGVNZXRhQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzRCxNQUFNLE9BQU8sb0JBQW9CO0lBQ2QsS0FBSyxDQUFvQjtJQUUxQyxZQUFZLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxNQUFNLFVBQVUsR0FBeUIsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLG9CQUFvQixDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELEtBQUssTUFBTSxDQUFFLFlBQVksRUFBRSxhQUFhLENBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUM5RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxZQUFvQixFQUFFLGFBQWlDO1FBQ2hGLE9BQU8sSUFBSSxhQUFhLENBQ3RCLGFBQWEsQ0FBQyxRQUFRLEVBQ3RCLFlBQVksRUFDWixhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQ3RFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxJQUFJLElBQUksRUFDeEMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLElBQUksS0FBSyxFQUM3QyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQ3ZDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FDdkMsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
@@ -0,0 +1,9 @@
1
+ import type { EggProtoImplClass } from '@eggjs/tegg-types';
2
+ import { IndexMeta, AttributeMeta } from '../model/index.ts';
3
+ export declare class IndexMetaBuilder {
4
+ private readonly clazz;
5
+ private readonly attributes;
6
+ constructor(clazz: EggProtoImplClass, attributes: Array<AttributeMeta>);
7
+ build(): Array<IndexMeta>;
8
+ private buildIndexMeta;
9
+ }
@@ -0,0 +1,33 @@
1
+ import { IndexMeta, AttributeMeta } from "../model/index.js";
2
+ import { ModelInfoUtil, NameUtil } from "../util/index.js";
3
+ export class IndexMetaBuilder {
4
+ clazz;
5
+ attributes;
6
+ constructor(clazz, attributes) {
7
+ this.clazz = clazz;
8
+ this.attributes = attributes;
9
+ }
10
+ build() {
11
+ return ModelInfoUtil.getModelIndices(this.clazz)
12
+ .map(indexInfo => this.buildIndexMeta(indexInfo));
13
+ }
14
+ buildIndexMeta(indexInfo) {
15
+ const fields = [];
16
+ for (const field of indexInfo.fields) {
17
+ const attribute = this.attributes.find(t => t.propertyName === field);
18
+ if (!attribute) {
19
+ throw new Error(`model ${this.clazz.name} has no attribute named ${field}`);
20
+ }
21
+ fields.push(attribute.attributeName);
22
+ }
23
+ let indexName;
24
+ if (indexInfo.options?.name) {
25
+ indexName = indexInfo.options.name;
26
+ }
27
+ else {
28
+ indexName = NameUtil.getIndexName(fields, { unique: indexInfo.options?.unique });
29
+ }
30
+ return new IndexMeta(indexName, fields, indexInfo.options?.unique ?? false, indexInfo.options?.primary ?? false);
31
+ }
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZXhNZXRhQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyL0luZGV4TWV0YUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE1BQU0sT0FBTyxnQkFBZ0I7SUFDVixLQUFLLENBQW9CO0lBQ3pCLFVBQVUsQ0FBdUI7SUFFbEQsWUFBWSxLQUF3QixFQUFFLFVBQWdDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDN0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxjQUFjLENBQUMsU0FBeUI7UUFDOUMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSwyQkFBMkIsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksU0FBaUIsQ0FBQztRQUN0QixJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FDbEIsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxLQUFLLEVBQ2xDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiJ9
@@ -0,0 +1,7 @@
1
+ import type { EggProtoImplClass } from '@eggjs/tegg-types';
2
+ import { ModelMetadata } from '../model/index.ts';
3
+ export declare class ModelMetaBuilder {
4
+ private readonly clazz;
5
+ constructor(clazz: EggProtoImplClass);
6
+ build(): ModelMetadata;
7
+ }
@@ -0,0 +1,20 @@
1
+ import { ModelMetadata } from "../model/index.js";
2
+ import { ModelInfoUtil, NameUtil } from "../util/index.js";
3
+ import { IndexMetaBuilder } from "./IndexMetaBuilder.js";
4
+ import { AttributeMetaBuilder } from "./AttributeMetaBuilder.js";
5
+ export class ModelMetaBuilder {
6
+ clazz;
7
+ constructor(clazz) {
8
+ this.clazz = clazz;
9
+ }
10
+ build() {
11
+ const dataSource = ModelInfoUtil.getDataSource(this.clazz);
12
+ const tableName = ModelInfoUtil.getTableName(this.clazz) || NameUtil.getTableName(this.clazz.name);
13
+ const attributeMetaBuilder = new AttributeMetaBuilder(this.clazz);
14
+ const attributes = attributeMetaBuilder.build();
15
+ const indexMetaBuilder = new IndexMetaBuilder(this.clazz, attributes);
16
+ const indices = indexMetaBuilder.build();
17
+ return new ModelMetadata(dataSource, tableName, attributes, indices);
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxNZXRhQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyL01vZGVsTWV0YUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFakUsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLEtBQUssQ0FBb0I7SUFFMUMsWUFBWSxLQUF3QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSztRQUNILE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRyxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGIn0=
@@ -0,0 +1,3 @@
1
+ export * from './AttributeMetaBuilder.ts';
2
+ export * from './IndexMetaBuilder.ts';
3
+ export * from './ModelMetaBuilder.ts';
@@ -0,0 +1,4 @@
1
+ export * from "./AttributeMetaBuilder.js";
2
+ export * from "./IndexMetaBuilder.js";
3
+ export * from "./ModelMetaBuilder.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import type { AttributeOptions } from '@eggjs/tegg-types';
2
+ export declare function Attribute(dataType: string, options?: AttributeOptions): (target: any, propertyKey: PropertyKey) => void;
@@ -0,0 +1,10 @@
1
+ import assert from 'node:assert';
2
+ import { ModelInfoUtil } from "../util/index.js";
3
+ export function Attribute(dataType, options) {
4
+ return function (target, propertyKey) {
5
+ const clazz = target.constructor;
6
+ assert(typeof propertyKey === 'string', `[model/${clazz.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
7
+ ModelInfoUtil.addModelAttribute(dataType, options, clazz, propertyKey);
8
+ };
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlY29yYXRvci9BdHRyaWJ1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBSWpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWdCLEVBQUUsT0FBMEI7SUFDcEUsT0FBTyxVQUFTLE1BQVcsRUFBRSxXQUF3QjtRQUNuRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBZ0MsQ0FBQztRQUN0RCxNQUFNLENBQUMsT0FBTyxXQUFXLEtBQUssUUFBUSxFQUNwQyxVQUFVLEtBQUssQ0FBQyxJQUFJLHFEQUFxRCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RSxDQUFDLENBQUM7QUFDSixDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import type { EggProtoImplClass } from '@eggjs/tegg-types';
2
+ export declare function DataSource(dataSource: string): (clazz: EggProtoImplClass) => void;
@@ -0,0 +1,7 @@
1
+ import { ModelInfoUtil } from "../util/index.js";
2
+ export function DataSource(dataSource) {
3
+ return function (clazz) {
4
+ ModelInfoUtil.setDataSource(dataSource, clazz);
5
+ };
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3IvRGF0YVNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxVQUFrQjtJQUMzQyxPQUFPLFVBQVMsS0FBd0I7UUFDdEMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import type { EggProtoImplClass, ModelParams } from '@eggjs/tegg-types';
2
+ export declare function Model(param?: ModelParams): (clazz: EggProtoImplClass) => void;
@@ -0,0 +1,21 @@
1
+ import { SingletonProto } from '@eggjs/core-decorator';
2
+ import { AccessLevel, MODEL_PROTO_IMPL_TYPE } from '@eggjs/tegg-types';
3
+ import { ModelInfoUtil } from "../util/index.js";
4
+ export function Model(param) {
5
+ return function (clazz) {
6
+ ModelInfoUtil.setIsModel(true, clazz);
7
+ const func = SingletonProto({
8
+ name: clazz.name,
9
+ accessLevel: AccessLevel.PUBLIC,
10
+ protoImplType: MODEL_PROTO_IMPL_TYPE,
11
+ });
12
+ if (param?.tableName) {
13
+ ModelInfoUtil.setTableName(param.tableName, clazz);
14
+ }
15
+ if (param?.dataSource) {
16
+ ModelInfoUtil.setDataSource(param.dataSource, clazz);
17
+ }
18
+ func(clazz);
19
+ };
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVjb3JhdG9yL01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBbUI7SUFDdkMsT0FBTyxVQUFTLEtBQXdCO1FBQ3RDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUMxQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNO1lBQy9CLGFBQWEsRUFBRSxxQkFBcUI7U0FDckMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDckIsYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUN0QixhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ import type { EggProtoImplClass, IndexOptions } from '@eggjs/tegg-types';
2
+ export declare function Index(fields: string[], params?: IndexOptions): (clazz: EggProtoImplClass) => void;
@@ -0,0 +1,7 @@
1
+ import { ModelInfoUtil } from "../util/index.js";
2
+ export function Index(fields, params) {
3
+ return function (clazz) {
4
+ ModelInfoUtil.addModelIndex(fields, params, clazz);
5
+ };
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxJbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3IvTW9kZWxJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsTUFBTSxVQUFVLEtBQUssQ0FBQyxNQUFnQixFQUFFLE1BQXFCO0lBQzNELE9BQU8sVUFBUyxLQUF3QjtRQUN0QyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ export * from './Attribute.ts';
2
+ export * from './DataSource.ts';
3
+ export * from './Model.ts';
4
+ export * from './ModelIndex.ts';
@@ -0,0 +1,5 @@
1
+ export * from "./Attribute.js";
2
+ export * from "./DataSource.js";
3
+ export * from "./Model.js";
4
+ export * from "./ModelIndex.js";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVjb3JhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGlCQUFpQixDQUFDIn0=
package/dist/index.d.ts CHANGED
@@ -1,116 +1,5 @@
1
- import { AttributeOptions, EggProtoImplClass, IndexOptions, ModelAttributeInfo, ModelIndexInfo, ModelParams } from "@eggjs/tegg-types";
2
- export * from "@eggjs/tegg-types/orm";
3
-
4
- //#region src/model/AttributeMeta.d.ts
5
- declare class AttributeMeta {
6
- readonly dataType: string;
7
- readonly propertyName: string;
8
- readonly attributeName: string;
9
- readonly allowNull: boolean;
10
- readonly autoIncrement: boolean;
11
- readonly primary: boolean;
12
- readonly unique: boolean;
13
- constructor(dataType: string, propertyName: string, attributeName: string, allowNull: boolean, autoIncrement: boolean, primary: boolean, unique: boolean);
14
- }
15
- //#endregion
16
- //#region src/model/IndexMeta.d.ts
17
- declare class IndexMeta {
18
- readonly name: string;
19
- readonly fields: string[];
20
- readonly unique: boolean;
21
- readonly primary: boolean;
22
- constructor(name: string, fields: string[], unique: boolean, primary: boolean);
23
- }
24
- //#endregion
25
- //#region src/model/ModelMetadata.d.ts
26
- declare class ModelMetadata {
27
- readonly dataSource: string | undefined;
28
- readonly tableName: string;
29
- readonly attributes: Array<AttributeMeta>;
30
- readonly indices: Array<IndexMeta>;
31
- constructor(dataSource: string | undefined, tableName: string, attributes: Array<AttributeMeta>, indices: Array<IndexMeta>);
32
- }
33
- //#endregion
34
- //#region src/builder/AttributeMetaBuilder.d.ts
35
- declare class AttributeMetaBuilder {
36
- private readonly clazz;
37
- constructor(clazz: EggProtoImplClass);
38
- build(): Array<AttributeMeta>;
39
- private buildAttributeMeta;
40
- }
41
- //#endregion
42
- //#region src/builder/IndexMetaBuilder.d.ts
43
- declare class IndexMetaBuilder {
44
- private readonly clazz;
45
- private readonly attributes;
46
- constructor(clazz: EggProtoImplClass, attributes: Array<AttributeMeta>);
47
- build(): Array<IndexMeta>;
48
- private buildIndexMeta;
49
- }
50
- //#endregion
51
- //#region src/builder/ModelMetaBuilder.d.ts
52
- declare class ModelMetaBuilder {
53
- private readonly clazz;
54
- constructor(clazz: EggProtoImplClass);
55
- build(): ModelMetadata;
56
- }
57
- //#endregion
58
- //#region src/decorator/Attribute.d.ts
59
- declare function Attribute(dataType: string, options?: AttributeOptions): (target: any, propertyKey: PropertyKey) => void;
60
- //#endregion
61
- //#region src/decorator/DataSource.d.ts
62
- declare function DataSource(dataSource: string): (clazz: EggProtoImplClass) => void;
63
- //#endregion
64
- //#region src/decorator/Model.d.ts
65
- declare function Model(param?: ModelParams): (clazz: EggProtoImplClass) => void;
66
- //#endregion
67
- //#region src/decorator/ModelIndex.d.ts
68
- declare function Index(fields: string[], params?: IndexOptions): (clazz: EggProtoImplClass) => void;
69
- //#endregion
70
- //#region src/util/ModelInfoUtil.d.ts
71
- type ModelAttributeMap = Map<string, ModelAttributeInfo>;
72
- declare class ModelInfoUtil {
73
- static setIsModel(isModel: boolean, clazz: EggProtoImplClass): void;
74
- static getIsModel(clazz: EggProtoImplClass): boolean;
75
- static setDataSource(dataSource: string, clazz: EggProtoImplClass): void;
76
- static getDataSource(clazz: EggProtoImplClass): string | undefined;
77
- static setTableName(tableName: string, clazz: EggProtoImplClass): void;
78
- static getTableName(clazz: EggProtoImplClass): string | undefined;
79
- static addModelIndex(fields: string[], options: IndexOptions | undefined, clazz: EggProtoImplClass): void;
80
- static getModelIndices(clazz: EggProtoImplClass): Array<ModelIndexInfo>;
81
- static addModelAttribute(dataType: string, options: AttributeOptions | undefined, clazz: EggProtoImplClass, property: string): void;
82
- static getModelAttributes(clazz: EggProtoImplClass): ModelAttributeMap | undefined;
83
- }
84
- //#endregion
85
- //#region src/util/ModelMetadataUtil.d.ts
86
- declare const MODEL_METADATA: unique symbol;
87
- declare class ModelMetadataUtil {
88
- static setModelMetadata(clazz: EggProtoImplClass, metaData: ModelMetadata): void;
89
- static getModelMetadata(clazz: EggProtoImplClass): ModelMetadata | undefined;
90
- }
91
- //#endregion
92
- //#region src/util/NameUtil.d.ts
93
- declare class NameUtil {
94
- /**
95
- * get table name
96
- * StudentScore -> student_scores
97
- */
98
- static getTableName(modelName: string): string;
99
- /**
100
- * get attribute name
101
- * userName -> user_name
102
- */
103
- static getAttributeName(propertyName: string): string;
104
- /**
105
- * [ 'user_name' ], unique
106
- * uk_user_name
107
- *
108
- * [ 'user_name', 'gender' ]
109
- * idx_user_name_gender
110
- */
111
- static getIndexName(fields: string[], options?: {
112
- unique?: boolean;
113
- }): string;
114
- }
115
- //#endregion
116
- export { Attribute, AttributeMeta, AttributeMetaBuilder, DataSource, Index, IndexMeta, IndexMetaBuilder, MODEL_METADATA, Model, ModelInfoUtil, ModelMetaBuilder, ModelMetadata, ModelMetadataUtil, NameUtil };
1
+ export * from '@eggjs/tegg-types/orm';
2
+ export * from './builder/index.ts';
3
+ export * from './decorator/index.ts';
4
+ export * from './model/index.ts';
5
+ export * from './util/index.ts';
package/dist/index.js CHANGED
@@ -1,251 +1,6 @@
1
- import { MetadataUtil, SingletonProto } from "@eggjs/core-decorator";
2
- import { AccessLevel, IS_MODEL, MODEL_DATA_ATTRIBUTES, MODEL_DATA_INDICES, MODEL_DATA_SOURCE, MODEL_DATA_TABLE_NAME, MODEL_PROTO_IMPL_TYPE } from "@eggjs/tegg-types";
3
- import _ from "lodash";
4
- import pluralize from "pluralize";
5
- import assert from "node:assert";
6
-
7
- export * from "@eggjs/tegg-types/orm"
8
-
9
- //#region src/model/AttributeMeta.ts
10
- var AttributeMeta = class {
11
- dataType;
12
- propertyName;
13
- attributeName;
14
- allowNull;
15
- autoIncrement;
16
- primary;
17
- unique;
18
- constructor(dataType, propertyName, attributeName, allowNull, autoIncrement, primary, unique) {
19
- this.dataType = dataType;
20
- this.propertyName = propertyName;
21
- this.attributeName = attributeName;
22
- this.allowNull = allowNull;
23
- this.autoIncrement = autoIncrement;
24
- this.primary = primary;
25
- this.unique = unique;
26
- }
27
- };
28
-
29
- //#endregion
30
- //#region src/model/IndexMeta.ts
31
- var IndexMeta = class {
32
- name;
33
- fields;
34
- unique;
35
- primary;
36
- constructor(name, fields, unique, primary) {
37
- this.name = name;
38
- this.fields = fields;
39
- this.unique = unique;
40
- this.primary = primary;
41
- }
42
- };
43
-
44
- //#endregion
45
- //#region src/model/ModelMetadata.ts
46
- var ModelMetadata = class {
47
- dataSource;
48
- tableName;
49
- attributes;
50
- indices;
51
- constructor(dataSource, tableName, attributes, indices) {
52
- this.dataSource = dataSource;
53
- this.tableName = tableName;
54
- this.attributes = attributes;
55
- this.indices = indices;
56
- }
57
- };
58
-
59
- //#endregion
60
- //#region src/util/ModelInfoUtil.ts
61
- var ModelInfoUtil = class {
62
- static setIsModel(isModel, clazz) {
63
- MetadataUtil.defineMetaData(IS_MODEL, isModel, clazz);
64
- }
65
- static getIsModel(clazz) {
66
- return MetadataUtil.getBooleanMetaData(IS_MODEL, clazz);
67
- }
68
- static setDataSource(dataSource, clazz) {
69
- MetadataUtil.defineMetaData(MODEL_DATA_SOURCE, dataSource, clazz);
70
- }
71
- static getDataSource(clazz) {
72
- return MetadataUtil.getMetaData(MODEL_DATA_SOURCE, clazz);
73
- }
74
- static setTableName(tableName, clazz) {
75
- MetadataUtil.defineMetaData(MODEL_DATA_TABLE_NAME, tableName, clazz);
76
- }
77
- static getTableName(clazz) {
78
- return MetadataUtil.getMetaData(MODEL_DATA_TABLE_NAME, clazz);
79
- }
80
- static addModelIndex(fields, options, clazz) {
81
- MetadataUtil.initOwnArrayMetaData(MODEL_DATA_INDICES, clazz, []).push({
82
- fields,
83
- options
84
- });
85
- }
86
- static getModelIndices(clazz) {
87
- return MetadataUtil.getArrayMetaData(MODEL_DATA_INDICES, clazz);
88
- }
89
- static addModelAttribute(dataType, options, clazz, property) {
90
- MetadataUtil.initOwnMapMetaData(MODEL_DATA_ATTRIBUTES, clazz, /* @__PURE__ */ new Map()).set(property, {
91
- dataType,
92
- options
93
- });
94
- }
95
- static getModelAttributes(clazz) {
96
- return MetadataUtil.getMetaData(MODEL_DATA_ATTRIBUTES, clazz);
97
- }
98
- };
99
-
100
- //#endregion
101
- //#region src/util/ModelMetadataUtil.ts
102
- const MODEL_METADATA = Symbol.for("EggPrototype#model#metadata");
103
- var ModelMetadataUtil = class {
104
- static setModelMetadata(clazz, metaData) {
105
- MetadataUtil.defineMetaData(MODEL_METADATA, metaData, clazz);
106
- }
107
- static getModelMetadata(clazz) {
108
- return MetadataUtil.getMetaData(MODEL_METADATA, clazz);
109
- }
110
- };
111
-
112
- //#endregion
113
- //#region src/util/NameUtil.ts
114
- var NameUtil = class {
115
- /**
116
- * get table name
117
- * StudentScore -> student_scores
118
- */
119
- static getTableName(modelName) {
120
- const modelNames = pluralize(modelName);
121
- return _.snakeCase(modelNames);
122
- }
123
- /**
124
- * get attribute name
125
- * userName -> user_name
126
- */
127
- static getAttributeName(propertyName) {
128
- return _.snakeCase(propertyName);
129
- }
130
- /**
131
- * [ 'user_name' ], unique
132
- * uk_user_name
133
- *
134
- * [ 'user_name', 'gender' ]
135
- * idx_user_name_gender
136
- */
137
- static getIndexName(fields, options) {
138
- const prefix = options?.unique ? "uk_" : "idx_";
139
- const names = fields.join("_");
140
- return prefix + names;
141
- }
142
- };
143
-
144
- //#endregion
145
- //#region src/builder/AttributeMetaBuilder.ts
146
- var AttributeMetaBuilder = class {
147
- clazz;
148
- constructor(clazz) {
149
- this.clazz = clazz;
150
- }
151
- build() {
152
- const modelAttributes = ModelInfoUtil.getModelAttributes(this.clazz);
153
- const attributes = [];
154
- if (!modelAttributes) throw new Error(`model ${this.clazz.name} has no attributes`);
155
- for (const [propertyName, attributeInfo] of modelAttributes) {
156
- const attribute = this.buildAttributeMeta(propertyName, attributeInfo);
157
- attributes.push(attribute);
158
- }
159
- return attributes;
160
- }
161
- buildAttributeMeta(propertyName, attributeInfo) {
162
- return new AttributeMeta(attributeInfo.dataType, propertyName, attributeInfo.options?.name ?? NameUtil.getAttributeName(propertyName), attributeInfo.options?.allowNull ?? true, attributeInfo.options?.autoIncrement ?? false, attributeInfo.options?.primary ?? false, attributeInfo.options?.unique ?? false);
163
- }
164
- };
165
-
166
- //#endregion
167
- //#region src/builder/IndexMetaBuilder.ts
168
- var IndexMetaBuilder = class {
169
- clazz;
170
- attributes;
171
- constructor(clazz, attributes) {
172
- this.clazz = clazz;
173
- this.attributes = attributes;
174
- }
175
- build() {
176
- return ModelInfoUtil.getModelIndices(this.clazz).map((indexInfo) => this.buildIndexMeta(indexInfo));
177
- }
178
- buildIndexMeta(indexInfo) {
179
- const fields = [];
180
- for (const field of indexInfo.fields) {
181
- const attribute = this.attributes.find((t) => t.propertyName === field);
182
- if (!attribute) throw new Error(`model ${this.clazz.name} has no attribute named ${field}`);
183
- fields.push(attribute.attributeName);
184
- }
185
- let indexName;
186
- if (indexInfo.options?.name) indexName = indexInfo.options.name;
187
- else indexName = NameUtil.getIndexName(fields, { unique: indexInfo.options?.unique });
188
- return new IndexMeta(indexName, fields, indexInfo.options?.unique ?? false, indexInfo.options?.primary ?? false);
189
- }
190
- };
191
-
192
- //#endregion
193
- //#region src/builder/ModelMetaBuilder.ts
194
- var ModelMetaBuilder = class {
195
- clazz;
196
- constructor(clazz) {
197
- this.clazz = clazz;
198
- }
199
- build() {
200
- const dataSource = ModelInfoUtil.getDataSource(this.clazz);
201
- const tableName = ModelInfoUtil.getTableName(this.clazz) || NameUtil.getTableName(this.clazz.name);
202
- const attributes = new AttributeMetaBuilder(this.clazz).build();
203
- const indices = new IndexMetaBuilder(this.clazz, attributes).build();
204
- return new ModelMetadata(dataSource, tableName, attributes, indices);
205
- }
206
- };
207
-
208
- //#endregion
209
- //#region src/decorator/Attribute.ts
210
- function Attribute(dataType, options) {
211
- return function(target, propertyKey) {
212
- const clazz = target.constructor;
213
- assert(typeof propertyKey === "string", `[model/${clazz.name}] expect method name be typeof string, but now is ${String(propertyKey)}`);
214
- ModelInfoUtil.addModelAttribute(dataType, options, clazz, propertyKey);
215
- };
216
- }
217
-
218
- //#endregion
219
- //#region src/decorator/DataSource.ts
220
- function DataSource(dataSource) {
221
- return function(clazz) {
222
- ModelInfoUtil.setDataSource(dataSource, clazz);
223
- };
224
- }
225
-
226
- //#endregion
227
- //#region src/decorator/Model.ts
228
- function Model(param) {
229
- return function(clazz) {
230
- ModelInfoUtil.setIsModel(true, clazz);
231
- const func = SingletonProto({
232
- name: clazz.name,
233
- accessLevel: AccessLevel.PUBLIC,
234
- protoImplType: MODEL_PROTO_IMPL_TYPE
235
- });
236
- if (param?.tableName) ModelInfoUtil.setTableName(param.tableName, clazz);
237
- if (param?.dataSource) ModelInfoUtil.setDataSource(param.dataSource, clazz);
238
- func(clazz);
239
- };
240
- }
241
-
242
- //#endregion
243
- //#region src/decorator/ModelIndex.ts
244
- function Index(fields, params) {
245
- return function(clazz) {
246
- ModelInfoUtil.addModelIndex(fields, params, clazz);
247
- };
248
- }
249
-
250
- //#endregion
251
- export { Attribute, AttributeMeta, AttributeMetaBuilder, DataSource, Index, IndexMeta, IndexMetaBuilder, MODEL_METADATA, Model, ModelInfoUtil, ModelMetaBuilder, ModelMetadata, ModelMetadataUtil, NameUtil };
1
+ export * from '@eggjs/tegg-types/orm';
2
+ export * from "./builder/index.js";
3
+ export * from "./decorator/index.js";
4
+ export * from "./model/index.js";
5
+ export * from "./util/index.js";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDIn0=
@@ -0,0 +1,10 @@
1
+ export declare class AttributeMeta {
2
+ readonly dataType: string;
3
+ readonly propertyName: string;
4
+ readonly attributeName: string;
5
+ readonly allowNull: boolean;
6
+ readonly autoIncrement: boolean;
7
+ readonly primary: boolean;
8
+ readonly unique: boolean;
9
+ constructor(dataType: string, propertyName: string, attributeName: string, allowNull: boolean, autoIncrement: boolean, primary: boolean, unique: boolean);
10
+ }
@@ -0,0 +1,19 @@
1
+ export class AttributeMeta {
2
+ dataType;
3
+ propertyName;
4
+ attributeName;
5
+ allowNull;
6
+ autoIncrement;
7
+ primary;
8
+ unique;
9
+ constructor(dataType, propertyName, attributeName, allowNull, autoIncrement, primary, unique) {
10
+ this.dataType = dataType;
11
+ this.propertyName = propertyName;
12
+ this.attributeName = attributeName;
13
+ this.allowNull = allowNull;
14
+ this.autoIncrement = autoIncrement;
15
+ this.primary = primary;
16
+ this.unique = unique;
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0cmlidXRlTWV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9BdHRyaWJ1dGVNZXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxhQUFhO0lBQ2YsUUFBUSxDQUFTO0lBQ2pCLFlBQVksQ0FBUztJQUNyQixhQUFhLENBQVM7SUFDdEIsU0FBUyxDQUFVO0lBQ25CLGFBQWEsQ0FBVTtJQUN2QixPQUFPLENBQVU7SUFDakIsTUFBTSxDQUFVO0lBRXpCLFlBQ0UsUUFBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsYUFBcUIsRUFDckIsU0FBa0IsRUFDbEIsYUFBc0IsRUFDdEIsT0FBZ0IsRUFDaEIsTUFBZTtRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiJ9
@@ -0,0 +1,7 @@
1
+ export declare class IndexMeta {
2
+ readonly name: string;
3
+ readonly fields: string[];
4
+ readonly unique: boolean;
5
+ readonly primary: boolean;
6
+ constructor(name: string, fields: string[], unique: boolean, primary: boolean);
7
+ }
@@ -0,0 +1,13 @@
1
+ export class IndexMeta {
2
+ name;
3
+ fields;
4
+ unique;
5
+ primary;
6
+ constructor(name, fields, unique, primary) {
7
+ this.name = name;
8
+ this.fields = fields;
9
+ this.unique = unique;
10
+ this.primary = primary;
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZXhNZXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL0luZGV4TWV0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sU0FBUztJQUNYLElBQUksQ0FBUztJQUNiLE1BQU0sQ0FBVztJQUNqQixNQUFNLENBQVU7SUFDaEIsT0FBTyxDQUFVO0lBRTFCLFlBQ0UsSUFBWSxFQUNaLE1BQWdCLEVBQ2hCLE1BQWUsRUFDZixPQUFnQjtRQUVoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,9 @@
1
+ import { AttributeMeta } from './AttributeMeta.ts';
2
+ import { IndexMeta } from './IndexMeta.ts';
3
+ export declare class ModelMetadata {
4
+ readonly dataSource: string | undefined;
5
+ readonly tableName: string;
6
+ readonly attributes: Array<AttributeMeta>;
7
+ readonly indices: Array<IndexMeta>;
8
+ constructor(dataSource: string | undefined, tableName: string, attributes: Array<AttributeMeta>, indices: Array<IndexMeta>);
9
+ }
@@ -0,0 +1,15 @@
1
+ import { AttributeMeta } from "./AttributeMeta.js";
2
+ import { IndexMeta } from "./IndexMeta.js";
3
+ export class ModelMetadata {
4
+ dataSource;
5
+ tableName;
6
+ attributes;
7
+ indices;
8
+ constructor(dataSource, tableName, attributes, indices) {
9
+ this.dataSource = dataSource;
10
+ this.tableName = tableName;
11
+ this.attributes = attributes;
12
+ this.indices = indices;
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxNZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9Nb2RlbE1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsTUFBTSxPQUFPLGFBQWE7SUFDZixVQUFVLENBQXFCO0lBQy9CLFNBQVMsQ0FBUztJQUNsQixVQUFVLENBQXVCO0lBQ2pDLE9BQU8sQ0FBbUI7SUFFbkMsWUFBWSxVQUE4QixFQUFFLFNBQWlCLEVBQUUsVUFBZ0MsRUFBRSxPQUF5QjtRQUN4SCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,3 @@
1
+ export * from './AttributeMeta.ts';
2
+ export * from './IndexMeta.ts';
3
+ export * from './ModelMetadata.ts';
@@ -0,0 +1,4 @@
1
+ export * from "./AttributeMeta.js";
2
+ export * from "./IndexMeta.js";
3
+ export * from "./ModelMetadata.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsb0JBQW9CLENBQUMifQ==
@@ -0,0 +1,15 @@
1
+ import type { AttributeOptions, EggProtoImplClass, IndexOptions, ModelAttributeInfo, ModelIndexInfo } from '@eggjs/tegg-types';
2
+ type ModelAttributeMap = Map<string, ModelAttributeInfo>;
3
+ export declare class ModelInfoUtil {
4
+ static setIsModel(isModel: boolean, clazz: EggProtoImplClass): void;
5
+ static getIsModel(clazz: EggProtoImplClass): boolean;
6
+ static setDataSource(dataSource: string, clazz: EggProtoImplClass): void;
7
+ static getDataSource(clazz: EggProtoImplClass): string | undefined;
8
+ static setTableName(tableName: string, clazz: EggProtoImplClass): void;
9
+ static getTableName(clazz: EggProtoImplClass): string | undefined;
10
+ static addModelIndex(fields: string[], options: IndexOptions | undefined, clazz: EggProtoImplClass): void;
11
+ static getModelIndices(clazz: EggProtoImplClass): Array<ModelIndexInfo>;
12
+ static addModelAttribute(dataType: string, options: AttributeOptions | undefined, clazz: EggProtoImplClass, property: string): void;
13
+ static getModelAttributes(clazz: EggProtoImplClass): ModelAttributeMap | undefined;
14
+ }
15
+ export {};
@@ -0,0 +1,43 @@
1
+ import { MetadataUtil } from '@eggjs/core-decorator';
2
+ import { IS_MODEL, MODEL_DATA_ATTRIBUTES, MODEL_DATA_INDICES, MODEL_DATA_SOURCE, MODEL_DATA_TABLE_NAME, } from '@eggjs/tegg-types';
3
+ export class ModelInfoUtil {
4
+ static setIsModel(isModel, clazz) {
5
+ MetadataUtil.defineMetaData(IS_MODEL, isModel, clazz);
6
+ }
7
+ static getIsModel(clazz) {
8
+ return MetadataUtil.getBooleanMetaData(IS_MODEL, clazz);
9
+ }
10
+ static setDataSource(dataSource, clazz) {
11
+ MetadataUtil.defineMetaData(MODEL_DATA_SOURCE, dataSource, clazz);
12
+ }
13
+ static getDataSource(clazz) {
14
+ return MetadataUtil.getMetaData(MODEL_DATA_SOURCE, clazz);
15
+ }
16
+ static setTableName(tableName, clazz) {
17
+ MetadataUtil.defineMetaData(MODEL_DATA_TABLE_NAME, tableName, clazz);
18
+ }
19
+ static getTableName(clazz) {
20
+ return MetadataUtil.getMetaData(MODEL_DATA_TABLE_NAME, clazz);
21
+ }
22
+ static addModelIndex(fields, options, clazz) {
23
+ const indexInfo = MetadataUtil.initOwnArrayMetaData(MODEL_DATA_INDICES, clazz, []);
24
+ indexInfo.push({
25
+ fields,
26
+ options,
27
+ });
28
+ }
29
+ static getModelIndices(clazz) {
30
+ return MetadataUtil.getArrayMetaData(MODEL_DATA_INDICES, clazz);
31
+ }
32
+ static addModelAttribute(dataType, options, clazz, property) {
33
+ const attributeMap = MetadataUtil.initOwnMapMetaData(MODEL_DATA_ATTRIBUTES, clazz, new Map());
34
+ attributeMap.set(property, {
35
+ dataType,
36
+ options,
37
+ });
38
+ }
39
+ static getModelAttributes(clazz) {
40
+ return MetadataUtil.getMetaData(MODEL_DATA_ATTRIBUTES, clazz);
41
+ }
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxJbmZvVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL01vZGVsSW5mb1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXJELE9BQU8sRUFDTCxRQUFRLEVBQ1IscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIscUJBQXFCLEdBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IsTUFBTSxPQUFPLGFBQWE7SUFDeEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFnQixFQUFFLEtBQXdCO1FBQzFELFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUF3QjtRQUN4QyxPQUFPLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBa0IsRUFBRSxLQUF3QjtRQUMvRCxZQUFZLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUF3QjtRQUMzQyxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBaUIsRUFBRSxLQUF3QjtRQUM3RCxZQUFZLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUF3QjtRQUMxQyxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBZ0IsRUFBRSxPQUFpQyxFQUFFLEtBQXdCO1FBQ2hHLE1BQU0sU0FBUyxHQUEwQixZQUFZLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDYixNQUFNO1lBQ04sT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQXdCO1FBQzdDLE9BQU8sWUFBWSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxPQUFxQyxFQUFFLEtBQXdCLEVBQUUsUUFBZ0I7UUFDMUgsTUFBTSxZQUFZLEdBQXNCLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ3pCLFFBQVE7WUFDUixPQUFPO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUF3QjtRQUNoRCxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNGIn0=
@@ -0,0 +1,7 @@
1
+ import type { EggProtoImplClass } from '@eggjs/tegg-types';
2
+ import { ModelMetadata } from '../model/index.ts';
3
+ export declare const MODEL_METADATA: unique symbol;
4
+ export declare class ModelMetadataUtil {
5
+ static setModelMetadata(clazz: EggProtoImplClass, metaData: ModelMetadata): void;
6
+ static getModelMetadata(clazz: EggProtoImplClass): ModelMetadata | undefined;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { MetadataUtil } from '@eggjs/core-decorator';
2
+ import { ModelMetadata } from "../model/index.js";
3
+ export const MODEL_METADATA = Symbol.for('EggPrototype#model#metadata');
4
+ export class ModelMetadataUtil {
5
+ static setModelMetadata(clazz, metaData) {
6
+ MetadataUtil.defineMetaData(MODEL_METADATA, metaData, clazz);
7
+ }
8
+ static getModelMetadata(clazz) {
9
+ return MetadataUtil.getMetaData(MODEL_METADATA, clazz);
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWxNZXRhZGF0YVV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9Nb2RlbE1ldGFkYXRhVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFFeEUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBd0IsRUFBRSxRQUF1QjtRQUN2RSxZQUFZLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUF3QjtRQUM5QyxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRiJ9
@@ -0,0 +1,22 @@
1
+ export declare class NameUtil {
2
+ /**
3
+ * get table name
4
+ * StudentScore -> student_scores
5
+ */
6
+ static getTableName(modelName: string): string;
7
+ /**
8
+ * get attribute name
9
+ * userName -> user_name
10
+ */
11
+ static getAttributeName(propertyName: string): string;
12
+ /**
13
+ * [ 'user_name' ], unique
14
+ * uk_user_name
15
+ *
16
+ * [ 'user_name', 'gender' ]
17
+ * idx_user_name_gender
18
+ */
19
+ static getIndexName(fields: string[], options?: {
20
+ unique?: boolean;
21
+ }): string;
22
+ }
@@ -0,0 +1,32 @@
1
+ import _ from 'lodash';
2
+ import pluralize from 'pluralize';
3
+ export class NameUtil {
4
+ /**
5
+ * get table name
6
+ * StudentScore -> student_scores
7
+ */
8
+ static getTableName(modelName) {
9
+ const modelNames = pluralize(modelName);
10
+ return _.snakeCase(modelNames);
11
+ }
12
+ /**
13
+ * get attribute name
14
+ * userName -> user_name
15
+ */
16
+ static getAttributeName(propertyName) {
17
+ return _.snakeCase(propertyName);
18
+ }
19
+ /**
20
+ * [ 'user_name' ], unique
21
+ * uk_user_name
22
+ *
23
+ * [ 'user_name', 'gender' ]
24
+ * idx_user_name_gender
25
+ */
26
+ static getIndexName(fields, options) {
27
+ const prefix = options?.unique ? 'uk_' : 'idx_';
28
+ const names = fields.join('_');
29
+ return prefix + names;
30
+ }
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZVV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9OYW1lVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxRQUFRO0lBQ25COzs7T0FHRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBaUI7UUFDbkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQW9CO1FBQzFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFnQixFQUFFLE9BQThCO1FBQ2xFLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2hELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsT0FBTyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiJ9
@@ -0,0 +1,3 @@
1
+ export * from './ModelInfoUtil.ts';
2
+ export * from './ModelMetadataUtil.ts';
3
+ export * from './NameUtil.ts';
@@ -0,0 +1,4 @@
1
+ export * from "./ModelInfoUtil.js";
2
+ export * from "./ModelMetadataUtil.js";
3
+ export * from "./NameUtil.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxlQUFlLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/tegg-orm-decorator",
3
- "version": "4.0.0-beta.8",
3
+ "version": "4.0.0-beta.9",
4
4
  "description": "tegg orm decorator",
5
5
  "type": "module",
6
6
  "exports": {
@@ -33,8 +33,8 @@
33
33
  "dependencies": {
34
34
  "lodash": "^4.17.21",
35
35
  "pluralize": "^8.0.0",
36
- "@eggjs/core-decorator": "4.0.0-beta.8",
37
- "@eggjs/tegg-types": "4.0.0-beta.8"
36
+ "@eggjs/core-decorator": "4.0.0-beta.9",
37
+ "@eggjs/tegg-types": "4.0.0-beta.9"
38
38
  },
39
39
  "publishConfig": {
40
40
  "access": "public"
@@ -52,7 +52,7 @@
52
52
  "types": "./dist/index.d.ts",
53
53
  "scripts": {
54
54
  "clean": "rimraf dist",
55
- "build": "tsdown",
55
+ "build": "tsdown && rimraf dist && tsc -b --clean && tsc",
56
56
  "typecheck": "tsc --noEmit"
57
57
  }
58
58
  }