@strapi/database 5.12.1 → 5.12.3
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/connection.js +43 -0
- package/dist/connection.js.map +1 -0
- package/dist/connection.mjs +41 -0
- package/dist/connection.mjs.map +1 -0
- package/dist/dialects/dialect.js +54 -0
- package/dist/dialects/dialect.js.map +1 -0
- package/dist/dialects/dialect.mjs +52 -0
- package/dist/dialects/dialect.mjs.map +1 -0
- package/dist/dialects/index.js +44 -0
- package/dist/dialects/index.js.map +1 -0
- package/dist/dialects/index.mjs +42 -0
- package/dist/dialects/index.mjs.map +1 -0
- package/dist/dialects/mysql/constants.js +8 -0
- package/dist/dialects/mysql/constants.js.map +1 -0
- package/dist/dialects/mysql/constants.mjs +5 -0
- package/dist/dialects/mysql/constants.mjs.map +1 -0
- package/dist/dialects/mysql/database-inspector.js +35 -0
- package/dist/dialects/mysql/database-inspector.js.map +1 -0
- package/dist/dialects/mysql/database-inspector.mjs +33 -0
- package/dist/dialects/mysql/database-inspector.mjs.map +1 -0
- package/dist/dialects/mysql/index.js +75 -0
- package/dist/dialects/mysql/index.js.map +1 -0
- package/dist/dialects/mysql/index.mjs +73 -0
- package/dist/dialects/mysql/index.mjs.map +1 -0
- package/dist/dialects/mysql/schema-inspector.js +297 -0
- package/dist/dialects/mysql/schema-inspector.js.map +1 -0
- package/dist/dialects/mysql/schema-inspector.mjs +295 -0
- package/dist/dialects/mysql/schema-inspector.mjs.map +1 -0
- package/dist/dialects/postgresql/index.js +62 -0
- package/dist/dialects/postgresql/index.js.map +1 -0
- package/dist/dialects/postgresql/index.mjs +60 -0
- package/dist/dialects/postgresql/index.mjs.map +1 -0
- package/dist/dialects/postgresql/schema-inspector.js +316 -0
- package/dist/dialects/postgresql/schema-inspector.js.map +1 -0
- package/dist/dialects/postgresql/schema-inspector.mjs +314 -0
- package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -0
- package/dist/dialects/sqlite/index.js +82 -0
- package/dist/dialects/sqlite/index.js.map +1 -0
- package/dist/dialects/sqlite/index.mjs +80 -0
- package/dist/dialects/sqlite/index.mjs.map +1 -0
- package/dist/dialects/sqlite/schema-inspector.js +211 -0
- package/dist/dialects/sqlite/schema-inspector.js.map +1 -0
- package/dist/dialects/sqlite/schema-inspector.mjs +209 -0
- package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -0
- package/dist/entity-manager/entity-repository.js +139 -0
- package/dist/entity-manager/entity-repository.js.map +1 -0
- package/dist/entity-manager/entity-repository.mjs +137 -0
- package/dist/entity-manager/entity-repository.mjs.map +1 -0
- package/dist/entity-manager/index.js +1186 -0
- package/dist/entity-manager/index.js.map +1 -0
- package/dist/entity-manager/index.mjs +1184 -0
- package/dist/entity-manager/index.mjs.map +1 -0
- package/dist/entity-manager/morph-relations.js +73 -0
- package/dist/entity-manager/morph-relations.js.map +1 -0
- package/dist/entity-manager/morph-relations.mjs +69 -0
- package/dist/entity-manager/morph-relations.mjs.map +1 -0
- package/dist/entity-manager/regular-relations.js +247 -0
- package/dist/entity-manager/regular-relations.js.map +1 -0
- package/dist/entity-manager/regular-relations.mjs +242 -0
- package/dist/entity-manager/regular-relations.mjs.map +1 -0
- package/dist/entity-manager/relations-orderer.js +221 -0
- package/dist/entity-manager/relations-orderer.js.map +1 -0
- package/dist/entity-manager/relations-orderer.mjs +218 -0
- package/dist/entity-manager/relations-orderer.mjs.map +1 -0
- package/dist/errors/database.js +13 -0
- package/dist/errors/database.js.map +1 -0
- package/dist/errors/database.mjs +11 -0
- package/dist/errors/database.mjs.map +1 -0
- package/dist/errors/index.js +18 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/index.mjs +7 -0
- package/dist/errors/index.mjs.map +1 -0
- package/dist/errors/invalid-date.js +13 -0
- package/dist/errors/invalid-date.js.map +1 -0
- package/dist/errors/invalid-date.mjs +11 -0
- package/dist/errors/invalid-date.mjs.map +1 -0
- package/dist/errors/invalid-datetime.js +13 -0
- package/dist/errors/invalid-datetime.js.map +1 -0
- package/dist/errors/invalid-datetime.mjs +11 -0
- package/dist/errors/invalid-datetime.mjs.map +1 -0
- package/dist/errors/invalid-relation.js +13 -0
- package/dist/errors/invalid-relation.js.map +1 -0
- package/dist/errors/invalid-relation.mjs +11 -0
- package/dist/errors/invalid-relation.mjs.map +1 -0
- package/dist/errors/invalid-time.js +13 -0
- package/dist/errors/invalid-time.js.map +1 -0
- package/dist/errors/invalid-time.mjs +11 -0
- package/dist/errors/invalid-time.mjs.map +1 -0
- package/dist/errors/not-null.js +17 -0
- package/dist/errors/not-null.js.map +1 -0
- package/dist/errors/not-null.mjs +15 -0
- package/dist/errors/not-null.mjs.map +1 -0
- package/dist/fields/biginteger.js +9 -0
- package/dist/fields/biginteger.js.map +1 -0
- package/dist/fields/biginteger.mjs +7 -0
- package/dist/fields/biginteger.mjs.map +1 -0
- package/dist/fields/boolean.js +48 -0
- package/dist/fields/boolean.js.map +1 -0
- package/dist/fields/boolean.mjs +46 -0
- package/dist/fields/boolean.mjs.map +1 -0
- package/dist/fields/date.js +16 -0
- package/dist/fields/date.js.map +1 -0
- package/dist/fields/date.mjs +14 -0
- package/dist/fields/date.mjs.map +1 -0
- package/dist/fields/datetime.js +37 -0
- package/dist/fields/datetime.js.map +1 -0
- package/dist/fields/datetime.mjs +16 -0
- package/dist/fields/datetime.mjs.map +1 -0
- package/dist/fields/field.js +16 -0
- package/dist/fields/field.js.map +1 -0
- package/dist/fields/field.mjs +14 -0
- package/dist/fields/field.mjs.map +1 -0
- package/dist/fields/index.js +45 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/fields/index.mjs +43 -0
- package/dist/fields/index.mjs.map +1 -0
- package/dist/fields/json.js +36 -0
- package/dist/fields/json.js.map +1 -0
- package/dist/fields/json.mjs +34 -0
- package/dist/fields/json.mjs.map +1 -0
- package/dist/fields/number.js +20 -0
- package/dist/fields/number.js.map +1 -0
- package/dist/fields/number.mjs +18 -0
- package/dist/fields/number.mjs.map +1 -0
- package/dist/fields/shared/parsers.js +91 -0
- package/dist/fields/shared/parsers.js.map +1 -0
- package/dist/fields/shared/parsers.mjs +68 -0
- package/dist/fields/shared/parsers.mjs.map +1 -0
- package/dist/fields/string.js +16 -0
- package/dist/fields/string.js.map +1 -0
- package/dist/fields/string.mjs +14 -0
- package/dist/fields/string.mjs.map +1 -0
- package/dist/fields/time.js +17 -0
- package/dist/fields/time.js.map +1 -0
- package/dist/fields/time.mjs +15 -0
- package/dist/fields/time.mjs.map +1 -0
- package/dist/fields/timestamp.js +37 -0
- package/dist/fields/timestamp.js.map +1 -0
- package/dist/fields/timestamp.mjs +16 -0
- package/dist/fields/timestamp.mjs.map +1 -0
- package/dist/index.js +33 -8569
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -8532
- package/dist/index.mjs.map +1 -1
- package/dist/lifecycles/index.js +73 -0
- package/dist/lifecycles/index.js.map +1 -0
- package/dist/lifecycles/index.mjs +71 -0
- package/dist/lifecycles/index.mjs.map +1 -0
- package/dist/lifecycles/subscribers/index.js +10 -0
- package/dist/lifecycles/subscribers/index.js.map +1 -0
- package/dist/lifecycles/subscribers/index.mjs +8 -0
- package/dist/lifecycles/subscribers/index.mjs.map +1 -0
- package/dist/lifecycles/subscribers/models-lifecycles.js +13 -0
- package/dist/lifecycles/subscribers/models-lifecycles.js.map +1 -0
- package/dist/lifecycles/subscribers/models-lifecycles.mjs +11 -0
- package/dist/lifecycles/subscribers/models-lifecycles.mjs.map +1 -0
- package/dist/lifecycles/subscribers/timestamps.js +55 -0
- package/dist/lifecycles/subscribers/timestamps.js.map +1 -0
- package/dist/lifecycles/subscribers/timestamps.mjs +53 -0
- package/dist/lifecycles/subscribers/timestamps.mjs.map +1 -0
- package/dist/metadata/index.js +24 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/index.mjs +16 -0
- package/dist/metadata/index.mjs.map +1 -0
- package/dist/metadata/metadata.js +100 -0
- package/dist/metadata/metadata.js.map +1 -0
- package/dist/metadata/metadata.mjs +98 -0
- package/dist/metadata/metadata.mjs.map +1 -0
- package/dist/metadata/relations.js +545 -0
- package/dist/metadata/relations.js.map +1 -0
- package/dist/metadata/relations.mjs +536 -0
- package/dist/metadata/relations.mjs.map +1 -0
- package/dist/migrations/common.js +8 -0
- package/dist/migrations/common.js.map +1 -0
- package/dist/migrations/common.mjs +6 -0
- package/dist/migrations/common.mjs.map +1 -0
- package/dist/migrations/index.js +39 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/index.mjs +37 -0
- package/dist/migrations/index.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js +179 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs +177 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +125 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +123 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.js +41 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs +39 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.js +45 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs +43 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js +43 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs +41 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -0
- package/dist/migrations/internal-migrations/index.js +26 -0
- package/dist/migrations/internal-migrations/index.js.map +1 -0
- package/dist/migrations/internal-migrations/index.mjs +24 -0
- package/dist/migrations/internal-migrations/index.mjs.map +1 -0
- package/dist/migrations/internal.js +63 -0
- package/dist/migrations/internal.js.map +1 -0
- package/dist/migrations/internal.mjs +61 -0
- package/dist/migrations/internal.mjs.map +1 -0
- package/dist/migrations/logger.js +24 -0
- package/dist/migrations/logger.js.map +1 -0
- package/dist/migrations/logger.mjs +22 -0
- package/dist/migrations/logger.mjs.map +1 -0
- package/dist/migrations/storage.js +39 -0
- package/dist/migrations/storage.js.map +1 -0
- package/dist/migrations/storage.mjs +37 -0
- package/dist/migrations/storage.mjs.map +1 -0
- package/dist/migrations/users.js +87 -0
- package/dist/migrations/users.js.map +1 -0
- package/dist/migrations/users.mjs +85 -0
- package/dist/migrations/users.mjs.map +1 -0
- package/dist/query/helpers/join.js +127 -0
- package/dist/query/helpers/join.js.map +1 -0
- package/dist/query/helpers/join.mjs +122 -0
- package/dist/query/helpers/join.mjs.map +1 -0
- package/dist/query/helpers/order-by.js +167 -0
- package/dist/query/helpers/order-by.js.map +1 -0
- package/dist/query/helpers/order-by.mjs +163 -0
- package/dist/query/helpers/order-by.mjs.map +1 -0
- package/dist/query/helpers/populate/apply.js +592 -0
- package/dist/query/helpers/populate/apply.js.map +1 -0
- package/dist/query/helpers/populate/apply.mjs +590 -0
- package/dist/query/helpers/populate/apply.mjs.map +1 -0
- package/dist/query/helpers/populate/process.js +92 -0
- package/dist/query/helpers/populate/process.js.map +1 -0
- package/dist/query/helpers/populate/process.mjs +90 -0
- package/dist/query/helpers/populate/process.mjs.map +1 -0
- package/dist/query/helpers/search.js +67 -0
- package/dist/query/helpers/search.js.map +1 -0
- package/dist/query/helpers/search.mjs +65 -0
- package/dist/query/helpers/search.mjs.map +1 -0
- package/dist/query/helpers/streams/readable.js +131 -0
- package/dist/query/helpers/streams/readable.js.map +1 -0
- package/dist/query/helpers/streams/readable.mjs +129 -0
- package/dist/query/helpers/streams/readable.mjs.map +1 -0
- package/dist/query/helpers/transform.js +77 -0
- package/dist/query/helpers/transform.js.map +1 -0
- package/dist/query/helpers/transform.mjs +73 -0
- package/dist/query/helpers/transform.mjs.map +1 -0
- package/dist/query/helpers/where.js +372 -0
- package/dist/query/helpers/where.js.map +1 -0
- package/dist/query/helpers/where.mjs +369 -0
- package/dist/query/helpers/where.mjs.map +1 -0
- package/dist/query/query-builder.js +507 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/query-builder.mjs +505 -0
- package/dist/query/query-builder.mjs.map +1 -0
- package/dist/repairs/index.js +13 -0
- package/dist/repairs/index.js.map +1 -0
- package/dist/repairs/index.mjs +11 -0
- package/dist/repairs/index.mjs.map +1 -0
- package/dist/repairs/operations/remove-orphan-morph-types.js +54 -0
- package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -0
- package/dist/repairs/operations/remove-orphan-morph-types.mjs +52 -0
- package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -0
- package/dist/schema/builder.js +354 -0
- package/dist/schema/builder.js.map +1 -0
- package/dist/schema/builder.mjs +352 -0
- package/dist/schema/builder.mjs.map +1 -0
- package/dist/schema/diff.js +379 -0
- package/dist/schema/diff.js.map +1 -0
- package/dist/schema/diff.mjs +377 -0
- package/dist/schema/diff.mjs.map +1 -0
- package/dist/schema/index.js +93 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/index.mjs +91 -0
- package/dist/schema/index.mjs.map +1 -0
- package/dist/schema/schema.js +266 -0
- package/dist/schema/schema.js.map +1 -0
- package/dist/schema/schema.mjs +264 -0
- package/dist/schema/schema.mjs.map +1 -0
- package/dist/schema/storage.js +58 -0
- package/dist/schema/storage.js.map +1 -0
- package/dist/schema/storage.mjs +56 -0
- package/dist/schema/storage.mjs.map +1 -0
- package/dist/transaction-context.js +65 -0
- package/dist/transaction-context.js.map +1 -0
- package/dist/transaction-context.mjs +63 -0
- package/dist/transaction-context.mjs.map +1 -0
- package/dist/utils/async-curry.js +19 -0
- package/dist/utils/async-curry.js.map +1 -0
- package/dist/utils/async-curry.mjs +17 -0
- package/dist/utils/async-curry.mjs.map +1 -0
- package/dist/utils/identifiers/hash.js +30 -0
- package/dist/utils/identifiers/hash.js.map +1 -0
- package/dist/utils/identifiers/hash.mjs +28 -0
- package/dist/utils/identifiers/hash.mjs.map +1 -0
- package/dist/utils/identifiers/index.js +414 -0
- package/dist/utils/identifiers/index.js.map +1 -0
- package/dist/utils/identifiers/index.mjs +411 -0
- package/dist/utils/identifiers/index.mjs.map +1 -0
- package/dist/utils/knex.js +21 -0
- package/dist/utils/knex.js.map +1 -0
- package/dist/utils/knex.mjs +18 -0
- package/dist/utils/knex.mjs.map +1 -0
- package/dist/utils/types.js +51 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/types.mjs +44 -0
- package/dist/utils/types.mjs.map +1 -0
- package/dist/validations/index.js +12 -0
- package/dist/validations/index.js.map +1 -0
- package/dist/validations/index.mjs +10 -0
- package/dist/validations/index.mjs.map +1 -0
- package/dist/validations/relations/bidirectional.js +64 -0
- package/dist/validations/relations/bidirectional.js.map +1 -0
- package/dist/validations/relations/bidirectional.mjs +62 -0
- package/dist/validations/relations/bidirectional.mjs.map +1 -0
- package/dist/validations/relations/index.js +13 -0
- package/dist/validations/relations/index.js.map +1 -0
- package/dist/validations/relations/index.mjs +11 -0
- package/dist/validations/relations/index.mjs.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
import _ from 'lodash/fp';
|
|
2
|
+
import DatabaseError from '../errors/database.mjs';
|
|
3
|
+
import { transactionCtx } from '../transaction-context.mjs';
|
|
4
|
+
import { isKnexQuery } from '../utils/knex.mjs';
|
|
5
|
+
import { applySearch } from './helpers/search.mjs';
|
|
6
|
+
import { processOrderBy, wrapWithDeepSort } from './helpers/order-by.mjs';
|
|
7
|
+
import { createJoin, applyJoins } from './helpers/join.mjs';
|
|
8
|
+
import applyPopulate from './helpers/populate/apply.mjs';
|
|
9
|
+
import processPopulate from './helpers/populate/process.mjs';
|
|
10
|
+
import { processWhere, applyWhere } from './helpers/where.mjs';
|
|
11
|
+
import { toColumnName, toRow, fromRow } from './helpers/transform.mjs';
|
|
12
|
+
import ReadableStrapiQuery from './helpers/streams/readable.mjs';
|
|
13
|
+
|
|
14
|
+
const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
15
|
+
const meta = db.metadata.get(uid);
|
|
16
|
+
const { tableName } = meta;
|
|
17
|
+
const state = _.defaults({
|
|
18
|
+
type: 'select',
|
|
19
|
+
select: [],
|
|
20
|
+
count: null,
|
|
21
|
+
max: null,
|
|
22
|
+
first: false,
|
|
23
|
+
data: null,
|
|
24
|
+
where: [],
|
|
25
|
+
joins: [],
|
|
26
|
+
populate: null,
|
|
27
|
+
limit: null,
|
|
28
|
+
offset: null,
|
|
29
|
+
transaction: null,
|
|
30
|
+
forUpdate: false,
|
|
31
|
+
onConflict: null,
|
|
32
|
+
merge: null,
|
|
33
|
+
ignore: false,
|
|
34
|
+
orderBy: [],
|
|
35
|
+
groupBy: [],
|
|
36
|
+
increments: [],
|
|
37
|
+
decrements: [],
|
|
38
|
+
aliasCounter: 0,
|
|
39
|
+
filters: null,
|
|
40
|
+
search: null,
|
|
41
|
+
processed: false
|
|
42
|
+
}, initialState);
|
|
43
|
+
const getAlias = ()=>{
|
|
44
|
+
const alias = `t${state.aliasCounter}`;
|
|
45
|
+
state.aliasCounter += 1;
|
|
46
|
+
return alias;
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
alias: getAlias(),
|
|
50
|
+
getAlias,
|
|
51
|
+
state,
|
|
52
|
+
clone () {
|
|
53
|
+
return createQueryBuilder(uid, db, state);
|
|
54
|
+
},
|
|
55
|
+
select (args) {
|
|
56
|
+
state.type = 'select';
|
|
57
|
+
state.select = _.uniq(_.castArray(args));
|
|
58
|
+
return this;
|
|
59
|
+
},
|
|
60
|
+
addSelect (args) {
|
|
61
|
+
state.select = _.uniq([
|
|
62
|
+
...state.select,
|
|
63
|
+
..._.castArray(args)
|
|
64
|
+
]);
|
|
65
|
+
return this;
|
|
66
|
+
},
|
|
67
|
+
insert (data) {
|
|
68
|
+
state.type = 'insert';
|
|
69
|
+
state.data = data;
|
|
70
|
+
return this;
|
|
71
|
+
},
|
|
72
|
+
onConflict (args) {
|
|
73
|
+
state.onConflict = args;
|
|
74
|
+
return this;
|
|
75
|
+
},
|
|
76
|
+
merge (args) {
|
|
77
|
+
state.merge = args;
|
|
78
|
+
return this;
|
|
79
|
+
},
|
|
80
|
+
ignore () {
|
|
81
|
+
state.ignore = true;
|
|
82
|
+
return this;
|
|
83
|
+
},
|
|
84
|
+
delete () {
|
|
85
|
+
state.type = 'delete';
|
|
86
|
+
return this;
|
|
87
|
+
},
|
|
88
|
+
ref (name) {
|
|
89
|
+
return db.connection.ref(toColumnName(meta, name));
|
|
90
|
+
},
|
|
91
|
+
update (data) {
|
|
92
|
+
state.type = 'update';
|
|
93
|
+
state.data = data;
|
|
94
|
+
return this;
|
|
95
|
+
},
|
|
96
|
+
increment (column, amount = 1) {
|
|
97
|
+
state.type = 'update';
|
|
98
|
+
state.increments.push({
|
|
99
|
+
column,
|
|
100
|
+
amount
|
|
101
|
+
});
|
|
102
|
+
return this;
|
|
103
|
+
},
|
|
104
|
+
decrement (column, amount = 1) {
|
|
105
|
+
state.type = 'update';
|
|
106
|
+
state.decrements.push({
|
|
107
|
+
column,
|
|
108
|
+
amount
|
|
109
|
+
});
|
|
110
|
+
return this;
|
|
111
|
+
},
|
|
112
|
+
count (count = 'id') {
|
|
113
|
+
state.type = 'count';
|
|
114
|
+
state.count = count;
|
|
115
|
+
return this;
|
|
116
|
+
},
|
|
117
|
+
max (column) {
|
|
118
|
+
state.type = 'max';
|
|
119
|
+
state.max = column;
|
|
120
|
+
return this;
|
|
121
|
+
},
|
|
122
|
+
where (where = {}) {
|
|
123
|
+
if (!_.isPlainObject(where)) {
|
|
124
|
+
throw new Error('Where must be an object');
|
|
125
|
+
}
|
|
126
|
+
state.where.push(where);
|
|
127
|
+
return this;
|
|
128
|
+
},
|
|
129
|
+
limit (limit) {
|
|
130
|
+
state.limit = limit;
|
|
131
|
+
return this;
|
|
132
|
+
},
|
|
133
|
+
offset (offset) {
|
|
134
|
+
state.offset = offset;
|
|
135
|
+
return this;
|
|
136
|
+
},
|
|
137
|
+
orderBy (orderBy) {
|
|
138
|
+
state.orderBy = orderBy;
|
|
139
|
+
return this;
|
|
140
|
+
},
|
|
141
|
+
groupBy (groupBy) {
|
|
142
|
+
state.groupBy = groupBy;
|
|
143
|
+
return this;
|
|
144
|
+
},
|
|
145
|
+
populate (populate) {
|
|
146
|
+
state.populate = populate;
|
|
147
|
+
return this;
|
|
148
|
+
},
|
|
149
|
+
search (query) {
|
|
150
|
+
state.search = query;
|
|
151
|
+
return this;
|
|
152
|
+
},
|
|
153
|
+
transacting (transaction) {
|
|
154
|
+
state.transaction = transaction;
|
|
155
|
+
return this;
|
|
156
|
+
},
|
|
157
|
+
forUpdate () {
|
|
158
|
+
state.forUpdate = true;
|
|
159
|
+
return this;
|
|
160
|
+
},
|
|
161
|
+
init (params = {}) {
|
|
162
|
+
const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;
|
|
163
|
+
if (!_.isNil(where)) {
|
|
164
|
+
this.where(where);
|
|
165
|
+
}
|
|
166
|
+
if (!_.isNil(_q)) {
|
|
167
|
+
this.search(_q);
|
|
168
|
+
}
|
|
169
|
+
if (!_.isNil(select)) {
|
|
170
|
+
this.select(select);
|
|
171
|
+
} else {
|
|
172
|
+
this.select('*');
|
|
173
|
+
}
|
|
174
|
+
if (!_.isNil(limit)) {
|
|
175
|
+
this.limit(limit);
|
|
176
|
+
}
|
|
177
|
+
if (!_.isNil(offset)) {
|
|
178
|
+
this.offset(offset);
|
|
179
|
+
}
|
|
180
|
+
if (!_.isNil(orderBy)) {
|
|
181
|
+
this.orderBy(orderBy);
|
|
182
|
+
}
|
|
183
|
+
if (!_.isNil(groupBy)) {
|
|
184
|
+
this.groupBy(groupBy);
|
|
185
|
+
}
|
|
186
|
+
if (!_.isNil(populate)) {
|
|
187
|
+
this.populate(populate);
|
|
188
|
+
}
|
|
189
|
+
if (!_.isNil(filters)) {
|
|
190
|
+
this.filters(filters);
|
|
191
|
+
}
|
|
192
|
+
return this;
|
|
193
|
+
},
|
|
194
|
+
filters (filters) {
|
|
195
|
+
state.filters = filters;
|
|
196
|
+
},
|
|
197
|
+
first () {
|
|
198
|
+
state.first = true;
|
|
199
|
+
return this;
|
|
200
|
+
},
|
|
201
|
+
join (join) {
|
|
202
|
+
if (!join.targetField) {
|
|
203
|
+
state.joins.push(join);
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
const model = db.metadata.get(uid);
|
|
207
|
+
const attribute = model.attributes[join.targetField];
|
|
208
|
+
createJoin({
|
|
209
|
+
db,
|
|
210
|
+
qb: this,
|
|
211
|
+
uid
|
|
212
|
+
}, {
|
|
213
|
+
alias: this.alias,
|
|
214
|
+
refAlias: join.alias,
|
|
215
|
+
attributeName: join.targetField,
|
|
216
|
+
attribute
|
|
217
|
+
});
|
|
218
|
+
return this;
|
|
219
|
+
},
|
|
220
|
+
mustUseAlias () {
|
|
221
|
+
return [
|
|
222
|
+
'select',
|
|
223
|
+
'count'
|
|
224
|
+
].includes(state.type);
|
|
225
|
+
},
|
|
226
|
+
aliasColumn (key, alias) {
|
|
227
|
+
if (typeof key !== 'string') {
|
|
228
|
+
return key;
|
|
229
|
+
}
|
|
230
|
+
if (key.indexOf('.') >= 0) {
|
|
231
|
+
return key;
|
|
232
|
+
}
|
|
233
|
+
if (!_.isNil(alias)) {
|
|
234
|
+
return `${alias}.${key}`;
|
|
235
|
+
}
|
|
236
|
+
return this.mustUseAlias() ? `${this.alias}.${key}` : key;
|
|
237
|
+
},
|
|
238
|
+
raw: db.connection.raw.bind(db.connection),
|
|
239
|
+
shouldUseSubQuery () {
|
|
240
|
+
return [
|
|
241
|
+
'delete',
|
|
242
|
+
'update'
|
|
243
|
+
].includes(state.type) && state.joins.length > 0;
|
|
244
|
+
},
|
|
245
|
+
runSubQuery () {
|
|
246
|
+
const originalType = state.type;
|
|
247
|
+
this.select('id');
|
|
248
|
+
const subQB = this.getKnexQuery();
|
|
249
|
+
const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));
|
|
250
|
+
const connection = db.getConnection(tableName);
|
|
251
|
+
return connection[originalType]().whereIn('id', nestedSubQuery);
|
|
252
|
+
},
|
|
253
|
+
processState () {
|
|
254
|
+
if (this.state.processed) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
state.orderBy = processOrderBy(state.orderBy, {
|
|
258
|
+
qb: this,
|
|
259
|
+
uid,
|
|
260
|
+
db
|
|
261
|
+
});
|
|
262
|
+
if (!_.isNil(state.filters)) {
|
|
263
|
+
if (_.isFunction(state.filters)) {
|
|
264
|
+
const filters = state.filters({
|
|
265
|
+
qb: this,
|
|
266
|
+
uid,
|
|
267
|
+
meta,
|
|
268
|
+
db
|
|
269
|
+
});
|
|
270
|
+
if (!_.isNil(filters)) {
|
|
271
|
+
state.where.push(filters);
|
|
272
|
+
}
|
|
273
|
+
} else {
|
|
274
|
+
state.where.push(state.filters);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
state.where = processWhere(state.where, {
|
|
278
|
+
qb: this,
|
|
279
|
+
uid,
|
|
280
|
+
db
|
|
281
|
+
});
|
|
282
|
+
state.populate = processPopulate(state.populate, {
|
|
283
|
+
qb: this,
|
|
284
|
+
uid,
|
|
285
|
+
db
|
|
286
|
+
});
|
|
287
|
+
state.data = toRow(meta, state.data);
|
|
288
|
+
this.processSelect();
|
|
289
|
+
this.state.processed = true;
|
|
290
|
+
},
|
|
291
|
+
shouldUseDistinct () {
|
|
292
|
+
return state.joins.length > 0 && _.isEmpty(state.groupBy);
|
|
293
|
+
},
|
|
294
|
+
shouldUseDeepSort () {
|
|
295
|
+
return state.orderBy.filter(({ column })=>column.indexOf('.') >= 0).filter(({ column })=>{
|
|
296
|
+
const col = column.split('.');
|
|
297
|
+
for(let i = 0; i < col.length - 1; i += 1){
|
|
298
|
+
const el = col[i];
|
|
299
|
+
// order by "rel"."xxx"
|
|
300
|
+
const isRelationAttribute = meta.attributes[el]?.type === 'relation';
|
|
301
|
+
// order by "t2"."xxx"
|
|
302
|
+
const isAliasedRelation = Object.values(state.joins).map((join)=>join.alias).includes(el);
|
|
303
|
+
if (isRelationAttribute || isAliasedRelation) {
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return false;
|
|
308
|
+
}).length > 0;
|
|
309
|
+
},
|
|
310
|
+
processSelect () {
|
|
311
|
+
state.select = state.select.map((field)=>{
|
|
312
|
+
if (isKnexQuery(field)) {
|
|
313
|
+
return field;
|
|
314
|
+
}
|
|
315
|
+
return toColumnName(meta, field);
|
|
316
|
+
});
|
|
317
|
+
if (this.shouldUseDistinct()) {
|
|
318
|
+
const joinsOrderByColumns = state.joins.flatMap((join)=>{
|
|
319
|
+
return _.keys(join.orderBy).map((key)=>this.aliasColumn(key, join.alias));
|
|
320
|
+
});
|
|
321
|
+
const orderByColumns = state.orderBy.map(({ column })=>column);
|
|
322
|
+
state.select = _.uniq([
|
|
323
|
+
...joinsOrderByColumns,
|
|
324
|
+
...orderByColumns,
|
|
325
|
+
...state.select
|
|
326
|
+
]);
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
getKnexQuery () {
|
|
330
|
+
if (!state.type) {
|
|
331
|
+
this.select('*');
|
|
332
|
+
}
|
|
333
|
+
const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;
|
|
334
|
+
const qb = db.getConnection(aliasedTableName);
|
|
335
|
+
// The state should always be processed before calling shouldUseSubQuery as it
|
|
336
|
+
// relies on the presence or absence of joins to determine the need of a subquery
|
|
337
|
+
this.processState();
|
|
338
|
+
if (this.shouldUseSubQuery()) {
|
|
339
|
+
return this.runSubQuery();
|
|
340
|
+
}
|
|
341
|
+
switch(state.type){
|
|
342
|
+
case 'select':
|
|
343
|
+
{
|
|
344
|
+
qb.select(state.select.map((column)=>this.aliasColumn(column)));
|
|
345
|
+
if (this.shouldUseDistinct()) {
|
|
346
|
+
qb.distinct();
|
|
347
|
+
}
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
case 'count':
|
|
351
|
+
{
|
|
352
|
+
const dbColumnName = this.aliasColumn(toColumnName(meta, state.count));
|
|
353
|
+
if (this.shouldUseDistinct()) {
|
|
354
|
+
qb.countDistinct({
|
|
355
|
+
count: dbColumnName
|
|
356
|
+
});
|
|
357
|
+
} else {
|
|
358
|
+
qb.count({
|
|
359
|
+
count: dbColumnName
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
case 'max':
|
|
365
|
+
{
|
|
366
|
+
const dbColumnName = this.aliasColumn(toColumnName(meta, state.max));
|
|
367
|
+
qb.max({
|
|
368
|
+
max: dbColumnName
|
|
369
|
+
});
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
case 'insert':
|
|
373
|
+
{
|
|
374
|
+
qb.insert(state.data);
|
|
375
|
+
if (db.dialect.useReturning() && _.has('id', meta.attributes)) {
|
|
376
|
+
qb.returning('id');
|
|
377
|
+
}
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
case 'update':
|
|
381
|
+
{
|
|
382
|
+
if (state.data) {
|
|
383
|
+
qb.update(state.data);
|
|
384
|
+
}
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
case 'delete':
|
|
388
|
+
{
|
|
389
|
+
qb.delete();
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
case 'truncate':
|
|
393
|
+
{
|
|
394
|
+
qb.truncate();
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
397
|
+
default:
|
|
398
|
+
{
|
|
399
|
+
throw new Error('Unknown query type');
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (state.transaction) {
|
|
403
|
+
qb.transacting(state.transaction);
|
|
404
|
+
}
|
|
405
|
+
if (state.forUpdate) {
|
|
406
|
+
qb.forUpdate();
|
|
407
|
+
}
|
|
408
|
+
if (!_.isEmpty(state.increments)) {
|
|
409
|
+
state.increments.forEach((incr)=>qb.increment(incr.column, incr.amount));
|
|
410
|
+
}
|
|
411
|
+
if (!_.isEmpty(state.decrements)) {
|
|
412
|
+
state.decrements.forEach((decr)=>qb.decrement(decr.column, decr.amount));
|
|
413
|
+
}
|
|
414
|
+
if (state.onConflict) {
|
|
415
|
+
if (state.merge) {
|
|
416
|
+
qb.onConflict(state.onConflict).merge(state.merge);
|
|
417
|
+
} else if (state.ignore) {
|
|
418
|
+
qb.onConflict(state.onConflict).ignore();
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
if (state.limit) {
|
|
422
|
+
qb.limit(state.limit);
|
|
423
|
+
}
|
|
424
|
+
if (state.offset) {
|
|
425
|
+
qb.offset(state.offset);
|
|
426
|
+
}
|
|
427
|
+
if (state.orderBy.length > 0) {
|
|
428
|
+
qb.orderBy(state.orderBy);
|
|
429
|
+
}
|
|
430
|
+
if (state.first) {
|
|
431
|
+
qb.first();
|
|
432
|
+
}
|
|
433
|
+
if (state.groupBy.length > 0) {
|
|
434
|
+
qb.groupBy(state.groupBy);
|
|
435
|
+
}
|
|
436
|
+
// if there are joins and it is a delete or update use a sub query
|
|
437
|
+
if (state.where) {
|
|
438
|
+
applyWhere(qb, state.where);
|
|
439
|
+
}
|
|
440
|
+
// if there are joins and it is a delete or update use a sub query
|
|
441
|
+
if (state.search) {
|
|
442
|
+
qb.where((subQb)=>{
|
|
443
|
+
applySearch(subQb, state.search, {
|
|
444
|
+
qb: this,
|
|
445
|
+
db,
|
|
446
|
+
uid
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
if (state.joins.length > 0) {
|
|
451
|
+
applyJoins(qb, state.joins);
|
|
452
|
+
}
|
|
453
|
+
if (this.shouldUseDeepSort()) {
|
|
454
|
+
return wrapWithDeepSort(qb, {
|
|
455
|
+
qb: this,
|
|
456
|
+
db,
|
|
457
|
+
uid
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return qb;
|
|
461
|
+
},
|
|
462
|
+
async execute ({ mapResults = true } = {}) {
|
|
463
|
+
try {
|
|
464
|
+
const qb = this.getKnexQuery();
|
|
465
|
+
const transaction = transactionCtx.get();
|
|
466
|
+
if (transaction) {
|
|
467
|
+
qb.transacting(transaction);
|
|
468
|
+
}
|
|
469
|
+
const rows = await qb;
|
|
470
|
+
if (state.populate && !_.isNil(rows)) {
|
|
471
|
+
await applyPopulate(_.castArray(rows), state.populate, {
|
|
472
|
+
qb: this,
|
|
473
|
+
uid,
|
|
474
|
+
db
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
let results = rows;
|
|
478
|
+
if (mapResults && state.type === 'select') {
|
|
479
|
+
results = fromRow(meta, rows);
|
|
480
|
+
}
|
|
481
|
+
return results;
|
|
482
|
+
} catch (error) {
|
|
483
|
+
if (error instanceof Error) {
|
|
484
|
+
db.dialect.transformErrors(error);
|
|
485
|
+
} else {
|
|
486
|
+
throw error;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
stream ({ mapResults = true } = {}) {
|
|
491
|
+
if (state.type === 'select') {
|
|
492
|
+
return new ReadableStrapiQuery({
|
|
493
|
+
qb: this,
|
|
494
|
+
db,
|
|
495
|
+
uid,
|
|
496
|
+
mapResults
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
throw new DatabaseError(`query-builder.stream() has been called with an unsupported query type: "${state.type}"`);
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
export { createQueryBuilder as default };
|
|
505
|
+
//# sourceMappingURL=query-builder.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder.mjs","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter(({ column }) => column.indexOf('.') >= 0)\n .filter(({ column }) => {\n const col = column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n const orderByColumns = state.orderBy.map(({ column }) => column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n qb.orderBy(state.orderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","processSelect","shouldUseDistinct","isEmpty","shouldUseDeepSort","filter","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":";;;;;;;;;;;;;AA4HA,MAAMA,qBAAqB,CACzBC,GAAAA,EACAC,EACAC,EAAAA,YAAAA,GAA+B,EAAE,GAAA;AAEjC,IAAA,MAAMC,IAAOF,GAAAA,EAAAA,CAAGG,QAAQ,CAACC,GAAG,CAACL,GAAAA,CAAAA;IAC7B,MAAM,EAAEM,SAAS,EAAE,GAAGH,IAAAA;IAEtB,MAAMI,KAAAA,GAAeC,CAAEC,CAAAA,QAAQ,CAC7B;QACEC,IAAM,EAAA,QAAA;AACNC,QAAAA,MAAAA,EAAQ,EAAE;QACVC,KAAO,EAAA,IAAA;QACPC,GAAK,EAAA,IAAA;QACLC,KAAO,EAAA,KAAA;QACPC,IAAM,EAAA,IAAA;AACNC,QAAAA,KAAAA,EAAO,EAAE;AACTC,QAAAA,KAAAA,EAAO,EAAE;QACTC,QAAU,EAAA,IAAA;QACVC,KAAO,EAAA,IAAA;QACPC,MAAQ,EAAA,IAAA;QACRC,WAAa,EAAA,IAAA;QACbC,SAAW,EAAA,KAAA;QACXC,UAAY,EAAA,IAAA;QACZC,KAAO,EAAA,IAAA;QACPC,MAAQ,EAAA,KAAA;AACRC,QAAAA,OAAAA,EAAS,EAAE;AACXC,QAAAA,OAAAA,EAAS,EAAE;AACXC,QAAAA,UAAAA,EAAY,EAAE;AACdC,QAAAA,UAAAA,EAAY,EAAE;QACdC,YAAc,EAAA,CAAA;QACdC,OAAS,EAAA,IAAA;QACTC,MAAQ,EAAA,IAAA;QACRC,SAAW,EAAA;KAEb/B,EAAAA,YAAAA,CAAAA;AAGF,IAAA,MAAMgC,QAAW,GAAA,IAAA;AACf,QAAA,MAAMC,QAAQ,CAAC,CAAC,EAAE5B,KAAMuB,CAAAA,YAAY,CAAC,CAAC;AAEtCvB,QAAAA,KAAAA,CAAMuB,YAAY,IAAI,CAAA;QAEtB,OAAOK,KAAAA;AACT,KAAA;IAEA,OAAO;QACLA,KAAOD,EAAAA,QAAAA,EAAAA;AACPA,QAAAA,QAAAA;AACA3B,QAAAA,KAAAA;AAEA6B,QAAAA,KAAAA,CAAAA,GAAAA;YACE,OAAOrC,kBAAAA,CAAmBC,KAAKC,EAAIM,EAAAA,KAAAA,CAAAA;AACrC,SAAA;AAEAI,QAAAA,MAAAA,CAAAA,CAAO0B,IAAI,EAAA;AACT9B,YAAAA,KAAAA,CAAMG,IAAI,GAAG,QAAA;AACbH,YAAAA,KAAAA,CAAMI,MAAM,GAAGH,CAAAA,CAAE8B,IAAI,CAAC9B,CAAAA,CAAE+B,SAAS,CAACF,IAAAA,CAAAA,CAAAA;AAElC,YAAA,OAAO,IAAI;AACb,SAAA;AAEAG,QAAAA,SAAAA,CAAAA,CAAUH,IAAI,EAAA;AACZ9B,YAAAA,KAAAA,CAAMI,MAAM,GAAGH,CAAE8B,CAAAA,IAAI,CAAC;AAAI/B,gBAAAA,GAAAA,KAAAA,CAAMI,MAAM;AAAKH,gBAAAA,GAAAA,CAAAA,CAAE+B,SAAS,CAACF,IAAAA;AAAM,aAAA,CAAA;AAE7D,YAAA,OAAO,IAAI;AACb,SAAA;AAEAI,QAAAA,MAAAA,CAAAA,CAAO1B,IAAI,EAAA;AACTR,YAAAA,KAAAA,CAAMG,IAAI,GAAG,QAAA;AACbH,YAAAA,KAAAA,CAAMQ,IAAI,GAAGA,IAAAA;AAEb,YAAA,OAAO,IAAI;AACb,SAAA;AAEAQ,QAAAA,UAAAA,CAAAA,CAAWc,IAAI,EAAA;AACb9B,YAAAA,KAAAA,CAAMgB,UAAU,GAAGc,IAAAA;AAEnB,YAAA,OAAO,IAAI;AACb,SAAA;AAEAb,QAAAA,KAAAA,CAAAA,CAAMa,IAAI,EAAA;AACR9B,YAAAA,KAAAA,CAAMiB,KAAK,GAAGa,IAAAA;AAEd,YAAA,OAAO,IAAI;AACb,SAAA;AAEAZ,QAAAA,MAAAA,CAAAA,GAAAA;AACElB,YAAAA,KAAAA,CAAMkB,MAAM,GAAG,IAAA;AAEf,YAAA,OAAO,IAAI;AACb,SAAA;AAEAiB,QAAAA,MAAAA,CAAAA,GAAAA;AACEnC,YAAAA,KAAAA,CAAMG,IAAI,GAAG,QAAA;AAEb,YAAA,OAAO,IAAI;AACb,SAAA;AAEAiC,QAAAA,GAAAA,CAAAA,CAAIC,IAAI,EAAA;YACN,OAAO3C,EAAAA,CAAG4C,UAAU,CAACF,GAAG,CAACG,YAAoB,CAAC3C,IAAMyC,EAAAA,IAAAA,CAAAA,CAAAA;AACtD,SAAA;AAEAG,QAAAA,MAAAA,CAAAA,CAAOhC,IAAI,EAAA;AACTR,YAAAA,KAAAA,CAAMG,IAAI,GAAG,QAAA;AACbH,YAAAA,KAAAA,CAAMQ,IAAI,GAAGA,IAAAA;AAEb,YAAA,OAAO,IAAI;AACb,SAAA;QAEAiC,SAAUC,CAAAA,CAAAA,MAAM,EAAEC,MAAAA,GAAS,CAAC,EAAA;AAC1B3C,YAAAA,KAAAA,CAAMG,IAAI,GAAG,QAAA;YACbH,KAAMqB,CAAAA,UAAU,CAACuB,IAAI,CAAC;AAAEF,gBAAAA,MAAAA;AAAQC,gBAAAA;AAAO,aAAA,CAAA;AAEvC,YAAA,OAAO,IAAI;AACb,SAAA;QAEAE,SAAUH,CAAAA,CAAAA,MAAM,EAAEC,MAAAA,GAAS,CAAC,EAAA;AAC1B3C,YAAAA,KAAAA,CAAMG,IAAI,GAAG,QAAA;YACbH,KAAMsB,CAAAA,UAAU,CAACsB,IAAI,CAAC;AAAEF,gBAAAA,MAAAA;AAAQC,gBAAAA;AAAO,aAAA,CAAA;AAEvC,YAAA,OAAO,IAAI;AACb,SAAA;AAEAtC,QAAAA,KAAAA,CAAAA,CAAMA,QAAQ,IAAI,EAAA;AAChBL,YAAAA,KAAAA,CAAMG,IAAI,GAAG,OAAA;AACbH,YAAAA,KAAAA,CAAMK,KAAK,GAAGA,KAAAA;AAEd,YAAA,OAAO,IAAI;AACb,SAAA;AAEAC,QAAAA,GAAAA,CAAAA,CAAIoC,MAAc,EAAA;AAChB1C,YAAAA,KAAAA,CAAMG,IAAI,GAAG,KAAA;AACbH,YAAAA,KAAAA,CAAMM,GAAG,GAAGoC,MAAAA;AAEZ,YAAA,OAAO,IAAI;AACb,SAAA;QAEAjC,KAAMA,CAAAA,CAAAA,KAAAA,GAAiC,EAAE,EAAA;AACvC,YAAA,IAAI,CAACR,CAAAA,CAAE6C,aAAa,CAACrC,KAAQ,CAAA,EAAA;AAC3B,gBAAA,MAAM,IAAIsC,KAAM,CAAA,yBAAA,CAAA;AAClB;YAEA/C,KAAMS,CAAAA,KAAK,CAACmC,IAAI,CAACnC,KAAAA,CAAAA;AAEjB,YAAA,OAAO,IAAI;AACb,SAAA;AAEAG,QAAAA,KAAAA,CAAAA,CAAMA,KAAK,EAAA;AACTZ,YAAAA,KAAAA,CAAMY,KAAK,GAAGA,KAAAA;AACd,YAAA,OAAO,IAAI;AACb,SAAA;AAEAC,QAAAA,MAAAA,CAAAA,CAAOA,MAAM,EAAA;AACXb,YAAAA,KAAAA,CAAMa,MAAM,GAAGA,MAAAA;AACf,YAAA,OAAO,IAAI;AACb,SAAA;AAEAM,QAAAA,OAAAA,CAAAA,CAAQA,OAAO,EAAA;AACbnB,YAAAA,KAAAA,CAAMmB,OAAO,GAAGA,OAAAA;AAChB,YAAA,OAAO,IAAI;AACb,SAAA;AAEAC,QAAAA,OAAAA,CAAAA,CAAQA,OAAO,EAAA;AACbpB,YAAAA,KAAAA,CAAMoB,OAAO,GAAGA,OAAAA;AAChB,YAAA,OAAO,IAAI;AACb,SAAA;AAEAT,QAAAA,QAAAA,CAAAA,CAASA,QAAQ,EAAA;AACfX,YAAAA,KAAAA,CAAMW,QAAQ,GAAGA,QAAAA;AACjB,YAAA,OAAO,IAAI;AACb,SAAA;AAEAc,QAAAA,MAAAA,CAAAA,CAAOuB,KAAK,EAAA;AACVhD,YAAAA,KAAAA,CAAMyB,MAAM,GAAGuB,KAAAA;AACf,YAAA,OAAO,IAAI;AACb,SAAA;AAEAC,QAAAA,WAAAA,CAAAA,CAAYnC,WAAW,EAAA;AACrBd,YAAAA,KAAAA,CAAMc,WAAW,GAAGA,WAAAA;AACpB,YAAA,OAAO,IAAI;AACb,SAAA;AAEAC,QAAAA,SAAAA,CAAAA,GAAAA;AACEf,YAAAA,KAAAA,CAAMe,SAAS,GAAG,IAAA;AAClB,YAAA,OAAO,IAAI;AACb,SAAA;QAEAmC,IAAKC,CAAAA,CAAAA,MAAAA,GAAS,EAAE,EAAA;AACd,YAAA,MAAM,EAAEC,EAAE,EAAE5B,OAAO,EAAEf,KAAK,EAAEL,MAAM,EAAEQ,KAAK,EAAEC,MAAM,EAAEM,OAAO,EAAEC,OAAO,EAAET,QAAQ,EAAE,GAAGwC,MAAAA;AAElF,YAAA,IAAI,CAAClD,CAAAA,CAAEoD,KAAK,CAAC5C,KAAQ,CAAA,EAAA;gBACnB,IAAI,CAACA,KAAK,CAACA,KAAAA,CAAAA;AACb;AAEA,YAAA,IAAI,CAACR,CAAAA,CAAEoD,KAAK,CAACD,EAAK,CAAA,EAAA;gBAChB,IAAI,CAAC3B,MAAM,CAAC2B,EAAAA,CAAAA;AACd;AAEA,YAAA,IAAI,CAACnD,CAAAA,CAAEoD,KAAK,CAACjD,MAAS,CAAA,EAAA;gBACpB,IAAI,CAACA,MAAM,CAACA,MAAAA,CAAAA;aACP,MAAA;gBACL,IAAI,CAACA,MAAM,CAAC,GAAA,CAAA;AACd;AAEA,YAAA,IAAI,CAACH,CAAAA,CAAEoD,KAAK,CAACzC,KAAQ,CAAA,EAAA;gBACnB,IAAI,CAACA,KAAK,CAACA,KAAAA,CAAAA;AACb;AAEA,YAAA,IAAI,CAACX,CAAAA,CAAEoD,KAAK,CAACxC,MAAS,CAAA,EAAA;gBACpB,IAAI,CAACA,MAAM,CAACA,MAAAA,CAAAA;AACd;AAEA,YAAA,IAAI,CAACZ,CAAAA,CAAEoD,KAAK,CAAClC,OAAU,CAAA,EAAA;gBACrB,IAAI,CAACA,OAAO,CAACA,OAAAA,CAAAA;AACf;AAEA,YAAA,IAAI,CAAClB,CAAAA,CAAEoD,KAAK,CAACjC,OAAU,CAAA,EAAA;gBACrB,IAAI,CAACA,OAAO,CAACA,OAAAA,CAAAA;AACf;AAEA,YAAA,IAAI,CAACnB,CAAAA,CAAEoD,KAAK,CAAC1C,QAAW,CAAA,EAAA;gBACtB,IAAI,CAACA,QAAQ,CAACA,QAAAA,CAAAA;AAChB;AAEA,YAAA,IAAI,CAACV,CAAAA,CAAEoD,KAAK,CAAC7B,OAAU,CAAA,EAAA;gBACrB,IAAI,CAACA,OAAO,CAACA,OAAAA,CAAAA;AACf;AAEA,YAAA,OAAO,IAAI;AACb,SAAA;AAEAA,QAAAA,OAAAA,CAAAA,CAAQA,OAAO,EAAA;AACbxB,YAAAA,KAAAA,CAAMwB,OAAO,GAAGA,OAAAA;AAClB,SAAA;AAEAjB,QAAAA,KAAAA,CAAAA,GAAAA;AACEP,YAAAA,KAAAA,CAAMO,KAAK,GAAG,IAAA;AACd,YAAA,OAAO,IAAI;AACb,SAAA;AAEA+C,QAAAA,IAAAA,CAAAA,CAAKA,IAAI,EAAA;YACP,IAAI,CAACA,IAAKC,CAAAA,WAAW,EAAE;gBACrBvD,KAAMU,CAAAA,KAAK,CAACkC,IAAI,CAACU,IAAAA,CAAAA;AACjB,gBAAA,OAAO,IAAI;AACb;AAEA,YAAA,MAAME,KAAQ9D,GAAAA,EAAAA,CAAGG,QAAQ,CAACC,GAAG,CAACL,GAAAA,CAAAA;AAC9B,YAAA,MAAMgE,YAAYD,KAAME,CAAAA,UAAU,CAACJ,IAAAA,CAAKC,WAAW,CAAC;AAEpDhB,YAAAA,UAAkB,CAChB;AAAE7C,gBAAAA,EAAAA;AAAIiE,gBAAAA,EAAAA,EAAI,IAAI;AAAElE,gBAAAA;aAChB,EAAA;gBACEmC,KAAO,EAAA,IAAI,CAACA,KAAK;AACjBgC,gBAAAA,QAAAA,EAAUN,KAAK1B,KAAK;AACpBiC,gBAAAA,aAAAA,EAAeP,KAAKC,WAAW;AAC/BE,gBAAAA;AACF,aAAA,CAAA;AAGF,YAAA,OAAO,IAAI;AACb,SAAA;AAEAK,QAAAA,YAAAA,CAAAA,GAAAA;YACE,OAAO;AAAC,gBAAA,QAAA;AAAU,gBAAA;aAAQ,CAACC,QAAQ,CAAC/D,KAAAA,CAAMG,IAAI,CAAA;AAChD,SAAA;QAEA6D,WAAYC,CAAAA,CAAAA,GAAqB,EAAErC,KAAa,EAAA;YAC9C,IAAI,OAAOqC,QAAQ,QAAU,EAAA;gBAC3B,OAAOA,GAAAA;AACT;AAEA,YAAA,IAAIA,GAAIC,CAAAA,OAAO,CAAC,GAAA,CAAA,IAAQ,CAAG,EAAA;gBACzB,OAAOD,GAAAA;AACT;AAEA,YAAA,IAAI,CAAChE,CAAAA,CAAEoD,KAAK,CAACzB,KAAQ,CAAA,EAAA;AACnB,gBAAA,OAAO,CAAC,EAAEA,KAAAA,CAAM,CAAC,EAAEqC,IAAI,CAAC;AAC1B;AAEA,YAAA,OAAO,IAAI,CAACH,YAAY,EAAA,GAAK,CAAC,EAAE,IAAI,CAAClC,KAAK,CAAC,CAAC,EAAEqC,GAAAA,CAAI,CAAC,GAAGA,GAAAA;AACxD,SAAA;QAEAE,GAAKzE,EAAAA,EAAAA,CAAG4C,UAAU,CAAC6B,GAAG,CAACC,IAAI,CAAC1E,GAAG4C,UAAU,CAAA;AAEzC+B,QAAAA,iBAAAA,CAAAA,GAAAA;YACE,OAAO;AAAC,gBAAA,QAAA;AAAU,gBAAA;aAAS,CAACN,QAAQ,CAAC/D,KAAMG,CAAAA,IAAI,KAAKH,KAAMU,CAAAA,KAAK,CAAC4D,MAAM,GAAG,CAAA;AAC3E,SAAA;AAEAC,QAAAA,WAAAA,CAAAA,GAAAA;YACE,MAAMC,YAAAA,GAAexE,MAAMG,IAAI;YAE/B,IAAI,CAACC,MAAM,CAAC,IAAA,CAAA;YACZ,MAAMqE,KAAAA,GAAQ,IAAI,CAACC,YAAY,EAAA;YAE/B,MAAMC,cAAAA,GAAiBjF,EAAGkF,CAAAA,aAAa,EAAGxE,CAAAA,MAAM,CAAC,IAAA,CAAA,CAAMyE,IAAI,CAACJ,KAAMK,CAAAA,EAAE,CAAC,UAAA,CAAA,CAAA;YACrE,MAAMxC,UAAAA,GAAa5C,EAAGkF,CAAAA,aAAa,CAAC7E,SAAAA,CAAAA;AAEpC,YAAA,OAAO,UAAW,CAACyE,aAAa,EAAYO,CAAAA,OAAO,CAAC,IAAMJ,EAAAA,cAAAA,CAAAA;AAC5D,SAAA;AAEAK,QAAAA,YAAAA,CAAAA,GAAAA;AACE,YAAA,IAAI,IAAI,CAAChF,KAAK,CAAC0B,SAAS,EAAE;AACxB,gBAAA;AACF;AAEA1B,YAAAA,KAAAA,CAAMmB,OAAO,GAAGoB,cAAsB,CAACvC,KAAAA,CAAMmB,OAAO,EAAE;AAAEwC,gBAAAA,EAAAA,EAAI,IAAI;AAAElE,gBAAAA,GAAAA;AAAKC,gBAAAA;AAAG,aAAA,CAAA;AAE1E,YAAA,IAAI,CAACO,CAAEoD,CAAAA,KAAK,CAACrD,KAAAA,CAAMwB,OAAO,CAAG,EAAA;AAC3B,gBAAA,IAAIvB,CAAEgF,CAAAA,UAAU,CAACjF,KAAAA,CAAMwB,OAAO,CAAG,EAAA;oBAC/B,MAAMA,OAAAA,GAAUxB,KAAMwB,CAAAA,OAAO,CAAC;AAAEmC,wBAAAA,EAAAA,EAAI,IAAI;AAAElE,wBAAAA,GAAAA;AAAKG,wBAAAA,IAAAA;AAAMF,wBAAAA;AAAG,qBAAA,CAAA;AAExD,oBAAA,IAAI,CAACO,CAAAA,CAAEoD,KAAK,CAAC7B,OAAU,CAAA,EAAA;wBACrBxB,KAAMS,CAAAA,KAAK,CAACmC,IAAI,CAACpB,OAAAA,CAAAA;AACnB;iBACK,MAAA;AACLxB,oBAAAA,KAAAA,CAAMS,KAAK,CAACmC,IAAI,CAAC5C,MAAMwB,OAAO,CAAA;AAChC;AACF;AAEAxB,YAAAA,KAAAA,CAAMS,KAAK,GAAG8B,YAAoB,CAACvC,KAAAA,CAAMS,KAAK,EAAE;AAAEkD,gBAAAA,EAAAA,EAAI,IAAI;AAAElE,gBAAAA,GAAAA;AAAKC,gBAAAA;AAAG,aAAA,CAAA;AACpEM,YAAAA,KAAAA,CAAMW,QAAQ,GAAG4B,eAAuB,CAACvC,KAAAA,CAAMW,QAAQ,EAAE;AAAEgD,gBAAAA,EAAAA,EAAI,IAAI;AAAElE,gBAAAA,GAAAA;AAAKC,gBAAAA;AAAG,aAAA,CAAA;AAE7EM,YAAAA,KAAAA,CAAMQ,IAAI,GAAG+B,KAAa,CAAC3C,IAAAA,EAAMI,MAAMQ,IAAI,CAAA;AAE3C,YAAA,IAAI,CAAC0E,aAAa,EAAA;AAElB,YAAA,IAAI,CAAClF,KAAK,CAAC0B,SAAS,GAAG,IAAA;AACzB,SAAA;AAEAyD,QAAAA,iBAAAA,CAAAA,GAAAA;YACE,OAAOnF,KAAAA,CAAMU,KAAK,CAAC4D,MAAM,GAAG,KAAKrE,CAAEmF,CAAAA,OAAO,CAACpF,KAAAA,CAAMoB,OAAO,CAAA;AAC1D,SAAA;AAEAiE,QAAAA,iBAAAA,CAAAA,GAAAA;YACE,OACErF,KAAAA,CAAMmB,OAAO,CACVmE,MAAM,CAAC,CAAC,EAAE5C,MAAM,EAAE,GAAKA,OAAOwB,OAAO,CAAC,QAAQ,CAC9CoB,CAAAA,CAAAA,MAAM,CAAC,CAAC,EAAE5C,MAAM,EAAE,GAAA;gBACjB,MAAM6C,GAAAA,GAAM7C,MAAO8C,CAAAA,KAAK,CAAC,GAAA,CAAA;gBAEzB,IAAK,IAAIC,IAAI,CAAGA,EAAAA,CAAAA,GAAIF,IAAIjB,MAAM,GAAG,CAAGmB,EAAAA,CAAAA,IAAK,CAAG,CAAA;oBAC1C,MAAMC,EAAAA,GAAKH,GAAG,CAACE,CAAE,CAAA;;AAGjB,oBAAA,MAAME,sBAAsB/F,IAAK8D,CAAAA,UAAU,CAACgC,EAAAA,CAAG,EAAEvF,IAAS,KAAA,UAAA;;AAG1D,oBAAA,MAAMyF,iBAAoBC,GAAAA,MAAAA,CAAOC,MAAM,CAAC9F,MAAMU,KAAK,CAAA,CAChDqF,GAAG,CAAC,CAACzC,IAASA,GAAAA,IAAAA,CAAK1B,KAAK,CAAA,CACxBmC,QAAQ,CAAC2B,EAAAA,CAAAA;AAEZ,oBAAA,IAAIC,uBAAuBC,iBAAmB,EAAA;wBAC5C,OAAO,IAAA;AACT;AACF;gBAEA,OAAO,KAAA;AACT,aAAA,CAAA,CAAGtB,MAAM,GAAG,CAAA;AAElB,SAAA;AAEAY,QAAAA,aAAAA,CAAAA,GAAAA;AACElF,YAAAA,KAAAA,CAAMI,MAAM,GAAGJ,KAAAA,CAAMI,MAAM,CAAC2F,GAAG,CAAC,CAACC,KAAAA,GAAAA;AAC/B,gBAAA,IAAIC,YAAYD,KAAQ,CAAA,EAAA;oBACtB,OAAOA,KAAAA;AACT;gBAEA,OAAOzD,YAAoB,CAAC3C,IAAMoG,EAAAA,KAAAA,CAAAA;AACpC,aAAA,CAAA;YAEA,IAAI,IAAI,CAACb,iBAAiB,EAAI,EAAA;AAC5B,gBAAA,MAAMe,sBAAsBlG,KAAMU,CAAAA,KAAK,CAACyF,OAAO,CAAC,CAAC7C,IAAAA,GAAAA;AAC/C,oBAAA,OAAOrD,EAAEmG,IAAI,CAAC9C,IAAKnC,CAAAA,OAAO,EAAE4E,GAAG,CAAC,CAAC9B,GAAAA,GAAQ,IAAI,CAACD,WAAW,CAACC,GAAAA,EAAKX,KAAK1B,KAAK,CAAA,CAAA;AAC3E,iBAAA,CAAA;gBACA,MAAMyE,cAAAA,GAAiBrG,KAAMmB,CAAAA,OAAO,CAAC4E,GAAG,CAAC,CAAC,EAAErD,MAAM,EAAE,GAAKA,MAAAA,CAAAA;AAEzD1C,gBAAAA,KAAAA,CAAMI,MAAM,GAAGH,CAAE8B,CAAAA,IAAI,CAAC;AAAImE,oBAAAA,GAAAA,mBAAAA;AAAwBG,oBAAAA,GAAAA,cAAAA;AAAmBrG,oBAAAA,GAAAA,KAAAA,CAAMI;AAAO,iBAAA,CAAA;AACpF;AACF,SAAA;AAEAsE,QAAAA,YAAAA,CAAAA,GAAAA;YACE,IAAI,CAAC1E,KAAMG,CAAAA,IAAI,EAAE;gBACf,IAAI,CAACC,MAAM,CAAC,GAAA,CAAA;AACd;AAEA,YAAA,MAAMkG,gBAAmB,GAAA,IAAI,CAACxC,YAAY,KAAK,CAAC,EAAE/D,SAAU,CAAA,IAAI,EAAE,IAAI,CAAC6B,KAAK,CAAC,CAAC,GAAG7B,SAAAA;YAEjF,MAAM4D,EAAAA,GAAKjE,EAAGkF,CAAAA,aAAa,CAAC0B,gBAAAA,CAAAA;;;AAI5B,YAAA,IAAI,CAACtB,YAAY,EAAA;YAEjB,IAAI,IAAI,CAACX,iBAAiB,EAAI,EAAA;gBAC5B,OAAO,IAAI,CAACE,WAAW,EAAA;AACzB;AAEA,YAAA,OAAQvE,MAAMG,IAAI;gBAChB,KAAK,QAAA;AAAU,oBAAA;AACbwD,wBAAAA,EAAAA,CAAGvD,MAAM,CAACJ,KAAMI,CAAAA,MAAM,CAAC2F,GAAG,CAAC,CAACrD,MAAW,GAAA,IAAI,CAACsB,WAAW,CAACtB,MAAAA,CAAAA,CAAAA,CAAAA;wBAExD,IAAI,IAAI,CAACyC,iBAAiB,EAAI,EAAA;AAC5BxB,4BAAAA,EAAAA,CAAG4C,QAAQ,EAAA;AACb;AAEA,wBAAA;AACF;gBACA,KAAK,OAAA;AAAS,oBAAA;wBACZ,MAAMC,YAAAA,GAAe,IAAI,CAACxC,WAAW,CAACzB,YAAoB,CAAC3C,IAAMI,EAAAA,KAAAA,CAAMK,KAAK,CAAA,CAAA;wBAE5E,IAAI,IAAI,CAAC8E,iBAAiB,EAAI,EAAA;AAC5BxB,4BAAAA,EAAAA,CAAG8C,aAAa,CAAC;gCAAEpG,KAAOmG,EAAAA;AAAa,6BAAA,CAAA;yBAClC,MAAA;AACL7C,4BAAAA,EAAAA,CAAGtD,KAAK,CAAC;gCAAEA,KAAOmG,EAAAA;AAAa,6BAAA,CAAA;AACjC;AACA,wBAAA;AACF;gBACA,KAAK,KAAA;AAAO,oBAAA;wBACV,MAAMA,YAAAA,GAAe,IAAI,CAACxC,WAAW,CAACzB,YAAoB,CAAC3C,IAAMI,EAAAA,KAAAA,CAAMM,GAAG,CAAA,CAAA;AAC1EqD,wBAAAA,EAAAA,CAAGrD,GAAG,CAAC;4BAAEA,GAAKkG,EAAAA;AAAa,yBAAA,CAAA;AAC3B,wBAAA;AACF;gBACA,KAAK,QAAA;AAAU,oBAAA;wBACb7C,EAAGzB,CAAAA,MAAM,CAAClC,KAAAA,CAAMQ,IAAI,CAAA;wBAEpB,IAAId,EAAAA,CAAGgH,OAAO,CAACC,YAAY,EAAA,IAAM1G,CAAE2G,CAAAA,GAAG,CAAC,IAAA,EAAMhH,IAAK8D,CAAAA,UAAU,CAAG,EAAA;AAC7DC,4BAAAA,EAAAA,CAAGkD,SAAS,CAAC,IAAA,CAAA;AACf;AAEA,wBAAA;AACF;gBACA,KAAK,QAAA;AAAU,oBAAA;wBACb,IAAI7G,KAAAA,CAAMQ,IAAI,EAAE;4BACdmD,EAAGnB,CAAAA,MAAM,CAACxC,KAAAA,CAAMQ,IAAI,CAAA;AACtB;AACA,wBAAA;AACF;gBACA,KAAK,QAAA;AAAU,oBAAA;AACbmD,wBAAAA,EAAAA,CAAGxB,MAAM,EAAA;AAET,wBAAA;AACF;gBACA,KAAK,UAAA;AAAY,oBAAA;AACfwB,wBAAAA,EAAAA,CAAGmD,QAAQ,EAAA;AACX,wBAAA;AACF;AACA,gBAAA;AAAS,oBAAA;AACP,wBAAA,MAAM,IAAI/D,KAAM,CAAA,oBAAA,CAAA;AAClB;AACF;YAEA,IAAI/C,KAAAA,CAAMc,WAAW,EAAE;gBACrB6C,EAAGV,CAAAA,WAAW,CAACjD,KAAAA,CAAMc,WAAW,CAAA;AAClC;YAEA,IAAId,KAAAA,CAAMe,SAAS,EAAE;AACnB4C,gBAAAA,EAAAA,CAAG5C,SAAS,EAAA;AACd;AAEA,YAAA,IAAI,CAACd,CAAEmF,CAAAA,OAAO,CAACpF,KAAAA,CAAMqB,UAAU,CAAG,EAAA;AAChCrB,gBAAAA,KAAAA,CAAMqB,UAAU,CAAC0F,OAAO,CAAC,CAACC,IAAAA,GAASrD,EAAGlB,CAAAA,SAAS,CAACuE,IAAAA,CAAKtE,MAAM,EAAEsE,KAAKrE,MAAM,CAAA,CAAA;AAC1E;AAEA,YAAA,IAAI,CAAC1C,CAAEmF,CAAAA,OAAO,CAACpF,KAAAA,CAAMsB,UAAU,CAAG,EAAA;AAChCtB,gBAAAA,KAAAA,CAAMsB,UAAU,CAACyF,OAAO,CAAC,CAACE,IAAAA,GAAStD,EAAGd,CAAAA,SAAS,CAACoE,IAAAA,CAAKvE,MAAM,EAAEuE,KAAKtE,MAAM,CAAA,CAAA;AAC1E;YAEA,IAAI3C,KAAAA,CAAMgB,UAAU,EAAE;gBACpB,IAAIhB,KAAAA,CAAMiB,KAAK,EAAE;oBACf0C,EAAG3C,CAAAA,UAAU,CAAChB,KAAMgB,CAAAA,UAAU,EAAEC,KAAK,CAACjB,MAAMiB,KAAK,CAAA;iBAC5C,MAAA,IAAIjB,KAAMkB,CAAAA,MAAM,EAAE;AACvByC,oBAAAA,EAAAA,CAAG3C,UAAU,CAAChB,KAAMgB,CAAAA,UAAU,EAAEE,MAAM,EAAA;AACxC;AACF;YAEA,IAAIlB,KAAAA,CAAMY,KAAK,EAAE;gBACf+C,EAAG/C,CAAAA,KAAK,CAACZ,KAAAA,CAAMY,KAAK,CAAA;AACtB;YAEA,IAAIZ,KAAAA,CAAMa,MAAM,EAAE;gBAChB8C,EAAG9C,CAAAA,MAAM,CAACb,KAAAA,CAAMa,MAAM,CAAA;AACxB;AAEA,YAAA,IAAIb,KAAMmB,CAAAA,OAAO,CAACmD,MAAM,GAAG,CAAG,EAAA;gBAC5BX,EAAGxC,CAAAA,OAAO,CAACnB,KAAAA,CAAMmB,OAAO,CAAA;AAC1B;YAEA,IAAInB,KAAAA,CAAMO,KAAK,EAAE;AACfoD,gBAAAA,EAAAA,CAAGpD,KAAK,EAAA;AACV;AAEA,YAAA,IAAIP,KAAMoB,CAAAA,OAAO,CAACkD,MAAM,GAAG,CAAG,EAAA;gBAC5BX,EAAGvC,CAAAA,OAAO,CAACpB,KAAAA,CAAMoB,OAAO,CAAA;AAC1B;;YAGA,IAAIpB,KAAAA,CAAMS,KAAK,EAAE;AACf8B,gBAAAA,UAAkB,CAACoB,EAAI3D,EAAAA,KAAAA,CAAMS,KAAK,CAAA;AACpC;;YAGA,IAAIT,KAAAA,CAAMyB,MAAM,EAAE;gBAChBkC,EAAGlD,CAAAA,KAAK,CAAC,CAACyG,KAAAA,GAAAA;AACR3E,oBAAAA,WAAmB,CAAC2E,KAAOlH,EAAAA,KAAAA,CAAMyB,MAAM,EAAE;AAAEkC,wBAAAA,EAAAA,EAAI,IAAI;AAAEjE,wBAAAA,EAAAA;AAAID,wBAAAA;AAAI,qBAAA,CAAA;AAC/D,iBAAA,CAAA;AACF;AAEA,YAAA,IAAIO,KAAMU,CAAAA,KAAK,CAAC4D,MAAM,GAAG,CAAG,EAAA;AAC1B/B,gBAAAA,UAAkB,CAACoB,EAAI3D,EAAAA,KAAAA,CAAMU,KAAK,CAAA;AACpC;YAEA,IAAI,IAAI,CAAC2E,iBAAiB,EAAI,EAAA;gBAC5B,OAAO9C,gBAAwB,CAACoB,EAAI,EAAA;AAAEA,oBAAAA,EAAAA,EAAI,IAAI;AAAEjE,oBAAAA,EAAAA;AAAID,oBAAAA;AAAI,iBAAA,CAAA;AAC1D;YAEA,OAAOkE,EAAAA;AACT,SAAA;AAEA,QAAA,MAAMwD,SAAQ,EAAEC,UAAAA,GAAa,IAAI,EAAE,GAAG,EAAE,EAAA;YACtC,IAAI;gBACF,MAAMzD,EAAAA,GAAK,IAAI,CAACe,YAAY,EAAA;gBAE5B,MAAM5D,WAAAA,GAAcuG,eAAevH,GAAG,EAAA;AACtC,gBAAA,IAAIgB,WAAa,EAAA;AACf6C,oBAAAA,EAAAA,CAAGV,WAAW,CAACnC,WAAAA,CAAAA;AACjB;AAEA,gBAAA,MAAMwG,OAAO,MAAM3D,EAAAA;AAEnB,gBAAA,IAAI3D,MAAMW,QAAQ,IAAI,CAACV,CAAEoD,CAAAA,KAAK,CAACiE,IAAO,CAAA,EAAA;oBACpC,MAAM/E,aAAqB,CAACtC,CAAAA,CAAE+B,SAAS,CAACsF,IAAAA,CAAAA,EAAOtH,KAAMW,CAAAA,QAAQ,EAAE;AAC7DgD,wBAAAA,EAAAA,EAAI,IAAI;AACRlE,wBAAAA,GAAAA;AACAC,wBAAAA;AACF,qBAAA,CAAA;AACF;AAEA,gBAAA,IAAI6H,OAAUD,GAAAA,IAAAA;AACd,gBAAA,IAAIF,UAAcpH,IAAAA,KAAAA,CAAMG,IAAI,KAAK,QAAU,EAAA;oBACzCoH,OAAUhF,GAAAA,OAAe,CAAC3C,IAAM0H,EAAAA,IAAAA,CAAAA;AAClC;gBAEA,OAAOC,OAAAA;AACT,aAAA,CAAE,OAAOC,KAAO,EAAA;AACd,gBAAA,IAAIA,iBAAiBzE,KAAO,EAAA;oBAC1BrD,EAAGgH,CAAAA,OAAO,CAACe,eAAe,CAACD,KAAAA,CAAAA;iBACtB,MAAA;oBACL,MAAMA,KAAAA;AACR;AACF;AACF,SAAA;AAEAE,QAAAA,MAAAA,CAAAA,CAAO,EAAEN,UAAa,GAAA,IAAI,EAAE,GAAG,EAAE,EAAA;YAC/B,IAAIpH,KAAAA,CAAMG,IAAI,KAAK,QAAU,EAAA;gBAC3B,OAAO,IAAIoC,mBAAqB,CAAC;AAAEoB,oBAAAA,EAAAA,EAAI,IAAI;AAAEjE,oBAAAA,EAAAA;AAAID,oBAAAA,GAAAA;AAAK2H,oBAAAA;AAAW,iBAAA,CAAA;AACnE;YAEA,MAAM,IAAIO,cACR,CAAC,wEAAwE,EAAE3H,KAAMG,CAAAA,IAAI,CAAC,CAAC,CAAC,CAAA;AAE5F;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var removeOrphanMorphTypes = require('./operations/remove-orphan-morph-types.js');
|
|
4
|
+
var asyncCurry = require('../utils/async-curry.js');
|
|
5
|
+
|
|
6
|
+
const createRepairManager = (db)=>{
|
|
7
|
+
return {
|
|
8
|
+
removeOrphanMorphType: asyncCurry.asyncCurry(removeOrphanMorphTypes.removeOrphanMorphType)(db)
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
exports.createRepairManager = createRepairManager;
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/repairs/index.ts"],"sourcesContent":["import type { Database } from '..';\nimport { removeOrphanMorphType as removeOrphanMorphTypeFunc } from './operations/remove-orphan-morph-types';\nimport { asyncCurry } from '../utils/async-curry';\n\nexport const createRepairManager = (db: Database) => {\n return {\n removeOrphanMorphType: asyncCurry(removeOrphanMorphTypeFunc)(db),\n };\n};\n\nexport type RepairManager = ReturnType<typeof createRepairManager>;\n"],"names":["createRepairManager","db","removeOrphanMorphType","asyncCurry","removeOrphanMorphTypeFunc"],"mappings":";;;;;AAIO,MAAMA,sBAAsB,CAACC,EAAAA,GAAAA;IAClC,OAAO;AACLC,QAAAA,qBAAAA,EAAuBC,sBAAWC,4CAA2BH,CAAAA,CAAAA,EAAAA;AAC/D,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { removeOrphanMorphType } from './operations/remove-orphan-morph-types.mjs';
|
|
2
|
+
import { asyncCurry } from '../utils/async-curry.mjs';
|
|
3
|
+
|
|
4
|
+
const createRepairManager = (db)=>{
|
|
5
|
+
return {
|
|
6
|
+
removeOrphanMorphType: asyncCurry(removeOrphanMorphType)(db)
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { createRepairManager };
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/repairs/index.ts"],"sourcesContent":["import type { Database } from '..';\nimport { removeOrphanMorphType as removeOrphanMorphTypeFunc } from './operations/remove-orphan-morph-types';\nimport { asyncCurry } from '../utils/async-curry';\n\nexport const createRepairManager = (db: Database) => {\n return {\n removeOrphanMorphType: asyncCurry(removeOrphanMorphTypeFunc)(db),\n };\n};\n\nexport type RepairManager = ReturnType<typeof createRepairManager>;\n"],"names":["createRepairManager","db","removeOrphanMorphType","asyncCurry","removeOrphanMorphTypeFunc"],"mappings":";;;AAIO,MAAMA,sBAAsB,CAACC,EAAAA,GAAAA;IAClC,OAAO;AACLC,QAAAA,qBAAAA,EAAuBC,WAAWC,qBAA2BH,CAAAA,CAAAA,EAAAA;AAC/D,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const isMorphRelationWithPivot = (attribute, pivot)=>{
|
|
4
|
+
return attribute.type === 'relation' && 'relation' in attribute && 'joinTable' in attribute && 'name' in attribute.joinTable && 'pivotColumns' in attribute.joinTable && attribute.joinTable.pivotColumns.includes(pivot);
|
|
5
|
+
};
|
|
6
|
+
const filterMorphRelationalAttributes = (attributes, pivot)=>{
|
|
7
|
+
return Object.values(attributes).filter((attribute)=>isMorphRelationWithPivot(attribute, pivot));
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Removes morph relation data with invalid or non-existent morph type.
|
|
11
|
+
*
|
|
12
|
+
* This function iterates over the database metadata to identify morph relationships
|
|
13
|
+
* (relations with a `joinTable` containing the specified pivot column) and removes
|
|
14
|
+
* any entries in the relation's join table where the morph type is invalid.
|
|
15
|
+
*
|
|
16
|
+
* Note: This function does not check for orphaned IDs, only orphaned morph types.
|
|
17
|
+
*
|
|
18
|
+
* @param db - The database object containing metadata and a Knex connection.
|
|
19
|
+
* @param options.pivot - The name of the column in the join table representing the morph type.
|
|
20
|
+
*/ const removeOrphanMorphType = async (db, { pivot })=>{
|
|
21
|
+
db.logger.debug(`Removing orphaned morph type: ${JSON.stringify(pivot)}`);
|
|
22
|
+
const mdValues = db.metadata.values();
|
|
23
|
+
for (const model of mdValues){
|
|
24
|
+
const attributes = filterMorphRelationalAttributes(model.attributes || {}, pivot);
|
|
25
|
+
for (const attribute of attributes){
|
|
26
|
+
const joinTableName = attribute.joinTable.name;
|
|
27
|
+
// Query distinct morph types from the join table
|
|
28
|
+
const morphTypes = await db.connection(joinTableName).distinct(pivot).pluck(pivot);
|
|
29
|
+
for (const morphType of morphTypes){
|
|
30
|
+
// Check if metadata for the morph type exists
|
|
31
|
+
const deleteComponentType = await (async ()=>{
|
|
32
|
+
try {
|
|
33
|
+
return !db.metadata.get(morphType); // If no metadata found, mark for deletion
|
|
34
|
+
} catch {
|
|
35
|
+
db.logger.debug(`Metadata for morph type "${morphType}" in table "${joinTableName}" not found`);
|
|
36
|
+
return true; // Return true to delete if metadata is missing
|
|
37
|
+
}
|
|
38
|
+
})();
|
|
39
|
+
if (deleteComponentType) {
|
|
40
|
+
db.logger.debug(`Removing invalid morph type "${morphType}" from table "${joinTableName}".`);
|
|
41
|
+
try {
|
|
42
|
+
await db.connection(joinTableName).where(pivot, morphType).del();
|
|
43
|
+
} catch (error) {
|
|
44
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
45
|
+
db.logger.error(`Failed to remove invalid morph type "${morphType}" from table "${joinTableName}": ${errorMessage}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
exports.removeOrphanMorphType = removeOrphanMorphType;
|
|
54
|
+
//# sourceMappingURL=remove-orphan-morph-types.js.map
|