@iamkirbki/database-handler-core 4.3.0 → 4.4.0
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.
- package/dist/abstract/Controller.d.ts +17 -0
- package/dist/abstract/Controller.d.ts.map +1 -0
- package/dist/abstract/Controller.js +47 -0
- package/dist/abstract/Model.d.ts +33 -19
- package/dist/abstract/Model.d.ts.map +1 -1
- package/dist/abstract/Model.js +177 -120
- package/dist/abstract/SchemaTableBuilder.d.ts +1 -1
- package/dist/abstract/SchemaTableBuilder.d.ts.map +1 -1
- package/dist/abstract/model/ModelRelation.d.ts +23 -0
- package/dist/abstract/model/ModelRelation.d.ts.map +1 -0
- package/dist/abstract/model/ModelRelation.js +130 -0
- package/dist/base/Query.d.ts +10 -13
- package/dist/base/Query.d.ts.map +1 -1
- package/dist/base/Query.js +68 -26
- package/dist/base/Record.d.ts +4 -2
- package/dist/base/Record.d.ts.map +1 -1
- package/dist/base/Record.js +24 -14
- package/dist/base/Table.d.ts +12 -7
- package/dist/base/Table.d.ts.map +1 -1
- package/dist/base/Table.js +87 -47
- package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts +4 -0
- package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts.map +1 -0
- package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.js +6 -0
- package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts +4 -0
- package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts.map +1 -0
- package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.js +6 -0
- package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts +4 -0
- package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts.map +1 -0
- package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.js +6 -0
- package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts +4 -0
- package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts.map +1 -0
- package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.js +6 -0
- package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts +4 -0
- package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts.map +1 -0
- package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.js +6 -0
- package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts +4 -0
- package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts.map +1 -0
- package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.js +6 -0
- package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts +4 -0
- package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts.map +1 -0
- package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.js +6 -0
- package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts +4 -0
- package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts.map +1 -0
- package/dist/helpers/Errors/TableErrors/UnknownTableError.js +6 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseDeleteQueryBuilder.d.ts +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseDeleteQueryBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseDeleteQueryBuilder.js +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseInsertQueryBuilder.d.ts +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseInsertQueryBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseInsertQueryBuilder.js +11 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts +11 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.js +27 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseUpdateQueryBuilder.d.ts +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseUpdateQueryBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseUpdateQueryBuilder.js +1 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts +9 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.js +102 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts +8 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.js +63 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts +8 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.js +49 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts +19 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.js +60 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts +9 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.js +27 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts +15 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.js +74 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts +10 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.js +29 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts +9 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.js +27 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts +8 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.js +5 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/ValuesDecorator.d.ts +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/ValuesDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/ValuesDecorator.js +17 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts +9 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.js +29 -0
- package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts +54 -0
- package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryExpressionBuilder.js +102 -0
- package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts +16 -0
- package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/QueryStatementBuilder.js +169 -0
- package/dist/helpers/QueryBuilders/SqlRenderer.d.ts +15 -0
- package/dist/helpers/QueryBuilders/SqlRenderer.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/SqlRenderer.js +79 -0
- package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.d.ts +160 -0
- package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.js +217 -0
- package/dist/interfaces/IExpressionBuilder.d.ts +7 -0
- package/dist/interfaces/IExpressionBuilder.d.ts.map +1 -0
- package/dist/interfaces/IExpressionBuilder.js +1 -0
- package/dist/interfaces/IQueryBuilder.d.ts +5 -0
- package/dist/interfaces/IQueryBuilder.d.ts.map +1 -0
- package/dist/interfaces/IQueryBuilder.js +1 -0
- package/dist/interfaces/ISchemaBuilder.d.ts +1 -1
- package/dist/interfaces/ISchemaBuilder.d.ts.map +1 -1
- package/dist/runtime/Container.d.ts +3 -0
- package/dist/runtime/Container.d.ts.map +1 -1
- package/dist/runtime/Container.js +12 -2
- package/dist/runtime/QueryCache.d.ts +12 -0
- package/dist/runtime/QueryCache.d.ts.map +1 -0
- package/dist/runtime/QueryCache.js +26 -0
- package/dist/runtime/Repository.d.ts +13 -7
- package/dist/runtime/Repository.d.ts.map +1 -1
- package/dist/runtime/Repository.js +114 -70
- package/dist/types/expressions.d.ts +154 -0
- package/dist/types/expressions.d.ts.map +1 -0
- package/dist/types/expressions.js +6 -0
- package/dist/types/factories.d.ts +7 -0
- package/dist/types/factories.d.ts.map +1 -0
- package/dist/types/factories.js +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/model.d.ts +8 -8
- package/dist/types/model.d.ts.map +1 -1
- package/dist/types/query.d.ts +63 -1
- package/dist/types/query.d.ts.map +1 -1
- package/package.json +11 -3
- package/dist/helpers/QueryStatementBuilder.d.ts +0 -304
- package/dist/helpers/QueryStatementBuilder.d.ts.map +0 -1
- package/dist/helpers/QueryStatementBuilder.js +0 -417
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Model from './Model.js';
|
|
2
|
+
import { columnType } from '../types/index.js';
|
|
3
|
+
export default abstract class Controller<Type extends columnType> {
|
|
4
|
+
abstract index(): Promise<Model<Type>[]>;
|
|
5
|
+
abstract show(value: string | number): Promise<Model<Type>>;
|
|
6
|
+
abstract edit(value: string | number): Promise<Model<Type>>;
|
|
7
|
+
abstract update(id: string | number, newValues: Type): Promise<Model<Type>>;
|
|
8
|
+
abstract create(data: Type): Promise<Model<Type>>;
|
|
9
|
+
abstract delete(id: string | number): Promise<boolean>;
|
|
10
|
+
static index<StaticType extends columnType>(this: new () => Controller<StaticType>): Promise<Model<StaticType>[]>;
|
|
11
|
+
static show<StaticType extends columnType>(this: new () => Controller<StaticType>, value: string | number): Promise<Model<StaticType>>;
|
|
12
|
+
static edit<StaticType extends columnType>(this: new () => Controller<StaticType>, value: string | number): Promise<Model<StaticType>>;
|
|
13
|
+
static update<StaticType extends columnType>(this: new () => Controller<StaticType>, id: string | number, newValues: StaticType): Promise<Model<StaticType>>;
|
|
14
|
+
static create<StaticType extends columnType>(this: new () => Controller<StaticType>, data: StaticType): Promise<Model<StaticType>>;
|
|
15
|
+
static delete<StaticType extends columnType>(this: new () => Controller<StaticType>, id: string | number): Promise<boolean>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=Controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Controller.d.ts","sourceRoot":"","sources":["../../src/abstract/Controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,UAAU,CAAC,IAAI,SAAS,UAAU;IAC9D,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3E,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAElC,KAAK,CAAC,UAAU,SAAS,UAAU,EACrD,IAAI,EAAE,UAAU,UAAU,CAAC,UAAU,CAAC,GACrC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;WAKX,IAAI,CAAC,UAAU,SAAS,UAAU,EACpD,IAAI,EAAE,UAAU,UAAU,CAAC,UAAU,CAAC,EACtC,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;WAKT,IAAI,CAAC,UAAU,SAAS,UAAU,EACpD,IAAI,EAAE,UAAU,UAAU,CAAC,UAAU,CAAC,EACtC,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;WAKT,MAAM,CAAC,UAAU,SAAS,UAAU,EACtD,IAAI,EAAE,UAAU,UAAU,CAAC,UAAU,CAAC,EACtC,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;WAKT,MAAM,CAAC,UAAU,SAAS,UAAU,EACtD,IAAI,EAAE,UAAU,UAAU,CAAC,UAAU,CAAC,EACtC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;WAKT,MAAM,CAAC,UAAU,SAAS,UAAU,EACtD,IAAI,EAAE,UAAU,UAAU,CAAC,UAAU,CAAC,EACtC,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC;CAIpB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
export default class Controller {
|
|
11
|
+
static index() {
|
|
12
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
const instance = new this();
|
|
14
|
+
return yield instance.index();
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
static show(value) {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
const instance = new this();
|
|
20
|
+
return yield instance.show(value);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
static edit(value) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
const instance = new this();
|
|
26
|
+
return yield instance.edit(value);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
static update(id, newValues) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
const instance = new this();
|
|
32
|
+
return yield instance.update(id, newValues);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
static create(data) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const instance = new this();
|
|
38
|
+
return yield instance.create(data);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
static delete(id) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const instance = new this();
|
|
44
|
+
return yield instance.delete(id);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
package/dist/abstract/Model.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import Repository from
|
|
2
|
-
import
|
|
1
|
+
import Repository from '../runtime/Repository.js';
|
|
2
|
+
import ModelRelations from '../abstract/model/ModelRelation.js';
|
|
3
|
+
import { columnType, QueryWhereCondition, QueryValues, ModelConfig, SpatialPoint, SpatialPointColumns, NestedJsonAggregateDefinition, QueryLayers } from '../types/index.js';
|
|
3
4
|
/** Abstract Model class for ORM-style database interactions */
|
|
4
|
-
export default abstract class Model<ModelType extends columnType> {
|
|
5
|
+
export default abstract class Model<ModelType extends columnType> extends ModelRelations<ModelType> {
|
|
5
6
|
private _repository?;
|
|
6
7
|
protected get repository(): Repository<ModelType, Model<ModelType>>;
|
|
8
|
+
protected get self(): Model<ModelType>;
|
|
7
9
|
protected configuration: ModelConfig;
|
|
8
10
|
get Configuration(): ModelConfig;
|
|
9
11
|
protected originalAttributes: Partial<ModelType>;
|
|
10
12
|
protected attributes: Partial<ModelType>;
|
|
11
13
|
protected exists: boolean;
|
|
12
14
|
protected dirty: boolean;
|
|
13
|
-
protected
|
|
14
|
-
protected queryOptions: ExtraQueryParameters;
|
|
15
|
+
protected queryLayers: QueryLayers;
|
|
15
16
|
get primaryKeyColumn(): string;
|
|
16
17
|
get primaryKey(): QueryValues | undefined;
|
|
17
18
|
get values(): Partial<ModelType> | ModelType;
|
|
@@ -22,6 +23,7 @@ export default abstract class Model<ModelType extends columnType> {
|
|
|
22
23
|
static orderBy<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, column: string, direction?: 'ASC' | 'DESC'): ParamterModelType;
|
|
23
24
|
orderBy(column: string, direction?: 'ASC' | 'DESC'): this;
|
|
24
25
|
static where<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, conditions: QueryWhereCondition): ParamterModelType;
|
|
26
|
+
private normalizeConditions;
|
|
25
27
|
where(conditions: QueryWhereCondition): this;
|
|
26
28
|
static whereId<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, id: QueryValues): ParamterModelType;
|
|
27
29
|
whereId(id: QueryValues): this;
|
|
@@ -38,20 +40,32 @@ export default abstract class Model<ModelType extends columnType> {
|
|
|
38
40
|
set(attributes: Partial<ModelType>): this;
|
|
39
41
|
save(): Promise<this>;
|
|
40
42
|
update(attributes: Partial<ModelType>): Promise<this>;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
43
|
+
near(params: {
|
|
44
|
+
referencePoint: SpatialPoint;
|
|
45
|
+
targetColumns: SpatialPointColumns;
|
|
46
|
+
maxDistance: number;
|
|
47
|
+
unit: 'km' | 'miles';
|
|
48
|
+
orderByDistance: 'ASC' | 'DESC';
|
|
49
|
+
alias?: string;
|
|
50
|
+
}): this;
|
|
51
|
+
isTextRelevant(params: {
|
|
52
|
+
targetColumns: string[];
|
|
53
|
+
searchTerm: string;
|
|
54
|
+
minimumRelevance?: number;
|
|
55
|
+
alias?: string;
|
|
56
|
+
orderByRelevance?: 'ASC' | 'DESC';
|
|
57
|
+
}): this;
|
|
58
|
+
JsonAggregate(params: {
|
|
59
|
+
table: string;
|
|
60
|
+
columns: string[];
|
|
61
|
+
groupByColumns?: string[];
|
|
62
|
+
alias?: string;
|
|
63
|
+
nested?: NestedJsonAggregateDefinition<string>[];
|
|
64
|
+
having?: QueryWhereCondition;
|
|
65
|
+
}): this;
|
|
66
|
+
toSql(): Promise<string>;
|
|
67
|
+
private collectSelectAliases;
|
|
68
|
+
private collectTables;
|
|
55
69
|
toJSON(): Partial<ModelType> | ModelType;
|
|
56
70
|
toObject(): Partial<ModelType> | ModelType;
|
|
57
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/abstract/Model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/abstract/Model.ts"],"names":[],"mappings":"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"}
|
package/dist/abstract/Model.js
CHANGED
|
@@ -7,11 +7,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import
|
|
11
|
-
import
|
|
10
|
+
import Repository from '../runtime/Repository.js';
|
|
11
|
+
import ModelRelations from '../abstract/model/ModelRelation.js';
|
|
12
|
+
import { QueryEvaluationPhase, } from '../types/index.js';
|
|
12
13
|
/** Abstract Model class for ORM-style database interactions */
|
|
13
|
-
export default class Model {
|
|
14
|
+
export default class Model extends ModelRelations {
|
|
14
15
|
constructor() {
|
|
16
|
+
super(...arguments);
|
|
15
17
|
this.configuration = {
|
|
16
18
|
table: '', // Must be set by subclass
|
|
17
19
|
primaryKey: 'id',
|
|
@@ -26,9 +28,13 @@ export default class Model {
|
|
|
26
28
|
this.attributes = {};
|
|
27
29
|
this.exists = false;
|
|
28
30
|
this.dirty = false;
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
this.queryLayers = {
|
|
32
|
+
base: {
|
|
33
|
+
from: this.Configuration.table,
|
|
34
|
+
},
|
|
35
|
+
pretty: {},
|
|
36
|
+
final: {}
|
|
37
|
+
};
|
|
32
38
|
}
|
|
33
39
|
get repository() {
|
|
34
40
|
if (!this._repository) {
|
|
@@ -36,6 +42,9 @@ export default class Model {
|
|
|
36
42
|
}
|
|
37
43
|
return this._repository;
|
|
38
44
|
}
|
|
45
|
+
get self() {
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
39
48
|
get Configuration() {
|
|
40
49
|
return this.configuration;
|
|
41
50
|
}
|
|
@@ -53,7 +62,10 @@ export default class Model {
|
|
|
53
62
|
return instance.limit(value);
|
|
54
63
|
}
|
|
55
64
|
limit(value) {
|
|
56
|
-
|
|
65
|
+
var _a;
|
|
66
|
+
var _b;
|
|
67
|
+
(_a = (_b = this.queryLayers).final) !== null && _a !== void 0 ? _a : (_b.final = {});
|
|
68
|
+
this.queryLayers.final.limit = value;
|
|
57
69
|
return this;
|
|
58
70
|
}
|
|
59
71
|
static offset(value) {
|
|
@@ -61,10 +73,11 @@ export default class Model {
|
|
|
61
73
|
return instance.offset(value);
|
|
62
74
|
}
|
|
63
75
|
offset(value) {
|
|
64
|
-
|
|
65
|
-
|
|
76
|
+
var _a;
|
|
77
|
+
if (!((_a = this.queryLayers.final) === null || _a === void 0 ? void 0 : _a.limit)) {
|
|
78
|
+
throw new Error('Offset cannot be set without a limit.');
|
|
66
79
|
}
|
|
67
|
-
this.
|
|
80
|
+
this.queryLayers.final.offset = value;
|
|
68
81
|
return this;
|
|
69
82
|
}
|
|
70
83
|
static orderBy(column, direction = 'ASC') {
|
|
@@ -72,15 +85,36 @@ export default class Model {
|
|
|
72
85
|
return instance.orderBy(column, direction);
|
|
73
86
|
}
|
|
74
87
|
orderBy(column, direction = 'ASC') {
|
|
75
|
-
|
|
88
|
+
var _a, _b;
|
|
89
|
+
var _c, _d;
|
|
90
|
+
(_a = (_c = this.queryLayers).final) !== null && _a !== void 0 ? _a : (_c.final = {});
|
|
91
|
+
(_b = (_d = this.queryLayers.final).orderBy) !== null && _b !== void 0 ? _b : (_d.orderBy = []);
|
|
92
|
+
this.queryLayers.final.orderBy.push({ column, direction });
|
|
76
93
|
return this;
|
|
77
94
|
}
|
|
78
95
|
static where(conditions) {
|
|
79
96
|
const instance = new this();
|
|
80
97
|
return instance.where(conditions);
|
|
81
98
|
}
|
|
99
|
+
normalizeConditions(conditions) {
|
|
100
|
+
if (Array.isArray(conditions)) {
|
|
101
|
+
return conditions;
|
|
102
|
+
}
|
|
103
|
+
return Object.entries(conditions).map(([column, value]) => ({
|
|
104
|
+
column,
|
|
105
|
+
operator: '=',
|
|
106
|
+
value,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
82
109
|
where(conditions) {
|
|
83
|
-
|
|
110
|
+
const normalized = this.normalizeConditions(conditions);
|
|
111
|
+
if (!this.queryLayers.base.where) {
|
|
112
|
+
this.queryLayers.base.where = normalized;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const existing = this.normalizeConditions(this.queryLayers.base.where);
|
|
116
|
+
this.queryLayers.base.where = [...existing, ...normalized];
|
|
117
|
+
}
|
|
84
118
|
return this;
|
|
85
119
|
}
|
|
86
120
|
static whereId(id) {
|
|
@@ -88,7 +122,7 @@ export default class Model {
|
|
|
88
122
|
return instance.whereId(id);
|
|
89
123
|
}
|
|
90
124
|
whereId(id) {
|
|
91
|
-
this.
|
|
125
|
+
this.queryLayers.base.where = [{ column: this.primaryKeyColumn, operator: '=', value: id }];
|
|
92
126
|
return this;
|
|
93
127
|
}
|
|
94
128
|
static find(primaryKeyValue) {
|
|
@@ -96,22 +130,22 @@ export default class Model {
|
|
|
96
130
|
return instance.find(primaryKeyValue);
|
|
97
131
|
}
|
|
98
132
|
find(primaryKeyValue) {
|
|
99
|
-
this.
|
|
133
|
+
this.queryLayers.base.where = [{ column: this.primaryKeyColumn, operator: '=', value: primaryKeyValue }];
|
|
100
134
|
return this;
|
|
101
135
|
}
|
|
102
136
|
static findOrFail(primaryKeyValue) {
|
|
103
137
|
return __awaiter(this, void 0, void 0, function* () {
|
|
104
138
|
const instance = new this();
|
|
105
|
-
return yield instance.findOrFail(primaryKeyValue);
|
|
139
|
+
return (yield instance.findOrFail(primaryKeyValue));
|
|
106
140
|
});
|
|
107
141
|
}
|
|
108
142
|
findOrFail(primaryKeyValue) {
|
|
109
143
|
return __awaiter(this, void 0, void 0, function* () {
|
|
110
144
|
var _a;
|
|
111
145
|
if (primaryKeyValue) {
|
|
112
|
-
this.
|
|
146
|
+
this.queryLayers.base.where = [{ column: this.primaryKeyColumn, operator: '=', value: primaryKeyValue }];
|
|
113
147
|
}
|
|
114
|
-
const query = this.
|
|
148
|
+
const query = this.queryLayers;
|
|
115
149
|
const record = yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.first(query, this));
|
|
116
150
|
if (!record) {
|
|
117
151
|
throw new Error(`Record with primary key ${primaryKeyValue} not found.`);
|
|
@@ -131,7 +165,10 @@ export default class Model {
|
|
|
131
165
|
first(primaryKeyValue) {
|
|
132
166
|
return __awaiter(this, void 0, void 0, function* () {
|
|
133
167
|
var _a;
|
|
134
|
-
|
|
168
|
+
if (primaryKeyValue !== undefined) {
|
|
169
|
+
this.queryLayers.base.where = [{ column: this.primaryKeyColumn, operator: '=', value: primaryKeyValue }, ...this.normalizeConditions(this.queryLayers.base.where || [])];
|
|
170
|
+
}
|
|
171
|
+
const attributes = (yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.first(Object.assign(Object.assign({}, this.queryLayers), { base: Object.assign(Object.assign({}, this.queryLayers.base), { from: this.Configuration.table, where: this.normalizeConditions(this.queryLayers.base.where || []) }) }), this)));
|
|
135
172
|
if (attributes) {
|
|
136
173
|
this.attributes = attributes;
|
|
137
174
|
this.originalAttributes = Object.assign({}, attributes);
|
|
@@ -142,8 +179,8 @@ export default class Model {
|
|
|
142
179
|
}
|
|
143
180
|
get() {
|
|
144
181
|
return __awaiter(this, void 0, void 0, function* () {
|
|
145
|
-
const records = yield this.repository.get(this.
|
|
146
|
-
return records.map(record => {
|
|
182
|
+
const records = yield this.repository.get(Object.assign(Object.assign({}, this.queryLayers), { base: Object.assign(Object.assign({}, this.queryLayers.base), { from: this.Configuration.table }) }), this);
|
|
183
|
+
return records.map((record) => {
|
|
147
184
|
const instance = new this.constructor();
|
|
148
185
|
instance.set(record);
|
|
149
186
|
instance.exists = true;
|
|
@@ -159,8 +196,8 @@ export default class Model {
|
|
|
159
196
|
}
|
|
160
197
|
all() {
|
|
161
198
|
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
-
const records = yield this.repository.all(this, this.
|
|
163
|
-
return records.map(record => {
|
|
199
|
+
const records = yield this.repository.all(this, Object.assign(Object.assign({}, this.queryLayers), { base: Object.assign(Object.assign({}, this.queryLayers.base), { from: this.Configuration.table }) }));
|
|
200
|
+
return records.map((record) => {
|
|
164
201
|
const instance = new this.constructor();
|
|
165
202
|
instance.set(record);
|
|
166
203
|
instance.exists = true;
|
|
@@ -195,10 +232,10 @@ export default class Model {
|
|
|
195
232
|
return __awaiter(this, void 0, void 0, function* () {
|
|
196
233
|
var _a;
|
|
197
234
|
if (!this.exists) {
|
|
198
|
-
throw new Error(
|
|
235
|
+
throw new Error('Cannot update a model that does not exist in the database.');
|
|
199
236
|
}
|
|
200
237
|
if (this.primaryKey === undefined) {
|
|
201
|
-
throw new Error(
|
|
238
|
+
throw new Error('Primary key value is undefined. Cannot update record without a valid primary key.');
|
|
202
239
|
}
|
|
203
240
|
const newRecord = yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.update({ [this.primaryKeyColumn]: this.primaryKey }, attributes));
|
|
204
241
|
if (newRecord) {
|
|
@@ -208,115 +245,135 @@ export default class Model {
|
|
|
208
245
|
return this;
|
|
209
246
|
});
|
|
210
247
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
hasMany(model, foreignKey = `${this.Configuration.table}_${this.Configuration.primaryKey}`, localKey = this.Configuration.primaryKey) {
|
|
241
|
-
this.relations.push({
|
|
242
|
-
type: 'hasMany',
|
|
243
|
-
model: model,
|
|
244
|
-
foreignKey: foreignKey,
|
|
245
|
-
localKey: localKey,
|
|
246
|
-
});
|
|
247
|
-
return this;
|
|
248
|
-
}
|
|
249
|
-
hasOne(model, foreignKey = `${model.Configuration.primaryKey}`, localKey = `${model.Configuration.table}_${model.Configuration.primaryKey}`) {
|
|
250
|
-
this.relations.push({
|
|
251
|
-
type: 'hasOne',
|
|
252
|
-
model: model,
|
|
253
|
-
foreignKey: foreignKey,
|
|
254
|
-
localKey: localKey,
|
|
255
|
-
});
|
|
248
|
+
near(params) {
|
|
249
|
+
var _a;
|
|
250
|
+
var _b;
|
|
251
|
+
const { referencePoint, targetColumns, maxDistance, unit, orderByDistance, alias = 'distance' } = params;
|
|
252
|
+
const valueClauseKeywords = [`${alias}_lat`, `${alias}_lon`];
|
|
253
|
+
const expression = {
|
|
254
|
+
type: 'spatialDistance',
|
|
255
|
+
requirements: {
|
|
256
|
+
phase: QueryEvaluationPhase.PROJECTION,
|
|
257
|
+
cardinality: 'row',
|
|
258
|
+
requiresAlias: true,
|
|
259
|
+
requiresSelectWrapping: true,
|
|
260
|
+
},
|
|
261
|
+
parameters: {
|
|
262
|
+
referencePoint: referencePoint,
|
|
263
|
+
targetColumns: targetColumns,
|
|
264
|
+
alias: alias,
|
|
265
|
+
maxDistance: maxDistance,
|
|
266
|
+
orderByDistance: orderByDistance,
|
|
267
|
+
valueClauseKeywords: valueClauseKeywords,
|
|
268
|
+
unit: unit,
|
|
269
|
+
where: {
|
|
270
|
+
[valueClauseKeywords[0]]: referencePoint.lat,
|
|
271
|
+
[valueClauseKeywords[1]]: referencePoint.lon,
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
(_a = (_b = this.queryLayers.base).expressions) !== null && _a !== void 0 ? _a : (_b.expressions = []);
|
|
276
|
+
this.queryLayers.base.expressions.push(expression);
|
|
256
277
|
return this;
|
|
257
278
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
279
|
+
isTextRelevant(params) {
|
|
280
|
+
var _a, _b, _c, _d;
|
|
281
|
+
var _e, _f, _g, _h;
|
|
282
|
+
const { targetColumns, searchTerm, minimumRelevance, alias = 'relevance', orderByRelevance = "ASC" } = params;
|
|
283
|
+
const valueClauseKeyword = `${alias}_searchTerm`;
|
|
284
|
+
const expression = {
|
|
285
|
+
type: 'textRelevance',
|
|
286
|
+
requirements: {
|
|
287
|
+
phase: QueryEvaluationPhase.PROJECTION,
|
|
288
|
+
cardinality: 'row',
|
|
289
|
+
requiresAlias: true,
|
|
290
|
+
requiresSelectWrapping: true,
|
|
291
|
+
},
|
|
292
|
+
parameters: {
|
|
293
|
+
targetColumns: targetColumns,
|
|
294
|
+
searchTerm: searchTerm,
|
|
295
|
+
alias: alias,
|
|
296
|
+
minimumRelevance: minimumRelevance,
|
|
297
|
+
orderByRelevance: orderByRelevance,
|
|
298
|
+
valueClauseKeywords: [valueClauseKeyword],
|
|
299
|
+
where: {
|
|
300
|
+
[valueClauseKeyword]: searchTerm,
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
(_a = (_e = this.queryLayers.base).expressions) !== null && _a !== void 0 ? _a : (_e.expressions = []);
|
|
305
|
+
this.queryLayers.base.expressions.push(expression);
|
|
306
|
+
(_b = (_f = this.queryLayers).pretty) !== null && _b !== void 0 ? _b : (_f.pretty = {});
|
|
307
|
+
(_c = (_g = this.queryLayers.pretty).where) !== null && _c !== void 0 ? _c : (_g.where = []);
|
|
308
|
+
this.queryLayers.pretty.where.push({
|
|
309
|
+
column: alias,
|
|
310
|
+
operator: '>=',
|
|
311
|
+
value: minimumRelevance || 1,
|
|
264
312
|
});
|
|
313
|
+
(_d = (_h = this.queryLayers.pretty).select) !== null && _d !== void 0 ? _d : (_h.select = []);
|
|
314
|
+
this.queryLayers.pretty.select.push(alias);
|
|
265
315
|
return this;
|
|
266
316
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
317
|
+
JsonAggregate(params) {
|
|
318
|
+
var _a, _b, _c, _d, _e;
|
|
319
|
+
var _f, _g, _h, _j, _k;
|
|
320
|
+
const { table, columns, groupByColumns = [], alias = table, nested, having, } = params;
|
|
321
|
+
const expression = {
|
|
322
|
+
type: 'jsonAggregate',
|
|
323
|
+
requirements: {
|
|
324
|
+
phase: QueryEvaluationPhase.PROJECTION,
|
|
325
|
+
cardinality: 'row',
|
|
326
|
+
requiresAlias: true,
|
|
327
|
+
requiresSelectWrapping: true,
|
|
328
|
+
},
|
|
329
|
+
parameters: {
|
|
330
|
+
columns: columns,
|
|
331
|
+
table: table,
|
|
332
|
+
groupByColumns: groupByColumns,
|
|
333
|
+
alias: alias,
|
|
334
|
+
nested: nested,
|
|
335
|
+
having: having,
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
(_a = (_f = this.queryLayers.base).expressionsSelect) !== null && _a !== void 0 ? _a : (_f.expressionsSelect = []);
|
|
339
|
+
const selectAliases = this.collectSelectAliases({
|
|
340
|
+
table,
|
|
341
|
+
columns,
|
|
342
|
+
nested: nested || [],
|
|
282
343
|
});
|
|
344
|
+
this.queryLayers.base.expressionsSelect.push(...selectAliases);
|
|
345
|
+
(_b = (_g = this.queryLayers).pretty) !== null && _b !== void 0 ? _b : (_g.pretty = {});
|
|
346
|
+
(_c = (_h = this.queryLayers.pretty).expressions) !== null && _c !== void 0 ? _c : (_h.expressions = []);
|
|
347
|
+
this.queryLayers.pretty.expressions.push(expression);
|
|
348
|
+
(_d = (_j = this.queryLayers).final) !== null && _d !== void 0 ? _d : (_j.final = {});
|
|
349
|
+
(_e = (_k = this.queryLayers.final).blacklistTables) !== null && _e !== void 0 ? _e : (_k.blacklistTables = []);
|
|
350
|
+
this.queryLayers.final.blacklistTables.push(...Array.from(new Set(this.collectTables({ table, nested: nested || [] }))));
|
|
283
351
|
return this;
|
|
284
352
|
}
|
|
285
|
-
|
|
353
|
+
toSql() {
|
|
286
354
|
return __awaiter(this, void 0, void 0, function* () {
|
|
287
|
-
|
|
288
|
-
const
|
|
289
|
-
|
|
290
|
-
const normalizedScopes = this.normalizeQueryScopes(queryScopes, tableName);
|
|
291
|
-
this.joinedEntities.push({
|
|
292
|
-
relation: relation,
|
|
293
|
-
queryScopes: normalizedScopes
|
|
294
|
-
});
|
|
295
|
-
return this;
|
|
355
|
+
var _a;
|
|
356
|
+
const sql = yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.toSql(Object.assign(Object.assign({}, this.queryLayers), { base: Object.assign(Object.assign({}, this.queryLayers.base), { from: this.Configuration.table }) }), this));
|
|
357
|
+
return sql === null || sql === void 0 ? void 0 : sql.replace(/\s+/g, ' ').replace(/\n/g, '');
|
|
296
358
|
});
|
|
297
359
|
}
|
|
298
|
-
|
|
299
|
-
const
|
|
300
|
-
if (
|
|
301
|
-
|
|
360
|
+
collectSelectAliases(def) {
|
|
361
|
+
const columnAliases = def.columns.map(col => `${def.table}.${col} AS ${def.table}_${col}`);
|
|
362
|
+
if (def.nested) {
|
|
363
|
+
for (const child of def.nested) {
|
|
364
|
+
columnAliases.push(...this.collectSelectAliases(child));
|
|
365
|
+
}
|
|
302
366
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
367
|
+
return columnAliases;
|
|
368
|
+
}
|
|
369
|
+
collectTables(def) {
|
|
370
|
+
const result = [def.table];
|
|
371
|
+
if (def.nested) {
|
|
372
|
+
for (const child of def.nested) {
|
|
373
|
+
result.push(...this.collectTables(child));
|
|
374
|
+
}
|
|
311
375
|
}
|
|
312
|
-
|
|
313
|
-
'column' in queryScopes &&
|
|
314
|
-
'operator' in queryScopes &&
|
|
315
|
-
'value' in queryScopes;
|
|
316
|
-
let scopesArray = isSingleParameter
|
|
317
|
-
? [queryScopes]
|
|
318
|
-
: Query.ConvertParamsToArray(queryScopes);
|
|
319
|
-
return scopesArray.map(scope => (Object.assign(Object.assign({}, scope), { column: `${tableName}.${scope.column}` })));
|
|
376
|
+
return result;
|
|
320
377
|
}
|
|
321
378
|
toJSON() {
|
|
322
379
|
return this.attributes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaTableBuilder.d.ts","sourceRoot":"","sources":["../../src/abstract/SchemaTableBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"SchemaTableBuilder.d.ts","sourceRoot":"","sources":["../../src/abstract/SchemaTableBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,kBAAkB;IAC5C,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAM;IAE3C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA2BjD,QAAQ,CAAC,KAAK,IAAI,MAAM;IAExB,QAAQ,CAAC,UAAU,IAAI,IAAI;IAC3B,QAAQ,CAAC,UAAU,IAAI,IAAI;IAC3B,QAAQ,CAAC,QAAQ,IAAI,IAAI;IACzB,QAAQ,CAAC,MAAM,IAAI,IAAI;IACvB,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IACxC,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAE1E,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IACnD,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACjC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAEpC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACjC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAEpD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACpC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IACxE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAElC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACjC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACtC,QAAQ,CAAC,UAAU,IAAI,IAAI;IAE3B,QAAQ,CAAC,WAAW,IAAI,IAAI;IAC5B,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CACtC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { columnType, joinedEntity, ModelConfig, QueryWhereCondition, relation } from "../../types/index.js";
|
|
2
|
+
import Model from "../../abstract/Model.js";
|
|
3
|
+
import Repository from '../../runtime/Repository.js';
|
|
4
|
+
export default abstract class ModelRelations<Type extends columnType, Self extends Model<Type> = Model<Type>> {
|
|
5
|
+
protected joinedEntities: joinedEntity[];
|
|
6
|
+
protected relations: relation[];
|
|
7
|
+
abstract get Configuration(): ModelConfig;
|
|
8
|
+
protected abstract get repository(): Repository<Type, Self>;
|
|
9
|
+
protected abstract get self(): Self;
|
|
10
|
+
get JoinedEntities(): joinedEntity[];
|
|
11
|
+
get Relations(): relation[];
|
|
12
|
+
insertRecordIntoPivotTable(otherTable: string, foreignKey: string): Promise<void>;
|
|
13
|
+
protected ManyToMany<modelType extends Model<columnType>>(model: modelType, pivotTable?: string, localKey?: string, foreignKey?: string, pivotForeignKey?: string, pivotLocalKey?: string): Promise<this>;
|
|
14
|
+
protected hasMany<modelType extends Model<columnType>>(model: modelType, foreignKey?: string, localKey?: string): this;
|
|
15
|
+
protected hasOne<modelType extends Model<columnType>>(model: modelType, foreignKey?: string, localKey?: string): this;
|
|
16
|
+
protected belongsTo<modelType extends Model<columnType>>(model: modelType, foreignKey?: string, localKey?: string): this;
|
|
17
|
+
static with<ParameterModelType extends Model<columnType>>(this: new () => ParameterModelType, relation: string, queryScopes?: QueryWhereCondition): ParameterModelType;
|
|
18
|
+
with(relation: string, queryScopes?: QueryWhereCondition): this;
|
|
19
|
+
asyncWith(relation: string, queryScopes?: QueryWhereCondition): Promise<this>;
|
|
20
|
+
callRelationMethod(relation: string): void | Promise<void>;
|
|
21
|
+
private normalizeQueryScopes;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ModelRelation.d.ts.map
|