@iamkirbki/database-handler-core 4.3.1 → 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 -119
- 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 +6 -4
- package/dist/base/Query.d.ts.map +1 -1
- package/dist/base/Query.js +62 -21
- package/dist/base/Record.d.ts.map +1 -1
- package/dist/base/Record.js +7 -5
- package/dist/base/Table.d.ts +5 -4
- package/dist/base/Table.d.ts.map +1 -1
- package/dist/base/Table.js +56 -31
- 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/runtime/Container.d.ts +1 -0
- package/dist/runtime/Container.d.ts.map +1 -1
- package/dist/runtime/Container.js +5 -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 +6 -4
- package/dist/runtime/Repository.d.ts.map +1 -1
- package/dist/runtime/Repository.js +95 -60
- 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 +3 -2
- package/dist/types/factories.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/model.d.ts +8 -8
- package/dist/types/model.d.ts.map +1 -1
- package/dist/types/query.d.ts +56 -2
- package/dist/types/query.d.ts.map +1 -1
- package/package.json +11 -3
- package/dist/helpers/QueryStatementBuilder.d.ts +0 -305
- package/dist/helpers/QueryStatementBuilder.d.ts.map +0 -1
- package/dist/helpers/QueryStatementBuilder.js +0 -416
|
@@ -20,13 +20,14 @@ class Repository {
|
|
|
20
20
|
this.customDatabaseAdapter = customDatabaseAdapter;
|
|
21
21
|
}
|
|
22
22
|
static getInstance(ModelClass, tableName, customDatabaseAdapter, tableFactory) {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
// Use tableName as key to differentiate instances for different tables
|
|
24
|
+
const key = tableName || ModelClass.name;
|
|
25
|
+
if (!this._instances.has(key)) {
|
|
25
26
|
const instance = new Repository(tableName, new ModelClass(), customDatabaseAdapter, tableFactory);
|
|
26
|
-
this._instances.set(
|
|
27
|
+
this._instances.set(key, instance);
|
|
27
28
|
return instance;
|
|
28
29
|
}
|
|
29
|
-
return this._instances.get(
|
|
30
|
+
return this._instances.get(key);
|
|
30
31
|
}
|
|
31
32
|
static clearInstances() {
|
|
32
33
|
this._instances.clear();
|
|
@@ -48,7 +49,7 @@ class Repository {
|
|
|
48
49
|
deleteRecordFromPivotTable(foreignKey, modelOfOrigin, relation) {
|
|
49
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
50
51
|
const table = this.tableFactory(relation.pivotTable, this.customDatabaseAdapter);
|
|
51
|
-
const record = yield table.Record(this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation));
|
|
52
|
+
const record = yield table.Record({ base: { where: this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation) } });
|
|
52
53
|
yield (record === null || record === void 0 ? void 0 : record.Delete());
|
|
53
54
|
});
|
|
54
55
|
}
|
|
@@ -85,92 +86,126 @@ class Repository {
|
|
|
85
86
|
yield this.Table.Insert(attributes);
|
|
86
87
|
});
|
|
87
88
|
}
|
|
88
|
-
first(
|
|
89
|
+
first(queryLayers, Model) {
|
|
89
90
|
return __awaiter(this, void 0, void 0, function* () {
|
|
90
91
|
let record;
|
|
91
92
|
if (Model.JoinedEntities.length > 0) {
|
|
92
|
-
const
|
|
93
|
-
record =
|
|
93
|
+
const result = (yield this.join(Model, Object.assign(Object.assign({}, queryLayers), { final: Object.assign(Object.assign({}, queryLayers.final), { limit: 1 }) })))[0];
|
|
94
|
+
record = result ? { values: result } : undefined;
|
|
94
95
|
}
|
|
95
96
|
else {
|
|
96
|
-
record = yield this.Table.Record(
|
|
97
|
+
record = yield this.Table.Record(queryLayers);
|
|
97
98
|
}
|
|
98
|
-
return record ? record.values
|
|
99
|
+
return record === null || record === void 0 ? void 0 : record.values;
|
|
99
100
|
});
|
|
100
101
|
}
|
|
101
|
-
get(
|
|
102
|
+
get(QueryLayers, Model) {
|
|
102
103
|
return __awaiter(this, void 0, void 0, function* () {
|
|
103
104
|
if (Model.JoinedEntities.length > 0) {
|
|
104
|
-
return yield this.join(Model,
|
|
105
|
+
return yield this.join(Model, QueryLayers);
|
|
105
106
|
}
|
|
106
107
|
else {
|
|
107
|
-
const records = yield this.Table.Records(
|
|
108
|
+
const records = yield this.Table.Records(QueryLayers);
|
|
108
109
|
return records.map(record => record.values);
|
|
109
110
|
}
|
|
110
111
|
});
|
|
111
112
|
}
|
|
112
|
-
all(Model,
|
|
113
|
+
all(Model, QueryLayers) {
|
|
113
114
|
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
-
|
|
115
|
-
return yield this.join(Model);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
const records = yield this.Table.Records(Object.assign({ where: queryscopes }, queryOptions));
|
|
119
|
-
return records.map(record => record.values);
|
|
120
|
-
}
|
|
115
|
+
return this.get(QueryLayers, Model);
|
|
121
116
|
});
|
|
122
117
|
}
|
|
123
118
|
update(primaryKey, newAttributes) {
|
|
124
119
|
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
-
const record = yield this.Table.Record({ where: primaryKey });
|
|
120
|
+
const record = yield this.Table.Record({ base: { where: primaryKey } });
|
|
126
121
|
if (record) {
|
|
127
122
|
return yield record.Update(newAttributes, primaryKey);
|
|
128
123
|
}
|
|
129
124
|
});
|
|
130
125
|
}
|
|
131
|
-
join(Model,
|
|
126
|
+
join(Model, queryLayers) {
|
|
132
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
128
|
+
const { joins, queryLayers: nextLayers } = this.buildJoinObject(Model, queryLayers);
|
|
129
|
+
nextLayers.base.joins = joins;
|
|
130
|
+
const records = yield this.Table.Join(nextLayers);
|
|
131
|
+
return records.map(record => record.values);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
toSql(queryLayers, Model) {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
let nextLayers = queryLayers;
|
|
137
|
+
if (Model.JoinedEntities.length > 0) {
|
|
138
|
+
const result = this.buildJoinObject(Model, queryLayers);
|
|
139
|
+
nextLayers = result.queryLayers;
|
|
140
|
+
nextLayers.base.joins = result.joins;
|
|
141
|
+
}
|
|
142
|
+
return this.Table.toSql(nextLayers);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
buildJoinObject(Model, inputLayers) {
|
|
146
|
+
var _a;
|
|
147
|
+
const queryLayers = Object.assign(Object.assign({}, inputLayers), { base: Object.assign(Object.assign({}, inputLayers.base), { where: Object.assign({}, ((_a = inputLayers.base.where) !== null && _a !== void 0 ? _a : {})) }), final: inputLayers.final
|
|
148
|
+
? Object.assign({}, inputLayers.final) : undefined });
|
|
149
|
+
const joins = Model.JoinedEntities.flatMap(join => {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
var _c;
|
|
152
|
+
const relation = Model.Relations.find(rel => rel.model.Configuration.table
|
|
153
|
+
.replace("_", "")
|
|
154
|
+
.toLowerCase() === join.relation.toLowerCase());
|
|
155
|
+
if (!relation) {
|
|
156
|
+
throw new Error(`Relation for joined entity ${join.relation} not found.`);
|
|
157
|
+
}
|
|
158
|
+
if (join.queryScopes && queryLayers.base.where) {
|
|
159
|
+
queryLayers.base.where = this.mergeQueryWhereConditions(queryLayers.base.where, join.queryScopes);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
queryLayers.base.where = join.queryScopes;
|
|
163
|
+
}
|
|
164
|
+
if (relation.type !== 'manyToMany') {
|
|
165
|
+
const joinType = relation.type === 'hasOne' || relation.type === 'belongsTo'
|
|
166
|
+
? 'INNER'
|
|
167
|
+
: 'LEFT';
|
|
168
|
+
const [baseTable, baseKey] = relation.localKey.includes('.')
|
|
169
|
+
? relation.localKey.split('.')
|
|
170
|
+
: [Model.Configuration.table, relation.localKey];
|
|
171
|
+
return [
|
|
172
|
+
{
|
|
163
173
|
fromTable: relation.model.Configuration.table,
|
|
164
|
-
baseTable
|
|
165
|
-
joinType
|
|
174
|
+
baseTable,
|
|
175
|
+
joinType,
|
|
166
176
|
on: [
|
|
167
|
-
{ [relation.foreignKey]:
|
|
177
|
+
{ [relation.foreignKey]: baseKey }
|
|
168
178
|
]
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
179
|
+
}
|
|
180
|
+
];
|
|
181
|
+
}
|
|
182
|
+
// many to many
|
|
183
|
+
(_a = queryLayers.final) !== null && _a !== void 0 ? _a : (queryLayers.final = {});
|
|
184
|
+
(_b = (_c = queryLayers.final).blacklistTables) !== null && _b !== void 0 ? _b : (_c.blacklistTables = []);
|
|
185
|
+
queryLayers.final.blacklistTables = [
|
|
186
|
+
...queryLayers.final.blacklistTables,
|
|
187
|
+
relation.pivotTable
|
|
188
|
+
];
|
|
189
|
+
return [
|
|
190
|
+
{
|
|
191
|
+
fromTable: relation.pivotTable,
|
|
192
|
+
baseTable: Model.Configuration.table,
|
|
193
|
+
joinType: 'INNER',
|
|
194
|
+
on: [
|
|
195
|
+
{ [relation.pivotForeignKey]: relation.localKey }
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
fromTable: relation.model.Configuration.table,
|
|
200
|
+
baseTable: relation.pivotTable,
|
|
201
|
+
joinType: 'INNER',
|
|
202
|
+
on: [
|
|
203
|
+
{ [relation.foreignKey]: relation.pivotLocalKey }
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
];
|
|
173
207
|
});
|
|
208
|
+
return { joins, queryLayers };
|
|
174
209
|
}
|
|
175
210
|
mergeQueryWhereConditions(base, additional) {
|
|
176
211
|
const query = this.Table.QueryHelperObject;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { OrderByDefinition, QueryWhereCondition } from "../types/index.js";
|
|
2
|
+
export type expressionClause = {
|
|
3
|
+
/**
|
|
4
|
+
* SQL fragment that produces the expression value.
|
|
5
|
+
* Must include an alias if it needs to be referenced later.
|
|
6
|
+
*
|
|
7
|
+
* Example:
|
|
8
|
+
* 6371 * acos(...) AS distance
|
|
9
|
+
*/
|
|
10
|
+
baseExpressionClause: string;
|
|
11
|
+
/**
|
|
12
|
+
* Determines *where* in the query lifecycle this expression is evaluated.
|
|
13
|
+
*
|
|
14
|
+
* - base: Can live directly in SELECT
|
|
15
|
+
* - projection: Must be computed in a subquery
|
|
16
|
+
*/
|
|
17
|
+
phase?: QueryEvaluationPhase;
|
|
18
|
+
/**
|
|
19
|
+
* Signals that this expression cannot safely exist in the same
|
|
20
|
+
* SELECT level where it is filtered or ordered on.
|
|
21
|
+
*
|
|
22
|
+
* This is the “SQL is dumb, wrap it” flag.
|
|
23
|
+
*/
|
|
24
|
+
requiresWrapping?: boolean;
|
|
25
|
+
selectClause?: string;
|
|
26
|
+
/**
|
|
27
|
+
* ORDER BY fragment derived from the expression.
|
|
28
|
+
*
|
|
29
|
+
* Example:
|
|
30
|
+
* distance ASC
|
|
31
|
+
*/
|
|
32
|
+
orderByClause?: OrderByDefinition;
|
|
33
|
+
whereClause?: QueryWhereCondition;
|
|
34
|
+
valueClauseKeywords?: string[];
|
|
35
|
+
groupByClause?: string;
|
|
36
|
+
havingClause?: QueryWhereCondition;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Generic function signature for expression builders.
|
|
40
|
+
*
|
|
41
|
+
* Each builder:
|
|
42
|
+
* - receives a strongly-typed expression definition
|
|
43
|
+
* - returns a normalized expressionClause
|
|
44
|
+
*/
|
|
45
|
+
export type ExpressionBuilderFunction<T extends PossibleExpressions = PossibleExpressions> = (expression: T) => expressionClause;
|
|
46
|
+
export type QueryExpression<T extends string = string> = {
|
|
47
|
+
type: T;
|
|
48
|
+
requirements: QueryExpressionRequirements;
|
|
49
|
+
};
|
|
50
|
+
export type PossibleExpressions = SpatialQueryExpression | TextRelevanceQueryExpression | JsonAggregateQueryExpression;
|
|
51
|
+
export type ComputedExpression<T extends string = string> = {
|
|
52
|
+
type: T;
|
|
53
|
+
};
|
|
54
|
+
export type PossibleComputedExpressions = SpatialComputedExpression | TextRelevanceComputedExpression;
|
|
55
|
+
export type QueryExpressionRequirements = {
|
|
56
|
+
phase: QueryEvaluationPhase;
|
|
57
|
+
cardinality: 'row' | 'aggregate';
|
|
58
|
+
select?: string;
|
|
59
|
+
where?: QueryWhereCondition;
|
|
60
|
+
having?: QueryWhereCondition;
|
|
61
|
+
orderBy?: string;
|
|
62
|
+
requiresAlias: boolean;
|
|
63
|
+
requiresSelectWrapping: boolean;
|
|
64
|
+
};
|
|
65
|
+
export type QueryShape = {
|
|
66
|
+
kind: 'flat';
|
|
67
|
+
} | {
|
|
68
|
+
kind: 'wrapped';
|
|
69
|
+
reason: 'projection-expressions';
|
|
70
|
+
};
|
|
71
|
+
export type SpatialDistanceDefinition = {
|
|
72
|
+
referencePoint: SpatialPoint;
|
|
73
|
+
targetColumns: SpatialPointColumns;
|
|
74
|
+
unit: 'km' | 'miles';
|
|
75
|
+
earthRadius?: number;
|
|
76
|
+
alias: string;
|
|
77
|
+
valueClauseKeywords: string[];
|
|
78
|
+
where?: QueryWhereCondition;
|
|
79
|
+
maxDistance: number;
|
|
80
|
+
orderByDistance?: 'ASC' | 'DESC';
|
|
81
|
+
isComputed?: boolean;
|
|
82
|
+
};
|
|
83
|
+
export type SpatialQueryExpression = QueryExpression<'spatialDistance'> & {
|
|
84
|
+
parameters: SpatialDistanceDefinition;
|
|
85
|
+
};
|
|
86
|
+
export type SpatialComputedExpression = ComputedExpression<'spatialDistance'> & {
|
|
87
|
+
parameters: SpatialDistanceDefinition;
|
|
88
|
+
};
|
|
89
|
+
export type SpatialPointColumns = {
|
|
90
|
+
lat: string;
|
|
91
|
+
lon: string;
|
|
92
|
+
};
|
|
93
|
+
export type SpatialPoint = {
|
|
94
|
+
lat: number;
|
|
95
|
+
lon: number;
|
|
96
|
+
};
|
|
97
|
+
export type TextRelevanceDefinition = {
|
|
98
|
+
targetColumns: string[];
|
|
99
|
+
searchTerm: string;
|
|
100
|
+
alias: string;
|
|
101
|
+
where?: QueryWhereCondition;
|
|
102
|
+
valueClauseKeywords: string[];
|
|
103
|
+
minimumRelevance?: number;
|
|
104
|
+
orderByRelevance?: 'ASC' | 'DESC';
|
|
105
|
+
};
|
|
106
|
+
export type TextRelevanceQueryExpression = QueryExpression<'textRelevance'> & {
|
|
107
|
+
parameters: TextRelevanceDefinition;
|
|
108
|
+
};
|
|
109
|
+
export type TextRelevanceComputedExpression = ComputedExpression<'textRelevance'> & {
|
|
110
|
+
parameters: TextRelevanceDefinition;
|
|
111
|
+
};
|
|
112
|
+
export type JsonAggregateDefinition<Tables extends string = string> = {
|
|
113
|
+
/** Table this aggregate is built from */
|
|
114
|
+
table: Tables;
|
|
115
|
+
/** Columns selected from this table */
|
|
116
|
+
columns: string[];
|
|
117
|
+
nonTableColumns?: string[];
|
|
118
|
+
/** GROUP BY columns required for this level */
|
|
119
|
+
groupByColumns: string[];
|
|
120
|
+
/** Alias of this JSON object / array */
|
|
121
|
+
alias: string;
|
|
122
|
+
/** Computed expressions */
|
|
123
|
+
computed?: PossibleComputedExpressions[];
|
|
124
|
+
/** Having clause */
|
|
125
|
+
having?: QueryWhereCondition;
|
|
126
|
+
/** Nested JSON objects or arrays */
|
|
127
|
+
nested?: NestedJsonAggregateDefinition<Tables>[];
|
|
128
|
+
};
|
|
129
|
+
export type NestedJsonAggregateDefinition<Tables extends string = string> = {
|
|
130
|
+
/** Table this aggregate is built from */
|
|
131
|
+
table: Tables;
|
|
132
|
+
/** Columns selected from this table */
|
|
133
|
+
columns: string[];
|
|
134
|
+
nonTableColumns?: string[];
|
|
135
|
+
/** Alias of this JSON object / array */
|
|
136
|
+
alias: string;
|
|
137
|
+
/** Computed expressions */
|
|
138
|
+
computed?: PossibleComputedExpressions[];
|
|
139
|
+
/** Having clause */
|
|
140
|
+
having?: QueryWhereCondition;
|
|
141
|
+
/** Nested JSON objects or arrays */
|
|
142
|
+
nested?: NestedJsonAggregateDefinition<Tables>[];
|
|
143
|
+
};
|
|
144
|
+
export type JsonAggregateQueryExpression = QueryExpression<'jsonAggregate'> & {
|
|
145
|
+
parameters: JsonAggregateDefinition;
|
|
146
|
+
};
|
|
147
|
+
export declare enum QueryEvaluationPhase {
|
|
148
|
+
BASE = "base",
|
|
149
|
+
PROJECTION = "projection",
|
|
150
|
+
LATERAL = "lateral"
|
|
151
|
+
}
|
|
152
|
+
export type PossibleBaseExpressions = SpatialQueryExpression | TextRelevanceQueryExpression;
|
|
153
|
+
export type PossiblePrettyExpressions = JsonAggregateQueryExpression;
|
|
154
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/types/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type Table from "../base/Table";
|
|
2
|
-
import type { columnType, Query, QueryConstructorType, Record } from "../index.js";
|
|
1
|
+
import type Table from "../base/Table.js";
|
|
2
|
+
import type { columnType, Model, Query, QueryConstructorType, Record, Repository } from "../index.js";
|
|
3
3
|
export type TableFactory = (name: string, adapter?: string) => Table;
|
|
4
4
|
export type QueryFactory = (config: QueryConstructorType) => Query;
|
|
5
5
|
export type RecordFactory = <T extends columnType>(table: string, values: T, adapter?: string, queryFactory?: QueryFactory, recordFactory?: RecordFactory) => Record<T>;
|
|
6
|
+
export type RepositoryFactory<ModelType extends columnType> = (model: Model<ModelType>) => Repository<ModelType, Model<ModelType>>;
|
|
6
7
|
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/types/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/types/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEzG,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;AACrE,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,oBAAoB,KAAK,KAAK,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,SAAS,UAAU,EAC7C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,EAC3B,aAAa,CAAC,EAAE,aAAa,KAC5B,MAAM,CAAC,CAAC,CAAC,CAAC;AAEf,MAAM,MAAM,iBAAiB,CAAC,SAAS,SAAS,UAAU,IAAI,CAC1D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KACtB,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAC3D,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,GAC7B;KACG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;CAC3E,CAAC,IAAI,CAAC,CAAA;AAEX,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAC3D,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,GAC7B;KACG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;CAC3E,CAAC,IAAI,CAAC,CAAA;AAEX,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/dist/types/index.js
CHANGED
package/dist/types/model.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import Model from "../abstract/Model";
|
|
|
3
3
|
import { columnType, QueryWhereCondition } from "./index";
|
|
4
4
|
export type ModelEventType = 'retrieved' | 'creating' | 'created' | 'updating' | 'updated' | 'saving' | 'saved' | 'deleting' | 'deleted' | 'restoring' | 'restored' | 'forceDeleting' | 'forceDeleted';
|
|
5
5
|
export type ModelEventHandler<T> = (model: T) => void | Promise<void>;
|
|
6
|
-
export
|
|
6
|
+
export type ModelObserver<T> = {
|
|
7
7
|
retrieved?(model: T): void | Promise<void>;
|
|
8
8
|
creating?(model: T): void | Promise<void>;
|
|
9
9
|
created?(model: T): void | Promise<void>;
|
|
@@ -17,11 +17,11 @@ export interface ModelObserver<T> {
|
|
|
17
17
|
restored?(model: T): void | Promise<void>;
|
|
18
18
|
forceDeleting?(model: T): void | Promise<void>;
|
|
19
19
|
forceDeleted?(model: T): void | Promise<void>;
|
|
20
|
-
}
|
|
21
|
-
export
|
|
20
|
+
};
|
|
21
|
+
export type ModelScope = {
|
|
22
22
|
(query: any): void;
|
|
23
|
-
}
|
|
24
|
-
export
|
|
23
|
+
};
|
|
24
|
+
export type ModelConfig = {
|
|
25
25
|
/** Table name - defaults to lowercase class name */
|
|
26
26
|
table: string;
|
|
27
27
|
/** Custom adapter name - defaults to default name */
|
|
@@ -56,7 +56,7 @@ export interface ModelConfig {
|
|
|
56
56
|
attributes?: Record<string, any>;
|
|
57
57
|
/** Date format for serialization */
|
|
58
58
|
dateFormat?: string;
|
|
59
|
-
}
|
|
59
|
+
};
|
|
60
60
|
export type relation = {
|
|
61
61
|
type: 'hasOne' | 'hasMany' | 'belongsTo' | 'manyToMany';
|
|
62
62
|
model: unknown & Model<columnType>;
|
|
@@ -66,9 +66,9 @@ export type relation = {
|
|
|
66
66
|
pivotForeignKey?: string;
|
|
67
67
|
pivotLocalKey?: string;
|
|
68
68
|
};
|
|
69
|
-
export
|
|
69
|
+
export type SoftDeletable = {
|
|
70
70
|
deleted_at?: string | Date | null;
|
|
71
|
-
}
|
|
71
|
+
};
|
|
72
72
|
export type ModelWithTimestamps = {
|
|
73
73
|
created_at?: string | number | Date;
|
|
74
74
|
updated_at?: string | number | Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/types/model.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,cAAc,GACpB,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,QAAQ,GACR,OAAO,GACP,UAAU,GACV,SAAS,GACT,WAAW,GACX,UAAU,GACV,eAAe,GACf,cAAc,CAAC;AAErB,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtE,MAAM,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/types/model.ts"],"names":[],"mappings":"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"}
|
package/dist/types/query.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RecordFactory } from "../index.js";
|
|
1
|
+
import { expressionClause, Join, PossibleBaseExpressions, PossibleExpressions, PossiblePrettyExpressions, RecordFactory } from "../index.js";
|
|
2
2
|
export type QueryIsEqualParameter = {
|
|
3
3
|
[key: string]: QueryValues;
|
|
4
4
|
};
|
|
@@ -14,9 +14,12 @@ export type DefaultQueryParameters = {
|
|
|
14
14
|
where?: QueryWhereCondition;
|
|
15
15
|
};
|
|
16
16
|
export type ExtraQueryParameters = {
|
|
17
|
-
orderBy?:
|
|
17
|
+
orderBy?: OrderByDefinition[];
|
|
18
18
|
limit?: number;
|
|
19
19
|
offset?: number;
|
|
20
|
+
groupBy?: string[];
|
|
21
|
+
expressions?: PossibleExpressions[];
|
|
22
|
+
blacklistTables?: string[];
|
|
20
23
|
};
|
|
21
24
|
export type QueryConstructorType = {
|
|
22
25
|
tableName: string;
|
|
@@ -25,4 +28,55 @@ export type QueryConstructorType = {
|
|
|
25
28
|
adapterName?: string;
|
|
26
29
|
recordFactory?: RecordFactory;
|
|
27
30
|
};
|
|
31
|
+
export type QueryLayers = {
|
|
32
|
+
base: BaseQueryOptions;
|
|
33
|
+
pretty?: PrettyQueryOptions;
|
|
34
|
+
final?: FinalQueryOptions;
|
|
35
|
+
};
|
|
36
|
+
export type BaseQueryOptions = {
|
|
37
|
+
from?: string;
|
|
38
|
+
joins?: Join[];
|
|
39
|
+
where?: QueryWhereCondition;
|
|
40
|
+
orderBy?: OrderByDefinition[];
|
|
41
|
+
expressions?: PossibleBaseExpressions[];
|
|
42
|
+
select?: string[];
|
|
43
|
+
joinsSelect?: string[];
|
|
44
|
+
expressionsSelect?: string[];
|
|
45
|
+
};
|
|
46
|
+
export type PrettyQueryOptions = {
|
|
47
|
+
expressions?: PossiblePrettyExpressions[];
|
|
48
|
+
groupBy?: string[];
|
|
49
|
+
having?: QueryComparisonParameters[];
|
|
50
|
+
where?: QueryComparisonParameters[];
|
|
51
|
+
select?: string[];
|
|
52
|
+
};
|
|
53
|
+
export type FinalQueryOptions = {
|
|
54
|
+
orderBy?: OrderByDefinition[];
|
|
55
|
+
limit?: number;
|
|
56
|
+
offset?: number;
|
|
57
|
+
blacklistTables?: string[];
|
|
58
|
+
select?: string[];
|
|
59
|
+
groupBy?: string[];
|
|
60
|
+
};
|
|
61
|
+
export type OrderByDirection = 'ASC' | 'DESC';
|
|
62
|
+
export type OrderByDefinition = {
|
|
63
|
+
column: string;
|
|
64
|
+
direction: OrderByDirection;
|
|
65
|
+
};
|
|
66
|
+
export type QueryContext = {
|
|
67
|
+
from?: string;
|
|
68
|
+
select?: string[];
|
|
69
|
+
joinsSelect?: string[];
|
|
70
|
+
expressionSelect?: string[];
|
|
71
|
+
joins?: string[];
|
|
72
|
+
conditions?: {
|
|
73
|
+
where?: QueryComparisonParameters[];
|
|
74
|
+
having?: QueryComparisonParameters[];
|
|
75
|
+
};
|
|
76
|
+
expressions?: expressionClause[];
|
|
77
|
+
groupBy?: string[];
|
|
78
|
+
orderBy?: OrderByDefinition[];
|
|
79
|
+
limit?: number;
|
|
80
|
+
offset?: number;
|
|
81
|
+
};
|
|
28
82
|
//# sourceMappingURL=query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/types/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/types/query.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamkirbki/database-handler-core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.0",
|
|
4
4
|
"author": "iamkirbki",
|
|
5
5
|
"description": "Core database abstractions and interfaces",
|
|
6
6
|
"license": "ISC",
|
|
@@ -23,11 +23,19 @@
|
|
|
23
23
|
"directory": "packages/core"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
|
-
"build": "tsc --build && tsc-alias"
|
|
26
|
+
"build": "tsc --build && tsc-alias",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"test:watch": "vitest",
|
|
29
|
+
"test:coverage": "vitest run --coverage",
|
|
30
|
+
"test:ui": "vitest --ui"
|
|
27
31
|
},
|
|
28
32
|
"devDependencies": {
|
|
29
33
|
"@types/node": "^24.10.1",
|
|
34
|
+
"tsc-alias": "^1.8.16",
|
|
30
35
|
"typescript": "^5.9.3",
|
|
31
|
-
"
|
|
36
|
+
"vitest": "^4.0.15"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"ts-node": "^10.9.2"
|
|
32
40
|
}
|
|
33
41
|
}
|