@strapi/database 5.12.0 → 5.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./relations/index.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Validate if the database is in a valid state before starting the server.
|
|
7
|
+
*/ async function validateDatabase(db) {
|
|
8
|
+
await index.validateRelations(db);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
exports.validateDatabase = validateDatabase;
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/validations/index.ts"],"sourcesContent":["import { validateRelations } from './relations';\n\nimport type { Database } from '..';\n\n/**\n * Validate if the database is in a valid state before starting the server.\n */\nexport async function validateDatabase(db: Database) {\n await validateRelations(db);\n}\n"],"names":["validateDatabase","db","validateRelations"],"mappings":";;;;AAIA;;IAGO,eAAeA,gBAAAA,CAAiBC,EAAY,EAAA;AACjD,IAAA,MAAMC,uBAAkBD,CAAAA,EAAAA,CAAAA;AAC1B;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { validateRelations } from './relations/index.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validate if the database is in a valid state before starting the server.
|
|
5
|
+
*/ async function validateDatabase(db) {
|
|
6
|
+
await validateRelations(db);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { validateDatabase };
|
|
10
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/validations/index.ts"],"sourcesContent":["import { validateRelations } from './relations';\n\nimport type { Database } from '..';\n\n/**\n * Validate if the database is in a valid state before starting the server.\n */\nexport async function validateDatabase(db: Database) {\n await validateRelations(db);\n}\n"],"names":["validateDatabase","db","validateRelations"],"mappings":";;AAIA;;IAGO,eAAeA,gBAAAA,CAAiBC,EAAY,EAAA;AACjD,IAAA,MAAMC,iBAAkBD,CAAAA,EAAAA,CAAAA;AAC1B;;;;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash/fp');
|
|
4
|
+
var index = require('../../utils/identifiers/index.js');
|
|
5
|
+
|
|
6
|
+
const getLinksWithoutMappedBy = (db)=>{
|
|
7
|
+
const relationsToUpdate = {};
|
|
8
|
+
db.metadata.forEach((modelMetadata)=>{
|
|
9
|
+
const attributes = modelMetadata.attributes;
|
|
10
|
+
// For each relation attribute, add the joinTable name to tablesToUpdate
|
|
11
|
+
Object.values(attributes).forEach((attribute)=>{
|
|
12
|
+
if (attribute.type !== 'relation') {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if ('inversedBy' in attribute && attribute.inversedBy) {
|
|
16
|
+
const invRelation = db.metadata.get(attribute.target).attributes[attribute.inversedBy];
|
|
17
|
+
// Both relations use inversedBy.
|
|
18
|
+
if ('inversedBy' in invRelation && invRelation.inversedBy) {
|
|
19
|
+
relationsToUpdate[attribute.joinTable.name] = {
|
|
20
|
+
relation: attribute,
|
|
21
|
+
invRelation: invRelation
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
return Object.values(relationsToUpdate);
|
|
28
|
+
};
|
|
29
|
+
const isLinkTableEmpty = async (db, linkTableName)=>{
|
|
30
|
+
// If the table doesn't exist, it's empty
|
|
31
|
+
const exists = await db.getSchemaConnection().hasTable(linkTableName);
|
|
32
|
+
if (!exists) return true;
|
|
33
|
+
const result = await db.getConnection().from(linkTableName).count('* as count');
|
|
34
|
+
return Number(result[0].count) === 0;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Validates bidirectional relations before starting the server.
|
|
38
|
+
* - If both sides use inversedBy, one of the sides must switch to mappedBy.
|
|
39
|
+
* When this happens, two join tables exist in the database.
|
|
40
|
+
* This makes sure you switch the side which does not delete any data.
|
|
41
|
+
*
|
|
42
|
+
* @param {*} db
|
|
43
|
+
* @return {*}
|
|
44
|
+
*/ const validateBidirectionalRelations = async (db)=>{
|
|
45
|
+
const invalidLinks = getLinksWithoutMappedBy(db);
|
|
46
|
+
for (const { relation, invRelation } of invalidLinks){
|
|
47
|
+
const modelMetadata = db.metadata.get(invRelation.target);
|
|
48
|
+
const invModelMetadata = db.metadata.get(relation.target);
|
|
49
|
+
// Generate the join table name based on the relation target table and attribute name.
|
|
50
|
+
const joinTableName = index.identifiers.getJoinTableName(_.snakeCase(modelMetadata.tableName), _.snakeCase(invRelation.inversedBy));
|
|
51
|
+
const inverseJoinTableName = index.identifiers.getJoinTableName(_.snakeCase(invModelMetadata.tableName), _.snakeCase(relation.inversedBy));
|
|
52
|
+
const joinTableEmpty = await isLinkTableEmpty(db, joinTableName);
|
|
53
|
+
const inverseJoinTableEmpty = await isLinkTableEmpty(db, inverseJoinTableName);
|
|
54
|
+
if (joinTableEmpty) {
|
|
55
|
+
process.emitWarning(`Error on attribute "${invRelation.inversedBy}" in model "${modelMetadata.singularName}" (${modelMetadata.uid}).` + ` Please modify your ${modelMetadata.singularName} schema by renaming the key "inversedBy" to "mappedBy".` + ` Ex: { "inversedBy": "${relation.inversedBy}" } -> { "mappedBy": "${relation.inversedBy}" }`);
|
|
56
|
+
} else if (inverseJoinTableEmpty) {
|
|
57
|
+
// Its safe to delete the inverse join table
|
|
58
|
+
process.emitWarning(`Error on attribute "${relation.inversedBy}" in model "${invModelMetadata.singularName}" (${invModelMetadata.uid}).` + ` Please modify your ${invModelMetadata.singularName} schema by renaming the key "inversedBy" to "mappedBy".` + ` Ex: { "inversedBy": "${invRelation.inversedBy}" } -> { "mappedBy": "${invRelation.inversedBy}" }`);
|
|
59
|
+
} else ;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
exports.validateBidirectionalRelations = validateBidirectionalRelations;
|
|
64
|
+
//# sourceMappingURL=bidirectional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bidirectional.js","sources":["../../../src/validations/relations/bidirectional.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\nimport type { Database } from '../..';\nimport type { Relation } from '../../types';\nimport { identifiers } from '../../utils/identifiers';\n\ntype Link = {\n relation: Relation.Bidirectional & { inversedBy: string };\n invRelation: Relation.Bidirectional & { inversedBy: string };\n};\n\nconst getLinksWithoutMappedBy = (db: Database): Array<Link> => {\n const relationsToUpdate: Record<string, Link> = {};\n\n db.metadata.forEach((modelMetadata) => {\n const attributes = modelMetadata.attributes;\n\n // For each relation attribute, add the joinTable name to tablesToUpdate\n Object.values(attributes).forEach((attribute) => {\n if (attribute.type !== 'relation') {\n return;\n }\n\n if ('inversedBy' in attribute && attribute.inversedBy) {\n const invRelation = db.metadata.get(attribute.target).attributes[attribute.inversedBy];\n\n // Both relations use inversedBy.\n if ('inversedBy' in invRelation && invRelation.inversedBy) {\n relationsToUpdate[attribute.joinTable.name] = {\n relation: attribute as Relation.Bidirectional & { inversedBy: string },\n invRelation: invRelation as Relation.Bidirectional & { inversedBy: string },\n };\n }\n }\n });\n });\n\n return Object.values(relationsToUpdate);\n};\n\nconst isLinkTableEmpty = async (db: Database, linkTableName: string) => {\n // If the table doesn't exist, it's empty\n const exists = await db.getSchemaConnection().hasTable(linkTableName);\n if (!exists) return true;\n\n const result = await db.getConnection().from(linkTableName).count('* as count');\n return Number(result[0].count) === 0;\n};\n\n/**\n * Validates bidirectional relations before starting the server.\n * - If both sides use inversedBy, one of the sides must switch to mappedBy.\n * When this happens, two join tables exist in the database.\n * This makes sure you switch the side which does not delete any data.\n *\n * @param {*} db\n * @return {*}\n */\nexport const validateBidirectionalRelations = async (db: Database) => {\n const invalidLinks = getLinksWithoutMappedBy(db);\n\n for (const { relation, invRelation } of invalidLinks) {\n const modelMetadata = db.metadata.get(invRelation.target);\n const invModelMetadata = db.metadata.get(relation.target);\n\n // Generate the join table name based on the relation target table and attribute name.\n const joinTableName = identifiers.getJoinTableName(\n snakeCase(modelMetadata.tableName),\n snakeCase(invRelation.inversedBy)\n );\n const inverseJoinTableName = identifiers.getJoinTableName(\n snakeCase(invModelMetadata.tableName),\n snakeCase(relation.inversedBy)\n );\n\n const joinTableEmpty = await isLinkTableEmpty(db, joinTableName);\n const inverseJoinTableEmpty = await isLinkTableEmpty(db, inverseJoinTableName);\n\n if (joinTableEmpty) {\n process.emitWarning(\n `Error on attribute \"${invRelation.inversedBy}\" in model \"${modelMetadata.singularName}\" (${modelMetadata.uid}).` +\n ` Please modify your ${modelMetadata.singularName} schema by renaming the key \"inversedBy\" to \"mappedBy\".` +\n ` Ex: { \"inversedBy\": \"${relation.inversedBy}\" } -> { \"mappedBy\": \"${relation.inversedBy}\" }`\n );\n } else if (inverseJoinTableEmpty) {\n // Its safe to delete the inverse join table\n process.emitWarning(\n `Error on attribute \"${relation.inversedBy}\" in model \"${invModelMetadata.singularName}\" (${invModelMetadata.uid}).` +\n ` Please modify your ${invModelMetadata.singularName} schema by renaming the key \"inversedBy\" to \"mappedBy\".` +\n ` Ex: { \"inversedBy\": \"${invRelation.inversedBy}\" } -> { \"mappedBy\": \"${invRelation.inversedBy}\" }`\n );\n } else {\n // Both sides have data in the join table\n }\n }\n};\n"],"names":["getLinksWithoutMappedBy","db","relationsToUpdate","metadata","forEach","modelMetadata","attributes","Object","values","attribute","type","inversedBy","invRelation","get","target","joinTable","name","relation","isLinkTableEmpty","linkTableName","exists","getSchemaConnection","hasTable","result","getConnection","from","count","Number","validateBidirectionalRelations","invalidLinks","invModelMetadata","joinTableName","identifiers","getJoinTableName","snakeCase","tableName","inverseJoinTableName","joinTableEmpty","inverseJoinTableEmpty","process","emitWarning","singularName","uid"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { snakeCase } from 'lodash/fp';
|
|
2
|
+
import { identifiers } from '../../utils/identifiers/index.mjs';
|
|
3
|
+
|
|
4
|
+
const getLinksWithoutMappedBy = (db)=>{
|
|
5
|
+
const relationsToUpdate = {};
|
|
6
|
+
db.metadata.forEach((modelMetadata)=>{
|
|
7
|
+
const attributes = modelMetadata.attributes;
|
|
8
|
+
// For each relation attribute, add the joinTable name to tablesToUpdate
|
|
9
|
+
Object.values(attributes).forEach((attribute)=>{
|
|
10
|
+
if (attribute.type !== 'relation') {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if ('inversedBy' in attribute && attribute.inversedBy) {
|
|
14
|
+
const invRelation = db.metadata.get(attribute.target).attributes[attribute.inversedBy];
|
|
15
|
+
// Both relations use inversedBy.
|
|
16
|
+
if ('inversedBy' in invRelation && invRelation.inversedBy) {
|
|
17
|
+
relationsToUpdate[attribute.joinTable.name] = {
|
|
18
|
+
relation: attribute,
|
|
19
|
+
invRelation: invRelation
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return Object.values(relationsToUpdate);
|
|
26
|
+
};
|
|
27
|
+
const isLinkTableEmpty = async (db, linkTableName)=>{
|
|
28
|
+
// If the table doesn't exist, it's empty
|
|
29
|
+
const exists = await db.getSchemaConnection().hasTable(linkTableName);
|
|
30
|
+
if (!exists) return true;
|
|
31
|
+
const result = await db.getConnection().from(linkTableName).count('* as count');
|
|
32
|
+
return Number(result[0].count) === 0;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Validates bidirectional relations before starting the server.
|
|
36
|
+
* - If both sides use inversedBy, one of the sides must switch to mappedBy.
|
|
37
|
+
* When this happens, two join tables exist in the database.
|
|
38
|
+
* This makes sure you switch the side which does not delete any data.
|
|
39
|
+
*
|
|
40
|
+
* @param {*} db
|
|
41
|
+
* @return {*}
|
|
42
|
+
*/ const validateBidirectionalRelations = async (db)=>{
|
|
43
|
+
const invalidLinks = getLinksWithoutMappedBy(db);
|
|
44
|
+
for (const { relation, invRelation } of invalidLinks){
|
|
45
|
+
const modelMetadata = db.metadata.get(invRelation.target);
|
|
46
|
+
const invModelMetadata = db.metadata.get(relation.target);
|
|
47
|
+
// Generate the join table name based on the relation target table and attribute name.
|
|
48
|
+
const joinTableName = identifiers.getJoinTableName(snakeCase(modelMetadata.tableName), snakeCase(invRelation.inversedBy));
|
|
49
|
+
const inverseJoinTableName = identifiers.getJoinTableName(snakeCase(invModelMetadata.tableName), snakeCase(relation.inversedBy));
|
|
50
|
+
const joinTableEmpty = await isLinkTableEmpty(db, joinTableName);
|
|
51
|
+
const inverseJoinTableEmpty = await isLinkTableEmpty(db, inverseJoinTableName);
|
|
52
|
+
if (joinTableEmpty) {
|
|
53
|
+
process.emitWarning(`Error on attribute "${invRelation.inversedBy}" in model "${modelMetadata.singularName}" (${modelMetadata.uid}).` + ` Please modify your ${modelMetadata.singularName} schema by renaming the key "inversedBy" to "mappedBy".` + ` Ex: { "inversedBy": "${relation.inversedBy}" } -> { "mappedBy": "${relation.inversedBy}" }`);
|
|
54
|
+
} else if (inverseJoinTableEmpty) {
|
|
55
|
+
// Its safe to delete the inverse join table
|
|
56
|
+
process.emitWarning(`Error on attribute "${relation.inversedBy}" in model "${invModelMetadata.singularName}" (${invModelMetadata.uid}).` + ` Please modify your ${invModelMetadata.singularName} schema by renaming the key "inversedBy" to "mappedBy".` + ` Ex: { "inversedBy": "${invRelation.inversedBy}" } -> { "mappedBy": "${invRelation.inversedBy}" }`);
|
|
57
|
+
} else ;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export { validateBidirectionalRelations };
|
|
62
|
+
//# sourceMappingURL=bidirectional.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bidirectional.mjs","sources":["../../../src/validations/relations/bidirectional.ts"],"sourcesContent":["import { snakeCase } from 'lodash/fp';\nimport type { Database } from '../..';\nimport type { Relation } from '../../types';\nimport { identifiers } from '../../utils/identifiers';\n\ntype Link = {\n relation: Relation.Bidirectional & { inversedBy: string };\n invRelation: Relation.Bidirectional & { inversedBy: string };\n};\n\nconst getLinksWithoutMappedBy = (db: Database): Array<Link> => {\n const relationsToUpdate: Record<string, Link> = {};\n\n db.metadata.forEach((modelMetadata) => {\n const attributes = modelMetadata.attributes;\n\n // For each relation attribute, add the joinTable name to tablesToUpdate\n Object.values(attributes).forEach((attribute) => {\n if (attribute.type !== 'relation') {\n return;\n }\n\n if ('inversedBy' in attribute && attribute.inversedBy) {\n const invRelation = db.metadata.get(attribute.target).attributes[attribute.inversedBy];\n\n // Both relations use inversedBy.\n if ('inversedBy' in invRelation && invRelation.inversedBy) {\n relationsToUpdate[attribute.joinTable.name] = {\n relation: attribute as Relation.Bidirectional & { inversedBy: string },\n invRelation: invRelation as Relation.Bidirectional & { inversedBy: string },\n };\n }\n }\n });\n });\n\n return Object.values(relationsToUpdate);\n};\n\nconst isLinkTableEmpty = async (db: Database, linkTableName: string) => {\n // If the table doesn't exist, it's empty\n const exists = await db.getSchemaConnection().hasTable(linkTableName);\n if (!exists) return true;\n\n const result = await db.getConnection().from(linkTableName).count('* as count');\n return Number(result[0].count) === 0;\n};\n\n/**\n * Validates bidirectional relations before starting the server.\n * - If both sides use inversedBy, one of the sides must switch to mappedBy.\n * When this happens, two join tables exist in the database.\n * This makes sure you switch the side which does not delete any data.\n *\n * @param {*} db\n * @return {*}\n */\nexport const validateBidirectionalRelations = async (db: Database) => {\n const invalidLinks = getLinksWithoutMappedBy(db);\n\n for (const { relation, invRelation } of invalidLinks) {\n const modelMetadata = db.metadata.get(invRelation.target);\n const invModelMetadata = db.metadata.get(relation.target);\n\n // Generate the join table name based on the relation target table and attribute name.\n const joinTableName = identifiers.getJoinTableName(\n snakeCase(modelMetadata.tableName),\n snakeCase(invRelation.inversedBy)\n );\n const inverseJoinTableName = identifiers.getJoinTableName(\n snakeCase(invModelMetadata.tableName),\n snakeCase(relation.inversedBy)\n );\n\n const joinTableEmpty = await isLinkTableEmpty(db, joinTableName);\n const inverseJoinTableEmpty = await isLinkTableEmpty(db, inverseJoinTableName);\n\n if (joinTableEmpty) {\n process.emitWarning(\n `Error on attribute \"${invRelation.inversedBy}\" in model \"${modelMetadata.singularName}\" (${modelMetadata.uid}).` +\n ` Please modify your ${modelMetadata.singularName} schema by renaming the key \"inversedBy\" to \"mappedBy\".` +\n ` Ex: { \"inversedBy\": \"${relation.inversedBy}\" } -> { \"mappedBy\": \"${relation.inversedBy}\" }`\n );\n } else if (inverseJoinTableEmpty) {\n // Its safe to delete the inverse join table\n process.emitWarning(\n `Error on attribute \"${relation.inversedBy}\" in model \"${invModelMetadata.singularName}\" (${invModelMetadata.uid}).` +\n ` Please modify your ${invModelMetadata.singularName} schema by renaming the key \"inversedBy\" to \"mappedBy\".` +\n ` Ex: { \"inversedBy\": \"${invRelation.inversedBy}\" } -> { \"mappedBy\": \"${invRelation.inversedBy}\" }`\n );\n } else {\n // Both sides have data in the join table\n }\n }\n};\n"],"names":["getLinksWithoutMappedBy","db","relationsToUpdate","metadata","forEach","modelMetadata","attributes","Object","values","attribute","type","inversedBy","invRelation","get","target","joinTable","name","relation","isLinkTableEmpty","linkTableName","exists","getSchemaConnection","hasTable","result","getConnection","from","count","Number","validateBidirectionalRelations","invalidLinks","invModelMetadata","joinTableName","identifiers","getJoinTableName","snakeCase","tableName","inverseJoinTableName","joinTableEmpty","inverseJoinTableEmpty","process","emitWarning","singularName","uid"],"mappings":";;;AAUA,MAAMA,0BAA0B,CAACC,EAAAA,GAAAA;AAC/B,IAAA,MAAMC,oBAA0C,EAAC;AAEjDD,IAAAA,EAAAA,CAAGE,QAAQ,CAACC,OAAO,CAAC,CAACC,aAAAA,GAAAA;QACnB,MAAMC,UAAAA,GAAaD,cAAcC,UAAU;;AAG3CC,QAAAA,MAAAA,CAAOC,MAAM,CAACF,UAAYF,CAAAA,CAAAA,OAAO,CAAC,CAACK,SAAAA,GAAAA;YACjC,IAAIA,SAAAA,CAAUC,IAAI,KAAK,UAAY,EAAA;AACjC,gBAAA;AACF;AAEA,YAAA,IAAI,YAAgBD,IAAAA,SAAAA,IAAaA,SAAUE,CAAAA,UAAU,EAAE;AACrD,gBAAA,MAAMC,WAAcX,GAAAA,EAAAA,CAAGE,QAAQ,CAACU,GAAG,CAACJ,SAAUK,CAAAA,MAAM,CAAER,CAAAA,UAAU,CAACG,SAAAA,CAAUE,UAAU,CAAC;;AAGtF,gBAAA,IAAI,YAAgBC,IAAAA,WAAAA,IAAeA,WAAYD,CAAAA,UAAU,EAAE;AACzDT,oBAAAA,iBAAiB,CAACO,SAAUM,CAAAA,SAAS,CAACC,IAAI,CAAC,GAAG;wBAC5CC,QAAUR,EAAAA,SAAAA;wBACVG,WAAaA,EAAAA;AACf,qBAAA;AACF;AACF;AACF,SAAA,CAAA;AACF,KAAA,CAAA;IAEA,OAAOL,MAAAA,CAAOC,MAAM,CAACN,iBAAAA,CAAAA;AACvB,CAAA;AAEA,MAAMgB,gBAAAA,GAAmB,OAAOjB,EAAckB,EAAAA,aAAAA,GAAAA;;AAE5C,IAAA,MAAMC,SAAS,MAAMnB,EAAAA,CAAGoB,mBAAmB,EAAA,CAAGC,QAAQ,CAACH,aAAAA,CAAAA;IACvD,IAAI,CAACC,QAAQ,OAAO,IAAA;IAEpB,MAAMG,MAAAA,GAAS,MAAMtB,EAAGuB,CAAAA,aAAa,GAAGC,IAAI,CAACN,aAAeO,CAAAA,CAAAA,KAAK,CAAC,YAAA,CAAA;AAClE,IAAA,OAAOC,OAAOJ,MAAM,CAAC,CAAE,CAAA,CAACG,KAAK,CAAM,KAAA,CAAA;AACrC,CAAA;AAEA;;;;;;;;IASaE,MAAAA,8BAAAA,GAAiC,OAAO3B,EAAAA,GAAAA;AACnD,IAAA,MAAM4B,eAAe7B,uBAAwBC,CAAAA,EAAAA,CAAAA;AAE7C,IAAA,KAAK,MAAM,EAAEgB,QAAQ,EAAEL,WAAW,EAAE,IAAIiB,YAAc,CAAA;AACpD,QAAA,MAAMxB,gBAAgBJ,EAAGE,CAAAA,QAAQ,CAACU,GAAG,CAACD,YAAYE,MAAM,CAAA;AACxD,QAAA,MAAMgB,mBAAmB7B,EAAGE,CAAAA,QAAQ,CAACU,GAAG,CAACI,SAASH,MAAM,CAAA;;QAGxD,MAAMiB,aAAAA,GAAgBC,WAAYC,CAAAA,gBAAgB,CAChDC,SAAAA,CAAU7B,cAAc8B,SAAS,CAAA,EACjCD,SAAUtB,CAAAA,WAAAA,CAAYD,UAAU,CAAA,CAAA;QAElC,MAAMyB,oBAAAA,GAAuBJ,WAAYC,CAAAA,gBAAgB,CACvDC,SAAAA,CAAUJ,iBAAiBK,SAAS,CAAA,EACpCD,SAAUjB,CAAAA,QAAAA,CAASN,UAAU,CAAA,CAAA;QAG/B,MAAM0B,cAAAA,GAAiB,MAAMnB,gBAAAA,CAAiBjB,EAAI8B,EAAAA,aAAAA,CAAAA;QAClD,MAAMO,qBAAAA,GAAwB,MAAMpB,gBAAAA,CAAiBjB,EAAImC,EAAAA,oBAAAA,CAAAA;AAEzD,QAAA,IAAIC,cAAgB,EAAA;AAClBE,YAAAA,OAAAA,CAAQC,WAAW,CACjB,CAAC,oBAAoB,EAAE5B,WAAAA,CAAYD,UAAU,CAAC,YAAY,EAAEN,aAAcoC,CAAAA,YAAY,CAAC,GAAG,EAAEpC,cAAcqC,GAAG,CAAC,EAAE,CAAC,GAC/G,CAAC,oBAAoB,EAAErC,aAAcoC,CAAAA,YAAY,CAAC,uDAAuD,CAAC,GAC1G,CAAC,sBAAsB,EAAExB,QAASN,CAAAA,UAAU,CAAC,sBAAsB,EAAEM,SAASN,UAAU,CAAC,GAAG,CAAC,CAAA;AAEnG,SAAA,MAAO,IAAI2B,qBAAuB,EAAA;;AAEhCC,YAAAA,OAAAA,CAAQC,WAAW,CACjB,CAAC,oBAAoB,EAAEvB,QAAAA,CAASN,UAAU,CAAC,YAAY,EAAEmB,gBAAiBW,CAAAA,YAAY,CAAC,GAAG,EAAEX,iBAAiBY,GAAG,CAAC,EAAE,CAAC,GAClH,CAAC,oBAAoB,EAAEZ,gBAAiBW,CAAAA,YAAY,CAAC,uDAAuD,CAAC,GAC7G,CAAC,sBAAsB,EAAE7B,WAAYD,CAAAA,UAAU,CAAC,sBAAsB,EAAEC,YAAYD,UAAU,CAAC,GAAG,CAAC,CAAA;SAElG,MAAA;AAGT;AACF;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var bidirectional = require('./bidirectional.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Validates if relations data and tables are in a valid state before
|
|
7
|
+
* starting the server.
|
|
8
|
+
*/ const validateRelations = async (db)=>{
|
|
9
|
+
await bidirectional.validateBidirectionalRelations(db);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
exports.validateRelations = validateRelations;
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/validations/relations/index.ts"],"sourcesContent":["import { validateBidirectionalRelations } from './bidirectional';\n\nimport type { Database } from '../..';\n\n/**\n * Validates if relations data and tables are in a valid state before\n * starting the server.\n */\nexport const validateRelations = async (db: Database) => {\n await validateBidirectionalRelations(db);\n};\n"],"names":["validateRelations","db","validateBidirectionalRelations"],"mappings":";;;;AAIA;;;IAIaA,MAAAA,iBAAAA,GAAoB,OAAOC,EAAAA,GAAAA;AACtC,IAAA,MAAMC,4CAA+BD,CAAAA,EAAAA,CAAAA;AACvC;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { validateBidirectionalRelations } from './bidirectional.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validates if relations data and tables are in a valid state before
|
|
5
|
+
* starting the server.
|
|
6
|
+
*/ const validateRelations = async (db)=>{
|
|
7
|
+
await validateBidirectionalRelations(db);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { validateRelations };
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/validations/relations/index.ts"],"sourcesContent":["import { validateBidirectionalRelations } from './bidirectional';\n\nimport type { Database } from '../..';\n\n/**\n * Validates if relations data and tables are in a valid state before\n * starting the server.\n */\nexport const validateRelations = async (db: Database) => {\n await validateBidirectionalRelations(db);\n};\n"],"names":["validateRelations","db","validateBidirectionalRelations"],"mappings":";;AAIA;;;IAIaA,MAAAA,iBAAAA,GAAoB,OAAOC,EAAAA,GAAAA;AACtC,IAAA,MAAMC,8BAA+BD,CAAAA,EAAAA,CAAAA;AACvC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/database",
|
|
3
|
-
"version": "5.12.
|
|
3
|
+
"version": "5.12.2",
|
|
4
4
|
"description": "Strapi's database layer",
|
|
5
5
|
"homepage": "https://strapi.io",
|
|
6
6
|
"bugs": {
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@paralleldrive/cuid2": "2.2.2",
|
|
45
|
-
"@strapi/utils": "5.12.
|
|
45
|
+
"@strapi/utils": "5.12.2",
|
|
46
46
|
"ajv": "8.16.0",
|
|
47
47
|
"date-fns": "2.30.0",
|
|
48
48
|
"debug": "4.3.4",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/fs-extra": "11.0.4",
|
|
57
|
-
"eslint-config-custom": "5.12.
|
|
58
|
-
"tsconfig": "5.12.
|
|
57
|
+
"eslint-config-custom": "5.12.2",
|
|
58
|
+
"tsconfig": "5.12.2"
|
|
59
59
|
},
|
|
60
60
|
"engines": {
|
|
61
61
|
"node": ">=18.0.0 <=22.x.x",
|