@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,61 @@
|
|
|
1
|
+
import { Umzug } from 'umzug';
|
|
2
|
+
import { wrapTransaction } from './common.mjs';
|
|
3
|
+
import { internalMigrations } from './internal-migrations/index.mjs';
|
|
4
|
+
import { createStorage } from './storage.mjs';
|
|
5
|
+
import { transformLogMessage } from './logger.mjs';
|
|
6
|
+
|
|
7
|
+
const createInternalMigrationProvider = (db)=>{
|
|
8
|
+
const context = {
|
|
9
|
+
db
|
|
10
|
+
};
|
|
11
|
+
const migrations = [
|
|
12
|
+
...internalMigrations
|
|
13
|
+
];
|
|
14
|
+
const umzugProvider = new Umzug({
|
|
15
|
+
storage: createStorage({
|
|
16
|
+
db,
|
|
17
|
+
tableName: 'strapi_migrations_internal'
|
|
18
|
+
}),
|
|
19
|
+
logger: {
|
|
20
|
+
info (message) {
|
|
21
|
+
// NOTE: only log internal migration in debug mode
|
|
22
|
+
db.logger.debug(transformLogMessage('info', message));
|
|
23
|
+
},
|
|
24
|
+
warn (message) {
|
|
25
|
+
db.logger.warn(transformLogMessage('warn', message));
|
|
26
|
+
},
|
|
27
|
+
error (message) {
|
|
28
|
+
db.logger.error(transformLogMessage('error', message));
|
|
29
|
+
},
|
|
30
|
+
debug (message) {
|
|
31
|
+
db.logger.debug(transformLogMessage('debug', message));
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
context,
|
|
35
|
+
migrations: ()=>migrations.map((migration)=>{
|
|
36
|
+
return {
|
|
37
|
+
name: migration.name,
|
|
38
|
+
up: wrapTransaction(context.db)(migration.up),
|
|
39
|
+
down: wrapTransaction(context.db)(migration.down)
|
|
40
|
+
};
|
|
41
|
+
})
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
async register (migration) {
|
|
45
|
+
migrations.push(migration);
|
|
46
|
+
},
|
|
47
|
+
async shouldRun () {
|
|
48
|
+
const pendingMigrations = await umzugProvider.pending();
|
|
49
|
+
return pendingMigrations.length > 0;
|
|
50
|
+
},
|
|
51
|
+
async up () {
|
|
52
|
+
await umzugProvider.up();
|
|
53
|
+
},
|
|
54
|
+
async down () {
|
|
55
|
+
await umzugProvider.down();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export { createInternalMigrationProvider };
|
|
61
|
+
//# sourceMappingURL=internal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.mjs","sources":["../../src/migrations/internal.ts"],"sourcesContent":["import { Umzug } from 'umzug';\n\nimport { wrapTransaction } from './common';\nimport { internalMigrations } from './internal-migrations';\nimport { createStorage } from './storage';\nimport { transformLogMessage } from './logger';\n\nimport type { InternalMigrationProvider, Migration } from './common';\nimport type { Database } from '..';\n\nexport const createInternalMigrationProvider = (db: Database): InternalMigrationProvider => {\n const context = { db };\n const migrations: Migration[] = [...internalMigrations];\n\n const umzugProvider = new Umzug({\n storage: createStorage({ db, tableName: 'strapi_migrations_internal' }),\n logger: {\n info(message) {\n // NOTE: only log internal migration in debug mode\n db.logger.debug(transformLogMessage('info', message));\n },\n warn(message) {\n db.logger.warn(transformLogMessage('warn', message));\n },\n error(message) {\n db.logger.error(transformLogMessage('error', message));\n },\n debug(message) {\n db.logger.debug(transformLogMessage('debug', message));\n },\n },\n context,\n migrations: () =>\n migrations.map((migration) => {\n return {\n name: migration.name,\n up: wrapTransaction(context.db)(migration.up),\n down: wrapTransaction(context.db)(migration.down),\n };\n }),\n });\n\n return {\n async register(migration: Migration) {\n migrations.push(migration);\n },\n async shouldRun() {\n const pendingMigrations = await umzugProvider.pending();\n return pendingMigrations.length > 0;\n },\n async up() {\n await umzugProvider.up();\n },\n async down() {\n await umzugProvider.down();\n },\n };\n};\n"],"names":["createInternalMigrationProvider","db","context","migrations","internalMigrations","umzugProvider","Umzug","storage","createStorage","tableName","logger","info","message","debug","transformLogMessage","warn","error","map","migration","name","up","wrapTransaction","down","register","push","shouldRun","pendingMigrations","pending","length"],"mappings":";;;;;;AAUO,MAAMA,kCAAkC,CAACC,EAAAA,GAAAA;AAC9C,IAAA,MAAMC,OAAU,GAAA;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAA0B,GAAA;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;IAEvD,MAAMC,aAAAA,GAAgB,IAAIC,KAAM,CAAA;AAC9BC,QAAAA,OAAAA,EAASC,aAAc,CAAA;AAAEP,YAAAA,EAAAA;YAAIQ,SAAW,EAAA;AAA6B,SAAA,CAAA;QACrEC,MAAQ,EAAA;AACNC,YAAAA,IAAAA,CAAAA,CAAKC,OAAO,EAAA;;AAEVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,oBAAoB,MAAQF,EAAAA,OAAAA,CAAAA,CAAAA;AAC9C,aAAA;AACAG,YAAAA,IAAAA,CAAAA,CAAKH,OAAO,EAAA;AACVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACK,IAAI,CAACD,oBAAoB,MAAQF,EAAAA,OAAAA,CAAAA,CAAAA;AAC7C,aAAA;AACAI,YAAAA,KAAAA,CAAAA,CAAMJ,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACM,KAAK,CAACF,oBAAoB,OAASF,EAAAA,OAAAA,CAAAA,CAAAA;AAC/C,aAAA;AACAC,YAAAA,KAAAA,CAAAA,CAAMD,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,oBAAoB,OAASF,EAAAA,OAAAA,CAAAA,CAAAA;AAC/C;AACF,SAAA;AACAV,QAAAA,OAAAA;AACAC,QAAAA,UAAAA,EAAY,IACVA,UAAAA,CAAWc,GAAG,CAAC,CAACC,SAAAA,GAAAA;gBACd,OAAO;AACLC,oBAAAA,IAAAA,EAAMD,UAAUC,IAAI;AACpBC,oBAAAA,EAAAA,EAAIC,eAAgBnB,CAAAA,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUE,EAAE,CAAA;AAC5CE,oBAAAA,IAAAA,EAAMD,eAAgBnB,CAAAA,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUI,IAAI;AAClD,iBAAA;AACF,aAAA;AACJ,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,UAASL,SAAoB,EAAA;AACjCf,YAAAA,UAAAA,CAAWqB,IAAI,CAACN,SAAAA,CAAAA;AAClB,SAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMrB,aAAAA,CAAcsB,OAAO,EAAA;YACrD,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,SAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMf,cAAce,EAAE,EAAA;AACxB,SAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMjB,cAAciB,IAAI,EAAA;AAC1B;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const transformLogMessage = (level, message)=>{
|
|
4
|
+
if (typeof message === 'string') {
|
|
5
|
+
return {
|
|
6
|
+
level,
|
|
7
|
+
message
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
if (typeof message === 'object' && message !== null) {
|
|
11
|
+
if ('event' in message && 'name' in message) {
|
|
12
|
+
return {
|
|
13
|
+
level,
|
|
14
|
+
message: `[internal migration]: ${message.event} ${message?.name}`,
|
|
15
|
+
timestamp: Date.now()
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// NOTE: the message typing are too loose so in practice we should never arrive here.
|
|
20
|
+
return '';
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.transformLogMessage = transformLogMessage;
|
|
24
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sources":["../../src/migrations/logger.ts"],"sourcesContent":["export const transformLogMessage = (level: string, message: unknown) => {\n if (typeof message === 'string') {\n return { level, message };\n }\n\n if (typeof message === 'object' && message !== null) {\n if ('event' in message && 'name' in message) {\n return {\n level,\n message: `[internal migration]: ${message.event} ${message?.name}`,\n timestamp: Date.now(),\n };\n }\n }\n\n // NOTE: the message typing are too loose so in practice we should never arrive here.\n return '';\n};\n"],"names":["transformLogMessage","level","message","event","name","timestamp","Date","now"],"mappings":";;AAAO,MAAMA,mBAAsB,GAAA,CAACC,KAAeC,EAAAA,OAAAA,GAAAA;IACjD,IAAI,OAAOA,YAAY,QAAU,EAAA;QAC/B,OAAO;AAAED,YAAAA,KAAAA;AAAOC,YAAAA;AAAQ,SAAA;AAC1B;AAEA,IAAA,IAAI,OAAOA,OAAAA,KAAY,QAAYA,IAAAA,OAAAA,KAAY,IAAM,EAAA;QACnD,IAAI,OAAA,IAAWA,OAAW,IAAA,MAAA,IAAUA,OAAS,EAAA;YAC3C,OAAO;AACLD,gBAAAA,KAAAA;gBACAC,OAAS,EAAA,CAAC,sBAAsB,EAAEA,OAAQC,CAAAA,KAAK,CAAC,CAAC,EAAED,OAASE,EAAAA,IAAAA,CAAK,CAAC;AAClEC,gBAAAA,SAAAA,EAAWC,KAAKC,GAAG;AACrB,aAAA;AACF;AACF;;IAGA,OAAO,EAAA;AACT;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const transformLogMessage = (level, message)=>{
|
|
2
|
+
if (typeof message === 'string') {
|
|
3
|
+
return {
|
|
4
|
+
level,
|
|
5
|
+
message
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
if (typeof message === 'object' && message !== null) {
|
|
9
|
+
if ('event' in message && 'name' in message) {
|
|
10
|
+
return {
|
|
11
|
+
level,
|
|
12
|
+
message: `[internal migration]: ${message.event} ${message?.name}`,
|
|
13
|
+
timestamp: Date.now()
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// NOTE: the message typing are too loose so in practice we should never arrive here.
|
|
18
|
+
return '';
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export { transformLogMessage };
|
|
22
|
+
//# sourceMappingURL=logger.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.mjs","sources":["../../src/migrations/logger.ts"],"sourcesContent":["export const transformLogMessage = (level: string, message: unknown) => {\n if (typeof message === 'string') {\n return { level, message };\n }\n\n if (typeof message === 'object' && message !== null) {\n if ('event' in message && 'name' in message) {\n return {\n level,\n message: `[internal migration]: ${message.event} ${message?.name}`,\n timestamp: Date.now(),\n };\n }\n }\n\n // NOTE: the message typing are too loose so in practice we should never arrive here.\n return '';\n};\n"],"names":["transformLogMessage","level","message","event","name","timestamp","Date","now"],"mappings":"AAAO,MAAMA,mBAAsB,GAAA,CAACC,KAAeC,EAAAA,OAAAA,GAAAA;IACjD,IAAI,OAAOA,YAAY,QAAU,EAAA;QAC/B,OAAO;AAAED,YAAAA,KAAAA;AAAOC,YAAAA;AAAQ,SAAA;AAC1B;AAEA,IAAA,IAAI,OAAOA,OAAAA,KAAY,QAAYA,IAAAA,OAAAA,KAAY,IAAM,EAAA;QACnD,IAAI,OAAA,IAAWA,OAAW,IAAA,MAAA,IAAUA,OAAS,EAAA;YAC3C,OAAO;AACLD,gBAAAA,KAAAA;gBACAC,OAAS,EAAA,CAAC,sBAAsB,EAAEA,OAAQC,CAAAA,KAAK,CAAC,CAAC,EAAED,OAASE,EAAAA,IAAAA,CAAK,CAAC;AAClEC,gBAAAA,SAAAA,EAAWC,KAAKC,GAAG;AACrB,aAAA;AACF;AACF;;IAGA,OAAO,EAAA;AACT;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const createStorage = (opts)=>{
|
|
4
|
+
const { db, tableName } = opts;
|
|
5
|
+
const hasMigrationTable = ()=>db.getSchemaConnection().hasTable(tableName);
|
|
6
|
+
const createMigrationTable = ()=>{
|
|
7
|
+
return db.getSchemaConnection().createTable(tableName, (table)=>{
|
|
8
|
+
table.increments('id');
|
|
9
|
+
table.string('name');
|
|
10
|
+
table.datetime('time', {
|
|
11
|
+
useTz: false
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
async logMigration ({ name }) {
|
|
17
|
+
await db.getConnection().insert({
|
|
18
|
+
name,
|
|
19
|
+
time: new Date()
|
|
20
|
+
}).into(tableName);
|
|
21
|
+
},
|
|
22
|
+
async unlogMigration ({ name }) {
|
|
23
|
+
await db.getConnection(tableName).del().where({
|
|
24
|
+
name
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
async executed () {
|
|
28
|
+
if (!await hasMigrationTable()) {
|
|
29
|
+
await createMigrationTable();
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const logs = await db.getConnection(tableName).select().from(tableName).orderBy('time');
|
|
33
|
+
return logs.map((log)=>log.name);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.createStorage = createStorage;
|
|
39
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sources":["../../src/migrations/storage.ts"],"sourcesContent":["import type { Database } from '..';\n\nexport interface Options {\n db: Database;\n tableName: string;\n}\n\nexport const createStorage = (opts: Options) => {\n const { db, tableName } = opts;\n\n const hasMigrationTable = () => db.getSchemaConnection().hasTable(tableName);\n\n const createMigrationTable = () => {\n return db.getSchemaConnection().createTable(tableName, (table) => {\n table.increments('id');\n table.string('name');\n table.datetime('time', { useTz: false });\n });\n };\n\n return {\n async logMigration({ name }: { name: string }) {\n await db\n .getConnection()\n .insert({\n name,\n time: new Date(),\n })\n .into(tableName);\n },\n\n async unlogMigration({ name }: { name: string }) {\n await db.getConnection(tableName).del().where({ name });\n },\n\n async executed() {\n if (!(await hasMigrationTable())) {\n await createMigrationTable();\n return [];\n }\n\n const logs = await db.getConnection(tableName).select().from(tableName).orderBy('time');\n\n return logs.map((log: { name: string }) => log.name);\n },\n };\n};\n"],"names":["createStorage","opts","db","tableName","hasMigrationTable","getSchemaConnection","hasTable","createMigrationTable","createTable","table","increments","string","datetime","useTz","logMigration","name","getConnection","insert","time","Date","into","unlogMigration","del","where","executed","logs","select","from","orderBy","map","log"],"mappings":";;AAOO,MAAMA,gBAAgB,CAACC,IAAAA,GAAAA;AAC5B,IAAA,MAAM,EAAEC,EAAE,EAAEC,SAAS,EAAE,GAAGF,IAAAA;AAE1B,IAAA,MAAMG,oBAAoB,IAAMF,EAAAA,CAAGG,mBAAmB,EAAA,CAAGC,QAAQ,CAACH,SAAAA,CAAAA;AAElE,IAAA,MAAMI,oBAAuB,GAAA,IAAA;AAC3B,QAAA,OAAOL,GAAGG,mBAAmB,EAAA,CAAGG,WAAW,CAACL,WAAW,CAACM,KAAAA,GAAAA;AACtDA,YAAAA,KAAAA,CAAMC,UAAU,CAAC,IAAA,CAAA;AACjBD,YAAAA,KAAAA,CAAME,MAAM,CAAC,MAAA,CAAA;YACbF,KAAMG,CAAAA,QAAQ,CAAC,MAAQ,EAAA;gBAAEC,KAAO,EAAA;AAAM,aAAA,CAAA;AACxC,SAAA,CAAA;AACF,KAAA;IAEA,OAAO;QACL,MAAMC,YAAAA,CAAAA,CAAa,EAAEC,IAAI,EAAoB,EAAA;AAC3C,YAAA,MAAMb,EACHc,CAAAA,aAAa,EACbC,CAAAA,MAAM,CAAC;AACNF,gBAAAA,IAAAA;AACAG,gBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,aAAA,CAAA,CACCC,IAAI,CAACjB,SAAAA,CAAAA;AACV,SAAA;QAEA,MAAMkB,cAAAA,CAAAA,CAAe,EAAEN,IAAI,EAAoB,EAAA;AAC7C,YAAA,MAAMb,GAAGc,aAAa,CAACb,WAAWmB,GAAG,EAAA,CAAGC,KAAK,CAAC;AAAER,gBAAAA;AAAK,aAAA,CAAA;AACvD,SAAA;QAEA,MAAMS,QAAAA,CAAAA,GAAAA;YACJ,IAAI,CAAE,MAAMpB,iBAAsB,EAAA,EAAA;gBAChC,MAAMG,oBAAAA,EAAAA;AACN,gBAAA,OAAO,EAAE;AACX;AAEA,YAAA,MAAMkB,IAAO,GAAA,MAAMvB,EAAGc,CAAAA,aAAa,CAACb,SAAAA,CAAAA,CAAWuB,MAAM,EAAA,CAAGC,IAAI,CAACxB,SAAWyB,CAAAA,CAAAA,OAAO,CAAC,MAAA,CAAA;AAEhF,YAAA,OAAOH,KAAKI,GAAG,CAAC,CAACC,GAAAA,GAA0BA,IAAIf,IAAI,CAAA;AACrD;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const createStorage = (opts)=>{
|
|
2
|
+
const { db, tableName } = opts;
|
|
3
|
+
const hasMigrationTable = ()=>db.getSchemaConnection().hasTable(tableName);
|
|
4
|
+
const createMigrationTable = ()=>{
|
|
5
|
+
return db.getSchemaConnection().createTable(tableName, (table)=>{
|
|
6
|
+
table.increments('id');
|
|
7
|
+
table.string('name');
|
|
8
|
+
table.datetime('time', {
|
|
9
|
+
useTz: false
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
async logMigration ({ name }) {
|
|
15
|
+
await db.getConnection().insert({
|
|
16
|
+
name,
|
|
17
|
+
time: new Date()
|
|
18
|
+
}).into(tableName);
|
|
19
|
+
},
|
|
20
|
+
async unlogMigration ({ name }) {
|
|
21
|
+
await db.getConnection(tableName).del().where({
|
|
22
|
+
name
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
async executed () {
|
|
26
|
+
if (!await hasMigrationTable()) {
|
|
27
|
+
await createMigrationTable();
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const logs = await db.getConnection(tableName).select().from(tableName).orderBy('time');
|
|
31
|
+
return logs.map((log)=>log.name);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { createStorage };
|
|
37
|
+
//# sourceMappingURL=storage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.mjs","sources":["../../src/migrations/storage.ts"],"sourcesContent":["import type { Database } from '..';\n\nexport interface Options {\n db: Database;\n tableName: string;\n}\n\nexport const createStorage = (opts: Options) => {\n const { db, tableName } = opts;\n\n const hasMigrationTable = () => db.getSchemaConnection().hasTable(tableName);\n\n const createMigrationTable = () => {\n return db.getSchemaConnection().createTable(tableName, (table) => {\n table.increments('id');\n table.string('name');\n table.datetime('time', { useTz: false });\n });\n };\n\n return {\n async logMigration({ name }: { name: string }) {\n await db\n .getConnection()\n .insert({\n name,\n time: new Date(),\n })\n .into(tableName);\n },\n\n async unlogMigration({ name }: { name: string }) {\n await db.getConnection(tableName).del().where({ name });\n },\n\n async executed() {\n if (!(await hasMigrationTable())) {\n await createMigrationTable();\n return [];\n }\n\n const logs = await db.getConnection(tableName).select().from(tableName).orderBy('time');\n\n return logs.map((log: { name: string }) => log.name);\n },\n };\n};\n"],"names":["createStorage","opts","db","tableName","hasMigrationTable","getSchemaConnection","hasTable","createMigrationTable","createTable","table","increments","string","datetime","useTz","logMigration","name","getConnection","insert","time","Date","into","unlogMigration","del","where","executed","logs","select","from","orderBy","map","log"],"mappings":"AAOO,MAAMA,gBAAgB,CAACC,IAAAA,GAAAA;AAC5B,IAAA,MAAM,EAAEC,EAAE,EAAEC,SAAS,EAAE,GAAGF,IAAAA;AAE1B,IAAA,MAAMG,oBAAoB,IAAMF,EAAAA,CAAGG,mBAAmB,EAAA,CAAGC,QAAQ,CAACH,SAAAA,CAAAA;AAElE,IAAA,MAAMI,oBAAuB,GAAA,IAAA;AAC3B,QAAA,OAAOL,GAAGG,mBAAmB,EAAA,CAAGG,WAAW,CAACL,WAAW,CAACM,KAAAA,GAAAA;AACtDA,YAAAA,KAAAA,CAAMC,UAAU,CAAC,IAAA,CAAA;AACjBD,YAAAA,KAAAA,CAAME,MAAM,CAAC,MAAA,CAAA;YACbF,KAAMG,CAAAA,QAAQ,CAAC,MAAQ,EAAA;gBAAEC,KAAO,EAAA;AAAM,aAAA,CAAA;AACxC,SAAA,CAAA;AACF,KAAA;IAEA,OAAO;QACL,MAAMC,YAAAA,CAAAA,CAAa,EAAEC,IAAI,EAAoB,EAAA;AAC3C,YAAA,MAAMb,EACHc,CAAAA,aAAa,EACbC,CAAAA,MAAM,CAAC;AACNF,gBAAAA,IAAAA;AACAG,gBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,aAAA,CAAA,CACCC,IAAI,CAACjB,SAAAA,CAAAA;AACV,SAAA;QAEA,MAAMkB,cAAAA,CAAAA,CAAe,EAAEN,IAAI,EAAoB,EAAA;AAC7C,YAAA,MAAMb,GAAGc,aAAa,CAACb,WAAWmB,GAAG,EAAA,CAAGC,KAAK,CAAC;AAAER,gBAAAA;AAAK,aAAA,CAAA;AACvD,SAAA;QAEA,MAAMS,QAAAA,CAAAA,GAAAA;YACJ,IAAI,CAAE,MAAMpB,iBAAsB,EAAA,EAAA;gBAChC,MAAMG,oBAAAA,EAAAA;AACN,gBAAA,OAAO,EAAE;AACX;AAEA,YAAA,MAAMkB,IAAO,GAAA,MAAMvB,EAAGc,CAAAA,aAAa,CAACb,SAAAA,CAAAA,CAAWuB,MAAM,EAAA,CAAGC,IAAI,CAACxB,SAAWyB,CAAAA,CAAAA,OAAO,CAAC,MAAA,CAAA;AAEhF,YAAA,OAAOH,KAAKI,GAAG,CAAC,CAACC,GAAAA,GAA0BA,IAAIf,IAAI,CAAA;AACrD;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fse = require('fs-extra');
|
|
4
|
+
var umzug = require('umzug');
|
|
5
|
+
var storage = require('./storage.js');
|
|
6
|
+
var common = require('./common.js');
|
|
7
|
+
var logger = require('./logger.js');
|
|
8
|
+
|
|
9
|
+
// TODO: check multiple commands in one sql statement
|
|
10
|
+
const migrationResolver = ({ name, path, context })=>{
|
|
11
|
+
const { db } = context;
|
|
12
|
+
if (!path) {
|
|
13
|
+
throw new Error(`Migration ${name} has no path`);
|
|
14
|
+
}
|
|
15
|
+
// if sql file run with knex raw
|
|
16
|
+
if (path.match(/\.sql$/)) {
|
|
17
|
+
const sql = fse.readFileSync(path, 'utf8');
|
|
18
|
+
return {
|
|
19
|
+
name,
|
|
20
|
+
up: common.wrapTransaction(db)((knex)=>knex.raw(sql)),
|
|
21
|
+
async down () {
|
|
22
|
+
throw new Error('Down migration is not supported for sql files');
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// NOTE: we can add some ts register if we want to handle ts migration files at some point
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
28
|
+
const migration = require(path);
|
|
29
|
+
return {
|
|
30
|
+
name,
|
|
31
|
+
up: common.wrapTransaction(db)(migration.up),
|
|
32
|
+
down: common.wrapTransaction(db)(migration.down)
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
const createUserMigrationProvider = (db)=>{
|
|
36
|
+
const dir = db.config.settings.migrations.dir;
|
|
37
|
+
fse.ensureDirSync(dir);
|
|
38
|
+
const context = {
|
|
39
|
+
db
|
|
40
|
+
};
|
|
41
|
+
const umzugProvider = new umzug.Umzug({
|
|
42
|
+
storage: storage.createStorage({
|
|
43
|
+
db,
|
|
44
|
+
tableName: 'strapi_migrations'
|
|
45
|
+
}),
|
|
46
|
+
logger: {
|
|
47
|
+
info (message) {
|
|
48
|
+
// NOTE: only log internal migration in debug mode
|
|
49
|
+
db.logger.info(logger.transformLogMessage('info', message));
|
|
50
|
+
},
|
|
51
|
+
warn (message) {
|
|
52
|
+
db.logger.warn(logger.transformLogMessage('warn', message));
|
|
53
|
+
},
|
|
54
|
+
error (message) {
|
|
55
|
+
db.logger.error(logger.transformLogMessage('error', message));
|
|
56
|
+
},
|
|
57
|
+
debug (message) {
|
|
58
|
+
db.logger.debug(logger.transformLogMessage('debug', message));
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
context,
|
|
62
|
+
migrations: {
|
|
63
|
+
glob: [
|
|
64
|
+
'*.{js,sql}',
|
|
65
|
+
{
|
|
66
|
+
cwd: dir
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
resolve: migrationResolver
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
async shouldRun () {
|
|
74
|
+
const pendingMigrations = await umzugProvider.pending();
|
|
75
|
+
return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;
|
|
76
|
+
},
|
|
77
|
+
async up () {
|
|
78
|
+
await umzugProvider.up();
|
|
79
|
+
},
|
|
80
|
+
async down () {
|
|
81
|
+
await umzugProvider.down();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.createUserMigrationProvider = createUserMigrationProvider;
|
|
87
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sources":["../../src/migrations/users.ts"],"sourcesContent":["import fse from 'fs-extra';\nimport { Umzug } from 'umzug';\n\nimport { createStorage } from './storage';\nimport { wrapTransaction } from './common';\nimport { transformLogMessage } from './logger';\n\nimport type { MigrationResolver, UserMigrationProvider } from './common';\nimport type { Database } from '..';\n\n// TODO: check multiple commands in one sql statement\nconst migrationResolver: MigrationResolver = ({ name, path, context }) => {\n const { db } = context;\n\n if (!path) {\n throw new Error(`Migration ${name} has no path`);\n }\n\n // if sql file run with knex raw\n if (path.match(/\\.sql$/)) {\n const sql = fse.readFileSync(path, 'utf8');\n\n return {\n name,\n up: wrapTransaction(db)((knex) => knex.raw(sql)),\n async down() {\n throw new Error('Down migration is not supported for sql files');\n },\n };\n }\n\n // NOTE: we can add some ts register if we want to handle ts migration files at some point\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const migration = require(path);\n return {\n name,\n up: wrapTransaction(db)(migration.up),\n down: wrapTransaction(db)(migration.down),\n };\n};\n\nexport const createUserMigrationProvider = (db: Database): UserMigrationProvider => {\n const dir = db.config.settings.migrations.dir;\n\n fse.ensureDirSync(dir);\n\n const context = { db };\n\n const umzugProvider = new Umzug({\n storage: createStorage({ db, tableName: 'strapi_migrations' }),\n logger: {\n info(message) {\n // NOTE: only log internal migration in debug mode\n db.logger.info(transformLogMessage('info', message));\n },\n warn(message) {\n db.logger.warn(transformLogMessage('warn', message));\n },\n error(message) {\n db.logger.error(transformLogMessage('error', message));\n },\n debug(message) {\n db.logger.debug(transformLogMessage('debug', message));\n },\n },\n context,\n migrations: {\n glob: ['*.{js,sql}', { cwd: dir }],\n resolve: migrationResolver,\n },\n });\n\n return {\n async shouldRun() {\n const pendingMigrations = await umzugProvider.pending();\n return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;\n },\n async up() {\n await umzugProvider.up();\n },\n async down() {\n await umzugProvider.down();\n },\n };\n};\n"],"names":["migrationResolver","name","path","context","db","Error","match","sql","fse","readFileSync","up","wrapTransaction","knex","raw","down","migration","require","createUserMigrationProvider","dir","config","settings","migrations","ensureDirSync","umzugProvider","Umzug","storage","createStorage","tableName","logger","info","message","transformLogMessage","warn","error","debug","glob","cwd","resolve","shouldRun","pendingMigrations","pending","length","runMigrations"],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import fse from 'fs-extra';
|
|
2
|
+
import { Umzug } from 'umzug';
|
|
3
|
+
import { createStorage } from './storage.mjs';
|
|
4
|
+
import { wrapTransaction } from './common.mjs';
|
|
5
|
+
import { transformLogMessage } from './logger.mjs';
|
|
6
|
+
|
|
7
|
+
// TODO: check multiple commands in one sql statement
|
|
8
|
+
const migrationResolver = ({ name, path, context })=>{
|
|
9
|
+
const { db } = context;
|
|
10
|
+
if (!path) {
|
|
11
|
+
throw new Error(`Migration ${name} has no path`);
|
|
12
|
+
}
|
|
13
|
+
// if sql file run with knex raw
|
|
14
|
+
if (path.match(/\.sql$/)) {
|
|
15
|
+
const sql = fse.readFileSync(path, 'utf8');
|
|
16
|
+
return {
|
|
17
|
+
name,
|
|
18
|
+
up: wrapTransaction(db)((knex)=>knex.raw(sql)),
|
|
19
|
+
async down () {
|
|
20
|
+
throw new Error('Down migration is not supported for sql files');
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// NOTE: we can add some ts register if we want to handle ts migration files at some point
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
26
|
+
const migration = require(path);
|
|
27
|
+
return {
|
|
28
|
+
name,
|
|
29
|
+
up: wrapTransaction(db)(migration.up),
|
|
30
|
+
down: wrapTransaction(db)(migration.down)
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
const createUserMigrationProvider = (db)=>{
|
|
34
|
+
const dir = db.config.settings.migrations.dir;
|
|
35
|
+
fse.ensureDirSync(dir);
|
|
36
|
+
const context = {
|
|
37
|
+
db
|
|
38
|
+
};
|
|
39
|
+
const umzugProvider = new Umzug({
|
|
40
|
+
storage: createStorage({
|
|
41
|
+
db,
|
|
42
|
+
tableName: 'strapi_migrations'
|
|
43
|
+
}),
|
|
44
|
+
logger: {
|
|
45
|
+
info (message) {
|
|
46
|
+
// NOTE: only log internal migration in debug mode
|
|
47
|
+
db.logger.info(transformLogMessage('info', message));
|
|
48
|
+
},
|
|
49
|
+
warn (message) {
|
|
50
|
+
db.logger.warn(transformLogMessage('warn', message));
|
|
51
|
+
},
|
|
52
|
+
error (message) {
|
|
53
|
+
db.logger.error(transformLogMessage('error', message));
|
|
54
|
+
},
|
|
55
|
+
debug (message) {
|
|
56
|
+
db.logger.debug(transformLogMessage('debug', message));
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
context,
|
|
60
|
+
migrations: {
|
|
61
|
+
glob: [
|
|
62
|
+
'*.{js,sql}',
|
|
63
|
+
{
|
|
64
|
+
cwd: dir
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
resolve: migrationResolver
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
async shouldRun () {
|
|
72
|
+
const pendingMigrations = await umzugProvider.pending();
|
|
73
|
+
return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;
|
|
74
|
+
},
|
|
75
|
+
async up () {
|
|
76
|
+
await umzugProvider.up();
|
|
77
|
+
},
|
|
78
|
+
async down () {
|
|
79
|
+
await umzugProvider.down();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export { createUserMigrationProvider };
|
|
85
|
+
//# sourceMappingURL=users.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.mjs","sources":["../../src/migrations/users.ts"],"sourcesContent":["import fse from 'fs-extra';\nimport { Umzug } from 'umzug';\n\nimport { createStorage } from './storage';\nimport { wrapTransaction } from './common';\nimport { transformLogMessage } from './logger';\n\nimport type { MigrationResolver, UserMigrationProvider } from './common';\nimport type { Database } from '..';\n\n// TODO: check multiple commands in one sql statement\nconst migrationResolver: MigrationResolver = ({ name, path, context }) => {\n const { db } = context;\n\n if (!path) {\n throw new Error(`Migration ${name} has no path`);\n }\n\n // if sql file run with knex raw\n if (path.match(/\\.sql$/)) {\n const sql = fse.readFileSync(path, 'utf8');\n\n return {\n name,\n up: wrapTransaction(db)((knex) => knex.raw(sql)),\n async down() {\n throw new Error('Down migration is not supported for sql files');\n },\n };\n }\n\n // NOTE: we can add some ts register if we want to handle ts migration files at some point\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const migration = require(path);\n return {\n name,\n up: wrapTransaction(db)(migration.up),\n down: wrapTransaction(db)(migration.down),\n };\n};\n\nexport const createUserMigrationProvider = (db: Database): UserMigrationProvider => {\n const dir = db.config.settings.migrations.dir;\n\n fse.ensureDirSync(dir);\n\n const context = { db };\n\n const umzugProvider = new Umzug({\n storage: createStorage({ db, tableName: 'strapi_migrations' }),\n logger: {\n info(message) {\n // NOTE: only log internal migration in debug mode\n db.logger.info(transformLogMessage('info', message));\n },\n warn(message) {\n db.logger.warn(transformLogMessage('warn', message));\n },\n error(message) {\n db.logger.error(transformLogMessage('error', message));\n },\n debug(message) {\n db.logger.debug(transformLogMessage('debug', message));\n },\n },\n context,\n migrations: {\n glob: ['*.{js,sql}', { cwd: dir }],\n resolve: migrationResolver,\n },\n });\n\n return {\n async shouldRun() {\n const pendingMigrations = await umzugProvider.pending();\n return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;\n },\n async up() {\n await umzugProvider.up();\n },\n async down() {\n await umzugProvider.down();\n },\n };\n};\n"],"names":["migrationResolver","name","path","context","db","Error","match","sql","fse","readFileSync","up","wrapTransaction","knex","raw","down","migration","require","createUserMigrationProvider","dir","config","settings","migrations","ensureDirSync","umzugProvider","Umzug","storage","createStorage","tableName","logger","info","message","transformLogMessage","warn","error","debug","glob","cwd","resolve","shouldRun","pendingMigrations","pending","length","runMigrations"],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const createPivotJoin = (ctx, { alias, refAlias, joinTable, targetMeta })=>{
|
|
4
|
+
const { qb } = ctx;
|
|
5
|
+
const joinAlias = qb.getAlias();
|
|
6
|
+
qb.join({
|
|
7
|
+
alias: joinAlias,
|
|
8
|
+
referencedTable: joinTable.name,
|
|
9
|
+
referencedColumn: joinTable.joinColumn.name,
|
|
10
|
+
rootColumn: joinTable.joinColumn.referencedColumn,
|
|
11
|
+
rootTable: alias,
|
|
12
|
+
on: joinTable.on
|
|
13
|
+
});
|
|
14
|
+
const subAlias = refAlias || qb.getAlias();
|
|
15
|
+
qb.join({
|
|
16
|
+
alias: subAlias,
|
|
17
|
+
referencedTable: targetMeta.tableName,
|
|
18
|
+
referencedColumn: joinTable.inverseJoinColumn.referencedColumn,
|
|
19
|
+
rootColumn: joinTable.inverseJoinColumn.name,
|
|
20
|
+
rootTable: joinAlias
|
|
21
|
+
});
|
|
22
|
+
return subAlias;
|
|
23
|
+
};
|
|
24
|
+
const createJoin = (ctx, { alias, refAlias, attributeName, attribute })=>{
|
|
25
|
+
const { db, qb, uid } = ctx;
|
|
26
|
+
if (attribute.type !== 'relation') {
|
|
27
|
+
throw new Error(`Cannot join on non relational field ${attributeName}`);
|
|
28
|
+
}
|
|
29
|
+
const targetMeta = db.metadata.get(attribute.target);
|
|
30
|
+
if ([
|
|
31
|
+
'morphOne',
|
|
32
|
+
'morphMany'
|
|
33
|
+
].includes(attribute.relation)) {
|
|
34
|
+
const targetAttribute = targetMeta.attributes[attribute.morphBy];
|
|
35
|
+
// @ts-expect-error - morphBy is not defined on the attribute
|
|
36
|
+
const { joinTable, morphColumn } = targetAttribute;
|
|
37
|
+
if (morphColumn) {
|
|
38
|
+
const subAlias = refAlias || qb.getAlias();
|
|
39
|
+
qb.join({
|
|
40
|
+
alias: subAlias,
|
|
41
|
+
referencedTable: targetMeta.tableName,
|
|
42
|
+
referencedColumn: morphColumn.idColumn.name,
|
|
43
|
+
rootColumn: morphColumn.idColumn.referencedColumn,
|
|
44
|
+
rootTable: alias,
|
|
45
|
+
on: {
|
|
46
|
+
[morphColumn.typeColumn.name]: uid,
|
|
47
|
+
...morphColumn.on
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return subAlias;
|
|
51
|
+
}
|
|
52
|
+
if (joinTable) {
|
|
53
|
+
const joinAlias = qb.getAlias();
|
|
54
|
+
qb.join({
|
|
55
|
+
alias: joinAlias,
|
|
56
|
+
referencedTable: joinTable.name,
|
|
57
|
+
referencedColumn: joinTable.morphColumn.idColumn.name,
|
|
58
|
+
rootColumn: joinTable.morphColumn.idColumn.referencedColumn,
|
|
59
|
+
rootTable: alias,
|
|
60
|
+
on: {
|
|
61
|
+
[joinTable.morphColumn.typeColumn.name]: uid,
|
|
62
|
+
field: attributeName
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const subAlias = refAlias || qb.getAlias();
|
|
66
|
+
qb.join({
|
|
67
|
+
alias: subAlias,
|
|
68
|
+
referencedTable: targetMeta.tableName,
|
|
69
|
+
referencedColumn: joinTable.joinColumn.referencedColumn,
|
|
70
|
+
rootColumn: joinTable.joinColumn.name,
|
|
71
|
+
rootTable: joinAlias
|
|
72
|
+
});
|
|
73
|
+
return subAlias;
|
|
74
|
+
}
|
|
75
|
+
return alias;
|
|
76
|
+
}
|
|
77
|
+
const { joinColumn } = attribute;
|
|
78
|
+
if (joinColumn) {
|
|
79
|
+
const subAlias = refAlias || qb.getAlias();
|
|
80
|
+
qb.join({
|
|
81
|
+
alias: subAlias,
|
|
82
|
+
referencedTable: targetMeta.tableName,
|
|
83
|
+
referencedColumn: joinColumn.referencedColumn,
|
|
84
|
+
rootColumn: joinColumn.name,
|
|
85
|
+
rootTable: alias
|
|
86
|
+
});
|
|
87
|
+
return subAlias;
|
|
88
|
+
}
|
|
89
|
+
const { joinTable } = attribute;
|
|
90
|
+
if (joinTable) {
|
|
91
|
+
return createPivotJoin(ctx, {
|
|
92
|
+
alias,
|
|
93
|
+
refAlias,
|
|
94
|
+
joinTable,
|
|
95
|
+
targetMeta
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return alias;
|
|
99
|
+
};
|
|
100
|
+
// TODO: toColumnName for orderBy & on
|
|
101
|
+
const applyJoin = (qb, join)=>{
|
|
102
|
+
const { method = 'leftJoin', alias, referencedTable, referencedColumn, rootColumn, // FIXME: qb.alias can't exist here
|
|
103
|
+
rootTable, on, orderBy } = join;
|
|
104
|
+
qb[method](`${referencedTable} as ${alias}`, (inner)=>{
|
|
105
|
+
inner.on(`${rootTable}.${rootColumn}`, `${alias}.${referencedColumn}`);
|
|
106
|
+
if (on) {
|
|
107
|
+
for (const key of Object.keys(on)){
|
|
108
|
+
inner.onVal(`${alias}.${key}`, on[key]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
if (orderBy) {
|
|
113
|
+
Object.keys(orderBy).forEach((column)=>{
|
|
114
|
+
const direction = orderBy[column];
|
|
115
|
+
qb.orderBy(`${alias}.${column}`, direction);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const applyJoins = (qb, joins)=>{
|
|
120
|
+
return joins.forEach((join)=>applyJoin(qb, join));
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
exports.applyJoin = applyJoin;
|
|
124
|
+
exports.applyJoins = applyJoins;
|
|
125
|
+
exports.createJoin = createJoin;
|
|
126
|
+
exports.createPivotJoin = createPivotJoin;
|
|
127
|
+
//# sourceMappingURL=join.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join.js","sources":["../../../src/query/helpers/join.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport type { Ctx } from '../types';\n\nexport interface Join {\n method?: 'leftJoin' | 'innerJoin';\n alias: string;\n referencedTable: string;\n referencedColumn: string;\n rootColumn: string;\n rootTable?: string;\n on?: Record<string, any>;\n orderBy?: Record<string, 'asc' | 'desc'>;\n}\n\ninterface JoinOptions {\n alias: string;\n refAlias?: string;\n attributeName: string;\n attribute: any;\n}\n\ninterface PivotJoinOptions {\n alias: string;\n refAlias?: string;\n joinTable: any;\n targetMeta: any;\n}\n\nconst createPivotJoin = (\n ctx: Ctx,\n { alias, refAlias, joinTable, targetMeta }: PivotJoinOptions\n) => {\n const { qb } = ctx;\n const joinAlias = qb.getAlias();\n qb.join({\n alias: joinAlias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.joinColumn.name,\n rootColumn: joinTable.joinColumn.referencedColumn,\n rootTable: alias,\n on: joinTable.on,\n });\n\n const subAlias = refAlias || qb.getAlias();\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootColumn: joinTable.inverseJoinColumn.name,\n rootTable: joinAlias,\n });\n\n return subAlias;\n};\n\nconst createJoin = (ctx: Ctx, { alias, refAlias, attributeName, attribute }: JoinOptions) => {\n const { db, qb, uid } = ctx;\n\n if (attribute.type !== 'relation') {\n throw new Error(`Cannot join on non relational field ${attributeName}`);\n }\n\n const targetMeta = db.metadata.get(attribute.target);\n\n if (['morphOne', 'morphMany'].includes(attribute.relation)) {\n const targetAttribute = targetMeta.attributes[attribute.morphBy];\n\n // @ts-expect-error - morphBy is not defined on the attribute\n const { joinTable, morphColumn } = targetAttribute;\n\n if (morphColumn) {\n const subAlias = refAlias || qb.getAlias();\n\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: morphColumn.idColumn.name,\n rootColumn: morphColumn.idColumn.referencedColumn,\n rootTable: alias,\n on: {\n [morphColumn.typeColumn.name]: uid,\n ...morphColumn.on,\n },\n });\n\n return subAlias;\n }\n\n if (joinTable) {\n const joinAlias = qb.getAlias();\n\n qb.join({\n alias: joinAlias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.morphColumn.idColumn.name,\n rootColumn: joinTable.morphColumn.idColumn.referencedColumn,\n rootTable: alias,\n on: {\n [joinTable.morphColumn.typeColumn.name]: uid,\n field: attributeName,\n },\n });\n\n const subAlias = refAlias || qb.getAlias();\n\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: joinTable.joinColumn.referencedColumn,\n rootColumn: joinTable.joinColumn.name,\n rootTable: joinAlias,\n });\n\n return subAlias;\n }\n\n return alias;\n }\n\n const { joinColumn } = attribute;\n\n if (joinColumn) {\n const subAlias = refAlias || qb.getAlias();\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: joinColumn.referencedColumn,\n rootColumn: joinColumn.name,\n rootTable: alias,\n });\n return subAlias;\n }\n\n const { joinTable } = attribute;\n if (joinTable) {\n return createPivotJoin(ctx, { alias, refAlias, joinTable, targetMeta });\n }\n\n return alias;\n};\n\n// TODO: toColumnName for orderBy & on\nconst applyJoin = (qb: Knex.QueryBuilder, join: Join) => {\n const {\n method = 'leftJoin',\n alias,\n referencedTable,\n referencedColumn,\n rootColumn,\n // FIXME: qb.alias can't exist here\n rootTable, // = qb.alias\n on,\n orderBy,\n } = join;\n\n qb[method](`${referencedTable} as ${alias}`, (inner) => {\n inner.on(`${rootTable}.${rootColumn}`, `${alias}.${referencedColumn}`);\n\n if (on) {\n for (const key of Object.keys(on)) {\n inner.onVal(`${alias}.${key}`, on[key]);\n }\n }\n });\n\n if (orderBy) {\n Object.keys(orderBy).forEach((column) => {\n const direction = orderBy[column];\n qb.orderBy(`${alias}.${column}`, direction);\n });\n }\n};\n\nconst applyJoins = (qb: Knex.QueryBuilder, joins: Join[]) => {\n return joins.forEach((join) => applyJoin(qb, join));\n};\n\nexport { createJoin, createPivotJoin, applyJoins, applyJoin };\n"],"names":["createPivotJoin","ctx","alias","refAlias","joinTable","targetMeta","qb","joinAlias","getAlias","join","referencedTable","name","referencedColumn","joinColumn","rootColumn","rootTable","on","subAlias","tableName","inverseJoinColumn","createJoin","attributeName","attribute","db","uid","type","Error","metadata","get","target","includes","relation","targetAttribute","attributes","morphBy","morphColumn","idColumn","typeColumn","field","applyJoin","method","orderBy","inner","key","Object","keys","onVal","forEach","column","direction","applyJoins","joins"],"mappings":"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"}
|