@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,536 @@
|
|
|
1
|
+
import _, { snakeCase } from 'lodash/fp';
|
|
2
|
+
import { identifiers } from '../utils/identifiers/index.mjs';
|
|
3
|
+
|
|
4
|
+
const ID = identifiers.ID_COLUMN;
|
|
5
|
+
const ORDER = identifiers.ORDER_COLUMN;
|
|
6
|
+
const FIELD = identifiers.FIELD_COLUMN;
|
|
7
|
+
const hasInversedBy = (attr)=>'inversedBy' in attr;
|
|
8
|
+
const hasMappedBy = (attr)=>'mappedBy' in attr;
|
|
9
|
+
const isOneToAny = (attribute)=>[
|
|
10
|
+
'oneToOne',
|
|
11
|
+
'oneToMany'
|
|
12
|
+
].includes(attribute.relation);
|
|
13
|
+
const isManyToAny = (attribute)=>[
|
|
14
|
+
'manyToMany',
|
|
15
|
+
'manyToOne'
|
|
16
|
+
].includes(attribute.relation);
|
|
17
|
+
const isAnyToOne = (attribute)=>[
|
|
18
|
+
'oneToOne',
|
|
19
|
+
'manyToOne'
|
|
20
|
+
].includes(attribute.relation);
|
|
21
|
+
const isAnyToMany = (attribute)=>[
|
|
22
|
+
'oneToMany',
|
|
23
|
+
'manyToMany'
|
|
24
|
+
].includes(attribute.relation);
|
|
25
|
+
const isBidirectional = (attribute)=>hasInversedBy(attribute) || hasMappedBy(attribute);
|
|
26
|
+
const isOwner = (attribute)=>!isBidirectional(attribute) || hasInversedBy(attribute);
|
|
27
|
+
const shouldUseJoinTable = (attribute)=>!('useJoinTable' in attribute) || attribute.useJoinTable !== false;
|
|
28
|
+
const hasOrderColumn = (attribute)=>isAnyToMany(attribute);
|
|
29
|
+
const hasInverseOrderColumn = (attribute)=>isBidirectional(attribute) && isManyToAny(attribute);
|
|
30
|
+
/**
|
|
31
|
+
* Creates a oneToOne relation metadata
|
|
32
|
+
*
|
|
33
|
+
* if owner then
|
|
34
|
+
* if with join table then
|
|
35
|
+
* create join table
|
|
36
|
+
* else
|
|
37
|
+
* create joinColumn
|
|
38
|
+
* if bidirectional then
|
|
39
|
+
* set inverse attribute joinCol or joinTable info correctly
|
|
40
|
+
* else
|
|
41
|
+
* this property must be set by the owner side
|
|
42
|
+
* verify the owner side is valid // should be done before or at the same time ?
|
|
43
|
+
*/ const createOneToOne = (attributeName, attribute, meta, metadata)=>{
|
|
44
|
+
if (isOwner(attribute)) {
|
|
45
|
+
if (shouldUseJoinTable(attribute)) {
|
|
46
|
+
createJoinTable(metadata, {
|
|
47
|
+
attribute,
|
|
48
|
+
attributeName,
|
|
49
|
+
meta
|
|
50
|
+
});
|
|
51
|
+
} else {
|
|
52
|
+
createJoinColumn(metadata, {
|
|
53
|
+
attribute,
|
|
54
|
+
attributeName,
|
|
55
|
+
meta
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Creates a oneToMany relation metadata
|
|
62
|
+
*
|
|
63
|
+
* if unidirectional then
|
|
64
|
+
* create join table
|
|
65
|
+
* if bidirectional then
|
|
66
|
+
* cannot be owning side
|
|
67
|
+
* do nothing
|
|
68
|
+
*/ const createOneToMany = (attributeName, attribute, meta, metadata)=>{
|
|
69
|
+
if (shouldUseJoinTable(attribute) && !isBidirectional(attribute)) {
|
|
70
|
+
createJoinTable(metadata, {
|
|
71
|
+
attribute,
|
|
72
|
+
attributeName,
|
|
73
|
+
meta
|
|
74
|
+
});
|
|
75
|
+
} else if (isOwner(attribute)) {
|
|
76
|
+
throw new Error('one side of a oneToMany cannot be the owner side in a bidirectional relation');
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Creates a manyToOne relation metadata
|
|
81
|
+
*
|
|
82
|
+
* if unidirectional then
|
|
83
|
+
* if with join table then
|
|
84
|
+
* create join table
|
|
85
|
+
* else
|
|
86
|
+
* create join column
|
|
87
|
+
* else
|
|
88
|
+
* must be the owner side
|
|
89
|
+
* if with join table then
|
|
90
|
+
* create join table
|
|
91
|
+
* else
|
|
92
|
+
* create join column
|
|
93
|
+
* set inverse attribute joinCol or joinTable info correctly
|
|
94
|
+
*/ const createManyToOne = (attributeName, attribute, meta, metadata)=>{
|
|
95
|
+
if (isBidirectional(attribute) && !isOwner(attribute)) {
|
|
96
|
+
throw new Error('The many side of a manyToOne must be the owning side');
|
|
97
|
+
}
|
|
98
|
+
if (shouldUseJoinTable(attribute)) {
|
|
99
|
+
createJoinTable(metadata, {
|
|
100
|
+
attribute,
|
|
101
|
+
attributeName,
|
|
102
|
+
meta
|
|
103
|
+
});
|
|
104
|
+
} else {
|
|
105
|
+
createJoinColumn(metadata, {
|
|
106
|
+
attribute,
|
|
107
|
+
attributeName,
|
|
108
|
+
meta
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Creates a manyToMany relation metadata
|
|
114
|
+
*
|
|
115
|
+
* if unidirectional
|
|
116
|
+
* create join table
|
|
117
|
+
* else
|
|
118
|
+
* if owner then
|
|
119
|
+
* if with join table then
|
|
120
|
+
* create join table
|
|
121
|
+
* else
|
|
122
|
+
* do nothing
|
|
123
|
+
*/ const createManyToMany = (attributeName, attribute, meta, metadata)=>{
|
|
124
|
+
if (shouldUseJoinTable(attribute) && (!isBidirectional(attribute) || isOwner(attribute))) {
|
|
125
|
+
createJoinTable(metadata, {
|
|
126
|
+
attribute,
|
|
127
|
+
attributeName,
|
|
128
|
+
meta
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Creates a morphToOne relation metadata
|
|
134
|
+
*
|
|
135
|
+
* if with join table then
|
|
136
|
+
* create join table
|
|
137
|
+
* else
|
|
138
|
+
* create join columnsa
|
|
139
|
+
*
|
|
140
|
+
* if bidirectionnal
|
|
141
|
+
* set info in the traget
|
|
142
|
+
*/ const createMorphToOne = (attributeName, attribute)=>{
|
|
143
|
+
const idColumnName = identifiers.getJoinColumnAttributeIdName('target');
|
|
144
|
+
const typeColumnName = identifiers.getMorphColumnTypeName('target');
|
|
145
|
+
Object.assign(attribute, {
|
|
146
|
+
owner: true,
|
|
147
|
+
morphColumn: attribute.morphColumn ?? {
|
|
148
|
+
typeColumn: {
|
|
149
|
+
name: typeColumnName
|
|
150
|
+
},
|
|
151
|
+
idColumn: {
|
|
152
|
+
name: idColumnName,
|
|
153
|
+
referencedColumn: ID
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Creates a morphToMany relation metadata
|
|
160
|
+
*/ const createMorphToMany = (attributeName, attribute, meta, metadata)=>{
|
|
161
|
+
if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const joinTableName = identifiers.getMorphTableName(meta.tableName, attributeName);
|
|
165
|
+
const joinColumnName = identifiers.getMorphColumnJoinTableIdName(snakeCase(meta.singularName));
|
|
166
|
+
const idColumnName = identifiers.getMorphColumnAttributeIdName(attributeName);
|
|
167
|
+
const typeColumnName = identifiers.getMorphColumnTypeName(attributeName);
|
|
168
|
+
const fkIndexName = identifiers.getFkIndexName(joinTableName);
|
|
169
|
+
metadata.add({
|
|
170
|
+
singularName: joinTableName,
|
|
171
|
+
uid: joinTableName,
|
|
172
|
+
tableName: joinTableName,
|
|
173
|
+
attributes: {
|
|
174
|
+
[ID]: {
|
|
175
|
+
type: 'increments'
|
|
176
|
+
},
|
|
177
|
+
[joinColumnName]: {
|
|
178
|
+
type: 'integer',
|
|
179
|
+
column: {
|
|
180
|
+
unsigned: true
|
|
181
|
+
},
|
|
182
|
+
// This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened
|
|
183
|
+
columnName: joinColumnName
|
|
184
|
+
},
|
|
185
|
+
[idColumnName]: {
|
|
186
|
+
type: 'integer',
|
|
187
|
+
column: {
|
|
188
|
+
unsigned: true
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
[typeColumnName]: {
|
|
192
|
+
type: 'string'
|
|
193
|
+
},
|
|
194
|
+
[FIELD]: {
|
|
195
|
+
type: 'string'
|
|
196
|
+
},
|
|
197
|
+
[ORDER]: {
|
|
198
|
+
type: 'float',
|
|
199
|
+
column: {
|
|
200
|
+
unsigned: true
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
indexes: [
|
|
205
|
+
{
|
|
206
|
+
name: fkIndexName,
|
|
207
|
+
columns: [
|
|
208
|
+
joinColumnName
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: identifiers.getOrderIndexName(joinTableName),
|
|
213
|
+
columns: [
|
|
214
|
+
ORDER
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: identifiers.getIdColumnIndexName(joinTableName),
|
|
219
|
+
columns: [
|
|
220
|
+
idColumnName
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
foreignKeys: [
|
|
225
|
+
{
|
|
226
|
+
name: fkIndexName,
|
|
227
|
+
columns: [
|
|
228
|
+
joinColumnName
|
|
229
|
+
],
|
|
230
|
+
referencedColumns: [
|
|
231
|
+
ID
|
|
232
|
+
],
|
|
233
|
+
referencedTable: meta.tableName,
|
|
234
|
+
onDelete: 'CASCADE'
|
|
235
|
+
}
|
|
236
|
+
],
|
|
237
|
+
lifecycles: {},
|
|
238
|
+
columnToAttribute: {}
|
|
239
|
+
});
|
|
240
|
+
const joinTable = {
|
|
241
|
+
__internal__: true,
|
|
242
|
+
name: joinTableName,
|
|
243
|
+
joinColumn: {
|
|
244
|
+
name: joinColumnName,
|
|
245
|
+
referencedColumn: ID
|
|
246
|
+
},
|
|
247
|
+
morphColumn: {
|
|
248
|
+
typeColumn: {
|
|
249
|
+
name: typeColumnName
|
|
250
|
+
},
|
|
251
|
+
idColumn: {
|
|
252
|
+
name: idColumnName,
|
|
253
|
+
referencedColumn: ID
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
orderBy: {
|
|
257
|
+
order: 'asc'
|
|
258
|
+
},
|
|
259
|
+
pivotColumns: [
|
|
260
|
+
joinColumnName,
|
|
261
|
+
typeColumnName,
|
|
262
|
+
idColumnName
|
|
263
|
+
]
|
|
264
|
+
};
|
|
265
|
+
attribute.joinTable = joinTable;
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* Creates a morphOne relation metadata
|
|
269
|
+
*/ const createMorphOne = (attributeName, attribute, meta, metadata)=>{
|
|
270
|
+
const targetMeta = metadata.get(attribute.target);
|
|
271
|
+
if (!targetMeta) {
|
|
272
|
+
throw new Error(`Morph target not found. Looking for ${attribute.target}`);
|
|
273
|
+
}
|
|
274
|
+
if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {
|
|
275
|
+
throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* Creates a morphMany relation metadata
|
|
280
|
+
*/ const createMorphMany = (attributeName, attribute, meta, metadata)=>{
|
|
281
|
+
const targetMeta = metadata.get(attribute.target);
|
|
282
|
+
if (!targetMeta) {
|
|
283
|
+
throw new Error(`Morph target not found. Looking for ${attribute.target}`);
|
|
284
|
+
}
|
|
285
|
+
if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {
|
|
286
|
+
throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* Creates a join column info and add them to the attribute meta
|
|
291
|
+
*/ const createJoinColumn = (metadata, { attribute, attributeName })=>{
|
|
292
|
+
const targetMeta = metadata.get(attribute.target);
|
|
293
|
+
if (!targetMeta) {
|
|
294
|
+
throw new Error(`Unknown target ${attribute.target}`);
|
|
295
|
+
}
|
|
296
|
+
const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(attributeName));
|
|
297
|
+
const joinColumn = {
|
|
298
|
+
name: joinColumnName,
|
|
299
|
+
referencedColumn: ID,
|
|
300
|
+
referencedTable: targetMeta.tableName
|
|
301
|
+
};
|
|
302
|
+
if ('joinColumn' in attribute) {
|
|
303
|
+
Object.assign(joinColumn, attribute.joinColumn);
|
|
304
|
+
}
|
|
305
|
+
Object.assign(attribute, {
|
|
306
|
+
owner: true,
|
|
307
|
+
joinColumn
|
|
308
|
+
});
|
|
309
|
+
if (isBidirectional(attribute)) {
|
|
310
|
+
const inverseAttribute = targetMeta.attributes[attribute.inversedBy];
|
|
311
|
+
Object.assign(inverseAttribute, {
|
|
312
|
+
joinColumn: {
|
|
313
|
+
name: joinColumn.referencedColumn,
|
|
314
|
+
referencedColumn: joinColumnName
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* Creates a join table and add it to the attribute meta
|
|
321
|
+
*/ const createJoinTable = (metadata, { attributeName, attribute, meta })=>{
|
|
322
|
+
if (!shouldUseJoinTable(attribute)) {
|
|
323
|
+
throw new Error('Attempted to create join table when useJoinTable is false');
|
|
324
|
+
}
|
|
325
|
+
const targetMeta = metadata.get(attribute.target);
|
|
326
|
+
if (!targetMeta) {
|
|
327
|
+
throw new Error(`Unknown target ${attribute.target}`);
|
|
328
|
+
}
|
|
329
|
+
// TODO: implement overwrite logic instead
|
|
330
|
+
if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const joinTableName = identifiers.getJoinTableName(snakeCase(meta.tableName), snakeCase(attributeName));
|
|
334
|
+
const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(meta.singularName));
|
|
335
|
+
let inverseJoinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(targetMeta.singularName));
|
|
336
|
+
// if relation is self referencing
|
|
337
|
+
if (joinColumnName === inverseJoinColumnName) {
|
|
338
|
+
inverseJoinColumnName = identifiers.getInverseJoinColumnAttributeIdName(snakeCase(targetMeta.singularName));
|
|
339
|
+
}
|
|
340
|
+
const orderColumnName = identifiers.getOrderColumnName(snakeCase(targetMeta.singularName));
|
|
341
|
+
// TODO: should this plus the conditional below be rolled into one method?
|
|
342
|
+
let inverseOrderColumnName = identifiers.getOrderColumnName(snakeCase(meta.singularName));
|
|
343
|
+
// if relation is self referencing
|
|
344
|
+
if (attribute.relation === 'manyToMany' && orderColumnName === inverseOrderColumnName) {
|
|
345
|
+
inverseOrderColumnName = identifiers.getInverseOrderColumnName(snakeCase(meta.singularName));
|
|
346
|
+
}
|
|
347
|
+
const fkIndexName = identifiers.getFkIndexName(joinTableName);
|
|
348
|
+
const invFkIndexName = identifiers.getInverseFkIndexName(joinTableName);
|
|
349
|
+
const metadataSchema = {
|
|
350
|
+
singularName: joinTableName,
|
|
351
|
+
uid: joinTableName,
|
|
352
|
+
tableName: joinTableName,
|
|
353
|
+
attributes: {
|
|
354
|
+
[ID]: {
|
|
355
|
+
type: 'increments'
|
|
356
|
+
},
|
|
357
|
+
[joinColumnName]: {
|
|
358
|
+
type: 'integer',
|
|
359
|
+
column: {
|
|
360
|
+
unsigned: true
|
|
361
|
+
},
|
|
362
|
+
// This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened
|
|
363
|
+
columnName: joinColumnName
|
|
364
|
+
},
|
|
365
|
+
[inverseJoinColumnName]: {
|
|
366
|
+
type: 'integer',
|
|
367
|
+
column: {
|
|
368
|
+
unsigned: true
|
|
369
|
+
},
|
|
370
|
+
// This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened
|
|
371
|
+
columnName: inverseJoinColumnName
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
indexes: [
|
|
375
|
+
{
|
|
376
|
+
name: fkIndexName,
|
|
377
|
+
columns: [
|
|
378
|
+
joinColumnName
|
|
379
|
+
]
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
name: invFkIndexName,
|
|
383
|
+
columns: [
|
|
384
|
+
inverseJoinColumnName
|
|
385
|
+
]
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
name: identifiers.getUniqueIndexName(joinTableName),
|
|
389
|
+
columns: [
|
|
390
|
+
joinColumnName,
|
|
391
|
+
inverseJoinColumnName
|
|
392
|
+
],
|
|
393
|
+
type: 'unique'
|
|
394
|
+
}
|
|
395
|
+
],
|
|
396
|
+
foreignKeys: [
|
|
397
|
+
{
|
|
398
|
+
name: fkIndexName,
|
|
399
|
+
columns: [
|
|
400
|
+
joinColumnName
|
|
401
|
+
],
|
|
402
|
+
referencedColumns: [
|
|
403
|
+
ID
|
|
404
|
+
],
|
|
405
|
+
referencedTable: meta.tableName,
|
|
406
|
+
onDelete: 'CASCADE'
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
name: invFkIndexName,
|
|
410
|
+
columns: [
|
|
411
|
+
inverseJoinColumnName
|
|
412
|
+
],
|
|
413
|
+
referencedColumns: [
|
|
414
|
+
ID
|
|
415
|
+
],
|
|
416
|
+
referencedTable: targetMeta.tableName,
|
|
417
|
+
onDelete: 'CASCADE'
|
|
418
|
+
}
|
|
419
|
+
],
|
|
420
|
+
lifecycles: {},
|
|
421
|
+
columnToAttribute: {}
|
|
422
|
+
};
|
|
423
|
+
const joinTable = {
|
|
424
|
+
__internal__: true,
|
|
425
|
+
name: joinTableName,
|
|
426
|
+
joinColumn: {
|
|
427
|
+
name: joinColumnName,
|
|
428
|
+
referencedColumn: ID,
|
|
429
|
+
referencedTable: meta.tableName
|
|
430
|
+
},
|
|
431
|
+
inverseJoinColumn: {
|
|
432
|
+
name: inverseJoinColumnName,
|
|
433
|
+
referencedColumn: ID,
|
|
434
|
+
referencedTable: targetMeta.tableName
|
|
435
|
+
},
|
|
436
|
+
pivotColumns: [
|
|
437
|
+
joinColumnName,
|
|
438
|
+
inverseJoinColumnName
|
|
439
|
+
]
|
|
440
|
+
};
|
|
441
|
+
// order
|
|
442
|
+
if (isAnyToMany(attribute)) {
|
|
443
|
+
metadataSchema.attributes[orderColumnName] = {
|
|
444
|
+
type: 'float',
|
|
445
|
+
column: {
|
|
446
|
+
unsigned: true,
|
|
447
|
+
defaultTo: null
|
|
448
|
+
},
|
|
449
|
+
columnName: orderColumnName
|
|
450
|
+
};
|
|
451
|
+
metadataSchema.indexes.push({
|
|
452
|
+
name: identifiers.getOrderFkIndexName(joinTableName),
|
|
453
|
+
columns: [
|
|
454
|
+
orderColumnName
|
|
455
|
+
]
|
|
456
|
+
});
|
|
457
|
+
joinTable.orderColumnName = orderColumnName;
|
|
458
|
+
joinTable.orderBy = {
|
|
459
|
+
[orderColumnName]: 'asc'
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
// inv order
|
|
463
|
+
if (isBidirectional(attribute) && isManyToAny(attribute)) {
|
|
464
|
+
metadataSchema.attributes[inverseOrderColumnName] = {
|
|
465
|
+
type: 'float',
|
|
466
|
+
column: {
|
|
467
|
+
unsigned: true,
|
|
468
|
+
defaultTo: null
|
|
469
|
+
},
|
|
470
|
+
columnName: inverseOrderColumnName
|
|
471
|
+
};
|
|
472
|
+
metadataSchema.indexes.push({
|
|
473
|
+
name: identifiers.getOrderInverseFkIndexName(joinTableName),
|
|
474
|
+
columns: [
|
|
475
|
+
inverseOrderColumnName
|
|
476
|
+
]
|
|
477
|
+
});
|
|
478
|
+
joinTable.inverseOrderColumnName = inverseOrderColumnName;
|
|
479
|
+
}
|
|
480
|
+
metadata.add(metadataSchema);
|
|
481
|
+
attribute.joinTable = joinTable;
|
|
482
|
+
if (isBidirectional(attribute)) {
|
|
483
|
+
const inverseAttribute = attribute.inversedBy ? targetMeta.attributes[attribute.inversedBy] : null;
|
|
484
|
+
if (!inverseAttribute) {
|
|
485
|
+
throw new Error(`inversedBy attribute ${attribute.inversedBy} not found target ${targetMeta.uid}`);
|
|
486
|
+
}
|
|
487
|
+
if (inverseAttribute.type !== 'relation') {
|
|
488
|
+
throw new Error(`inversedBy attribute ${attribute.inversedBy} targets non relational attribute in ${targetMeta.uid}`);
|
|
489
|
+
}
|
|
490
|
+
inverseAttribute.joinTable = {
|
|
491
|
+
__internal__: true,
|
|
492
|
+
name: joinTableName,
|
|
493
|
+
joinColumn: joinTable.inverseJoinColumn,
|
|
494
|
+
inverseJoinColumn: joinTable.joinColumn,
|
|
495
|
+
pivotColumns: joinTable.pivotColumns
|
|
496
|
+
};
|
|
497
|
+
if (isManyToAny(attribute)) {
|
|
498
|
+
inverseAttribute.joinTable.orderColumnName = inverseOrderColumnName;
|
|
499
|
+
inverseAttribute.joinTable.orderBy = {
|
|
500
|
+
[inverseOrderColumnName]: 'asc'
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
if (isAnyToMany(attribute)) {
|
|
504
|
+
inverseAttribute.joinTable.inverseOrderColumnName = orderColumnName;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
/**
|
|
509
|
+
* Creates a relation metadata
|
|
510
|
+
*/ const createRelation = (attributeName, attribute, meta, metadata)=>{
|
|
511
|
+
switch(attribute.relation){
|
|
512
|
+
case 'oneToOne':
|
|
513
|
+
return createOneToOne(attributeName, attribute, meta, metadata);
|
|
514
|
+
case 'oneToMany':
|
|
515
|
+
return createOneToMany(attributeName, attribute, meta, metadata);
|
|
516
|
+
case 'manyToOne':
|
|
517
|
+
return createManyToOne(attributeName, attribute, meta, metadata);
|
|
518
|
+
case 'manyToMany':
|
|
519
|
+
return createManyToMany(attributeName, attribute, meta, metadata);
|
|
520
|
+
case 'morphToOne':
|
|
521
|
+
return createMorphToOne(attributeName, attribute);
|
|
522
|
+
case 'morphToMany':
|
|
523
|
+
return createMorphToMany(attributeName, attribute, meta, metadata);
|
|
524
|
+
case 'morphOne':
|
|
525
|
+
return createMorphOne(attributeName, attribute, meta, metadata);
|
|
526
|
+
case 'morphMany':
|
|
527
|
+
return createMorphMany(attributeName, attribute, meta, metadata);
|
|
528
|
+
default:
|
|
529
|
+
{
|
|
530
|
+
throw new Error(`Unknown relation`);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
};
|
|
534
|
+
|
|
535
|
+
export { createRelation, hasInverseOrderColumn, hasOrderColumn, isAnyToMany, isAnyToOne, isBidirectional, isManyToAny, isOneToAny };
|
|
536
|
+
//# sourceMappingURL=relations.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations.mjs","sources":["../../src/metadata/relations.ts"],"sourcesContent":["import _, { snakeCase } from 'lodash/fp';\n\nimport { identifiers } from '../utils/identifiers';\nimport type { Meta, Metadata } from './metadata';\nimport type { RelationalAttribute, Relation, MorphJoinTable } from '../types';\n\ninterface JoinColumnOptions {\n attribute: (Relation.OneToOne | Relation.ManyToOne) & Relation.Owner;\n attributeName: string;\n meta: Meta;\n}\n\ninterface JoinTableOptions {\n attribute: RelationalAttribute & Relation.WithTarget & Relation.Bidirectional;\n attributeName: string;\n meta: Meta;\n}\n\nconst ID = identifiers.ID_COLUMN;\nconst ORDER = identifiers.ORDER_COLUMN;\nconst FIELD = identifiers.FIELD_COLUMN;\n\nconst hasInversedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'inversedBy' in attr;\nconst hasMappedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'mappedBy' in attr;\n\n// TODO: use strapi/utils relations for all of these\nexport const isPolymorphic = (attribute: RelationalAttribute): attribute is Relation.Morph =>\n ['morphOne', 'morphMany', 'morphToOne', 'morphToMany'].includes(attribute.relation);\n\nexport const isOneToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.OneToMany =>\n ['oneToOne', 'oneToMany'].includes(attribute.relation);\n\nexport const isManyToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.ManyToOne | Relation.ManyToMany =>\n ['manyToMany', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToOne = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.ManyToOne =>\n ['oneToOne', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToMany = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToMany | Relation.ManyToMany =>\n ['oneToMany', 'manyToMany'].includes(attribute.relation);\n\nexport const isBidirectional = (\n attribute: RelationalAttribute\n): attribute is Relation.Bidirectional => hasInversedBy(attribute) || hasMappedBy(attribute);\n\nconst isOwner = (\n attribute: RelationalAttribute\n): attribute is RelationalAttribute & Relation.Owner =>\n !isBidirectional(attribute) || hasInversedBy(attribute);\n\nconst shouldUseJoinTable = (attribute: RelationalAttribute) =>\n !('useJoinTable' in attribute) || attribute.useJoinTable !== false;\n\nexport const hasOrderColumn = (attribute: RelationalAttribute) => isAnyToMany(attribute);\nexport const hasInverseOrderColumn = (attribute: RelationalAttribute) =>\n isBidirectional(attribute) && isManyToAny(attribute);\n\n/**\n * Creates a oneToOne relation metadata\n *\n * if owner then\n * if with join table then\n * create join table\n * else\n * create joinColumn\n * if bidirectional then\n * set inverse attribute joinCol or joinTable info correctly\n * else\n * this property must be set by the owner side\n * verify the owner side is valid // should be done before or at the same time ?\n */\nconst createOneToOne = (\n attributeName: string,\n attribute: Relation.OneToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isOwner(attribute)) {\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n } else {\n // TODO: verify other side is valid\n }\n};\n\n/**\n * Creates a oneToMany relation metadata\n *\n * if unidirectional then\n * create join table\n * if bidirectional then\n * cannot be owning side\n * do nothing\n */\nconst createOneToMany = (\n attributeName: string,\n attribute: Relation.OneToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && !isBidirectional(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else if (isOwner(attribute)) {\n throw new Error('one side of a oneToMany cannot be the owner side in a bidirectional relation');\n }\n};\n\n/**\n * Creates a manyToOne relation metadata\n *\n * if unidirectional then\n * if with join table then\n * create join table\n * else\n * create join column\n * else\n * must be the owner side\n * if with join table then\n * create join table\n * else\n * create join column\n * set inverse attribute joinCol or joinTable info correctly\n */\nconst createManyToOne = (\n attributeName: string,\n attribute: Relation.ManyToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isBidirectional(attribute) && !isOwner(attribute)) {\n throw new Error('The many side of a manyToOne must be the owning side');\n }\n\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a manyToMany relation metadata\n *\n * if unidirectional\n * create join table\n * else\n * if owner then\n * if with join table then\n * create join table\n * else\n * do nothing\n */\nconst createManyToMany = (\n attributeName: string,\n attribute: Relation.ManyToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && (!isBidirectional(attribute) || isOwner(attribute))) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a morphToOne relation metadata\n *\n * if with join table then\n * create join table\n * else\n * create join columnsa\n *\n * if bidirectionnal\n * set info in the traget\n */\nconst createMorphToOne = (attributeName: string, attribute: Relation.MorphToOne) => {\n const idColumnName = identifiers.getJoinColumnAttributeIdName('target');\n const typeColumnName = identifiers.getMorphColumnTypeName('target');\n\n Object.assign(attribute, {\n owner: true,\n morphColumn: attribute.morphColumn ?? {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n });\n};\n\n/**\n * Creates a morphToMany relation metadata\n */\nconst createMorphToMany = (\n attributeName: string,\n attribute: Relation.MorphToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getMorphTableName(meta.tableName, attributeName);\n const joinColumnName = identifiers.getMorphColumnJoinTableIdName(snakeCase(meta.singularName));\n const idColumnName = identifiers.getMorphColumnAttributeIdName(attributeName);\n const typeColumnName = identifiers.getMorphColumnTypeName(attributeName);\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n\n metadata.add({\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [idColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [typeColumnName]: {\n type: 'string',\n },\n [FIELD]: {\n type: 'string',\n },\n [ORDER]: {\n type: 'float',\n column: {\n unsigned: true,\n },\n },\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: identifiers.getOrderIndexName(joinTableName),\n columns: [ORDER],\n },\n {\n name: identifiers.getIdColumnIndexName(joinTableName),\n columns: [idColumnName],\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n });\n\n const joinTable: MorphJoinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n },\n morphColumn: {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n orderBy: {\n order: 'asc' as const,\n },\n pivotColumns: [joinColumnName, typeColumnName, idColumnName],\n };\n\n attribute.joinTable = joinTable;\n};\n\n/**\n * Creates a morphOne relation metadata\n */\nconst createMorphOne = (\n attributeName: string,\n attribute: Relation.MorphOne,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a morphMany relation metadata\n */\nconst createMorphMany = (\n attributeName: string,\n attribute: Relation.MorphMany,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a join column info and add them to the attribute meta\n */\nconst createJoinColumn = (metadata: Metadata, { attribute, attributeName }: JoinColumnOptions) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(attributeName));\n const joinColumn = {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n };\n\n if ('joinColumn' in attribute) {\n Object.assign(joinColumn, attribute.joinColumn);\n }\n\n Object.assign(attribute, { owner: true, joinColumn });\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = targetMeta.attributes[attribute.inversedBy];\n\n Object.assign(inverseAttribute, {\n joinColumn: {\n name: joinColumn.referencedColumn,\n referencedColumn: joinColumnName,\n },\n });\n }\n};\n\n/**\n * Creates a join table and add it to the attribute meta\n */\nconst createJoinTable = (\n metadata: Metadata,\n { attributeName, attribute, meta }: JoinTableOptions\n) => {\n if (!shouldUseJoinTable(attribute)) {\n throw new Error('Attempted to create join table when useJoinTable is false');\n }\n\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n // TODO: implement overwrite logic instead\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getJoinTableName(\n snakeCase(meta.tableName),\n snakeCase(attributeName)\n );\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(meta.singularName));\n\n let inverseJoinColumnName = identifiers.getJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n\n // if relation is self referencing\n if (joinColumnName === inverseJoinColumnName) {\n inverseJoinColumnName = identifiers.getInverseJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n }\n\n const orderColumnName = identifiers.getOrderColumnName(snakeCase(targetMeta.singularName));\n // TODO: should this plus the conditional below be rolled into one method?\n let inverseOrderColumnName = identifiers.getOrderColumnName(snakeCase(meta.singularName));\n\n // if relation is self referencing\n if (attribute.relation === 'manyToMany' && orderColumnName === inverseOrderColumnName) {\n inverseOrderColumnName = identifiers.getInverseOrderColumnName(snakeCase(meta.singularName));\n }\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n const invFkIndexName = identifiers.getInverseFkIndexName(joinTableName);\n\n const metadataSchema: Meta = {\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [inverseJoinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: inverseJoinColumnName,\n },\n // TODO: add extra pivot attributes -> user should use an intermediate entity\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n },\n {\n name: identifiers.getUniqueIndexName(joinTableName),\n columns: [joinColumnName, inverseJoinColumnName],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n referencedColumns: [ID],\n referencedTable: targetMeta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n };\n\n const joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: meta.tableName,\n },\n inverseJoinColumn: {\n name: inverseJoinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n },\n pivotColumns: [joinColumnName, inverseJoinColumnName],\n } as any;\n\n // order\n if (isAnyToMany(attribute)) {\n metadataSchema.attributes[orderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: orderColumnName,\n };\n metadataSchema.indexes.push({\n name: identifiers.getOrderFkIndexName(joinTableName),\n columns: [orderColumnName],\n });\n joinTable.orderColumnName = orderColumnName;\n joinTable.orderBy = { [orderColumnName]: 'asc' };\n }\n\n // inv order\n if (isBidirectional(attribute) && isManyToAny(attribute)) {\n metadataSchema.attributes[inverseOrderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: inverseOrderColumnName,\n };\n\n metadataSchema.indexes.push({\n name: identifiers.getOrderInverseFkIndexName(joinTableName),\n columns: [inverseOrderColumnName],\n });\n\n joinTable.inverseOrderColumnName = inverseOrderColumnName;\n }\n\n metadata.add(metadataSchema);\n\n attribute.joinTable = joinTable;\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = attribute.inversedBy\n ? (targetMeta.attributes[attribute.inversedBy] as Relation.Bidirectional)\n : null;\n\n if (!inverseAttribute) {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} not found target ${targetMeta.uid}`\n );\n }\n\n if (inverseAttribute.type !== 'relation') {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} targets non relational attribute in ${targetMeta.uid}`\n );\n }\n\n inverseAttribute.joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: joinTable.inverseJoinColumn,\n inverseJoinColumn: joinTable.joinColumn,\n pivotColumns: joinTable.pivotColumns,\n } as any;\n\n if (isManyToAny(attribute)) {\n inverseAttribute.joinTable.orderColumnName = inverseOrderColumnName;\n inverseAttribute.joinTable.orderBy = { [inverseOrderColumnName]: 'asc' };\n }\n if (isAnyToMany(attribute)) {\n inverseAttribute.joinTable.inverseOrderColumnName = orderColumnName;\n }\n }\n};\n\n/**\n * Creates a relation metadata\n */\nexport const createRelation = (\n attributeName: string,\n attribute: RelationalAttribute,\n meta: Meta,\n metadata: Metadata\n) => {\n switch (attribute.relation) {\n case 'oneToOne':\n return createOneToOne(attributeName, attribute, meta, metadata);\n case 'oneToMany':\n return createOneToMany(attributeName, attribute, meta, metadata);\n case 'manyToOne':\n return createManyToOne(attributeName, attribute, meta, metadata);\n case 'manyToMany':\n return createManyToMany(attributeName, attribute, meta, metadata);\n case 'morphToOne':\n return createMorphToOne(attributeName, attribute);\n case 'morphToMany':\n return createMorphToMany(attributeName, attribute, meta, metadata);\n case 'morphOne':\n return createMorphOne(attributeName, attribute, meta, metadata);\n case 'morphMany':\n return createMorphMany(attributeName, attribute, meta, metadata);\n default: {\n throw new Error(`Unknown relation`);\n }\n }\n};\n"],"names":["ID","identifiers","ID_COLUMN","ORDER","ORDER_COLUMN","FIELD","FIELD_COLUMN","hasInversedBy","attr","hasMappedBy","isOneToAny","attribute","includes","relation","isManyToAny","isAnyToOne","isAnyToMany","isBidirectional","isOwner","shouldUseJoinTable","useJoinTable","hasOrderColumn","hasInverseOrderColumn","createOneToOne","attributeName","meta","metadata","createJoinTable","createJoinColumn","createOneToMany","Error","createManyToOne","createManyToMany","createMorphToOne","idColumnName","getJoinColumnAttributeIdName","typeColumnName","getMorphColumnTypeName","Object","assign","owner","morphColumn","typeColumn","name","idColumn","referencedColumn","createMorphToMany","joinTable","__internal__","joinTableName","getMorphTableName","tableName","joinColumnName","getMorphColumnJoinTableIdName","snakeCase","singularName","getMorphColumnAttributeIdName","fkIndexName","getFkIndexName","add","uid","attributes","type","column","unsigned","columnName","indexes","columns","getOrderIndexName","getIdColumnIndexName","foreignKeys","referencedColumns","referencedTable","onDelete","lifecycles","columnToAttribute","joinColumn","orderBy","order","pivotColumns","createMorphOne","targetMeta","get","target","morphBy","_","has","createMorphMany","inverseAttribute","inversedBy","getJoinTableName","inverseJoinColumnName","getInverseJoinColumnAttributeIdName","orderColumnName","getOrderColumnName","inverseOrderColumnName","getInverseOrderColumnName","invFkIndexName","getInverseFkIndexName","metadataSchema","getUniqueIndexName","inverseJoinColumn","defaultTo","push","getOrderFkIndexName","getOrderInverseFkIndexName","createRelation"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sources":["../../src/migrations/common.ts"],"sourcesContent":["import type { Resolver } from 'umzug';\nimport type { Knex } from 'knex';\n\nimport type { Database } from '..';\n\nexport interface UserMigrationProvider {\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\n\nexport interface InternalMigrationProvider {\n register(migration: Migration): void;\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\nexport interface MigrationProvider {\n providers: { internal: InternalMigrationProvider };\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\n\nexport type Context = { db: Database };\n\nexport type MigrationResolver = Resolver<Context>;\n\nexport type MigrationFn = (knex: Knex.Transaction, db: Database) => Promise<void>;\n\nexport type Migration = {\n name: string;\n up: MigrationFn;\n down: MigrationFn;\n};\n\nexport const wrapTransaction = (db: Database) => (fn: MigrationFn) => () => {\n return db.transaction(({ trx }) => Promise.resolve(fn(trx, db)));\n};\n"],"names":["wrapTransaction","db","fn","transaction","trx","Promise","resolve"],"mappings":";;AAoCaA,MAAAA,eAAAA,GAAkB,CAACC,EAAAA,GAAiB,CAACC,EAAoB,GAAA,IAAA;AACpE,YAAA,OAAOD,EAAGE,CAAAA,WAAW,CAAC,CAAC,EAAEC,GAAG,EAAE,GAAKC,OAAQC,CAAAA,OAAO,CAACJ,EAAAA,CAAGE,GAAKH,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.mjs","sources":["../../src/migrations/common.ts"],"sourcesContent":["import type { Resolver } from 'umzug';\nimport type { Knex } from 'knex';\n\nimport type { Database } from '..';\n\nexport interface UserMigrationProvider {\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\n\nexport interface InternalMigrationProvider {\n register(migration: Migration): void;\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\nexport interface MigrationProvider {\n providers: { internal: InternalMigrationProvider };\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\n\nexport type Context = { db: Database };\n\nexport type MigrationResolver = Resolver<Context>;\n\nexport type MigrationFn = (knex: Knex.Transaction, db: Database) => Promise<void>;\n\nexport type Migration = {\n name: string;\n up: MigrationFn;\n down: MigrationFn;\n};\n\nexport const wrapTransaction = (db: Database) => (fn: MigrationFn) => () => {\n return db.transaction(({ trx }) => Promise.resolve(fn(trx, db)));\n};\n"],"names":["wrapTransaction","db","fn","transaction","trx","Promise","resolve"],"mappings":"AAoCaA,MAAAA,eAAAA,GAAkB,CAACC,EAAAA,GAAiB,CAACC,EAAoB,GAAA,IAAA;AACpE,YAAA,OAAOD,EAAGE,CAAAA,WAAW,CAAC,CAAC,EAAEC,GAAG,EAAE,GAAKC,OAAQC,CAAAA,OAAO,CAACJ,EAAAA,CAAGE,GAAKH,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA;;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var users = require('./users.js');
|
|
4
|
+
var internal = require('./internal.js');
|
|
5
|
+
|
|
6
|
+
const createMigrationsProvider = (db)=>{
|
|
7
|
+
const userProvider = users.createUserMigrationProvider(db);
|
|
8
|
+
const internalProvider = internal.createInternalMigrationProvider(db);
|
|
9
|
+
const providers = [
|
|
10
|
+
userProvider,
|
|
11
|
+
internalProvider
|
|
12
|
+
];
|
|
13
|
+
return {
|
|
14
|
+
providers: {
|
|
15
|
+
internal: internalProvider
|
|
16
|
+
},
|
|
17
|
+
async shouldRun () {
|
|
18
|
+
const shouldRunResponses = await Promise.all(providers.map((provider)=>provider.shouldRun()));
|
|
19
|
+
return shouldRunResponses.some((shouldRun)=>shouldRun);
|
|
20
|
+
},
|
|
21
|
+
async up () {
|
|
22
|
+
for (const provider of providers){
|
|
23
|
+
if (await provider.shouldRun()) {
|
|
24
|
+
await provider.up();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
async down () {
|
|
29
|
+
for (const provider of providers){
|
|
30
|
+
if (await provider.shouldRun()) {
|
|
31
|
+
await provider.down();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.createMigrationsProvider = createMigrationsProvider;
|
|
39
|
+
//# sourceMappingURL=index.js.map
|