/
BaseEntity.ts
77 lines (62 loc) · 3.16 KB
/
BaseEntity.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { Reference, type Ref } from './Reference';
import type { AutoPath, EntityData, EntityDTO, Loaded, LoadedReference, AddEager, EntityKey, FromEntityType, IsSubset, MergeSelected } from '../typings';
import { EntityAssigner, type AssignOptions } from './EntityAssigner';
import type { EntityLoaderOptions } from './EntityLoader';
import { EntitySerializer, type SerializeOptions } from '../serialization/EntitySerializer';
import { helper } from './wrap';
import type { FindOneOptions } from '../drivers/IDatabaseDriver';
export abstract class BaseEntity {
isInitialized(): boolean {
return helper(this).__initialized;
}
isTouched(): boolean {
return helper(this).__touched;
}
populated(populated = true): void {
helper(this).populated(populated);
}
async populate<Entity extends this = this, Hint extends string = never>(
populate: AutoPath<Entity, Hint>[] | false,
options: EntityLoaderOptions<Entity> = {},
): Promise<Loaded<Entity, Hint>> {
return helper(this as Entity).populate(populate, options);
}
toReference<Entity extends this = this>(): Ref<Entity> & LoadedReference<Loaded<Entity, AddEager<Entity>>> {
return Reference.create(this) as unknown as Ref<Entity> & LoadedReference<Loaded<Entity, AddEager<Entity>>>;
}
toObject<Entity extends this = this>(): EntityDTO<Entity>;
toObject<Entity extends this = this>(ignoreFields: never[]): EntityDTO<Entity>;
toObject<Entity extends this = this, Ignored extends EntityKey<Entity> = never>(ignoreFields: Ignored[]): Omit<EntityDTO<Entity>, Ignored>;
toObject<Entity extends this = this, Ignored extends EntityKey<Entity> = never>(ignoreFields?: Ignored[]): Omit<EntityDTO<Entity>, Ignored> {
return helper(this as Entity).toObject(ignoreFields!);
}
toPOJO<Entity extends this = this>(): EntityDTO<Entity> {
return helper(this as Entity).toPOJO();
}
serialize<Entity extends this = this, Hint extends string = never, Exclude extends string = never>(options?: SerializeOptions<Entity, Hint, Exclude>): EntityDTO<Loaded<Entity, Hint>> {
return EntitySerializer.serialize(this as Entity, options);
}
assign<
Entity extends this,
Naked extends FromEntityType<Entity> = FromEntityType<Entity>,
Convert extends boolean = false,
Data extends EntityData<Naked, Convert> | Partial<EntityDTO<Naked>> = EntityData<Naked, Convert> | Partial<EntityDTO<Naked>>,
>(data: Data & IsSubset<EntityData<Naked>, Data>, options: AssignOptions<Convert> = {}): MergeSelected<Entity, Naked, keyof Data & string> {
return EntityAssigner.assign(this as Entity, data as any, options) as any;
}
init<
Entity extends this = this,
Hint extends string = never,
Fields extends string = '*',
Excludes extends string = never,
>(options?: FindOneOptions<Entity, Hint, Fields, Excludes>): Promise<Loaded<Entity, Hint, Fields, Excludes> | null> {
return helper(this as Entity).init(options);
}
getSchema(): string | undefined {
return helper(this).getSchema();
}
setSchema(schema?: string): void {
helper(this).setSchema(schema);
}
}
Object.defineProperty(BaseEntity.prototype, '__baseEntity', { value: true, writable: false, enumerable: false });