@strapi/database 5.46.1 → 5.47.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"5.0.0-02-document-id.js","sources":["../../../src/migrations/internal-migrations/5.0.0-02-document-id.ts"],"sourcesContent":["/**\n * NOTE: This migration avoids using the `identifiers` utility.\n * As the `5.0.0-01-convert-identifiers-long-than-max-length`\n * migration does not convert the `localizations` join tables, as they are not\n * tables that exist anymore in v5 and are not in the db metadata.\n *\n * This migration therefore relies on the fact that those tables still exist, and\n * references them directly.\n *\n * Database join table name: `categories_localizations_links`\n * Actual `identifiers` returned join table name: `categories_localizations_lnk`\n *\n */\nimport { createId } from '@paralleldrive/cuid2';\nimport { snakeCase } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\nimport type { Database } from '../..';\nimport type { Meta } from '../../metadata';\n\ninterface Params {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n}\n\nconst QUERIES = {\n async postgres(knex: Knex, params: Params) {\n const res = await knex.raw(\n `\n SELECT :tableName:.id as id, string_agg(DISTINCT :inverseJoinColumn:::character varying, ',') as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res.rows;\n },\n async mysql(knex: Knex, params: Params) {\n const [res] = await knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res;\n },\n async sqlite(knex: Knex, params: Params) {\n return knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n },\n};\n\nconst getNextIdsToCreateDocumentId = async (\n db: Database,\n knex: Knex,\n {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n }: {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n }\n): Promise<number[]> => {\n const res = await QUERIES[db.dialect.client as keyof typeof QUERIES](knex, {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n });\n\n if (res.length > 0) {\n const row = res[0];\n const otherIds = row.other_ids\n ? row.other_ids.split(',').map((v: string) => parseInt(v, 10))\n : [];\n\n return [row.id, ...otherIds];\n }\n\n return [];\n};\n\n// Migrate document ids for tables that have localizations\nconst migrateDocumentIdsWithLocalizations = async (db: Database, knex: Knex, meta: Meta) => {\n const singularName = meta.singularName.toLowerCase();\n const joinColumn = snakeCase(`${singularName}_id`);\n const inverseJoinColumn = snakeCase(`inv_${singularName}_id`);\n let ids: number[];\n\n do {\n ids = await getNextIdsToCreateDocumentId(db, knex, {\n joinColumn,\n inverseJoinColumn,\n tableName: meta.tableName,\n joinTableName: snakeCase(`${meta.tableName}_localizations_links`),\n });\n\n if (ids.length > 0) {\n await knex(meta.tableName).update({ document_id: createId() }).whereIn('id', ids);\n }\n } while (ids.length > 0);\n};\n\n// Migrate document ids for tables that don't have localizations\nconst migrationDocumentIds = async (db: Database, knex: Knex, meta: Meta) => {\n let updatedRows: number;\n\n do {\n updatedRows = await knex(meta.tableName)\n .update({ document_id: createId() })\n .whereIn(\n 'id',\n knex(meta.tableName)\n .select('id')\n .from(knex(meta.tableName).select('id').whereNull('document_id').limit(1).as('sub_query'))\n );\n } while (updatedRows > 0);\n};\n\nconst isDuplicateColumnError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n const e = error as { code?: string; errno?: number; message?: string };\n if (e.code === '42701') return true;\n if (e.errno === 1060) return true;\n if (typeof e.message === 'string' && /duplicate column/i.test(e.message)) return true;\n return false;\n};\n\nconst createDocumentIdColumn = async (knex: Knex, tableName: string) => {\n try {\n await knex.schema.alterTable(tableName, (table) => {\n table.string('document_id');\n });\n } catch (error) {\n if (!isDuplicateColumnError(error)) {\n throw error;\n }\n }\n};\n\nconst hasLocalizationsJoinTable = async (knex: Knex, tableName: string) => {\n const joinTableName = snakeCase(`${tableName}_localizations_links`);\n return knex.schema.hasTable(joinTableName);\n};\n\nexport const createdDocumentId: Migration = {\n name: '5.0.0-02-created-document-id',\n async up(knex, db) {\n // do sth\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n continue;\n }\n\n if ('documentId' in meta.attributes) {\n const hasDocumentIdColumn = await knex.schema.hasColumn(meta.tableName, 'document_id');\n\n if (!hasDocumentIdColumn) {\n await createDocumentIdColumn(knex, meta.tableName);\n }\n\n if (await hasLocalizationsJoinTable(knex, meta.tableName)) {\n await migrateDocumentIdsWithLocalizations(db, knex, meta);\n } else {\n await migrationDocumentIds(db, knex, meta);\n }\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["QUERIES","postgres","knex","params","res","raw","rows","mysql","sqlite","getNextIdsToCreateDocumentId","db","joinColumn","inverseJoinColumn","tableName","joinTableName","dialect","client","length","row","otherIds","other_ids","split","map","v","parseInt","id","migrateDocumentIdsWithLocalizations","meta","singularName","toLowerCase","snakeCase","ids","update","document_id","createId","whereIn","migrationDocumentIds","updatedRows","select","from","whereNull","limit","as","isDuplicateColumnError","error","e","code","errno","message","test","createDocumentIdColumn","schema","alterTable","table","string","hasLocalizationsJoinTable","hasTable","createdDocumentId","name","up","metadata","values","attributes","hasDocumentIdColumn","hasColumn","down","Error"],"mappings":"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"}
1
+ {"version":3,"file":"5.0.0-02-document-id.js","sources":["../../../src/migrations/internal-migrations/5.0.0-02-document-id.ts"],"sourcesContent":["/**\n * NOTE: This migration avoids using the `identifiers` utility.\n * As the `5.0.0-01-convert-identifiers-long-than-max-length`\n * migration does not convert the `localizations` join tables, as they are not\n * tables that exist anymore in v5 and are not in the db metadata.\n *\n * This migration therefore relies on the fact that those tables still exist, and\n * references them directly.\n *\n * Database join table name: `categories_localizations_links`\n * Actual `identifiers` returned join table name: `categories_localizations_lnk`\n *\n */\nimport { createId } from '@paralleldrive/cuid2';\nimport { snakeCase } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\nimport type { Database } from '../..';\nimport type { Meta } from '../../metadata';\n\nfunction getBatchSize(trx: Knex, defaultSize: number = 1000): number {\n const client = trx.client.config.client;\n const isSQLite =\n typeof client === 'string' && ['sqlite', 'sqlite3', 'better-sqlite3'].includes(client);\n return isSQLite ? Math.min(defaultSize, 250) : defaultSize;\n}\n\ninterface Params {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n}\n\nconst QUERIES = {\n async postgres(knex: Knex, params: Params) {\n const res = await knex.raw(\n `\n SELECT :tableName:.id as id, string_agg(DISTINCT :inverseJoinColumn:::character varying, ',') as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res.rows;\n },\n async mysql(knex: Knex, params: Params) {\n const [res] = await knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res;\n },\n async sqlite(knex: Knex, params: Params) {\n return knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n },\n};\n\nconst getNextIdsToCreateDocumentId = async (\n db: Database,\n knex: Knex,\n {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n }: {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n }\n): Promise<number[]> => {\n const res = await QUERIES[db.dialect.client as keyof typeof QUERIES](knex, {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n });\n\n if (res.length > 0) {\n const row = res[0];\n const otherIds = row.other_ids\n ? row.other_ids.split(',').map((v: string) => parseInt(v, 10))\n : [];\n\n return [row.id, ...otherIds];\n }\n\n return [];\n};\n\n// Migrate document ids for tables that have localizations\nconst migrateDocumentIdsWithLocalizations = async (db: Database, knex: Knex, meta: Meta) => {\n const singularName = meta.singularName.toLowerCase();\n const joinColumn = snakeCase(`${singularName}_id`);\n const inverseJoinColumn = snakeCase(`inv_${singularName}_id`);\n let ids: number[];\n\n do {\n ids = await getNextIdsToCreateDocumentId(db, knex, {\n joinColumn,\n inverseJoinColumn,\n tableName: meta.tableName,\n joinTableName: snakeCase(`${meta.tableName}_localizations_links`),\n });\n\n if (ids.length > 0) {\n await knex(meta.tableName).update({ document_id: createId() }).whereIn('id', ids);\n }\n } while (ids.length > 0);\n};\n\n// Migrate document ids for tables that don't have localizations\nconst migrationDocumentIds = async (db: Database, knex: Knex, meta: Meta) => {\n const batchSize = getBatchSize(knex);\n let recordsLeft = +(\n await knex(meta.tableName).count('* as recordsLeft').whereNull('document_id')\n )[0].recordsLeft;\n while (recordsLeft > 0) {\n const currentBatchSize = recordsLeft < batchSize ? recordsLeft : batchSize;\n const updateRecords = (\n await knex(meta.tableName).select('id').whereNull('document_id').limit(currentBatchSize)\n ).map((item) => ({ id: item.id, document_id: createId() }));\n await knex(meta.tableName).insert(updateRecords).onConflict('id').merge();\n recordsLeft -= updateRecords.length;\n }\n};\n\nconst isDuplicateColumnError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n const e = error as { code?: string; errno?: number; message?: string };\n if (e.code === '42701') return true;\n if (e.errno === 1060) return true;\n if (typeof e.message === 'string' && /duplicate column/i.test(e.message)) return true;\n return false;\n};\n\nconst createDocumentIdColumn = async (knex: Knex, tableName: string) => {\n try {\n await knex.schema.alterTable(tableName, (table) => {\n table.string('document_id');\n });\n } catch (error) {\n if (!isDuplicateColumnError(error)) {\n throw error;\n }\n }\n};\n\nconst hasLocalizationsJoinTable = async (knex: Knex, tableName: string) => {\n const joinTableName = snakeCase(`${tableName}_localizations_links`);\n return knex.schema.hasTable(joinTableName);\n};\n\nexport const createdDocumentId: Migration = {\n name: '5.0.0-02-created-document-id',\n async up(knex, db) {\n // do sth\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n continue;\n }\n\n if ('documentId' in meta.attributes) {\n const hasDocumentIdColumn = await knex.schema.hasColumn(meta.tableName, 'document_id');\n\n if (!hasDocumentIdColumn) {\n await createDocumentIdColumn(knex, meta.tableName);\n }\n\n if (await hasLocalizationsJoinTable(knex, meta.tableName)) {\n await migrateDocumentIdsWithLocalizations(db, knex, meta);\n } else {\n await migrationDocumentIds(db, knex, meta);\n }\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["getBatchSize","trx","defaultSize","client","config","isSQLite","includes","Math","min","QUERIES","postgres","knex","params","res","raw","rows","mysql","sqlite","getNextIdsToCreateDocumentId","db","joinColumn","inverseJoinColumn","tableName","joinTableName","dialect","length","row","otherIds","other_ids","split","map","v","parseInt","id","migrateDocumentIdsWithLocalizations","meta","singularName","toLowerCase","snakeCase","ids","update","document_id","createId","whereIn","migrationDocumentIds","batchSize","recordsLeft","count","whereNull","currentBatchSize","updateRecords","select","limit","item","insert","onConflict","merge","isDuplicateColumnError","error","e","code","errno","message","test","createDocumentIdColumn","schema","alterTable","table","string","hasLocalizationsJoinTable","hasTable","createdDocumentId","name","up","metadata","values","attributes","hasDocumentIdColumn","hasColumn","down","Error"],"mappings":"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"}
@@ -1,6 +1,15 @@
1
1
  import { createId } from '@paralleldrive/cuid2';
2
2
  import { snakeCase } from 'lodash/fp';
3
3
 
4
+ function getBatchSize(trx, defaultSize = 1000) {
5
+ const client = trx.client.config.client;
6
+ const isSQLite = typeof client === 'string' && [
7
+ 'sqlite',
8
+ 'sqlite3',
9
+ 'better-sqlite3'
10
+ ].includes(client);
11
+ return isSQLite ? Math.min(defaultSize, 250) : defaultSize;
12
+ }
4
13
  const QUERIES = {
5
14
  async postgres (knex, params) {
6
15
  const res = await knex.raw(`
@@ -74,12 +83,17 @@ const migrateDocumentIdsWithLocalizations = async (db, knex, meta)=>{
74
83
  };
75
84
  // Migrate document ids for tables that don't have localizations
76
85
  const migrationDocumentIds = async (db, knex, meta)=>{
77
- let updatedRows;
78
- do {
79
- updatedRows = await knex(meta.tableName).update({
80
- document_id: createId()
81
- }).whereIn('id', knex(meta.tableName).select('id').from(knex(meta.tableName).select('id').whereNull('document_id').limit(1).as('sub_query')));
82
- }while (updatedRows > 0)
86
+ const batchSize = getBatchSize(knex);
87
+ let recordsLeft = +(await knex(meta.tableName).count('* as recordsLeft').whereNull('document_id'))[0].recordsLeft;
88
+ while(recordsLeft > 0){
89
+ const currentBatchSize = recordsLeft < batchSize ? recordsLeft : batchSize;
90
+ const updateRecords = (await knex(meta.tableName).select('id').whereNull('document_id').limit(currentBatchSize)).map((item)=>({
91
+ id: item.id,
92
+ document_id: createId()
93
+ }));
94
+ await knex(meta.tableName).insert(updateRecords).onConflict('id').merge();
95
+ recordsLeft -= updateRecords.length;
96
+ }
83
97
  };
84
98
  const isDuplicateColumnError = (error)=>{
85
99
  if (!error || typeof error !== 'object') return false;
@@ -1 +1 @@
1
- {"version":3,"file":"5.0.0-02-document-id.mjs","sources":["../../../src/migrations/internal-migrations/5.0.0-02-document-id.ts"],"sourcesContent":["/**\n * NOTE: This migration avoids using the `identifiers` utility.\n * As the `5.0.0-01-convert-identifiers-long-than-max-length`\n * migration does not convert the `localizations` join tables, as they are not\n * tables that exist anymore in v5 and are not in the db metadata.\n *\n * This migration therefore relies on the fact that those tables still exist, and\n * references them directly.\n *\n * Database join table name: `categories_localizations_links`\n * Actual `identifiers` returned join table name: `categories_localizations_lnk`\n *\n */\nimport { createId } from '@paralleldrive/cuid2';\nimport { snakeCase } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\nimport type { Database } from '../..';\nimport type { Meta } from '../../metadata';\n\ninterface Params {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n}\n\nconst QUERIES = {\n async postgres(knex: Knex, params: Params) {\n const res = await knex.raw(\n `\n SELECT :tableName:.id as id, string_agg(DISTINCT :inverseJoinColumn:::character varying, ',') as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res.rows;\n },\n async mysql(knex: Knex, params: Params) {\n const [res] = await knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res;\n },\n async sqlite(knex: Knex, params: Params) {\n return knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n },\n};\n\nconst getNextIdsToCreateDocumentId = async (\n db: Database,\n knex: Knex,\n {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n }: {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n }\n): Promise<number[]> => {\n const res = await QUERIES[db.dialect.client as keyof typeof QUERIES](knex, {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n });\n\n if (res.length > 0) {\n const row = res[0];\n const otherIds = row.other_ids\n ? row.other_ids.split(',').map((v: string) => parseInt(v, 10))\n : [];\n\n return [row.id, ...otherIds];\n }\n\n return [];\n};\n\n// Migrate document ids for tables that have localizations\nconst migrateDocumentIdsWithLocalizations = async (db: Database, knex: Knex, meta: Meta) => {\n const singularName = meta.singularName.toLowerCase();\n const joinColumn = snakeCase(`${singularName}_id`);\n const inverseJoinColumn = snakeCase(`inv_${singularName}_id`);\n let ids: number[];\n\n do {\n ids = await getNextIdsToCreateDocumentId(db, knex, {\n joinColumn,\n inverseJoinColumn,\n tableName: meta.tableName,\n joinTableName: snakeCase(`${meta.tableName}_localizations_links`),\n });\n\n if (ids.length > 0) {\n await knex(meta.tableName).update({ document_id: createId() }).whereIn('id', ids);\n }\n } while (ids.length > 0);\n};\n\n// Migrate document ids for tables that don't have localizations\nconst migrationDocumentIds = async (db: Database, knex: Knex, meta: Meta) => {\n let updatedRows: number;\n\n do {\n updatedRows = await knex(meta.tableName)\n .update({ document_id: createId() })\n .whereIn(\n 'id',\n knex(meta.tableName)\n .select('id')\n .from(knex(meta.tableName).select('id').whereNull('document_id').limit(1).as('sub_query'))\n );\n } while (updatedRows > 0);\n};\n\nconst isDuplicateColumnError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n const e = error as { code?: string; errno?: number; message?: string };\n if (e.code === '42701') return true;\n if (e.errno === 1060) return true;\n if (typeof e.message === 'string' && /duplicate column/i.test(e.message)) return true;\n return false;\n};\n\nconst createDocumentIdColumn = async (knex: Knex, tableName: string) => {\n try {\n await knex.schema.alterTable(tableName, (table) => {\n table.string('document_id');\n });\n } catch (error) {\n if (!isDuplicateColumnError(error)) {\n throw error;\n }\n }\n};\n\nconst hasLocalizationsJoinTable = async (knex: Knex, tableName: string) => {\n const joinTableName = snakeCase(`${tableName}_localizations_links`);\n return knex.schema.hasTable(joinTableName);\n};\n\nexport const createdDocumentId: Migration = {\n name: '5.0.0-02-created-document-id',\n async up(knex, db) {\n // do sth\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n continue;\n }\n\n if ('documentId' in meta.attributes) {\n const hasDocumentIdColumn = await knex.schema.hasColumn(meta.tableName, 'document_id');\n\n if (!hasDocumentIdColumn) {\n await createDocumentIdColumn(knex, meta.tableName);\n }\n\n if (await hasLocalizationsJoinTable(knex, meta.tableName)) {\n await migrateDocumentIdsWithLocalizations(db, knex, meta);\n } else {\n await migrationDocumentIds(db, knex, meta);\n }\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["QUERIES","postgres","knex","params","res","raw","rows","mysql","sqlite","getNextIdsToCreateDocumentId","db","joinColumn","inverseJoinColumn","tableName","joinTableName","dialect","client","length","row","otherIds","other_ids","split","map","v","parseInt","id","migrateDocumentIdsWithLocalizations","meta","singularName","toLowerCase","snakeCase","ids","update","document_id","createId","whereIn","migrationDocumentIds","updatedRows","select","from","whereNull","limit","as","isDuplicateColumnError","error","e","code","errno","message","test","createDocumentIdColumn","schema","alterTable","table","string","hasLocalizationsJoinTable","hasTable","createdDocumentId","name","up","metadata","values","attributes","hasDocumentIdColumn","hasColumn","down","Error"],"mappings":"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"}
1
+ {"version":3,"file":"5.0.0-02-document-id.mjs","sources":["../../../src/migrations/internal-migrations/5.0.0-02-document-id.ts"],"sourcesContent":["/**\n * NOTE: This migration avoids using the `identifiers` utility.\n * As the `5.0.0-01-convert-identifiers-long-than-max-length`\n * migration does not convert the `localizations` join tables, as they are not\n * tables that exist anymore in v5 and are not in the db metadata.\n *\n * This migration therefore relies on the fact that those tables still exist, and\n * references them directly.\n *\n * Database join table name: `categories_localizations_links`\n * Actual `identifiers` returned join table name: `categories_localizations_lnk`\n *\n */\nimport { createId } from '@paralleldrive/cuid2';\nimport { snakeCase } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\nimport type { Database } from '../..';\nimport type { Meta } from '../../metadata';\n\nfunction getBatchSize(trx: Knex, defaultSize: number = 1000): number {\n const client = trx.client.config.client;\n const isSQLite =\n typeof client === 'string' && ['sqlite', 'sqlite3', 'better-sqlite3'].includes(client);\n return isSQLite ? Math.min(defaultSize, 250) : defaultSize;\n}\n\ninterface Params {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n}\n\nconst QUERIES = {\n async postgres(knex: Knex, params: Params) {\n const res = await knex.raw(\n `\n SELECT :tableName:.id as id, string_agg(DISTINCT :inverseJoinColumn:::character varying, ',') as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res.rows;\n },\n async mysql(knex: Knex, params: Params) {\n const [res] = await knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res;\n },\n async sqlite(knex: Knex, params: Params) {\n return knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n },\n};\n\nconst getNextIdsToCreateDocumentId = async (\n db: Database,\n knex: Knex,\n {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n }: {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n }\n): Promise<number[]> => {\n const res = await QUERIES[db.dialect.client as keyof typeof QUERIES](knex, {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n });\n\n if (res.length > 0) {\n const row = res[0];\n const otherIds = row.other_ids\n ? row.other_ids.split(',').map((v: string) => parseInt(v, 10))\n : [];\n\n return [row.id, ...otherIds];\n }\n\n return [];\n};\n\n// Migrate document ids for tables that have localizations\nconst migrateDocumentIdsWithLocalizations = async (db: Database, knex: Knex, meta: Meta) => {\n const singularName = meta.singularName.toLowerCase();\n const joinColumn = snakeCase(`${singularName}_id`);\n const inverseJoinColumn = snakeCase(`inv_${singularName}_id`);\n let ids: number[];\n\n do {\n ids = await getNextIdsToCreateDocumentId(db, knex, {\n joinColumn,\n inverseJoinColumn,\n tableName: meta.tableName,\n joinTableName: snakeCase(`${meta.tableName}_localizations_links`),\n });\n\n if (ids.length > 0) {\n await knex(meta.tableName).update({ document_id: createId() }).whereIn('id', ids);\n }\n } while (ids.length > 0);\n};\n\n// Migrate document ids for tables that don't have localizations\nconst migrationDocumentIds = async (db: Database, knex: Knex, meta: Meta) => {\n const batchSize = getBatchSize(knex);\n let recordsLeft = +(\n await knex(meta.tableName).count('* as recordsLeft').whereNull('document_id')\n )[0].recordsLeft;\n while (recordsLeft > 0) {\n const currentBatchSize = recordsLeft < batchSize ? recordsLeft : batchSize;\n const updateRecords = (\n await knex(meta.tableName).select('id').whereNull('document_id').limit(currentBatchSize)\n ).map((item) => ({ id: item.id, document_id: createId() }));\n await knex(meta.tableName).insert(updateRecords).onConflict('id').merge();\n recordsLeft -= updateRecords.length;\n }\n};\n\nconst isDuplicateColumnError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n const e = error as { code?: string; errno?: number; message?: string };\n if (e.code === '42701') return true;\n if (e.errno === 1060) return true;\n if (typeof e.message === 'string' && /duplicate column/i.test(e.message)) return true;\n return false;\n};\n\nconst createDocumentIdColumn = async (knex: Knex, tableName: string) => {\n try {\n await knex.schema.alterTable(tableName, (table) => {\n table.string('document_id');\n });\n } catch (error) {\n if (!isDuplicateColumnError(error)) {\n throw error;\n }\n }\n};\n\nconst hasLocalizationsJoinTable = async (knex: Knex, tableName: string) => {\n const joinTableName = snakeCase(`${tableName}_localizations_links`);\n return knex.schema.hasTable(joinTableName);\n};\n\nexport const createdDocumentId: Migration = {\n name: '5.0.0-02-created-document-id',\n async up(knex, db) {\n // do sth\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n continue;\n }\n\n if ('documentId' in meta.attributes) {\n const hasDocumentIdColumn = await knex.schema.hasColumn(meta.tableName, 'document_id');\n\n if (!hasDocumentIdColumn) {\n await createDocumentIdColumn(knex, meta.tableName);\n }\n\n if (await hasLocalizationsJoinTable(knex, meta.tableName)) {\n await migrateDocumentIdsWithLocalizations(db, knex, meta);\n } else {\n await migrationDocumentIds(db, knex, meta);\n }\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["getBatchSize","trx","defaultSize","client","config","isSQLite","includes","Math","min","QUERIES","postgres","knex","params","res","raw","rows","mysql","sqlite","getNextIdsToCreateDocumentId","db","joinColumn","inverseJoinColumn","tableName","joinTableName","dialect","length","row","otherIds","other_ids","split","map","v","parseInt","id","migrateDocumentIdsWithLocalizations","meta","singularName","toLowerCase","snakeCase","ids","update","document_id","createId","whereIn","migrationDocumentIds","batchSize","recordsLeft","count","whereNull","currentBatchSize","updateRecords","select","limit","item","insert","onConflict","merge","isDuplicateColumnError","error","e","code","errno","message","test","createDocumentIdColumn","schema","alterTable","table","string","hasLocalizationsJoinTable","hasTable","createdDocumentId","name","up","metadata","values","attributes","hasDocumentIdColumn","hasColumn","down","Error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/migrations/internal.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAa,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,eAAO,MAAM,+BAA+B,OAAQ,QAAQ,KAAG,yBA+C9D,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/migrations/internal.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAa,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,eAAO,MAAM,+BAA+B,OAAQ,QAAQ,KAAG,yBAuD9D,CAAC"}
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var umzug = require('umzug');
4
3
  var common = require('./common.js');
5
4
  var index = require('./internal-migrations/index.js');
6
5
  var storage = require('./storage.js');
@@ -13,48 +12,56 @@ const createInternalMigrationProvider = (db)=>{
13
12
  const migrations = [
14
13
  ...index.internalMigrations
15
14
  ];
16
- const umzugProvider = new umzug.Umzug({
17
- storage: storage.createStorage({
18
- db,
19
- tableName: 'strapi_migrations_internal'
20
- }),
21
- logger: {
22
- info (message) {
23
- // NOTE: only log internal migration in debug mode
24
- db.logger.debug(logger.transformLogMessage('info', message));
15
+ // Lazy: defer `umzug` (and its inquirer / @rushstack chain) until first call
16
+ let lazyProvider;
17
+ const provider = ()=>{
18
+ if (lazyProvider) return lazyProvider;
19
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
20
+ const { Umzug: UmzugCtor } = require('umzug');
21
+ lazyProvider = new UmzugCtor({
22
+ storage: storage.createStorage({
23
+ db,
24
+ tableName: 'strapi_migrations_internal'
25
+ }),
26
+ logger: {
27
+ info (message) {
28
+ // NOTE: only log internal migration in debug mode
29
+ db.logger.debug(logger.transformLogMessage('info', message));
30
+ },
31
+ warn (message) {
32
+ db.logger.warn(logger.transformLogMessage('warn', message));
33
+ },
34
+ error (message) {
35
+ db.logger.error(logger.transformLogMessage('error', message));
36
+ },
37
+ debug (message) {
38
+ db.logger.debug(logger.transformLogMessage('debug', message));
39
+ }
25
40
  },
26
- warn (message) {
27
- db.logger.warn(logger.transformLogMessage('warn', message));
28
- },
29
- error (message) {
30
- db.logger.error(logger.transformLogMessage('error', message));
31
- },
32
- debug (message) {
33
- db.logger.debug(logger.transformLogMessage('debug', message));
34
- }
35
- },
36
- context,
37
- migrations: ()=>migrations.map((migration)=>{
38
- return {
39
- name: migration.name,
40
- up: common.wrapTransaction(context.db)(migration.up),
41
- down: common.wrapTransaction(context.db)(migration.down)
42
- };
43
- })
44
- });
41
+ context,
42
+ migrations: ()=>migrations.map((migration)=>{
43
+ return {
44
+ name: migration.name,
45
+ up: common.wrapTransaction(context.db)(migration.up),
46
+ down: common.wrapTransaction(context.db)(migration.down)
47
+ };
48
+ })
49
+ });
50
+ return lazyProvider;
51
+ };
45
52
  return {
46
53
  async register (migration) {
47
54
  migrations.push(migration);
48
55
  },
49
56
  async shouldRun () {
50
- const pendingMigrations = await umzugProvider.pending();
57
+ const pendingMigrations = await provider().pending();
51
58
  return pendingMigrations.length > 0;
52
59
  },
53
60
  async up () {
54
- await umzugProvider.up();
61
+ await provider().up();
55
62
  },
56
63
  async down () {
57
- await umzugProvider.down();
64
+ await provider().down();
58
65
  }
59
66
  };
60
67
  };
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","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,OAAAA,GAAU;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAAAA,GAA0B;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;IAEvD,MAAMC,aAAAA,GAAgB,IAAIC,WAAAA,CAAM;AAC9BC,QAAAA,OAAAA,EAASC,qBAAAA,CAAc;AAAEP,YAAAA,EAAAA;YAAIQ,SAAAA,EAAW;AAA6B,SAAA,CAAA;QACrEC,MAAAA,EAAQ;AACNC,YAAAA,IAAAA,CAAAA,CAAKC,OAAO,EAAA;;AAEVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,2BAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC9C,YAAA,CAAA;AACAG,YAAAA,IAAAA,CAAAA,CAAKH,OAAO,EAAA;AACVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACK,IAAI,CAACD,2BAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC7C,YAAA,CAAA;AACAI,YAAAA,KAAAA,CAAAA,CAAMJ,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACM,KAAK,CAACF,2BAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,YAAA,CAAA;AACAC,YAAAA,KAAAA,CAAAA,CAAMD,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,2BAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,YAAA;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,sBAAAA,CAAgBnB,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUE,EAAE,CAAA;AAC5CE,oBAAAA,IAAAA,EAAMD,sBAAAA,CAAgBnB,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUI,IAAI;AAClD,iBAAA;AACF,YAAA,CAAA;AACJ,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,UAASL,SAAoB,EAAA;AACjCf,YAAAA,UAAAA,CAAWqB,IAAI,CAACN,SAAAA,CAAAA;AAClB,QAAA,CAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMrB,aAAAA,CAAcsB,OAAO,EAAA;YACrD,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,QAAA,CAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMf,cAAce,EAAE,EAAA;AACxB,QAAA,CAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMjB,cAAciB,IAAI,EAAA;AAC1B,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"internal.js","sources":["../../src/migrations/internal.ts"],"sourcesContent":["import type { 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 // Lazy: defer `umzug` (and its inquirer / @rushstack chain) until first call\n let lazyProvider: Umzug<typeof context> | undefined;\n const provider = (): Umzug<typeof context> => {\n if (lazyProvider) return lazyProvider;\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Umzug: UmzugCtor } = require('umzug') as typeof import('umzug');\n lazyProvider = new UmzugCtor({\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 return lazyProvider;\n };\n\n return {\n async register(migration: Migration) {\n migrations.push(migration);\n },\n async shouldRun() {\n const pendingMigrations = await provider().pending();\n return pendingMigrations.length > 0;\n },\n async up() {\n await provider().up();\n },\n async down() {\n await provider().down();\n },\n };\n};\n"],"names":["createInternalMigrationProvider","db","context","migrations","internalMigrations","lazyProvider","provider","Umzug","UmzugCtor","require","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,OAAAA,GAAU;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAAAA,GAA0B;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;;IAGvD,IAAIC,YAAAA;AACJ,IAAA,MAAMC,QAAAA,GAAW,IAAA;AACf,QAAA,IAAID,cAAc,OAAOA,YAAAA;;AAEzB,QAAA,MAAM,EAAEE,KAAAA,EAAOC,SAAS,EAAE,GAAGC,OAAAA,CAAQ,OAAA,CAAA;AACrCJ,QAAAA,YAAAA,GAAe,IAAIG,SAAAA,CAAU;AAC3BE,YAAAA,OAAAA,EAASC,qBAAAA,CAAc;AAAEV,gBAAAA,EAAAA;gBAAIW,SAAAA,EAAW;AAA6B,aAAA,CAAA;YACrEC,MAAAA,EAAQ;AACNC,gBAAAA,IAAAA,CAAAA,CAAKC,OAAO,EAAA;;AAEVd,oBAAAA,EAAAA,CAAGY,MAAM,CAACG,KAAK,CAACC,2BAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC9C,gBAAA,CAAA;AACAG,gBAAAA,IAAAA,CAAAA,CAAKH,OAAO,EAAA;AACVd,oBAAAA,EAAAA,CAAGY,MAAM,CAACK,IAAI,CAACD,2BAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC7C,gBAAA,CAAA;AACAI,gBAAAA,KAAAA,CAAAA,CAAMJ,OAAO,EAAA;AACXd,oBAAAA,EAAAA,CAAGY,MAAM,CAACM,KAAK,CAACF,2BAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,gBAAA,CAAA;AACAC,gBAAAA,KAAAA,CAAAA,CAAMD,OAAO,EAAA;AACXd,oBAAAA,EAAAA,CAAGY,MAAM,CAACG,KAAK,CAACC,2BAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,gBAAA;AACF,aAAA;AACAb,YAAAA,OAAAA;AACAC,YAAAA,UAAAA,EAAY,IACVA,UAAAA,CAAWiB,GAAG,CAAC,CAACC,SAAAA,GAAAA;oBACd,OAAO;AACLC,wBAAAA,IAAAA,EAAMD,UAAUC,IAAI;AACpBC,wBAAAA,EAAAA,EAAIC,sBAAAA,CAAgBtB,OAAAA,CAAQD,EAAE,CAAA,CAAEoB,UAAUE,EAAE,CAAA;AAC5CE,wBAAAA,IAAAA,EAAMD,sBAAAA,CAAgBtB,OAAAA,CAAQD,EAAE,CAAA,CAAEoB,UAAUI,IAAI;AAClD,qBAAA;AACF,gBAAA,CAAA;AACJ,SAAA,CAAA;QACA,OAAOpB,YAAAA;AACT,IAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMqB,UAASL,SAAoB,EAAA;AACjClB,YAAAA,UAAAA,CAAWwB,IAAI,CAACN,SAAAA,CAAAA;AAClB,QAAA,CAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMvB,QAAAA,EAAAA,CAAWwB,OAAO,EAAA;YAClD,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,QAAA,CAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMjB,WAAWiB,EAAE,EAAA;AACrB,QAAA,CAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMnB,WAAWmB,IAAI,EAAA;AACvB,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1,4 +1,3 @@
1
- import { Umzug } from 'umzug';
2
1
  import { wrapTransaction } from './common.mjs';
3
2
  import { internalMigrations } from './internal-migrations/index.mjs';
4
3
  import { createStorage } from './storage.mjs';
@@ -11,48 +10,56 @@ const createInternalMigrationProvider = (db)=>{
11
10
  const migrations = [
12
11
  ...internalMigrations
13
12
  ];
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));
13
+ // Lazy: defer `umzug` (and its inquirer / @rushstack chain) until first call
14
+ let lazyProvider;
15
+ const provider = ()=>{
16
+ if (lazyProvider) return lazyProvider;
17
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
18
+ const { Umzug: UmzugCtor } = require('umzug');
19
+ lazyProvider = new UmzugCtor({
20
+ storage: createStorage({
21
+ db,
22
+ tableName: 'strapi_migrations_internal'
23
+ }),
24
+ logger: {
25
+ info (message) {
26
+ // NOTE: only log internal migration in debug mode
27
+ db.logger.debug(transformLogMessage('info', message));
28
+ },
29
+ warn (message) {
30
+ db.logger.warn(transformLogMessage('warn', message));
31
+ },
32
+ error (message) {
33
+ db.logger.error(transformLogMessage('error', message));
34
+ },
35
+ debug (message) {
36
+ db.logger.debug(transformLogMessage('debug', message));
37
+ }
23
38
  },
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
- });
39
+ context,
40
+ migrations: ()=>migrations.map((migration)=>{
41
+ return {
42
+ name: migration.name,
43
+ up: wrapTransaction(context.db)(migration.up),
44
+ down: wrapTransaction(context.db)(migration.down)
45
+ };
46
+ })
47
+ });
48
+ return lazyProvider;
49
+ };
43
50
  return {
44
51
  async register (migration) {
45
52
  migrations.push(migration);
46
53
  },
47
54
  async shouldRun () {
48
- const pendingMigrations = await umzugProvider.pending();
55
+ const pendingMigrations = await provider().pending();
49
56
  return pendingMigrations.length > 0;
50
57
  },
51
58
  async up () {
52
- await umzugProvider.up();
59
+ await provider().up();
53
60
  },
54
61
  async down () {
55
- await umzugProvider.down();
62
+ await provider().down();
56
63
  }
57
64
  };
58
65
  };
@@ -1 +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,OAAAA,GAAU;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAAAA,GAA0B;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;IAEvD,MAAMC,aAAAA,GAAgB,IAAIC,KAAAA,CAAM;AAC9BC,QAAAA,OAAAA,EAASC,aAAAA,CAAc;AAAEP,YAAAA,EAAAA;YAAIQ,SAAAA,EAAW;AAA6B,SAAA,CAAA;QACrEC,MAAAA,EAAQ;AACNC,YAAAA,IAAAA,CAAAA,CAAKC,OAAO,EAAA;;AAEVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,oBAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC9C,YAAA,CAAA;AACAG,YAAAA,IAAAA,CAAAA,CAAKH,OAAO,EAAA;AACVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACK,IAAI,CAACD,oBAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC7C,YAAA,CAAA;AACAI,YAAAA,KAAAA,CAAAA,CAAMJ,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACM,KAAK,CAACF,oBAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,YAAA,CAAA;AACAC,YAAAA,KAAAA,CAAAA,CAAMD,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,oBAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,YAAA;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,eAAAA,CAAgBnB,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUE,EAAE,CAAA;AAC5CE,oBAAAA,IAAAA,EAAMD,eAAAA,CAAgBnB,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUI,IAAI;AAClD,iBAAA;AACF,YAAA,CAAA;AACJ,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,UAASL,SAAoB,EAAA;AACjCf,YAAAA,UAAAA,CAAWqB,IAAI,CAACN,SAAAA,CAAAA;AAClB,QAAA,CAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMrB,aAAAA,CAAcsB,OAAO,EAAA;YACrD,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,QAAA,CAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMf,cAAce,EAAE,EAAA;AACxB,QAAA,CAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMjB,cAAciB,IAAI,EAAA;AAC1B,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"internal.mjs","sources":["../../src/migrations/internal.ts"],"sourcesContent":["import type { 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 // Lazy: defer `umzug` (and its inquirer / @rushstack chain) until first call\n let lazyProvider: Umzug<typeof context> | undefined;\n const provider = (): Umzug<typeof context> => {\n if (lazyProvider) return lazyProvider;\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Umzug: UmzugCtor } = require('umzug') as typeof import('umzug');\n lazyProvider = new UmzugCtor({\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 return lazyProvider;\n };\n\n return {\n async register(migration: Migration) {\n migrations.push(migration);\n },\n async shouldRun() {\n const pendingMigrations = await provider().pending();\n return pendingMigrations.length > 0;\n },\n async up() {\n await provider().up();\n },\n async down() {\n await provider().down();\n },\n };\n};\n"],"names":["createInternalMigrationProvider","db","context","migrations","internalMigrations","lazyProvider","provider","Umzug","UmzugCtor","require","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,OAAAA,GAAU;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAAAA,GAA0B;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;;IAGvD,IAAIC,YAAAA;AACJ,IAAA,MAAMC,QAAAA,GAAW,IAAA;AACf,QAAA,IAAID,cAAc,OAAOA,YAAAA;;AAEzB,QAAA,MAAM,EAAEE,KAAAA,EAAOC,SAAS,EAAE,GAAGC,OAAAA,CAAQ,OAAA,CAAA;AACrCJ,QAAAA,YAAAA,GAAe,IAAIG,SAAAA,CAAU;AAC3BE,YAAAA,OAAAA,EAASC,aAAAA,CAAc;AAAEV,gBAAAA,EAAAA;gBAAIW,SAAAA,EAAW;AAA6B,aAAA,CAAA;YACrEC,MAAAA,EAAQ;AACNC,gBAAAA,IAAAA,CAAAA,CAAKC,OAAO,EAAA;;AAEVd,oBAAAA,EAAAA,CAAGY,MAAM,CAACG,KAAK,CAACC,oBAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC9C,gBAAA,CAAA;AACAG,gBAAAA,IAAAA,CAAAA,CAAKH,OAAO,EAAA;AACVd,oBAAAA,EAAAA,CAAGY,MAAM,CAACK,IAAI,CAACD,oBAAoB,MAAA,EAAQF,OAAAA,CAAAA,CAAAA;AAC7C,gBAAA,CAAA;AACAI,gBAAAA,KAAAA,CAAAA,CAAMJ,OAAO,EAAA;AACXd,oBAAAA,EAAAA,CAAGY,MAAM,CAACM,KAAK,CAACF,oBAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,gBAAA,CAAA;AACAC,gBAAAA,KAAAA,CAAAA,CAAMD,OAAO,EAAA;AACXd,oBAAAA,EAAAA,CAAGY,MAAM,CAACG,KAAK,CAACC,oBAAoB,OAAA,EAASF,OAAAA,CAAAA,CAAAA;AAC/C,gBAAA;AACF,aAAA;AACAb,YAAAA,OAAAA;AACAC,YAAAA,UAAAA,EAAY,IACVA,UAAAA,CAAWiB,GAAG,CAAC,CAACC,SAAAA,GAAAA;oBACd,OAAO;AACLC,wBAAAA,IAAAA,EAAMD,UAAUC,IAAI;AACpBC,wBAAAA,EAAAA,EAAIC,eAAAA,CAAgBtB,OAAAA,CAAQD,EAAE,CAAA,CAAEoB,UAAUE,EAAE,CAAA;AAC5CE,wBAAAA,IAAAA,EAAMD,eAAAA,CAAgBtB,OAAAA,CAAQD,EAAE,CAAA,CAAEoB,UAAUI,IAAI;AAClD,qBAAA;AACF,gBAAA,CAAA;AACJ,SAAA,CAAA;QACA,OAAOpB,YAAAA;AACT,IAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMqB,UAASL,SAAoB,EAAA;AACjClB,YAAAA,UAAAA,CAAWwB,IAAI,CAACN,SAAAA,CAAAA;AAClB,QAAA,CAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMvB,QAAAA,EAAAA,CAAWwB,OAAO,EAAA;YAClD,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,QAAA,CAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMjB,WAAWiB,EAAE,EAAA;AACrB,QAAA,CAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMnB,WAAWmB,IAAI,EAAA;AACvB,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/migrations/users.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAiCnC,eAAO,MAAM,2BAA2B,OAAQ,QAAQ,KAAG,qBA2C1D,CAAC"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/migrations/users.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAiCnC,eAAO,MAAM,2BAA2B,OAAQ,QAAQ,KAAG,qBAmD1D,CAAC"}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var fse = require('fs-extra');
4
- var umzug = require('umzug');
5
4
  var storage = require('./storage.js');
6
5
  var common = require('./common.js');
7
6
  var logger = require('./logger.js');
@@ -38,47 +37,55 @@ const createUserMigrationProvider = (db)=>{
38
37
  const context = {
39
38
  db
40
39
  };
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));
40
+ // Lazy: defer `umzug` (and its inquirer / @rushstack chain) until first call
41
+ let lazyProvider;
42
+ const provider = ()=>{
43
+ if (lazyProvider) return lazyProvider;
44
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
45
+ const { Umzug: UmzugCtor } = require('umzug');
46
+ lazyProvider = new UmzugCtor({
47
+ storage: storage.createStorage({
48
+ db,
49
+ tableName: 'strapi_migrations'
50
+ }),
51
+ logger: {
52
+ info (message) {
53
+ // NOTE: only log internal migration in debug mode
54
+ db.logger.info(logger.transformLogMessage('info', message));
55
+ },
56
+ warn (message) {
57
+ db.logger.warn(logger.transformLogMessage('warn', message));
58
+ },
59
+ error (message) {
60
+ db.logger.error(logger.transformLogMessage('error', message));
61
+ },
62
+ debug (message) {
63
+ db.logger.debug(logger.transformLogMessage('debug', message));
64
+ }
56
65
  },
57
- debug (message) {
58
- db.logger.debug(logger.transformLogMessage('debug', message));
66
+ context,
67
+ migrations: {
68
+ glob: [
69
+ '*.{js,sql}',
70
+ {
71
+ cwd: dir
72
+ }
73
+ ],
74
+ resolve: migrationResolver
59
75
  }
60
- },
61
- context,
62
- migrations: {
63
- glob: [
64
- '*.{js,sql}',
65
- {
66
- cwd: dir
67
- }
68
- ],
69
- resolve: migrationResolver
70
- }
71
- });
76
+ });
77
+ return lazyProvider;
78
+ };
72
79
  return {
73
80
  async shouldRun () {
74
- const pendingMigrations = await umzugProvider.pending();
81
+ const pendingMigrations = await provider().pending();
75
82
  return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;
76
83
  },
77
84
  async up () {
78
- await umzugProvider.up();
85
+ await provider().up();
79
86
  },
80
87
  async down () {
81
- await umzugProvider.down();
88
+ await provider().down();
82
89
  }
83
90
  };
84
91
  };
@@ -1 +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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"}
1
+ {"version":3,"file":"users.js","sources":["../../src/migrations/users.ts"],"sourcesContent":["import fse from 'fs-extra';\nimport type { 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 // Lazy: defer `umzug` (and its inquirer / @rushstack chain) until first call\n let lazyProvider: Umzug<typeof context> | undefined;\n const provider = (): Umzug<typeof context> => {\n if (lazyProvider) return lazyProvider;\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { Umzug: UmzugCtor } = require('umzug') as typeof import('umzug');\n lazyProvider = new UmzugCtor({\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 return lazyProvider;\n };\n\n return {\n async shouldRun() {\n const pendingMigrations = await provider().pending();\n return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;\n },\n async up() {\n await provider().up();\n },\n async down() {\n await provider().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","lazyProvider","provider","Umzug","UmzugCtor","storage","createStorage","tableName","logger","info","message","transformLogMessage","warn","error","debug","glob","cwd","resolve","shouldRun","pendingMigrations","pending","length","runMigrations"],"mappings":"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"}