@strapi/database 5.51.1 → 5.52.0

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.
Files changed (100) hide show
  1. package/dist/dialects/mysql/database-inspector.js +1 -1
  2. package/dist/dialects/mysql/database-inspector.js.map +1 -1
  3. package/dist/dialects/mysql/database-inspector.mjs +1 -1
  4. package/dist/dialects/mysql/database-inspector.mjs.map +1 -1
  5. package/dist/dialects/mysql/index.js +2 -2
  6. package/dist/dialects/mysql/index.js.map +1 -1
  7. package/dist/dialects/mysql/index.mjs +2 -2
  8. package/dist/dialects/mysql/index.mjs.map +1 -1
  9. package/dist/entity-manager/index.js +30 -30
  10. package/dist/entity-manager/index.js.map +1 -1
  11. package/dist/entity-manager/index.mjs +30 -30
  12. package/dist/entity-manager/index.mjs.map +1 -1
  13. package/dist/entity-manager/relations-orderer.js +1 -1
  14. package/dist/entity-manager/relations-orderer.js.map +1 -1
  15. package/dist/entity-manager/relations-orderer.mjs +1 -1
  16. package/dist/entity-manager/relations-orderer.mjs.map +1 -1
  17. package/dist/fields/datetime.d.ts.map +1 -1
  18. package/dist/fields/datetime.js +6 -23
  19. package/dist/fields/datetime.js.map +1 -1
  20. package/dist/fields/datetime.mjs +6 -3
  21. package/dist/fields/datetime.mjs.map +1 -1
  22. package/dist/fields/index.d.ts.map +1 -1
  23. package/dist/fields/index.js +21 -8
  24. package/dist/fields/index.js.map +1 -1
  25. package/dist/fields/index.mjs +21 -4
  26. package/dist/fields/index.mjs.map +1 -1
  27. package/dist/fields/json.js +1 -1
  28. package/dist/fields/json.js.map +1 -1
  29. package/dist/fields/json.mjs +1 -1
  30. package/dist/fields/json.mjs.map +1 -1
  31. package/dist/fields/shared/parsers.js +1 -1
  32. package/dist/fields/shared/parsers.js.map +1 -1
  33. package/dist/fields/shared/parsers.mjs +1 -1
  34. package/dist/fields/shared/parsers.mjs.map +1 -1
  35. package/dist/fields/timestamp.d.ts.map +1 -1
  36. package/dist/fields/timestamp.js +5 -23
  37. package/dist/fields/timestamp.js.map +1 -1
  38. package/dist/fields/timestamp.mjs +5 -3
  39. package/dist/fields/timestamp.mjs.map +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/index.mjs +1 -1
  43. package/dist/index.mjs.map +1 -1
  44. package/dist/migrations/common.d.ts +12 -2
  45. package/dist/migrations/common.d.ts.map +1 -1
  46. package/dist/migrations/common.js.map +1 -1
  47. package/dist/migrations/common.mjs.map +1 -1
  48. package/dist/migrations/discover.d.ts +8 -0
  49. package/dist/migrations/discover.d.ts.map +1 -0
  50. package/dist/migrations/discover.js +49 -0
  51. package/dist/migrations/discover.js.map +1 -0
  52. package/dist/migrations/discover.mjs +42 -0
  53. package/dist/migrations/discover.mjs.map +1 -0
  54. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js +1 -1
  55. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -1
  56. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs +1 -1
  57. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -1
  58. package/dist/migrations/internal.d.ts.map +1 -1
  59. package/dist/migrations/internal.js +21 -40
  60. package/dist/migrations/internal.js.map +1 -1
  61. package/dist/migrations/internal.mjs +21 -40
  62. package/dist/migrations/internal.mjs.map +1 -1
  63. package/dist/migrations/resolver.d.ts +9 -0
  64. package/dist/migrations/resolver.d.ts.map +1 -0
  65. package/dist/migrations/resolver.js +53 -0
  66. package/dist/migrations/resolver.js.map +1 -0
  67. package/dist/migrations/resolver.mjs +45 -0
  68. package/dist/migrations/resolver.mjs.map +1 -0
  69. package/dist/migrations/runner.d.ts +24 -0
  70. package/dist/migrations/runner.d.ts.map +1 -0
  71. package/dist/migrations/runner.js +92 -0
  72. package/dist/migrations/runner.js.map +1 -0
  73. package/dist/migrations/runner.mjs +90 -0
  74. package/dist/migrations/runner.mjs.map +1 -0
  75. package/dist/migrations/users.d.ts.map +1 -1
  76. package/dist/migrations/users.js +22 -68
  77. package/dist/migrations/users.js.map +1 -1
  78. package/dist/migrations/users.mjs +21 -68
  79. package/dist/migrations/users.mjs.map +1 -1
  80. package/dist/query/helpers/populate/apply.js +2 -2
  81. package/dist/query/helpers/populate/apply.js.map +1 -1
  82. package/dist/query/helpers/populate/apply.mjs +2 -2
  83. package/dist/query/helpers/populate/apply.mjs.map +1 -1
  84. package/dist/query/helpers/search.d.ts +1 -0
  85. package/dist/query/helpers/search.d.ts.map +1 -1
  86. package/dist/query/helpers/search.js +1 -0
  87. package/dist/query/helpers/search.js.map +1 -1
  88. package/dist/query/helpers/search.mjs +1 -1
  89. package/dist/query/helpers/search.mjs.map +1 -1
  90. package/dist/query/helpers/transform.d.ts.map +1 -1
  91. package/dist/query/helpers/transform.js +4 -1
  92. package/dist/query/helpers/transform.js.map +1 -1
  93. package/dist/query/helpers/transform.mjs +4 -1
  94. package/dist/query/helpers/transform.mjs.map +1 -1
  95. package/dist/query/helpers/where.d.ts.map +1 -1
  96. package/dist/query/helpers/where.js +34 -14
  97. package/dist/query/helpers/where.js.map +1 -1
  98. package/dist/query/helpers/where.mjs +34 -14
  99. package/dist/query/helpers/where.mjs.map +1 -1
  100. package/package.json +6 -7
@@ -1 +1 @@
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
+ {"version":3,"file":"internal.js","sources":["../../src/migrations/internal.ts"],"sourcesContent":["import { wrapTransaction } from './common';\nimport { createMigrationRunner } from './runner';\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 runner = createMigrationRunner({\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 },\n getMigrations: async () =>\n migrations.map((migration) => ({\n name: migration.name,\n up: wrapTransaction(context.db)(migration.up),\n down: wrapTransaction(context.db)(migration.down),\n })),\n });\n\n return {\n async register(migration: Migration) {\n migrations.push(migration);\n },\n async shouldRun() {\n const pendingMigrations = await runner.pending();\n return pendingMigrations.length > 0;\n },\n async up() {\n await runner.up();\n },\n async down() {\n await runner.down();\n },\n };\n};\n"],"names":["createInternalMigrationProvider","db","context","migrations","internalMigrations","runner","createMigrationRunner","storage","createStorage","tableName","logger","info","message","debug","transformLogMessage","getMigrations","map","migration","name","up","wrapTransaction","down","register","push","shouldRun","pendingMigrations","pending","length"],"mappings":";;;;;;;;AASO,MAAMA,kCAAkC,CAACC,EAAAA,GAAAA;AAC9C,IAAA,MAAMC,OAAAA,GAAU;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAAAA,GAA0B;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;AAEvD,IAAA,MAAMC,WAASC,4BAAAA,CAAsB;AACnCC,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;AACF,SAAA;AACAG,QAAAA,aAAAA,EAAe,UACbZ,UAAAA,CAAWa,GAAG,CAAC,CAACC,aAAe;AAC7BC,oBAAAA,IAAAA,EAAMD,UAAUC,IAAI;AACpBC,oBAAAA,EAAAA,EAAIC,sBAAAA,CAAgBlB,OAAAA,CAAQD,EAAE,CAAA,CAAEgB,UAAUE,EAAE,CAAA;AAC5CE,oBAAAA,IAAAA,EAAMD,sBAAAA,CAAgBlB,OAAAA,CAAQD,EAAE,CAAA,CAAEgB,UAAUI,IAAI;iBAClD,CAAA;AACJ,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,UAASL,SAAoB,EAAA;AACjCd,YAAAA,UAAAA,CAAWoB,IAAI,CAACN,SAAAA,CAAAA;AAClB,QAAA,CAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMpB,QAAAA,CAAOqB,OAAO,EAAA;YAC9C,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,QAAA,CAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMd,SAAOc,EAAE,EAAA;AACjB,QAAA,CAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMhB,SAAOgB,IAAI,EAAA;AACnB,QAAA;AACF,KAAA;AACF;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { wrapTransaction } from './common.mjs';
2
+ import { createMigrationRunner } from './runner.mjs';
2
3
  import { internalMigrations } from './internal-migrations/index.mjs';
3
4
  import { createStorage } from './storage.mjs';
4
5
  import { transformLogMessage } from './logger.mjs';
@@ -10,56 +11,36 @@ const createInternalMigrationProvider = (db)=>{
10
11
  const migrations = [
11
12
  ...internalMigrations
12
13
  ];
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
- }
38
- },
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
- };
14
+ const runner = createMigrationRunner({
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
+ },
25
+ getMigrations: async ()=>migrations.map((migration)=>({
26
+ name: migration.name,
27
+ up: wrapTransaction(context.db)(migration.up),
28
+ down: wrapTransaction(context.db)(migration.down)
29
+ }))
30
+ });
50
31
  return {
51
32
  async register (migration) {
52
33
  migrations.push(migration);
53
34
  },
54
35
  async shouldRun () {
55
- const pendingMigrations = await provider().pending();
36
+ const pendingMigrations = await runner.pending();
56
37
  return pendingMigrations.length > 0;
57
38
  },
58
39
  async up () {
59
- await provider().up();
40
+ await runner.up();
60
41
  },
61
42
  async down () {
62
- await provider().down();
43
+ await runner.down();
63
44
  }
64
45
  };
65
46
  };
@@ -1 +1 @@
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
+ {"version":3,"file":"internal.mjs","sources":["../../src/migrations/internal.ts"],"sourcesContent":["import { wrapTransaction } from './common';\nimport { createMigrationRunner } from './runner';\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 runner = createMigrationRunner({\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 },\n getMigrations: async () =>\n migrations.map((migration) => ({\n name: migration.name,\n up: wrapTransaction(context.db)(migration.up),\n down: wrapTransaction(context.db)(migration.down),\n })),\n });\n\n return {\n async register(migration: Migration) {\n migrations.push(migration);\n },\n async shouldRun() {\n const pendingMigrations = await runner.pending();\n return pendingMigrations.length > 0;\n },\n async up() {\n await runner.up();\n },\n async down() {\n await runner.down();\n },\n };\n};\n"],"names":["createInternalMigrationProvider","db","context","migrations","internalMigrations","runner","createMigrationRunner","storage","createStorage","tableName","logger","info","message","debug","transformLogMessage","getMigrations","map","migration","name","up","wrapTransaction","down","register","push","shouldRun","pendingMigrations","pending","length"],"mappings":";;;;;;AASO,MAAMA,kCAAkC,CAACC,EAAAA,GAAAA;AAC9C,IAAA,MAAMC,OAAAA,GAAU;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAAAA,GAA0B;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;AAEvD,IAAA,MAAMC,SAASC,qBAAAA,CAAsB;AACnCC,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;AACF,SAAA;AACAG,QAAAA,aAAAA,EAAe,UACbZ,UAAAA,CAAWa,GAAG,CAAC,CAACC,aAAe;AAC7BC,oBAAAA,IAAAA,EAAMD,UAAUC,IAAI;AACpBC,oBAAAA,EAAAA,EAAIC,eAAAA,CAAgBlB,OAAAA,CAAQD,EAAE,CAAA,CAAEgB,UAAUE,EAAE,CAAA;AAC5CE,oBAAAA,IAAAA,EAAMD,eAAAA,CAAgBlB,OAAAA,CAAQD,EAAE,CAAA,CAAEgB,UAAUI,IAAI;iBAClD,CAAA;AACJ,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,UAASL,SAAoB,EAAA;AACjCd,YAAAA,UAAAA,CAAWoB,IAAI,CAACN,SAAAA,CAAAA;AAClB,QAAA,CAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMpB,MAAAA,CAAOqB,OAAO,EAAA;YAC9C,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,QAAA,CAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMd,OAAOc,EAAE,EAAA;AACjB,QAAA,CAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMhB,OAAOgB,IAAI,EAAA;AACnB,QAAA;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,9 @@
1
+ import type { Context, MigrationResolver } from './common';
2
+ export declare const migrationResolver: MigrationResolver;
3
+ export declare const resolveMigrationFiles: (filepaths: string[], context: Context) => {
4
+ name: string;
5
+ path?: string;
6
+ up: import("./common").MigrationRunnerFn;
7
+ down: import("./common").MigrationRunnerFn;
8
+ }[];
9
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/migrations/resolver.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG3D,eAAO,MAAM,iBAAiB,EAAE,iBA8B/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,WAAW,MAAM,EAAE,EAAE,SAAS,OAAO;;;;;GAK1E,CAAC"}
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var fse = require('fs-extra');
5
+ var common = require('./common.js');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var path__default = /*#__PURE__*/_interopDefault(path);
10
+ var fse__default = /*#__PURE__*/_interopDefault(fse);
11
+
12
+ // TODO: check multiple commands in one sql statement
13
+ const migrationResolver = ({ name, path: migrationPath, context })=>{
14
+ const { db } = context;
15
+ if (!migrationPath) {
16
+ throw new Error(`Migration ${name} has no path`);
17
+ }
18
+ // if sql file run with knex raw
19
+ if (migrationPath.match(/\.sql$/)) {
20
+ const sql = fse__default.default.readFileSync(migrationPath, 'utf8');
21
+ return {
22
+ name,
23
+ path: migrationPath,
24
+ up: common.wrapTransaction(db)((knex)=>knex.raw(sql)),
25
+ async down () {
26
+ throw new Error('Down migration is not supported for sql files');
27
+ }
28
+ };
29
+ }
30
+ // NOTE: we can add some ts register if we want to handle ts migration files at some point
31
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
32
+ const migration = require(migrationPath);
33
+ return {
34
+ name,
35
+ path: migrationPath,
36
+ up: common.wrapTransaction(db)(migration.up),
37
+ down: common.wrapTransaction(db)(migration.down)
38
+ };
39
+ };
40
+ const resolveMigrationFiles = (filepaths, context)=>{
41
+ return filepaths.map((filepath)=>{
42
+ const name = path__default.default.basename(filepath);
43
+ return migrationResolver({
44
+ name,
45
+ path: filepath,
46
+ context
47
+ });
48
+ });
49
+ };
50
+
51
+ exports.migrationResolver = migrationResolver;
52
+ exports.resolveMigrationFiles = resolveMigrationFiles;
53
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sources":["../../src/migrations/resolver.ts"],"sourcesContent":["import path from 'path';\n\nimport fse from 'fs-extra';\n\nimport { wrapTransaction } from './common';\n\nimport type { Context, MigrationResolver } from './common';\n\n// TODO: check multiple commands in one sql statement\nexport const migrationResolver: MigrationResolver = ({ name, path: migrationPath, context }) => {\n const { db } = context;\n\n if (!migrationPath) {\n throw new Error(`Migration ${name} has no path`);\n }\n\n // if sql file run with knex raw\n if (migrationPath.match(/\\.sql$/)) {\n const sql = fse.readFileSync(migrationPath, 'utf8');\n\n return {\n name,\n path: migrationPath,\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(migrationPath);\n return {\n name,\n path: migrationPath,\n up: wrapTransaction(db)(migration.up),\n down: wrapTransaction(db)(migration.down),\n };\n};\n\nexport const resolveMigrationFiles = (filepaths: string[], context: Context) => {\n return filepaths.map((filepath) => {\n const name = path.basename(filepath);\n return migrationResolver({ name, path: filepath, context });\n });\n};\n"],"names":["migrationResolver","name","path","migrationPath","context","db","Error","match","sql","fse","readFileSync","up","wrapTransaction","knex","raw","down","migration","require","resolveMigrationFiles","filepaths","map","filepath","basename"],"mappings":";;;;;;;;;;;AAQA;AACO,MAAMA,iBAAAA,GAAuC,CAAC,EAAEC,IAAI,EAAEC,IAAAA,EAAMC,aAAa,EAAEC,OAAO,EAAE,GAAA;IACzF,MAAM,EAAEC,EAAE,EAAE,GAAGD,OAAAA;AAEf,IAAA,IAAI,CAACD,aAAAA,EAAe;AAClB,QAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,UAAU,EAAEL,IAAAA,CAAK,YAAY,CAAC,CAAA;AACjD,IAAA;;IAGA,IAAIE,aAAAA,CAAcI,KAAK,CAAC,QAAA,CAAA,EAAW;AACjC,QAAA,MAAMC,GAAAA,GAAMC,oBAAAA,CAAIC,YAAY,CAACP,aAAAA,EAAe,MAAA,CAAA;QAE5C,OAAO;AACLF,YAAAA,IAAAA;YACAC,IAAAA,EAAMC,aAAAA;AACNQ,YAAAA,EAAAA,EAAIC,uBAAgBP,EAAAA,CAAAA,CAAI,CAACQ,IAAAA,GAASA,IAAAA,CAAKC,GAAG,CAACN,GAAAA,CAAAA,CAAAA;YAC3C,MAAMO,IAAAA,CAAAA,GAAAA;AACJ,gBAAA,MAAM,IAAIT,KAAAA,CAAM,+CAAA,CAAA;AAClB,YAAA;AACF,SAAA;AACF,IAAA;;;AAIA,IAAA,MAAMU,YAAYC,OAAAA,CAAQd,aAAAA,CAAAA;IAC1B,OAAO;AACLF,QAAAA,IAAAA;QACAC,IAAAA,EAAMC,aAAAA;QACNQ,EAAAA,EAAIC,sBAAAA,CAAgBP,EAAAA,CAAAA,CAAIW,SAAAA,CAAUL,EAAE,CAAA;QACpCI,IAAAA,EAAMH,sBAAAA,CAAgBP,EAAAA,CAAAA,CAAIW,SAAAA,CAAUD,IAAI;AAC1C,KAAA;AACF;AAEO,MAAMG,qBAAAA,GAAwB,CAACC,SAAAA,EAAqBf,OAAAA,GAAAA;IACzD,OAAOe,SAAAA,CAAUC,GAAG,CAAC,CAACC,QAAAA,GAAAA;QACpB,MAAMpB,IAAAA,GAAOC,qBAAAA,CAAKoB,QAAQ,CAACD,QAAAA,CAAAA;AAC3B,QAAA,OAAOrB,iBAAAA,CAAkB;AAAEC,YAAAA,IAAAA;YAAMC,IAAAA,EAAMmB,QAAAA;AAAUjB,YAAAA;AAAQ,SAAA,CAAA;AAC3D,IAAA,CAAA,CAAA;AACF;;;;;"}
@@ -0,0 +1,45 @@
1
+ import path from 'path';
2
+ import fse from 'fs-extra';
3
+ import { wrapTransaction } from './common.mjs';
4
+
5
+ // TODO: check multiple commands in one sql statement
6
+ const migrationResolver = ({ name, path: migrationPath, context })=>{
7
+ const { db } = context;
8
+ if (!migrationPath) {
9
+ throw new Error(`Migration ${name} has no path`);
10
+ }
11
+ // if sql file run with knex raw
12
+ if (migrationPath.match(/\.sql$/)) {
13
+ const sql = fse.readFileSync(migrationPath, 'utf8');
14
+ return {
15
+ name,
16
+ path: migrationPath,
17
+ up: wrapTransaction(db)((knex)=>knex.raw(sql)),
18
+ async down () {
19
+ throw new Error('Down migration is not supported for sql files');
20
+ }
21
+ };
22
+ }
23
+ // NOTE: we can add some ts register if we want to handle ts migration files at some point
24
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
25
+ const migration = require(migrationPath);
26
+ return {
27
+ name,
28
+ path: migrationPath,
29
+ up: wrapTransaction(db)(migration.up),
30
+ down: wrapTransaction(db)(migration.down)
31
+ };
32
+ };
33
+ const resolveMigrationFiles = (filepaths, context)=>{
34
+ return filepaths.map((filepath)=>{
35
+ const name = path.basename(filepath);
36
+ return migrationResolver({
37
+ name,
38
+ path: filepath,
39
+ context
40
+ });
41
+ });
42
+ };
43
+
44
+ export { migrationResolver, resolveMigrationFiles };
45
+ //# sourceMappingURL=resolver.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.mjs","sources":["../../src/migrations/resolver.ts"],"sourcesContent":["import path from 'path';\n\nimport fse from 'fs-extra';\n\nimport { wrapTransaction } from './common';\n\nimport type { Context, MigrationResolver } from './common';\n\n// TODO: check multiple commands in one sql statement\nexport const migrationResolver: MigrationResolver = ({ name, path: migrationPath, context }) => {\n const { db } = context;\n\n if (!migrationPath) {\n throw new Error(`Migration ${name} has no path`);\n }\n\n // if sql file run with knex raw\n if (migrationPath.match(/\\.sql$/)) {\n const sql = fse.readFileSync(migrationPath, 'utf8');\n\n return {\n name,\n path: migrationPath,\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(migrationPath);\n return {\n name,\n path: migrationPath,\n up: wrapTransaction(db)(migration.up),\n down: wrapTransaction(db)(migration.down),\n };\n};\n\nexport const resolveMigrationFiles = (filepaths: string[], context: Context) => {\n return filepaths.map((filepath) => {\n const name = path.basename(filepath);\n return migrationResolver({ name, path: filepath, context });\n });\n};\n"],"names":["migrationResolver","name","path","migrationPath","context","db","Error","match","sql","fse","readFileSync","up","wrapTransaction","knex","raw","down","migration","require","resolveMigrationFiles","filepaths","map","filepath","basename"],"mappings":";;;;AAQA;AACO,MAAMA,iBAAAA,GAAuC,CAAC,EAAEC,IAAI,EAAEC,IAAAA,EAAMC,aAAa,EAAEC,OAAO,EAAE,GAAA;IACzF,MAAM,EAAEC,EAAE,EAAE,GAAGD,OAAAA;AAEf,IAAA,IAAI,CAACD,aAAAA,EAAe;AAClB,QAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,UAAU,EAAEL,IAAAA,CAAK,YAAY,CAAC,CAAA;AACjD,IAAA;;IAGA,IAAIE,aAAAA,CAAcI,KAAK,CAAC,QAAA,CAAA,EAAW;AACjC,QAAA,MAAMC,GAAAA,GAAMC,GAAAA,CAAIC,YAAY,CAACP,aAAAA,EAAe,MAAA,CAAA;QAE5C,OAAO;AACLF,YAAAA,IAAAA;YACAC,IAAAA,EAAMC,aAAAA;AACNQ,YAAAA,EAAAA,EAAIC,gBAAgBP,EAAAA,CAAAA,CAAI,CAACQ,IAAAA,GAASA,IAAAA,CAAKC,GAAG,CAACN,GAAAA,CAAAA,CAAAA;YAC3C,MAAMO,IAAAA,CAAAA,GAAAA;AACJ,gBAAA,MAAM,IAAIT,KAAAA,CAAM,+CAAA,CAAA;AAClB,YAAA;AACF,SAAA;AACF,IAAA;;;AAIA,IAAA,MAAMU,YAAYC,OAAAA,CAAQd,aAAAA,CAAAA;IAC1B,OAAO;AACLF,QAAAA,IAAAA;QACAC,IAAAA,EAAMC,aAAAA;QACNQ,EAAAA,EAAIC,eAAAA,CAAgBP,EAAAA,CAAAA,CAAIW,SAAAA,CAAUL,EAAE,CAAA;QACpCI,IAAAA,EAAMH,eAAAA,CAAgBP,EAAAA,CAAAA,CAAIW,SAAAA,CAAUD,IAAI;AAC1C,KAAA;AACF;AAEO,MAAMG,qBAAAA,GAAwB,CAACC,SAAAA,EAAqBf,OAAAA,GAAAA;IACzD,OAAOe,SAAAA,CAAUC,GAAG,CAAC,CAACC,QAAAA,GAAAA;QACpB,MAAMpB,IAAAA,GAAOC,IAAAA,CAAKoB,QAAQ,CAACD,QAAAA,CAAAA;AAC3B,QAAA,OAAOrB,iBAAAA,CAAkB;AAAEC,YAAAA,IAAAA;YAAMC,IAAAA,EAAMmB,QAAAA;AAAUjB,YAAAA;AAAQ,SAAA,CAAA;AAC3D,IAAA,CAAA,CAAA;AACF;;;;"}
@@ -0,0 +1,24 @@
1
+ import type { MigrationRunnerFn } from './common';
2
+ import type { createStorage } from './storage';
3
+ export interface MigrationMeta {
4
+ name: string;
5
+ path?: string;
6
+ }
7
+ export interface RunnableMigration extends MigrationMeta {
8
+ up: MigrationRunnerFn;
9
+ down: MigrationRunnerFn;
10
+ }
11
+ export interface MigrationRunnerLogger {
12
+ info(message: unknown): void;
13
+ }
14
+ export interface MigrationRunnerOptions {
15
+ storage: ReturnType<typeof createStorage>;
16
+ logger: MigrationRunnerLogger;
17
+ getMigrations: () => Promise<RunnableMigration[]>;
18
+ }
19
+ export declare const createMigrationRunner: (opts: MigrationRunnerOptions) => {
20
+ pending(): Promise<MigrationMeta[]>;
21
+ up(): Promise<MigrationMeta[]>;
22
+ down(): Promise<MigrationMeta[]>;
23
+ };
24
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/migrations/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,EAAE,EAAE,iBAAiB,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IAC1C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;CACnD;AAoBD,eAAO,MAAM,qBAAqB,GAAI,MAAM,sBAAsB;eAsB7C,OAAO,CAAC,aAAa,EAAE,CAAC;UAK7B,OAAO,CAAC,aAAa,EAAE,CAAC;YAuBtB,OAAO,CAAC,aAAa,EAAE,CAAC;CAwBzC,CAAC"}
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+
3
+ const logEvent = (logger, event, name, extra)=>{
4
+ logger.info({
5
+ event,
6
+ name,
7
+ ...extra
8
+ });
9
+ };
10
+ const wrapMigrationError = (name, direction, cause)=>{
11
+ const causeMessage = cause instanceof Error ? `Original error: ${cause.message}` : `Non-error value thrown. See cause for full value: ${String(cause)}`;
12
+ return new Error(`Migration ${name} (${direction}) failed: ${causeMessage}`, {
13
+ cause
14
+ });
15
+ };
16
+ const createMigrationRunner = (opts)=>{
17
+ const getPendingMigrations = async ()=>{
18
+ const [migrations, executedNames] = await Promise.all([
19
+ opts.getMigrations(),
20
+ opts.storage.executed()
21
+ ]);
22
+ const executedSet = new Set(executedNames);
23
+ return migrations.filter((migration)=>!executedSet.has(migration.name));
24
+ };
25
+ const getExecutedMigrations = async ()=>{
26
+ const [migrations, executedNames] = await Promise.all([
27
+ opts.getMigrations(),
28
+ opts.storage.executed()
29
+ ]);
30
+ const executedSet = new Set(executedNames);
31
+ return migrations.filter((migration)=>executedSet.has(migration.name));
32
+ };
33
+ return {
34
+ async pending () {
35
+ const pending = await getPendingMigrations();
36
+ return pending.map(({ name, path })=>({
37
+ name,
38
+ path
39
+ }));
40
+ },
41
+ async up () {
42
+ const toBeApplied = await getPendingMigrations();
43
+ for (const migration of toBeApplied){
44
+ const start = Date.now();
45
+ logEvent(opts.logger, 'migrating', migration.name);
46
+ try {
47
+ await migration.up();
48
+ } catch (error) {
49
+ throw wrapMigrationError(migration.name, 'up', error);
50
+ }
51
+ await opts.storage.logMigration({
52
+ name: migration.name
53
+ });
54
+ const durationSeconds = (Date.now() - start) / 1000;
55
+ logEvent(opts.logger, 'migrated', migration.name, {
56
+ durationSeconds
57
+ });
58
+ }
59
+ return toBeApplied.map(({ name, path })=>({
60
+ name,
61
+ path
62
+ }));
63
+ },
64
+ async down () {
65
+ const executedReversed = (await getExecutedMigrations()).slice().reverse();
66
+ const toBeReverted = executedReversed.slice(0, 1);
67
+ for (const migration of toBeReverted){
68
+ const start = Date.now();
69
+ logEvent(opts.logger, 'reverting', migration.name);
70
+ try {
71
+ await migration.down();
72
+ } catch (error) {
73
+ throw wrapMigrationError(migration.name, 'down', error);
74
+ }
75
+ await opts.storage.unlogMigration({
76
+ name: migration.name
77
+ });
78
+ const durationSeconds = Number.parseFloat(((Date.now() - start) / 1000).toFixed(3));
79
+ logEvent(opts.logger, 'reverted', migration.name, {
80
+ durationSeconds
81
+ });
82
+ }
83
+ return toBeReverted.map(({ name, path })=>({
84
+ name,
85
+ path
86
+ }));
87
+ }
88
+ };
89
+ };
90
+
91
+ exports.createMigrationRunner = createMigrationRunner;
92
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sources":["../../src/migrations/runner.ts"],"sourcesContent":["import type { MigrationRunnerFn } from './common';\nimport type { createStorage } from './storage';\n\nexport interface MigrationMeta {\n name: string;\n path?: string;\n}\n\nexport interface RunnableMigration extends MigrationMeta {\n up: MigrationRunnerFn;\n down: MigrationRunnerFn;\n}\n\nexport interface MigrationRunnerLogger {\n info(message: unknown): void;\n}\n\nexport interface MigrationRunnerOptions {\n storage: ReturnType<typeof createStorage>;\n logger: MigrationRunnerLogger;\n getMigrations: () => Promise<RunnableMigration[]>;\n}\n\nconst logEvent = (\n logger: MigrationRunnerLogger,\n event: string,\n name: string,\n extra?: Record<string, unknown>\n) => {\n logger.info({ event, name, ...extra });\n};\n\nconst wrapMigrationError = (name: string, direction: 'up' | 'down', cause: unknown): Error => {\n const causeMessage =\n cause instanceof Error\n ? `Original error: ${cause.message}`\n : `Non-error value thrown. See cause for full value: ${String(cause)}`;\n\n return new Error(`Migration ${name} (${direction}) failed: ${causeMessage}`, { cause });\n};\n\nexport const createMigrationRunner = (opts: MigrationRunnerOptions) => {\n const getPendingMigrations = async (): Promise<RunnableMigration[]> => {\n const [migrations, executedNames] = await Promise.all([\n opts.getMigrations(),\n opts.storage.executed(),\n ]);\n\n const executedSet = new Set(executedNames);\n return migrations.filter((migration) => !executedSet.has(migration.name));\n };\n\n const getExecutedMigrations = async (): Promise<RunnableMigration[]> => {\n const [migrations, executedNames] = await Promise.all([\n opts.getMigrations(),\n opts.storage.executed(),\n ]);\n\n const executedSet = new Set(executedNames);\n return migrations.filter((migration) => executedSet.has(migration.name));\n };\n\n return {\n async pending(): Promise<MigrationMeta[]> {\n const pending = await getPendingMigrations();\n return pending.map(({ name, path }) => ({ name, path }));\n },\n\n async up(): Promise<MigrationMeta[]> {\n const toBeApplied = await getPendingMigrations();\n\n for (const migration of toBeApplied) {\n const start = Date.now();\n\n logEvent(opts.logger, 'migrating', migration.name);\n\n try {\n await migration.up();\n } catch (error) {\n throw wrapMigrationError(migration.name, 'up', error);\n }\n\n await opts.storage.logMigration({ name: migration.name });\n\n const durationSeconds = (Date.now() - start) / 1000;\n logEvent(opts.logger, 'migrated', migration.name, { durationSeconds });\n }\n\n return toBeApplied.map(({ name, path }) => ({ name, path }));\n },\n\n async down(): Promise<MigrationMeta[]> {\n const executedReversed = (await getExecutedMigrations()).slice().reverse();\n const toBeReverted = executedReversed.slice(0, 1);\n\n for (const migration of toBeReverted) {\n const start = Date.now();\n\n logEvent(opts.logger, 'reverting', migration.name);\n\n try {\n await migration.down();\n } catch (error) {\n throw wrapMigrationError(migration.name, 'down', error);\n }\n\n await opts.storage.unlogMigration({ name: migration.name });\n\n const durationSeconds = Number.parseFloat(((Date.now() - start) / 1000).toFixed(3));\n logEvent(opts.logger, 'reverted', migration.name, { durationSeconds });\n }\n\n return toBeReverted.map(({ name, path }) => ({ name, path }));\n },\n };\n};\n"],"names":["logEvent","logger","event","name","extra","info","wrapMigrationError","direction","cause","causeMessage","Error","message","String","createMigrationRunner","opts","getPendingMigrations","migrations","executedNames","Promise","all","getMigrations","storage","executed","executedSet","Set","filter","migration","has","getExecutedMigrations","pending","map","path","up","toBeApplied","start","Date","now","error","logMigration","durationSeconds","down","executedReversed","slice","reverse","toBeReverted","unlogMigration","Number","parseFloat","toFixed"],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ const logEvent = (logger, event, name, extra)=>{
2
+ logger.info({
3
+ event,
4
+ name,
5
+ ...extra
6
+ });
7
+ };
8
+ const wrapMigrationError = (name, direction, cause)=>{
9
+ const causeMessage = cause instanceof Error ? `Original error: ${cause.message}` : `Non-error value thrown. See cause for full value: ${String(cause)}`;
10
+ return new Error(`Migration ${name} (${direction}) failed: ${causeMessage}`, {
11
+ cause
12
+ });
13
+ };
14
+ const createMigrationRunner = (opts)=>{
15
+ const getPendingMigrations = async ()=>{
16
+ const [migrations, executedNames] = await Promise.all([
17
+ opts.getMigrations(),
18
+ opts.storage.executed()
19
+ ]);
20
+ const executedSet = new Set(executedNames);
21
+ return migrations.filter((migration)=>!executedSet.has(migration.name));
22
+ };
23
+ const getExecutedMigrations = async ()=>{
24
+ const [migrations, executedNames] = await Promise.all([
25
+ opts.getMigrations(),
26
+ opts.storage.executed()
27
+ ]);
28
+ const executedSet = new Set(executedNames);
29
+ return migrations.filter((migration)=>executedSet.has(migration.name));
30
+ };
31
+ return {
32
+ async pending () {
33
+ const pending = await getPendingMigrations();
34
+ return pending.map(({ name, path })=>({
35
+ name,
36
+ path
37
+ }));
38
+ },
39
+ async up () {
40
+ const toBeApplied = await getPendingMigrations();
41
+ for (const migration of toBeApplied){
42
+ const start = Date.now();
43
+ logEvent(opts.logger, 'migrating', migration.name);
44
+ try {
45
+ await migration.up();
46
+ } catch (error) {
47
+ throw wrapMigrationError(migration.name, 'up', error);
48
+ }
49
+ await opts.storage.logMigration({
50
+ name: migration.name
51
+ });
52
+ const durationSeconds = (Date.now() - start) / 1000;
53
+ logEvent(opts.logger, 'migrated', migration.name, {
54
+ durationSeconds
55
+ });
56
+ }
57
+ return toBeApplied.map(({ name, path })=>({
58
+ name,
59
+ path
60
+ }));
61
+ },
62
+ async down () {
63
+ const executedReversed = (await getExecutedMigrations()).slice().reverse();
64
+ const toBeReverted = executedReversed.slice(0, 1);
65
+ for (const migration of toBeReverted){
66
+ const start = Date.now();
67
+ logEvent(opts.logger, 'reverting', migration.name);
68
+ try {
69
+ await migration.down();
70
+ } catch (error) {
71
+ throw wrapMigrationError(migration.name, 'down', error);
72
+ }
73
+ await opts.storage.unlogMigration({
74
+ name: migration.name
75
+ });
76
+ const durationSeconds = Number.parseFloat(((Date.now() - start) / 1000).toFixed(3));
77
+ logEvent(opts.logger, 'reverted', migration.name, {
78
+ durationSeconds
79
+ });
80
+ }
81
+ return toBeReverted.map(({ name, path })=>({
82
+ name,
83
+ path
84
+ }));
85
+ }
86
+ };
87
+ };
88
+
89
+ export { createMigrationRunner };
90
+ //# sourceMappingURL=runner.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.mjs","sources":["../../src/migrations/runner.ts"],"sourcesContent":["import type { MigrationRunnerFn } from './common';\nimport type { createStorage } from './storage';\n\nexport interface MigrationMeta {\n name: string;\n path?: string;\n}\n\nexport interface RunnableMigration extends MigrationMeta {\n up: MigrationRunnerFn;\n down: MigrationRunnerFn;\n}\n\nexport interface MigrationRunnerLogger {\n info(message: unknown): void;\n}\n\nexport interface MigrationRunnerOptions {\n storage: ReturnType<typeof createStorage>;\n logger: MigrationRunnerLogger;\n getMigrations: () => Promise<RunnableMigration[]>;\n}\n\nconst logEvent = (\n logger: MigrationRunnerLogger,\n event: string,\n name: string,\n extra?: Record<string, unknown>\n) => {\n logger.info({ event, name, ...extra });\n};\n\nconst wrapMigrationError = (name: string, direction: 'up' | 'down', cause: unknown): Error => {\n const causeMessage =\n cause instanceof Error\n ? `Original error: ${cause.message}`\n : `Non-error value thrown. See cause for full value: ${String(cause)}`;\n\n return new Error(`Migration ${name} (${direction}) failed: ${causeMessage}`, { cause });\n};\n\nexport const createMigrationRunner = (opts: MigrationRunnerOptions) => {\n const getPendingMigrations = async (): Promise<RunnableMigration[]> => {\n const [migrations, executedNames] = await Promise.all([\n opts.getMigrations(),\n opts.storage.executed(),\n ]);\n\n const executedSet = new Set(executedNames);\n return migrations.filter((migration) => !executedSet.has(migration.name));\n };\n\n const getExecutedMigrations = async (): Promise<RunnableMigration[]> => {\n const [migrations, executedNames] = await Promise.all([\n opts.getMigrations(),\n opts.storage.executed(),\n ]);\n\n const executedSet = new Set(executedNames);\n return migrations.filter((migration) => executedSet.has(migration.name));\n };\n\n return {\n async pending(): Promise<MigrationMeta[]> {\n const pending = await getPendingMigrations();\n return pending.map(({ name, path }) => ({ name, path }));\n },\n\n async up(): Promise<MigrationMeta[]> {\n const toBeApplied = await getPendingMigrations();\n\n for (const migration of toBeApplied) {\n const start = Date.now();\n\n logEvent(opts.logger, 'migrating', migration.name);\n\n try {\n await migration.up();\n } catch (error) {\n throw wrapMigrationError(migration.name, 'up', error);\n }\n\n await opts.storage.logMigration({ name: migration.name });\n\n const durationSeconds = (Date.now() - start) / 1000;\n logEvent(opts.logger, 'migrated', migration.name, { durationSeconds });\n }\n\n return toBeApplied.map(({ name, path }) => ({ name, path }));\n },\n\n async down(): Promise<MigrationMeta[]> {\n const executedReversed = (await getExecutedMigrations()).slice().reverse();\n const toBeReverted = executedReversed.slice(0, 1);\n\n for (const migration of toBeReverted) {\n const start = Date.now();\n\n logEvent(opts.logger, 'reverting', migration.name);\n\n try {\n await migration.down();\n } catch (error) {\n throw wrapMigrationError(migration.name, 'down', error);\n }\n\n await opts.storage.unlogMigration({ name: migration.name });\n\n const durationSeconds = Number.parseFloat(((Date.now() - start) / 1000).toFixed(3));\n logEvent(opts.logger, 'reverted', migration.name, { durationSeconds });\n }\n\n return toBeReverted.map(({ name, path }) => ({ name, path }));\n },\n };\n};\n"],"names":["logEvent","logger","event","name","extra","info","wrapMigrationError","direction","cause","causeMessage","Error","message","String","createMigrationRunner","opts","getPendingMigrations","migrations","executedNames","Promise","all","getMigrations","storage","executed","executedSet","Set","filter","migration","has","getExecutedMigrations","pending","map","path","up","toBeApplied","start","Date","now","error","logMigration","durationSeconds","down","executedReversed","slice","reverse","toBeReverted","unlogMigration","Number","parseFloat","toFixed"],"mappings":"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"}
@@ -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,GAAI,IAAI,QAAQ,KAAG,qBAmD1D,CAAC"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/migrations/users.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEnC,eAAO,MAAM,2BAA2B,GAAI,IAAI,QAAQ,KAAG,qBAgC1D,CAAC"}
@@ -1,95 +1,49 @@
1
1
  'use strict';
2
2
 
3
+ var path = require('path');
3
4
  var fse = require('fs-extra');
5
+ var discover = require('./discover.js');
6
+ var runner = require('./runner.js');
7
+ var resolver = require('./resolver.js');
4
8
  var storage = require('./storage.js');
5
- var common = require('./common.js');
6
9
  var logger = require('./logger.js');
7
10
 
8
11
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
12
 
13
+ var path__default = /*#__PURE__*/_interopDefault(path);
10
14
  var fse__default = /*#__PURE__*/_interopDefault(fse);
11
15
 
12
- // TODO: check multiple commands in one sql statement
13
- const migrationResolver = ({ name, path, context })=>{
14
- const { db } = context;
15
- if (!path) {
16
- throw new Error(`Migration ${name} has no path`);
17
- }
18
- // if sql file run with knex raw
19
- if (path.match(/\.sql$/)) {
20
- const sql = fse__default.default.readFileSync(path, 'utf8');
21
- return {
22
- name,
23
- up: common.wrapTransaction(db)((knex)=>knex.raw(sql)),
24
- async down () {
25
- throw new Error('Down migration is not supported for sql files');
26
- }
27
- };
28
- }
29
- // NOTE: we can add some ts register if we want to handle ts migration files at some point
30
- // eslint-disable-next-line @typescript-eslint/no-var-requires
31
- const migration = require(path);
32
- return {
33
- name,
34
- up: common.wrapTransaction(db)(migration.up),
35
- down: common.wrapTransaction(db)(migration.down)
36
- };
37
- };
38
16
  const createUserMigrationProvider = (db)=>{
39
17
  const dir = db.config.settings.migrations.dir;
40
18
  fse__default.default.ensureDirSync(dir);
41
19
  const context = {
42
20
  db
43
21
  };
44
- // Lazy: defer `umzug` (and its inquirer / @rushstack chain) until first call
45
- let lazyProvider;
46
- const provider = ()=>{
47
- if (lazyProvider) return lazyProvider;
48
- // eslint-disable-next-line @typescript-eslint/no-var-requires
49
- const { Umzug: UmzugCtor } = require('umzug');
50
- lazyProvider = new UmzugCtor({
51
- storage: storage.createStorage({
52
- db,
53
- tableName: 'strapi_migrations'
54
- }),
55
- logger: {
56
- info (message) {
57
- // NOTE: only log internal migration in debug mode
58
- db.logger.info(logger.transformLogMessage('info', message));
59
- },
60
- warn (message) {
61
- db.logger.warn(logger.transformLogMessage('warn', message));
62
- },
63
- error (message) {
64
- db.logger.error(logger.transformLogMessage('error', message));
65
- },
66
- debug (message) {
67
- db.logger.debug(logger.transformLogMessage('debug', message));
68
- }
69
- },
70
- context,
71
- migrations: {
72
- glob: [
73
- '*.{js,sql}',
74
- {
75
- cwd: dir
76
- }
77
- ],
78
- resolve: migrationResolver
22
+ const runner$1 = runner.createMigrationRunner({
23
+ storage: storage.createStorage({
24
+ db,
25
+ tableName: 'strapi_migrations'
26
+ }),
27
+ logger: {
28
+ info (message) {
29
+ db.logger.info(logger.transformLogMessage('info', message));
79
30
  }
80
- });
81
- return lazyProvider;
82
- };
31
+ },
32
+ async getMigrations () {
33
+ const filepaths = discover.discoverMigrationFiles(path__default.default.resolve(dir));
34
+ return resolver.resolveMigrationFiles(filepaths, context);
35
+ }
36
+ });
83
37
  return {
84
38
  async shouldRun () {
85
- const pendingMigrations = await provider().pending();
39
+ const pendingMigrations = await runner$1.pending();
86
40
  return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;
87
41
  },
88
42
  async up () {
89
- await provider().up();
43
+ await runner$1.up();
90
44
  },
91
45
  async down () {
92
- await provider().down();
46
+ await runner$1.down();
93
47
  }
94
48
  };
95
49
  };