@sqb/connect 4.10.0 → 4.10.2

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 (46) hide show
  1. package/package.json +3 -2
  2. package/types/client/adapter.d.ts +57 -0
  3. package/types/client/cursor-stream.d.ts +29 -0
  4. package/types/client/cursor.d.ts +116 -0
  5. package/types/client/extensions.d.ts +4 -0
  6. package/types/client/field-info-map.d.ts +12 -0
  7. package/types/client/helpers.d.ts +9 -0
  8. package/types/client/sqb-client.d.ts +65 -0
  9. package/types/client/sqb-connection.d.ts +74 -0
  10. package/types/client/types.d.ts +181 -0
  11. package/types/index.d.ts +34 -0
  12. package/types/orm/backward.d.ts +13 -0
  13. package/types/orm/base-entity.d.ts +8 -0
  14. package/types/orm/commands/command.helper.d.ts +14 -0
  15. package/types/orm/commands/count.command.d.ts +11 -0
  16. package/types/orm/commands/create.command.d.ts +20 -0
  17. package/types/orm/commands/delete.command.d.ts +11 -0
  18. package/types/orm/commands/find.command.d.ts +44 -0
  19. package/types/orm/commands/row-converter.d.ts +55 -0
  20. package/types/orm/commands/update.command.d.ts +22 -0
  21. package/types/orm/decorators/column.decorator.d.ts +4 -0
  22. package/types/orm/decorators/embedded.decorator.d.ts +3 -0
  23. package/types/orm/decorators/entity.decorator.d.ts +38 -0
  24. package/types/orm/decorators/events.decorator.d.ts +6 -0
  25. package/types/orm/decorators/foreignkey.decorator.d.ts +2 -0
  26. package/types/orm/decorators/index.decorator.d.ts +3 -0
  27. package/types/orm/decorators/link.decorator.d.ts +13 -0
  28. package/types/orm/decorators/primarykey.decorator.d.ts +3 -0
  29. package/types/orm/decorators/transform.decorator.d.ts +3 -0
  30. package/types/orm/model/association-field-metadata.d.ts +12 -0
  31. package/types/orm/model/association-node.d.ts +9 -0
  32. package/types/orm/model/association.d.ts +27 -0
  33. package/types/orm/model/column-field-metadata.d.ts +75 -0
  34. package/types/orm/model/embedded-field-metadata.d.ts +14 -0
  35. package/types/orm/model/entity-metadata.d.ts +50 -0
  36. package/types/orm/model/field-metadata.d.ts +16 -0
  37. package/types/orm/model/index-metadata.d.ts +18 -0
  38. package/types/orm/model/link-chain.d.ts +13 -0
  39. package/types/orm/orm.const.d.ts +2 -0
  40. package/types/orm/orm.type.d.ts +20 -0
  41. package/types/orm/repository.class.d.ts +140 -0
  42. package/types/orm/util/apply-mixins.d.ts +1 -0
  43. package/types/orm/util/extract-keyvalues.d.ts +2 -0
  44. package/types/orm/util/orm.helper.d.ts +13 -0
  45. package/types/orm/util/serialize-field.d.ts +2 -0
  46. package/types/types.d.ts +12 -0
@@ -0,0 +1,20 @@
1
+ import { SqbConnection } from '../../client/sqb-connection.js';
2
+ import { EntityMetadata } from '../model/entity-metadata.js';
3
+ export type CreateCommandArgs = {
4
+ entity: EntityMetadata;
5
+ connection: SqbConnection;
6
+ values: any;
7
+ returning?: boolean;
8
+ };
9
+ type CreateCommandContext = {
10
+ entity: EntityMetadata;
11
+ queryParams: any;
12
+ queryValues: any;
13
+ colCount: number;
14
+ };
15
+ export declare class CreateCommand {
16
+ protected constructor();
17
+ static execute(args: CreateCommandArgs): Promise<any>;
18
+ protected static _prepareParams(ctx: CreateCommandContext, entity: EntityMetadata, values: any, prefix?: string, suffix?: string): Promise<void>;
19
+ }
20
+ export {};
@@ -0,0 +1,11 @@
1
+ import { SqbConnection } from '../../client/sqb-connection.js';
2
+ import { EntityMetadata } from '../model/entity-metadata.js';
3
+ import { Repository } from '../repository.class.js';
4
+ export type DestroyCommandArgs = {
5
+ entity: EntityMetadata;
6
+ connection: SqbConnection;
7
+ } & Repository.DeleteManyOptions;
8
+ export declare class DeleteCommand {
9
+ protected constructor();
10
+ static execute(args: DestroyCommandArgs): Promise<number>;
11
+ }
@@ -0,0 +1,44 @@
1
+ import { SqbConnection } from '../../client/sqb-connection.js';
2
+ import { AssociationNode } from '../model/association-node.js';
3
+ import { EntityMetadata } from '../model/entity-metadata.js';
4
+ import { Repository } from '../repository.class.js';
5
+ import { RowConverter } from './row-converter.js';
6
+ export type FindCommandArgs = {
7
+ entity: EntityMetadata;
8
+ connection: SqbConnection;
9
+ } & Repository.FindManyOptions;
10
+ export declare class FindCommand {
11
+ maxEagerFetch: number;
12
+ maxSubQueries: number;
13
+ readonly mainEntity: EntityMetadata;
14
+ readonly resultEntity: EntityMetadata;
15
+ readonly converter: RowConverter;
16
+ readonly mainAlias: string;
17
+ resultAlias: string;
18
+ private _joins;
19
+ private _selectColumns;
20
+ private _filter;
21
+ private _sort?;
22
+ protected constructor(selectEntity: EntityMetadata, outputEntity: EntityMetadata);
23
+ static create(source: EntityMetadata | AssociationNode, opts?: {
24
+ maxSubQueries?: number;
25
+ maxEagerFetch?: number;
26
+ }): Promise<FindCommand>;
27
+ static execute(args: FindCommandArgs): Promise<any[]>;
28
+ addFields(opts?: {
29
+ tableAlias?: string;
30
+ converter?: RowConverter;
31
+ entity?: EntityMetadata;
32
+ pick?: string[];
33
+ omit?: string[];
34
+ include?: string[];
35
+ sort?: string[];
36
+ prefix?: string;
37
+ suffix?: string;
38
+ }): Promise<void>;
39
+ private _selectColumn;
40
+ filter(filter: any): Promise<void>;
41
+ sort(sortFields: string[]): Promise<void>;
42
+ execute(args: Pick<FindCommandArgs, 'connection' | 'distinct' | 'offset' | 'limit' | 'params' | 'onTransformRow'>): Promise<any[]>;
43
+ private _getEntityFromAlias;
44
+ }
@@ -0,0 +1,55 @@
1
+ import { Type } from 'ts-gems';
2
+ import { DataType } from '@sqb/builder';
3
+ import type { FieldInfoMap } from '../../client/field-info-map';
4
+ import { SqbConnection } from '../../client/sqb-connection.js';
5
+ import { ColumnTransformFunction } from '../orm.type.js';
6
+ import type { Repository } from '../repository.class.js';
7
+ import type { FindCommand } from './find.command.js';
8
+ export interface ValueProperty {
9
+ fieldAlias: string;
10
+ dataType?: DataType;
11
+ parse?: ColumnTransformFunction;
12
+ }
13
+ export interface ObjectProperty {
14
+ converter: RowConverter;
15
+ type: Type;
16
+ }
17
+ export interface NestedProperty {
18
+ converter: RowConverter;
19
+ type: Type;
20
+ parentField: string;
21
+ keyField: string;
22
+ findCommand: FindCommand;
23
+ sort?: string[];
24
+ paramValues: any[];
25
+ }
26
+ export declare class RowConverter {
27
+ resultType: Type;
28
+ parent?: RowConverter | undefined;
29
+ private _properties;
30
+ private _propertyKeys?;
31
+ constructor(resultType: Type, parent?: RowConverter | undefined);
32
+ addValueProperty(args: {
33
+ name: string;
34
+ fieldAlias: string;
35
+ dataType?: DataType;
36
+ parse?: ColumnTransformFunction;
37
+ }): ValueProperty;
38
+ addObjectProperty(args: {
39
+ name: string;
40
+ type: Type;
41
+ }): ObjectProperty;
42
+ addNestedProperty(args: {
43
+ name: string;
44
+ type: Type;
45
+ findCommand: FindCommand;
46
+ parentField: string;
47
+ keyField: string;
48
+ sort?: string[];
49
+ }): NestedProperty;
50
+ get keys(): string[];
51
+ transform(connection: SqbConnection, fields: FieldInfoMap, rows: any, onTransform?: Repository.TransformRowFunction): Promise<any[]>;
52
+ private _rowToObject;
53
+ private _iterateForNested;
54
+ private _checkCircularDep;
55
+ }
@@ -0,0 +1,22 @@
1
+ import { SqbConnection } from '../../client/sqb-connection.js';
2
+ import { EntityMetadata } from '../model/entity-metadata.js';
3
+ import { Repository } from '../repository.class.js';
4
+ export type UpdateCommandArgs = {
5
+ entity: EntityMetadata;
6
+ connection: SqbConnection;
7
+ values: any;
8
+ } & Repository.UpdateManyOptions;
9
+ type UpdateCommandContext = {
10
+ entity: EntityMetadata;
11
+ queryParams: any;
12
+ queryValues: any;
13
+ queryFilter: any[];
14
+ colCount: number;
15
+ };
16
+ export declare class UpdateCommand {
17
+ protected constructor();
18
+ static execute(args: UpdateCommandArgs): Promise<number>;
19
+ protected static _prepareFilter(ctx: UpdateCommandContext, filter: any): Promise<void>;
20
+ protected static _prepareParams(ctx: UpdateCommandContext, entity: EntityMetadata, values: any, prefix?: string, suffix?: string): Promise<void>;
21
+ }
22
+ export {};
@@ -0,0 +1,4 @@
1
+ import { DataType } from '@sqb/builder';
2
+ import { ColumnFieldOptions } from '../model/column-field-metadata.js';
3
+ export declare function Column(type?: DataType): PropertyDecorator;
4
+ export declare function Column(options?: ColumnFieldOptions): PropertyDecorator;
@@ -0,0 +1,3 @@
1
+ import { EmbeddedFieldOptions } from '../model/embedded-field-metadata.js';
2
+ import { TypeThunk } from '../orm.type.js';
3
+ export declare function Embedded(type?: TypeThunk, options?: EmbeddedFieldOptions): PropertyDecorator;
@@ -0,0 +1,38 @@
1
+ import { Maybe, Type } from 'ts-gems';
2
+ import { AssociationFieldMetadata } from '../model/association-field-metadata.js';
3
+ import { ColumnFieldMetadata } from '../model/column-field-metadata.js';
4
+ import { EmbeddedFieldMetadata } from '../model/embedded-field-metadata.js';
5
+ import { AnyFieldMetadata, EntityMetadata, EntityOptions } from '../model/entity-metadata.js';
6
+ import { IndexMetadata } from '../model/index-metadata.js';
7
+ export declare function Entity(options?: EntityOptions | string): ClassDecorator;
8
+ export declare namespace Entity {
9
+ const getMetadata: typeof EntityMetadata.get;
10
+ const getOwnMetadata: typeof EntityMetadata.getOwn;
11
+ function getField<T>(ctor: Type<T>, key: keyof T | string): Maybe<AnyFieldMetadata>;
12
+ function getColumnField<T>(ctor: Type<T>, key: keyof T | string): Maybe<ColumnFieldMetadata>;
13
+ function getEmbeddedField<T>(ctor: Type<T>, key: keyof T | string): Maybe<EmbeddedFieldMetadata>;
14
+ function getAssociationField<T>(ctor: Type<T>, key: keyof T | string): Maybe<AssociationFieldMetadata>;
15
+ function getColumnFieldByFieldName(ctor: Type, fieldName: string): Maybe<ColumnFieldMetadata>;
16
+ function find(ctor: Type, predicate: (el: AnyFieldMetadata) => boolean): Maybe<AnyFieldMetadata>;
17
+ function getFieldNames(ctor: Type, filter?: (el: AnyFieldMetadata) => boolean): string[];
18
+ function getColumnFieldNames(ctor: Type): string[];
19
+ function getEmbeddedFieldNames(ctor: Type): string[];
20
+ function getAssociationFieldNames(ctor: Type): string[];
21
+ function getNonAssociationFieldNames(ctor: Type): string[];
22
+ function getInsertColumnNames(ctor: Type): string[];
23
+ function getUpdateColumnNames(ctor: Type): string[];
24
+ function getPrimaryIndex(ctor: Type): Maybe<IndexMetadata>;
25
+ function getPrimaryIndexColumns(ctor: Type): ColumnFieldMetadata[];
26
+ function mixin<A, B>(derivedCtor: Type<A>, baseB: Type<B>): Type<A & B>;
27
+ function mixin<A, B, C>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>): Type<A & B & C>;
28
+ function mixin<A, B, C, D>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>): Type<A & B & C & D>;
29
+ function mixin<A, B, C, D, E>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>): Type<A & B & C & D & E>;
30
+ function mixin<A, B, C, D, E, F>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>, baseF: Type<F>): Type<A & B & C & D & E & F>;
31
+ function Pick<T, K extends keyof T>(classRef: Type<T>, keys: readonly K[]): Type<Pick<T, typeof keys[number]>>;
32
+ function Omit<T, K extends keyof T>(classRef: Type<T>, keys: readonly K[]): Type<Omit<T, typeof keys[number]>>;
33
+ function Union<A, B>(baseA: Type<A>, baseB: Type<B>): Type<A & B>;
34
+ function Union<A, B, C>(baseA: Type<A>, baseB: Type<B>, baseC: Type<C>): Type<A & B & C>;
35
+ function Union<A, B, C, D>(baseA: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>): Type<A & B & C & D>;
36
+ function Union<A, B, C, D, E>(baseA: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>): Type<A & B & C & D & E>;
37
+ function Union<A, B, C, D, E, F>(baseA: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>, baseF: Type<F>): Type<A & B & C & D & E & F>;
38
+ }
@@ -0,0 +1,6 @@
1
+ export declare function BeforeInsert(): PropertyDecorator;
2
+ export declare function BeforeUpdate(): PropertyDecorator;
3
+ export declare function BeforeDestroy(): PropertyDecorator;
4
+ export declare function AfterInsert(): PropertyDecorator;
5
+ export declare function AfterUpdate(): PropertyDecorator;
6
+ export declare function AfterDestroy(): PropertyDecorator;
@@ -0,0 +1,2 @@
1
+ import { TypeThunk } from '../orm.type.js';
2
+ export declare function ForeignKey(type: TypeThunk, targetKey?: string): PropertyDecorator;
@@ -0,0 +1,3 @@
1
+ import { IndexMetadata } from '../model/index-metadata.js';
2
+ export declare function Index(fields: string | string[], options?: Omit<IndexMetadata, 'columns'>): ClassDecorator;
3
+ export declare function Index(options?: Omit<IndexMetadata, 'columns'>): PropertyDecorator;
@@ -0,0 +1,13 @@
1
+ import { AssociationFieldOptions } from '../model/association-field-metadata.js';
2
+ import { TypeThunk } from '../orm.type.js';
3
+ type LinkArgs<T> = {
4
+ sourceKey?: string;
5
+ targetKey?: keyof T;
6
+ where?: object | object[];
7
+ };
8
+ type LinkPropertyDecorator = PropertyDecorator & {
9
+ toOne<T>(type: TypeThunk<T>, args?: LinkArgs<T>): LinkPropertyDecorator;
10
+ toMany<T>(type: TypeThunk<T>, args?: LinkArgs<T>): LinkPropertyDecorator;
11
+ };
12
+ export declare function Link(options?: AssociationFieldOptions): LinkPropertyDecorator;
13
+ export {};
@@ -0,0 +1,3 @@
1
+ import { IndexMetadata } from '../model/index-metadata.js';
2
+ export declare function PrimaryKey(fields: string | string[], options?: Omit<IndexMetadata, 'columns' | 'unique' | 'primary'>): ClassDecorator;
3
+ export declare function PrimaryKey(options?: Omit<IndexMetadata, 'columns' | 'unique' | 'primary'>): PropertyDecorator;
@@ -0,0 +1,3 @@
1
+ import { ColumnTransformFunction } from '../orm.type.js';
2
+ export declare function Parse(fn: ColumnTransformFunction): PropertyDecorator;
3
+ export declare function Serialize(fn: ColumnTransformFunction): PropertyDecorator;
@@ -0,0 +1,12 @@
1
+ import { AssociationNode } from './association-node.js';
2
+ import { EntityMetadata } from './entity-metadata.js';
3
+ import { FieldMetadata } from './field-metadata.js';
4
+ export type AssociationFieldOptions = Partial<Omit<AssociationFieldMetadata, 'entity' | 'name' | 'kind' | 'association'>>;
5
+ export interface AssociationFieldMetadata extends FieldMetadata {
6
+ readonly kind: 'association';
7
+ readonly association: AssociationNode;
8
+ }
9
+ export declare namespace AssociationFieldMetadata {
10
+ function create(entity: EntityMetadata, name: string, association: AssociationNode, options?: AssociationFieldOptions): AssociationFieldMetadata;
11
+ function assign(target: AssociationFieldMetadata, options: AssociationFieldOptions): void;
12
+ }
@@ -0,0 +1,9 @@
1
+ import { Association } from './association.js';
2
+ export declare class AssociationNode extends Association {
3
+ prior?: AssociationNode;
4
+ next?: AssociationNode;
5
+ conditions?: any[];
6
+ getFirst(): AssociationNode;
7
+ getLast(): AssociationNode;
8
+ returnsMany(): boolean;
9
+ }
@@ -0,0 +1,27 @@
1
+ import { AssociationSettings, TypeThunk } from '../orm.type.js';
2
+ import { ColumnFieldMetadata } from './column-field-metadata.js';
3
+ import { EntityMetadata } from './entity-metadata.js';
4
+ export declare class Association {
5
+ private _resolved?;
6
+ private _source?;
7
+ private _target?;
8
+ private _sourceKey?;
9
+ private _targetKey?;
10
+ private _sourceProperty?;
11
+ private _targetProperty?;
12
+ name: string;
13
+ readonly source: TypeThunk;
14
+ readonly target: TypeThunk;
15
+ readonly sourceKey?: string;
16
+ readonly targetKey?: string;
17
+ readonly many: boolean;
18
+ constructor(name: string, args: AssociationSettings);
19
+ resolveSource(): Promise<EntityMetadata>;
20
+ resolveTarget(): Promise<EntityMetadata>;
21
+ resolveSourceKey(): Promise<string>;
22
+ resolveSourceProperty(): Promise<ColumnFieldMetadata>;
23
+ resolveTargetKey(): Promise<string>;
24
+ resolveTargetProperty(): Promise<ColumnFieldMetadata>;
25
+ returnsMany(): boolean;
26
+ protected _resolveKeys(): Promise<void>;
27
+ }
@@ -0,0 +1,75 @@
1
+ import { DataType } from '@sqb/builder';
2
+ import type { ColumnAutoGenerationStrategy, ColumnTransformFunction, DefaultValueGetter, EnumValue, FieldValue } from '../orm.type.js';
3
+ import type { EntityMetadata } from './entity-metadata.js';
4
+ import { FieldMetadata } from './field-metadata.js';
5
+ export type ColumnFieldOptions = Partial<Omit<ColumnFieldMetadata, 'entity' | 'name' | 'kind'>>;
6
+ export interface ColumnFieldMetadata extends FieldMetadata {
7
+ readonly kind: 'column';
8
+ /**
9
+ Name of table field
10
+ */
11
+ fieldName: string;
12
+ /**
13
+ JS type. String, Boolean, Person etc
14
+ */
15
+ type?: Function;
16
+ /**
17
+ * Column data type
18
+ */
19
+ dataType?: DataType;
20
+ /**
21
+ * Field comment
22
+ */
23
+ comment?: string;
24
+ /**
25
+ * Column's default value
26
+ */
27
+ default?: FieldValue | DefaultValueGetter;
28
+ /**
29
+ * Indicates if column data is an array
30
+ */
31
+ isArray?: boolean;
32
+ /**
33
+ * Indicates enum values
34
+ */
35
+ enum?: EnumValue;
36
+ /**
37
+ * Character or byte length of column
38
+ */
39
+ length?: number;
40
+ /**
41
+ * The precision for a decimal field
42
+ */
43
+ precision?: number;
44
+ /**
45
+ * The scale for a decimal field
46
+ */
47
+ scale?: number;
48
+ /**
49
+ * Fields's collation.
50
+ */
51
+ collation?: string;
52
+ /**
53
+ * Indicates auto generation strategy
54
+ */
55
+ autoGenerated?: ColumnAutoGenerationStrategy;
56
+ /**
57
+ * Indicates if column value can be null
58
+ */
59
+ notNull?: boolean;
60
+ /**
61
+ * Indicates if column value is used in update queries
62
+ */
63
+ noUpdate?: boolean;
64
+ /**
65
+ * Indicates if column value is used in insert queries
66
+ */
67
+ noInsert?: boolean;
68
+ parse?: ColumnTransformFunction;
69
+ serialize?: ColumnTransformFunction;
70
+ }
71
+ export declare namespace ColumnFieldMetadata {
72
+ function create(entity: EntityMetadata, name: string, options?: ColumnFieldOptions): ColumnFieldMetadata;
73
+ function assign(target: ColumnFieldMetadata, options: ColumnFieldOptions): void;
74
+ function checkEnumValue(col: ColumnFieldMetadata, v: FieldValue): void;
75
+ }
@@ -0,0 +1,14 @@
1
+ import { TypeThunk } from '../orm.type.js';
2
+ import type { EntityMetadata } from './entity-metadata.js';
3
+ import { FieldMetadata } from './field-metadata.js';
4
+ export type EmbeddedFieldOptions = Partial<Omit<EmbeddedFieldMetadata, 'entity' | 'name' | 'kind' | 'type'>>;
5
+ export interface EmbeddedFieldMetadata extends FieldMetadata {
6
+ readonly kind: 'object';
7
+ type: TypeThunk;
8
+ fieldNamePrefix?: string;
9
+ fieldNameSuffix?: string;
10
+ }
11
+ export declare namespace EmbeddedFieldMetadata {
12
+ function create(entity: EntityMetadata, name: string, type: TypeThunk, options?: EmbeddedFieldOptions): EmbeddedFieldMetadata;
13
+ function resolveType(meta: EmbeddedFieldMetadata): Promise<EntityMetadata>;
14
+ }
@@ -0,0 +1,50 @@
1
+ import { Maybe, Type } from 'ts-gems';
2
+ import { Ctor, TypeThunk } from '../orm.type.js';
3
+ import { Association } from './association.js';
4
+ import { AssociationFieldMetadata, AssociationFieldOptions } from './association-field-metadata.js';
5
+ import { AssociationNode } from './association-node.js';
6
+ import { ColumnFieldMetadata, ColumnFieldOptions } from './column-field-metadata.js';
7
+ import { EmbeddedFieldMetadata, EmbeddedFieldOptions } from './embedded-field-metadata.js';
8
+ import { IndexMetadata } from './index-metadata.js';
9
+ export type AnyFieldMetadata = ColumnFieldMetadata | EmbeddedFieldMetadata | AssociationFieldMetadata;
10
+ export type EntityOptions = Partial<Pick<EntityMetadata, 'name' | 'schema' | 'comment' | 'tableName'>>;
11
+ export interface EntityMetadata {
12
+ readonly ctor: Type;
13
+ readonly name: string;
14
+ tableName?: string;
15
+ schema?: string;
16
+ comment?: string;
17
+ fields: Record<string, AnyFieldMetadata>;
18
+ indexes: IndexMetadata[];
19
+ foreignKeys: Association[];
20
+ eventListeners: Record<string, Function[]>;
21
+ }
22
+ export declare namespace EntityMetadata {
23
+ function define(ctor: Ctor): EntityMetadata;
24
+ function get(ctor: Ctor): Maybe<EntityMetadata>;
25
+ function getOwn(ctor: Ctor): Maybe<EntityMetadata>;
26
+ function getField(entity: EntityMetadata, fieldName: string): Maybe<AnyFieldMetadata>;
27
+ function getColumnField(entity: EntityMetadata, fieldName: string): Maybe<ColumnFieldMetadata>;
28
+ function getEmbeddedField(entity: EntityMetadata, fieldName: string): Maybe<EmbeddedFieldMetadata>;
29
+ function getAssociationField(entity: EntityMetadata, fieldName: string): Maybe<AssociationFieldMetadata>;
30
+ function findField(entity: EntityMetadata, predicate: (el: AnyFieldMetadata) => boolean): Maybe<AnyFieldMetadata>;
31
+ function getColumnFieldByFieldName(entity: EntityMetadata, fieldName: string): Maybe<ColumnFieldMetadata>;
32
+ function getFieldNames(entity: EntityMetadata, filter?: (el: AnyFieldMetadata) => boolean): string[];
33
+ function getColumnFieldNames(entity: EntityMetadata): string[];
34
+ function getEmbeddedFieldNames(entity: EntityMetadata): string[];
35
+ function getAssociationFieldNames(entity: EntityMetadata): string[];
36
+ function getNonAssociationFieldNames(entity: EntityMetadata): string[];
37
+ function getInsertColumnNames(entity: EntityMetadata): string[];
38
+ function getUpdateColumnNames(entity: EntityMetadata): string[];
39
+ function getPrimaryIndex(entity: EntityMetadata): Maybe<IndexMetadata>;
40
+ function getPrimaryIndexColumns(entity: EntityMetadata): ColumnFieldMetadata[];
41
+ function getForeignKeyFor(src: EntityMetadata, trg: EntityMetadata): Promise<Maybe<Association>>;
42
+ function addIndex(entity: EntityMetadata, index: IndexMetadata): void;
43
+ function addForeignKey(entity: EntityMetadata, propertyKey: string, target: TypeThunk, targetKey?: string): void;
44
+ function addEventListener(entity: EntityMetadata, event: string, fn: Function): void;
45
+ function defineColumnField(entity: EntityMetadata, name: string, options?: ColumnFieldOptions): ColumnFieldMetadata;
46
+ function defineEmbeddedField(entity: EntityMetadata, name: string, type: TypeThunk, options?: EmbeddedFieldOptions): EmbeddedFieldMetadata;
47
+ function defineAssociationField(entity: EntityMetadata, propertyKey: string, association: AssociationNode, options?: AssociationFieldOptions): AssociationFieldMetadata;
48
+ function setPrimaryKeys(entity: EntityMetadata, column: string | string[], options?: Omit<IndexMetadata, 'columns' | 'unique' | 'primary'>): void;
49
+ function mixin(derived: EntityMetadata, base: EntityMetadata, filter?: (n: string) => boolean): void;
50
+ }
@@ -0,0 +1,16 @@
1
+ import type { FieldKind } from '../orm.type.js';
2
+ import type { EntityMetadata } from './entity-metadata.js';
3
+ export interface FieldMetadata {
4
+ readonly entity: EntityMetadata;
5
+ readonly name: string;
6
+ readonly kind: FieldKind;
7
+ /**
8
+ * Indicates whether or not to hide this field by default when making queries.
9
+ */
10
+ hidden?: boolean;
11
+ /**
12
+ * Indicates whether or not to include this field by default when making queries.
13
+ * If this set to "true" the field must be requested using "include" or "pick" option.
14
+ */
15
+ exclusive?: boolean;
16
+ }
@@ -0,0 +1,18 @@
1
+ export interface IndexMetadata {
2
+ /**
3
+ * Columns of the index
4
+ */
5
+ columns: string[];
6
+ /**
7
+ * Name of the index
8
+ */
9
+ name?: string;
10
+ /**
11
+ * Specifies if index is unique
12
+ */
13
+ unique?: boolean;
14
+ /**
15
+ * Specifies if index is primary
16
+ */
17
+ primary?: boolean;
18
+ }
@@ -0,0 +1,13 @@
1
+ import { Type } from 'ts-gems';
2
+ import { TypeResolver, TypeThunk } from '../orm.type.js';
3
+ import { AssociationNode } from './association-node.js';
4
+ export declare class LinkChain<T> {
5
+ target: TypeThunk<T>;
6
+ first: AssociationNode;
7
+ current: AssociationNode;
8
+ constructor(target: TypeThunk<T>, targetKey?: keyof T, sourceKey?: string, many?: boolean);
9
+ where(conditions: object | object[]): this;
10
+ linkToOne<K>(target: Type<K> | TypeResolver<K>, targetColumn?: keyof K, parentColumn?: keyof T): LinkChain<K>;
11
+ linkToMany<K>(target: Type<K> | TypeResolver<K>, targetColumn?: keyof K, parentColumn?: keyof T): LinkChain<K>;
12
+ private _newNode;
13
+ }
@@ -0,0 +1,2 @@
1
+ export declare const ENTITY_METADATA_KEY: unique symbol;
2
+ export declare const REPOSITORY_KEY: unique symbol;
@@ -0,0 +1,20 @@
1
+ import { Type } from 'ts-gems';
2
+ export type Ctor = Type | Function;
3
+ export type FieldKind = 'column' | 'object' | 'association';
4
+ /**
5
+ * Indicates auto generation strategy
6
+ */
7
+ export type ColumnAutoGenerationStrategy = 'increment' | 'uuid' | 'rowid' | 'timestamp' | 'custom';
8
+ export type ColumnTransformFunction = (value: any, name: string) => any;
9
+ export type TypeResolver<T> = () => Type<T> | Promise<Type<T>>;
10
+ export type TypeThunk<T = any> = Type<T> | TypeResolver<T>;
11
+ export type EnumValue = (FieldValue)[] | Object;
12
+ export type FieldValue = string | number | boolean | Date | null;
13
+ export type DefaultValueGetter = (obj?: any) => FieldValue | undefined;
14
+ export interface AssociationSettings {
15
+ source: TypeThunk;
16
+ target: TypeThunk;
17
+ sourceKey?: string;
18
+ targetKey?: string;
19
+ many?: boolean;
20
+ }