@contember/migrations-client 2.1.0-alpha.36 → 2.1.0-alpha.39

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 (136) hide show
  1. package/dist/development/index.cjs +53 -0
  2. package/dist/development/index.cjs.map +1 -0
  3. package/dist/development/index.js +35 -0
  4. package/dist/development/index.js.map +1 -0
  5. package/dist/development/src/JsLoader.cjs +30 -0
  6. package/dist/development/src/JsLoader.cjs.map +1 -0
  7. package/dist/development/src/JsLoader.js +30 -0
  8. package/dist/development/src/JsLoader.js.map +1 -0
  9. package/dist/development/src/JsonLoader.cjs +33 -0
  10. package/dist/development/src/JsonLoader.cjs.map +1 -0
  11. package/dist/development/src/JsonLoader.js +16 -0
  12. package/dist/development/src/JsonLoader.js.map +1 -0
  13. package/dist/development/src/MigrationCreator.cjs +46 -0
  14. package/dist/development/src/MigrationCreator.cjs.map +1 -0
  15. package/dist/development/src/MigrationCreator.js +46 -0
  16. package/dist/development/src/MigrationCreator.js.map +1 -0
  17. package/dist/development/src/MigrationExecuteHelper.cjs +71 -0
  18. package/dist/development/src/MigrationExecuteHelper.cjs.map +1 -0
  19. package/dist/development/src/MigrationExecuteHelper.js +71 -0
  20. package/dist/development/src/MigrationExecuteHelper.js.map +1 -0
  21. package/dist/development/src/MigrationFile.cjs +5 -0
  22. package/dist/development/src/MigrationFile.cjs.map +1 -0
  23. package/dist/development/src/MigrationFile.js +5 -0
  24. package/dist/development/src/MigrationFile.js.map +1 -0
  25. package/dist/development/src/MigrationFilesManager.cjs +106 -0
  26. package/dist/development/src/MigrationFilesManager.cjs.map +1 -0
  27. package/dist/development/src/MigrationFilesManager.js +89 -0
  28. package/dist/development/src/MigrationFilesManager.js.map +1 -0
  29. package/dist/development/src/MigrationParser.cjs +31 -0
  30. package/dist/development/src/MigrationParser.cjs.map +1 -0
  31. package/dist/development/src/MigrationParser.js +31 -0
  32. package/dist/development/src/MigrationParser.js.map +1 -0
  33. package/dist/development/src/MigrationsResolver.cjs +34 -0
  34. package/dist/development/src/MigrationsResolver.cjs.map +1 -0
  35. package/dist/development/src/MigrationsResolver.js +34 -0
  36. package/dist/development/src/MigrationsResolver.js.map +1 -0
  37. package/dist/development/src/SchemaVersionBuilder.cjs +26 -0
  38. package/dist/development/src/SchemaVersionBuilder.cjs.map +1 -0
  39. package/dist/development/src/SchemaVersionBuilder.js +26 -0
  40. package/dist/development/src/SchemaVersionBuilder.js.map +1 -0
  41. package/dist/development/src/SystemClient.cjs +117 -0
  42. package/dist/development/src/SystemClient.cjs.map +1 -0
  43. package/dist/development/src/SystemClient.js +117 -0
  44. package/dist/development/src/SystemClient.js.map +1 -0
  45. package/dist/development/src/migrations.cjs +108 -0
  46. package/dist/development/src/migrations.cjs.map +1 -0
  47. package/dist/development/src/migrations.js +108 -0
  48. package/dist/development/src/migrations.js.map +1 -0
  49. package/dist/development/src/utils/assertNever.cjs +7 -0
  50. package/dist/development/src/utils/assertNever.cjs.map +1 -0
  51. package/dist/development/src/utils/assertNever.js +7 -0
  52. package/dist/development/src/utils/assertNever.js.map +1 -0
  53. package/dist/production/index.cjs +53 -0
  54. package/dist/production/index.cjs.map +1 -0
  55. package/dist/production/index.js +35 -0
  56. package/dist/production/index.js.map +1 -0
  57. package/dist/production/src/JsLoader.cjs +30 -0
  58. package/dist/production/src/JsLoader.cjs.map +1 -0
  59. package/dist/production/src/JsLoader.js +30 -0
  60. package/dist/production/src/JsLoader.js.map +1 -0
  61. package/dist/production/src/JsonLoader.cjs +33 -0
  62. package/dist/production/src/JsonLoader.cjs.map +1 -0
  63. package/dist/production/src/JsonLoader.js +16 -0
  64. package/dist/production/src/JsonLoader.js.map +1 -0
  65. package/dist/production/src/MigrationCreator.cjs +46 -0
  66. package/dist/production/src/MigrationCreator.cjs.map +1 -0
  67. package/dist/production/src/MigrationCreator.js +46 -0
  68. package/dist/production/src/MigrationCreator.js.map +1 -0
  69. package/dist/production/src/MigrationExecuteHelper.cjs +71 -0
  70. package/dist/production/src/MigrationExecuteHelper.cjs.map +1 -0
  71. package/dist/production/src/MigrationExecuteHelper.js +71 -0
  72. package/dist/production/src/MigrationExecuteHelper.js.map +1 -0
  73. package/dist/production/src/MigrationFile.cjs +5 -0
  74. package/dist/production/src/MigrationFile.cjs.map +1 -0
  75. package/dist/production/src/MigrationFile.js +5 -0
  76. package/dist/production/src/MigrationFile.js.map +1 -0
  77. package/dist/production/src/MigrationFilesManager.cjs +106 -0
  78. package/dist/production/src/MigrationFilesManager.cjs.map +1 -0
  79. package/dist/production/src/MigrationFilesManager.js +89 -0
  80. package/dist/production/src/MigrationFilesManager.js.map +1 -0
  81. package/dist/production/src/MigrationParser.cjs +31 -0
  82. package/dist/production/src/MigrationParser.cjs.map +1 -0
  83. package/dist/production/src/MigrationParser.js +31 -0
  84. package/dist/production/src/MigrationParser.js.map +1 -0
  85. package/dist/production/src/MigrationsResolver.cjs +34 -0
  86. package/dist/production/src/MigrationsResolver.cjs.map +1 -0
  87. package/dist/production/src/MigrationsResolver.js +34 -0
  88. package/dist/production/src/MigrationsResolver.js.map +1 -0
  89. package/dist/production/src/SchemaVersionBuilder.cjs +26 -0
  90. package/dist/production/src/SchemaVersionBuilder.cjs.map +1 -0
  91. package/dist/production/src/SchemaVersionBuilder.js +26 -0
  92. package/dist/production/src/SchemaVersionBuilder.js.map +1 -0
  93. package/dist/production/src/SystemClient.cjs +117 -0
  94. package/dist/production/src/SystemClient.cjs.map +1 -0
  95. package/dist/production/src/SystemClient.js +117 -0
  96. package/dist/production/src/SystemClient.js.map +1 -0
  97. package/dist/production/src/migrations.cjs +108 -0
  98. package/dist/production/src/migrations.cjs.map +1 -0
  99. package/dist/production/src/migrations.js +108 -0
  100. package/dist/production/src/migrations.js.map +1 -0
  101. package/dist/production/src/utils/assertNever.cjs +7 -0
  102. package/dist/production/src/utils/assertNever.cjs.map +1 -0
  103. package/dist/production/src/utils/assertNever.js +7 -0
  104. package/dist/production/src/utils/assertNever.js.map +1 -0
  105. package/dist/types/JsLoader.d.ts +10 -0
  106. package/dist/types/JsLoader.d.ts.map +1 -0
  107. package/dist/types/JsonLoader.d.ts +9 -0
  108. package/dist/types/JsonLoader.d.ts.map +1 -0
  109. package/dist/types/MigrationCreator.d.ts +21 -0
  110. package/dist/types/MigrationCreator.d.ts.map +1 -0
  111. package/dist/types/MigrationExecuteHelper.d.ts +13 -0
  112. package/dist/types/MigrationExecuteHelper.d.ts.map +1 -0
  113. package/dist/types/MigrationFile.d.ts +39 -0
  114. package/dist/types/MigrationFile.d.ts.map +1 -0
  115. package/dist/types/MigrationFileLoader.d.ts +5 -0
  116. package/dist/types/MigrationFileLoader.d.ts.map +1 -0
  117. package/dist/types/MigrationFilesManager.d.ts +18 -0
  118. package/dist/types/MigrationFilesManager.d.ts.map +1 -0
  119. package/dist/types/MigrationParser.d.ts +6 -0
  120. package/dist/types/MigrationParser.d.ts.map +1 -0
  121. package/dist/types/MigrationsResolver.d.ts +14 -0
  122. package/dist/types/MigrationsResolver.d.ts.map +1 -0
  123. package/dist/types/SchemaVersionBuilder.d.ts +13 -0
  124. package/dist/types/SchemaVersionBuilder.d.ts.map +1 -0
  125. package/dist/types/SystemClient.d.ts +29 -0
  126. package/dist/types/SystemClient.d.ts.map +1 -0
  127. package/dist/types/index.d.ts +15 -0
  128. package/dist/types/index.d.ts.map +1 -0
  129. package/dist/types/migrations.d.ts +60 -0
  130. package/dist/types/migrations.d.ts.map +1 -0
  131. package/dist/types/tsconfig.tsbuildinfo +1 -0
  132. package/dist/types/utils/assertNever.d.ts +2 -0
  133. package/dist/types/utils/assertNever.d.ts.map +1 -0
  134. package/dist/types/utils/json.d.ts +7 -0
  135. package/dist/types/utils/json.d.ts.map +1 -0
  136. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaVersionBuilder.js","sources":["../../../../packages/migrations-client/src/SchemaVersionBuilder.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport { emptySchema } from '@contember/schema-utils'\nimport { SchemaMigrator } from '@contember/schema-migrations'\nimport { MigrationsResolver } from './MigrationsResolver'\n\nexport class SchemaVersionBuilder {\n\tconstructor(\n\t\tprivate readonly migrationsResolver: MigrationsResolver,\n\t\tprivate readonly schemaMigrator: SchemaMigrator,\n\t) {}\n\n\tasync buildSchema(targetVersion?: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(emptySchema, version => !targetVersion || version <= targetVersion)\n\t}\n\n\tasync buildSchemaUntil(targetVersion: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(emptySchema, version => version < targetVersion)\n\t}\n\n\tasync continue(schema: Schema, previousVersion: string | null, targetVersion: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(schema, version => version <= targetVersion && version > (previousVersion || ''))\n\t}\n\n\tpublic async buildSchemaAdvanced(initialSchema: Schema, condition: (version: string) => boolean): Promise<Schema> {\n\t\treturn (await this.migrationsResolver.getSchemaMigrations())\n\t\t\t.filter(({ version }) => condition(version))\n\t\t\t.reduce<Schema>(\n\t\t\t\t(schema, { modifications, formatVersion }) => this.schemaMigrator.applyModifications(schema, modifications, formatVersion),\n\t\t\t\tinitialSchema,\n\t\t\t)\n\t}\n}\n"],"names":[],"mappings":";AAKO,MAAM,qBAAqB;AAAA,EACjC,YACkB,oBACA,gBAChB;AAFgB,SAAA,qBAAA;AACA,SAAA,iBAAA;AAAA,EACf;AAAA,EAEH,MAAM,YAAY,eAAyC;AAC1D,WAAO,KAAK,oBAAoB,aAAa,aAAW,CAAC,iBAAiB,WAAW,aAAa;AAAA,EACnG;AAAA,EAEA,MAAM,iBAAiB,eAAwC;AAC9D,WAAO,KAAK,oBAAoB,aAAa,CAAA,YAAW,UAAU,aAAa;AAAA,EAChF;AAAA,EAEA,MAAM,SAAS,QAAgB,iBAAgC,eAAwC;AACtG,WAAO,KAAK,oBAAoB,QAAQ,CAAA,YAAW,WAAW,iBAAiB,WAAW,mBAAmB,GAAG;AAAA,EACjH;AAAA,EAEA,MAAa,oBAAoB,eAAuB,WAA0D;AACjH,YAAQ,MAAM,KAAK,mBAAmB,oBAAA,GACpC,OAAO,CAAC,EAAE,QAAA,MAAc,UAAU,OAAO,CAAC,EAC1C;AAAA,MACA,CAAC,QAAQ,EAAE,eAAe,oBAAoB,KAAK,eAAe,mBAAmB,QAAQ,eAAe,aAAa;AAAA,MACzH;AAAA,IAAA;AAAA,EAEH;AACD;"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const graphqlClient = require("@contember/graphql-client");
4
+ var MigrateErrorCode = /* @__PURE__ */ ((MigrateErrorCode2) => {
5
+ MigrateErrorCode2["MustFollowLatest"] = "MUST_FOLLOW_LATEST";
6
+ MigrateErrorCode2["AlreadyExecuted"] = "ALREADY_EXECUTED";
7
+ MigrateErrorCode2["InvalidFormat"] = "INVALID_FORMAT";
8
+ MigrateErrorCode2["InvalidSchema"] = "INVALID_SCHEMA";
9
+ MigrateErrorCode2["MigrationFailed"] = "MIGRATION_FAILED";
10
+ return MigrateErrorCode2;
11
+ })(MigrateErrorCode || {});
12
+ class SystemClient {
13
+ constructor(apiClient) {
14
+ this.apiClient = apiClient;
15
+ }
16
+ static create(baseUrl, projectName, apiToken) {
17
+ const graphqlClient$1 = new graphqlClient.GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken });
18
+ return new SystemClient(graphqlClient$1);
19
+ }
20
+ async migrate(migrations, force = false) {
21
+ const query = `
22
+ mutation($migrations: [Migration!]!) {
23
+ migrate: ${force ? "forceMigrate" : "migrate"}(migrations: $migrations) {
24
+ ok
25
+ errors {
26
+ code
27
+ migration
28
+ message: developerMessage
29
+ }
30
+ }
31
+ }
32
+ `;
33
+ const result = (await this.apiClient.execute(query, {
34
+ variables: {
35
+ migrations
36
+ }
37
+ })).migrate;
38
+ if (!result.ok) {
39
+ throw result.errors;
40
+ }
41
+ }
42
+ async migrationDelete(version) {
43
+ const query = `
44
+ mutation($version: String!) {
45
+ migrationDelete(migration: $version) {
46
+ ok
47
+ error {
48
+ developerMessage
49
+ }
50
+ }
51
+ }
52
+ `;
53
+ const result = (await this.apiClient.execute(query, {
54
+ variables: {
55
+ version
56
+ }
57
+ })).migrationDelete;
58
+ if (!result.ok) {
59
+ throw result.error?.developerMessage;
60
+ }
61
+ }
62
+ async migrationModify(version, modification) {
63
+ const query = `
64
+ mutation($version: String!, $modification: MigrationModification!) {
65
+ migrationModify(migration: $version, modification: $modification) {
66
+ ok
67
+ error {
68
+ developerMessage
69
+ }
70
+ }
71
+ }
72
+ `;
73
+ const result = (await this.apiClient.execute(query, {
74
+ variables: {
75
+ version,
76
+ modification
77
+ }
78
+ })).migrationModify;
79
+ if (!result.ok) {
80
+ throw result.error?.developerMessage;
81
+ }
82
+ }
83
+ async listExecutedMigrations() {
84
+ const query = `query {
85
+ executedMigrations {
86
+ name
87
+ version
88
+ formatVersion
89
+ checksum
90
+ executedAt
91
+ }
92
+ }`;
93
+ return (await this.apiClient.execute(query, {})).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }));
94
+ }
95
+ async getExecutedMigration(version) {
96
+ const query = `query($version: String!) {
97
+ executedMigrations(version: $version) {
98
+ name
99
+ version
100
+ formatVersion
101
+ checksum
102
+ executedAt
103
+ modifications
104
+ }
105
+ }`;
106
+ return (await this.apiClient.execute(query, { variables: { version } })).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null;
107
+ }
108
+ }
109
+ const createSystemUrl = (baseUrl, projectName) => {
110
+ if (baseUrl.endsWith("/")) {
111
+ baseUrl = baseUrl.substring(0, baseUrl.length - 1);
112
+ }
113
+ return baseUrl + "/system/" + projectName;
114
+ };
115
+ exports.MigrateErrorCode = MigrateErrorCode;
116
+ exports.SystemClient = SystemClient;
117
+ //# sourceMappingURL=SystemClient.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemClient.cjs","sources":["../../../../packages/migrations-client/src/SystemClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\nimport { ExecutedMigration, ExecutedMigrationInfo } from './migrations'\n\nexport type MigrateError = {\n\treadonly code: MigrateErrorCode\n\treadonly migration: string\n\treadonly message: string\n}\n\nexport enum MigrateErrorCode {\n\tMustFollowLatest = 'MUST_FOLLOW_LATEST',\n\tAlreadyExecuted = 'ALREADY_EXECUTED',\n\tInvalidFormat = 'INVALID_FORMAT',\n\tInvalidSchema = 'INVALID_SCHEMA',\n\tMigrationFailed = 'MIGRATION_FAILED',\n}\n\nexport type MigrateResponse = {\n\treadonly ok: boolean\n\treadonly errors: MigrateError[]\n}\n\nexport class SystemClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(baseUrl: string, projectName: string, apiToken: string): SystemClient {\n\t\tconst graphqlClient = new GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken })\n\t\treturn new SystemClient(graphqlClient)\n\t}\n\n\tpublic async migrate(migrations: any[], force = false): Promise<void> {\n\t\tconst query = `\nmutation($migrations: [Migration!]!) {\n\tmigrate: ${force ? 'forceMigrate' : 'migrate'}(migrations: $migrations) {\n\t\tok\n\t\terrors {\n\t\t\tcode\n\t\t\tmigration\n\t\t\tmessage: developerMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrate: { ok: boolean; errors: { code: MigrateErrorCode; migration: string; message: string }[] }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tmigrations,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrate\n\t\tif (!result.ok) {\n\t\t\tthrow result.errors\n\t\t}\n\t}\n\n\tpublic async migrationDelete(version: string): Promise<void> {\n\t\tconst query = `\nmutation($version: String!) {\n\tmigrationDelete(migration: $version) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationDelete: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationDelete\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async migrationModify(version: string, modification: Partial<any>): Promise<void> {\n\t\tconst query = `\nmutation($version: String!, $modification: MigrationModification!) {\n\tmigrationModify(migration: $version, modification: $modification) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationModify: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t\tmodification,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationModify\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async listExecutedMigrations(): Promise<ExecutedMigrationInfo[]> {\n\t\tconst query = `query {\n\texecutedMigrations {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t}\n}`\n\t\treturn (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\texecutedMigrations: ExecutedMigrationInfo[]\n\t\t\t}>(query, {})\n\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))\n\t}\n\n\tpublic async getExecutedMigration(version: string): Promise<ExecutedMigration> {\n\t\tconst query = `query($version: String!) {\n\texecutedMigrations(version: $version) {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t\tmodifications\n\t}\n}`\n\t\treturn (\n\t\t\t(\n\t\t\t\tawait this.apiClient.execute<{\n\t\t\t\t\texecutedMigrations: ExecutedMigration[]\n\t\t\t\t}>(query, { variables: { version } })\n\t\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null\n\t\t)\n\t}\n}\n\nconst createSystemUrl = (baseUrl: string, projectName: string) => {\n\tif (baseUrl.endsWith('/')) {\n\t\tbaseUrl = baseUrl.substring(0, baseUrl.length - 1)\n\t}\n\treturn baseUrl + '/system/' + projectName\n}\n"],"names":["MigrateErrorCode","graphqlClient","GraphQlClient"],"mappings":";;;AASO,IAAK,qCAAAA,sBAAL;AACNA,oBAAA,kBAAA,IAAmB;AACnBA,oBAAA,iBAAA,IAAkB;AAClBA,oBAAA,eAAA,IAAgB;AAChBA,oBAAA,eAAA,IAAgB;AAChBA,oBAAA,iBAAA,IAAkB;AALP,SAAAA;AAAA,GAAA,oBAAA,CAAA,CAAA;AAaL,MAAM,aAAa;AAAA,EACzB,YAA6B,WAA0B;AAA1B,SAAA,YAAA;AAAA,EAA2B;AAAA,EAExD,OAAc,OAAO,SAAiB,aAAqB,UAAgC;AAC1F,UAAMC,kBAAgB,IAAIC,cAAAA,cAAc,EAAE,KAAK,gBAAgB,SAAS,WAAW,GAAG,UAAU;AAChG,WAAO,IAAI,aAAaD,eAAa;AAAA,EACtC;AAAA,EAEA,MAAa,QAAQ,YAAmB,QAAQ,OAAsB;AACrE,UAAM,QAAQ;AAAA;AAAA,YAEJ,QAAQ,iBAAiB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU5C,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IACD,CACA,GACA;AACF,QAAI,CAAC,OAAO,IAAI;AACf,YAAM,OAAO;AAAA,IACd;AAAA,EACD;AAAA,EAEA,MAAa,gBAAgB,SAAgC;AAC5D,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IACD,CACA,GACA;AACF,QAAI,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IACrB;AAAA,EACD;AAAA,EAEA,MAAa,gBAAgB,SAAiB,cAA2C;AACxF,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MAAA;AAAA,IACD,CACA,GACA;AACF,QAAI,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IACrB;AAAA,EACD;AAAA,EAEA,MAAa,yBAA2D;AACvE,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASd,YACC,MAAM,KAAK,UAAU,QAElB,OAAO,CAAA,CAAE,GACX,mBAAmB,IAAI,SAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,IAAI;AAAA,EAChF;AAAA,EAEA,MAAa,qBAAqB,SAA6C;AAC9E,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,YAEE,MAAM,KAAK,UAAU,QAElB,OAAO,EAAE,WAAW,EAAE,UAAQ,CAAG,GACnC,mBAAmB,IAAI,CAAA,QAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,EAAA,EAAI,EAAE,CAAC,KAAK;AAAA,EAEzF;AACD;AAEA,MAAM,kBAAkB,CAAC,SAAiB,gBAAwB;AACjE,MAAI,QAAQ,SAAS,GAAG,GAAG;AAC1B,cAAU,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,EAClD;AACA,SAAO,UAAU,aAAa;AAC/B;;;"}
@@ -0,0 +1,117 @@
1
+ import { GraphQlClient } from "@contember/graphql-client";
2
+ var MigrateErrorCode = /* @__PURE__ */ ((MigrateErrorCode2) => {
3
+ MigrateErrorCode2["MustFollowLatest"] = "MUST_FOLLOW_LATEST";
4
+ MigrateErrorCode2["AlreadyExecuted"] = "ALREADY_EXECUTED";
5
+ MigrateErrorCode2["InvalidFormat"] = "INVALID_FORMAT";
6
+ MigrateErrorCode2["InvalidSchema"] = "INVALID_SCHEMA";
7
+ MigrateErrorCode2["MigrationFailed"] = "MIGRATION_FAILED";
8
+ return MigrateErrorCode2;
9
+ })(MigrateErrorCode || {});
10
+ class SystemClient {
11
+ constructor(apiClient) {
12
+ this.apiClient = apiClient;
13
+ }
14
+ static create(baseUrl, projectName, apiToken) {
15
+ const graphqlClient = new GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken });
16
+ return new SystemClient(graphqlClient);
17
+ }
18
+ async migrate(migrations, force = false) {
19
+ const query = `
20
+ mutation($migrations: [Migration!]!) {
21
+ migrate: ${force ? "forceMigrate" : "migrate"}(migrations: $migrations) {
22
+ ok
23
+ errors {
24
+ code
25
+ migration
26
+ message: developerMessage
27
+ }
28
+ }
29
+ }
30
+ `;
31
+ const result = (await this.apiClient.execute(query, {
32
+ variables: {
33
+ migrations
34
+ }
35
+ })).migrate;
36
+ if (!result.ok) {
37
+ throw result.errors;
38
+ }
39
+ }
40
+ async migrationDelete(version) {
41
+ const query = `
42
+ mutation($version: String!) {
43
+ migrationDelete(migration: $version) {
44
+ ok
45
+ error {
46
+ developerMessage
47
+ }
48
+ }
49
+ }
50
+ `;
51
+ const result = (await this.apiClient.execute(query, {
52
+ variables: {
53
+ version
54
+ }
55
+ })).migrationDelete;
56
+ if (!result.ok) {
57
+ throw result.error?.developerMessage;
58
+ }
59
+ }
60
+ async migrationModify(version, modification) {
61
+ const query = `
62
+ mutation($version: String!, $modification: MigrationModification!) {
63
+ migrationModify(migration: $version, modification: $modification) {
64
+ ok
65
+ error {
66
+ developerMessage
67
+ }
68
+ }
69
+ }
70
+ `;
71
+ const result = (await this.apiClient.execute(query, {
72
+ variables: {
73
+ version,
74
+ modification
75
+ }
76
+ })).migrationModify;
77
+ if (!result.ok) {
78
+ throw result.error?.developerMessage;
79
+ }
80
+ }
81
+ async listExecutedMigrations() {
82
+ const query = `query {
83
+ executedMigrations {
84
+ name
85
+ version
86
+ formatVersion
87
+ checksum
88
+ executedAt
89
+ }
90
+ }`;
91
+ return (await this.apiClient.execute(query, {})).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }));
92
+ }
93
+ async getExecutedMigration(version) {
94
+ const query = `query($version: String!) {
95
+ executedMigrations(version: $version) {
96
+ name
97
+ version
98
+ formatVersion
99
+ checksum
100
+ executedAt
101
+ modifications
102
+ }
103
+ }`;
104
+ return (await this.apiClient.execute(query, { variables: { version } })).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null;
105
+ }
106
+ }
107
+ const createSystemUrl = (baseUrl, projectName) => {
108
+ if (baseUrl.endsWith("/")) {
109
+ baseUrl = baseUrl.substring(0, baseUrl.length - 1);
110
+ }
111
+ return baseUrl + "/system/" + projectName;
112
+ };
113
+ export {
114
+ MigrateErrorCode,
115
+ SystemClient
116
+ };
117
+ //# sourceMappingURL=SystemClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemClient.js","sources":["../../../../packages/migrations-client/src/SystemClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\nimport { ExecutedMigration, ExecutedMigrationInfo } from './migrations'\n\nexport type MigrateError = {\n\treadonly code: MigrateErrorCode\n\treadonly migration: string\n\treadonly message: string\n}\n\nexport enum MigrateErrorCode {\n\tMustFollowLatest = 'MUST_FOLLOW_LATEST',\n\tAlreadyExecuted = 'ALREADY_EXECUTED',\n\tInvalidFormat = 'INVALID_FORMAT',\n\tInvalidSchema = 'INVALID_SCHEMA',\n\tMigrationFailed = 'MIGRATION_FAILED',\n}\n\nexport type MigrateResponse = {\n\treadonly ok: boolean\n\treadonly errors: MigrateError[]\n}\n\nexport class SystemClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(baseUrl: string, projectName: string, apiToken: string): SystemClient {\n\t\tconst graphqlClient = new GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken })\n\t\treturn new SystemClient(graphqlClient)\n\t}\n\n\tpublic async migrate(migrations: any[], force = false): Promise<void> {\n\t\tconst query = `\nmutation($migrations: [Migration!]!) {\n\tmigrate: ${force ? 'forceMigrate' : 'migrate'}(migrations: $migrations) {\n\t\tok\n\t\terrors {\n\t\t\tcode\n\t\t\tmigration\n\t\t\tmessage: developerMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrate: { ok: boolean; errors: { code: MigrateErrorCode; migration: string; message: string }[] }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tmigrations,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrate\n\t\tif (!result.ok) {\n\t\t\tthrow result.errors\n\t\t}\n\t}\n\n\tpublic async migrationDelete(version: string): Promise<void> {\n\t\tconst query = `\nmutation($version: String!) {\n\tmigrationDelete(migration: $version) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationDelete: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationDelete\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async migrationModify(version: string, modification: Partial<any>): Promise<void> {\n\t\tconst query = `\nmutation($version: String!, $modification: MigrationModification!) {\n\tmigrationModify(migration: $version, modification: $modification) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationModify: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t\tmodification,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationModify\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async listExecutedMigrations(): Promise<ExecutedMigrationInfo[]> {\n\t\tconst query = `query {\n\texecutedMigrations {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t}\n}`\n\t\treturn (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\texecutedMigrations: ExecutedMigrationInfo[]\n\t\t\t}>(query, {})\n\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))\n\t}\n\n\tpublic async getExecutedMigration(version: string): Promise<ExecutedMigration> {\n\t\tconst query = `query($version: String!) {\n\texecutedMigrations(version: $version) {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t\tmodifications\n\t}\n}`\n\t\treturn (\n\t\t\t(\n\t\t\t\tawait this.apiClient.execute<{\n\t\t\t\t\texecutedMigrations: ExecutedMigration[]\n\t\t\t\t}>(query, { variables: { version } })\n\t\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null\n\t\t)\n\t}\n}\n\nconst createSystemUrl = (baseUrl: string, projectName: string) => {\n\tif (baseUrl.endsWith('/')) {\n\t\tbaseUrl = baseUrl.substring(0, baseUrl.length - 1)\n\t}\n\treturn baseUrl + '/system/' + projectName\n}\n"],"names":["MigrateErrorCode"],"mappings":";AASO,IAAK,qCAAAA,sBAAL;AACNA,oBAAA,kBAAA,IAAmB;AACnBA,oBAAA,iBAAA,IAAkB;AAClBA,oBAAA,eAAA,IAAgB;AAChBA,oBAAA,eAAA,IAAgB;AAChBA,oBAAA,iBAAA,IAAkB;AALP,SAAAA;AAAA,GAAA,oBAAA,CAAA,CAAA;AAaL,MAAM,aAAa;AAAA,EACzB,YAA6B,WAA0B;AAA1B,SAAA,YAAA;AAAA,EAA2B;AAAA,EAExD,OAAc,OAAO,SAAiB,aAAqB,UAAgC;AAC1F,UAAM,gBAAgB,IAAI,cAAc,EAAE,KAAK,gBAAgB,SAAS,WAAW,GAAG,UAAU;AAChG,WAAO,IAAI,aAAa,aAAa;AAAA,EACtC;AAAA,EAEA,MAAa,QAAQ,YAAmB,QAAQ,OAAsB;AACrE,UAAM,QAAQ;AAAA;AAAA,YAEJ,QAAQ,iBAAiB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU5C,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IACD,CACA,GACA;AACF,QAAI,CAAC,OAAO,IAAI;AACf,YAAM,OAAO;AAAA,IACd;AAAA,EACD;AAAA,EAEA,MAAa,gBAAgB,SAAgC;AAC5D,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IACD,CACA,GACA;AACF,QAAI,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IACrB;AAAA,EACD;AAAA,EAEA,MAAa,gBAAgB,SAAiB,cAA2C;AACxF,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MAAA;AAAA,IACD,CACA,GACA;AACF,QAAI,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IACrB;AAAA,EACD;AAAA,EAEA,MAAa,yBAA2D;AACvE,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASd,YACC,MAAM,KAAK,UAAU,QAElB,OAAO,CAAA,CAAE,GACX,mBAAmB,IAAI,SAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,IAAI;AAAA,EAChF;AAAA,EAEA,MAAa,qBAAqB,SAA6C;AAC9E,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,YAEE,MAAM,KAAK,UAAU,QAElB,OAAO,EAAE,WAAW,EAAE,UAAQ,CAAG,GACnC,mBAAmB,IAAI,CAAA,QAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,EAAA,EAAI,EAAE,CAAC,KAAK;AAAA,EAEzF;AACD;AAEA,MAAM,kBAAkB,CAAC,SAAiB,gBAAwB;AACjE,MAAI,QAAQ,SAAS,GAAG,GAAG;AAC1B,cAAU,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,EAClD;AACA,SAAO,UAAU,aAAa;AAC/B;"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const schemaMigrations = require("@contember/schema-migrations");
4
+ const MigrationFile = require("./MigrationFile.cjs");
5
+ var MigrationState = /* @__PURE__ */ ((MigrationState2) => {
6
+ MigrationState2["TO_EXECUTE_OK"] = "to_execute_ok";
7
+ MigrationState2["TO_EXECUTE_ERROR"] = "to_execute_error";
8
+ MigrationState2["SKIP_EMPTY"] = "skip_empty";
9
+ MigrationState2["EXECUTED_OK"] = "executed_ok";
10
+ MigrationState2["EXECUTED_ERROR"] = "executed_error";
11
+ MigrationState2["EXECUTED_MISSING"] = "executed_missing";
12
+ return MigrationState2;
13
+ })(MigrationState || {});
14
+ const isErrorMigrationStatus = (migration) => [
15
+ "executed_error",
16
+ "executed_missing",
17
+ "to_execute_error"
18
+ /* TO_EXECUTE_ERROR */
19
+ ].includes(
20
+ migration.state
21
+ );
22
+ const sortMigrations = (migrations) => {
23
+ return [...migrations].sort((a, b) => a.version.localeCompare(b.version));
24
+ };
25
+ class MigrationsStatusResolver {
26
+ async getMigrationsStatus(executedMigrations, localMigrations, force = false) {
27
+ const sortedExecuted = sortMigrations(executedMigrations);
28
+ const allMigrations = [];
29
+ for (const executed of sortedExecuted) {
30
+ const localMigration = localMigrations.find((it) => it.version === executed.version);
31
+ if (!localMigration) {
32
+ allMigrations.push({
33
+ state: "executed_missing",
34
+ executedMigration: executed,
35
+ version: executed.version,
36
+ name: executed.name,
37
+ errorMessage: `Migration ${executed.name} is missing locally`
38
+ });
39
+ continue;
40
+ }
41
+ const migrationContent = await localMigration.getContent();
42
+ const localChecksum = !MigrationFile.isSchemaMigration(migrationContent) ? null : schemaMigrations.calculateMigrationChecksum(migrationContent);
43
+ if (localChecksum !== executed.checksum) {
44
+ allMigrations.push({
45
+ state: "executed_error",
46
+ executedMigration: executed,
47
+ version: executed.version,
48
+ name: executed.name,
49
+ localMigration,
50
+ errorMessage: `Checksum of executed migration "${executed.checksum}" does not match "${localChecksum}"`
51
+ });
52
+ continue;
53
+ }
54
+ allMigrations.push({
55
+ state: "executed_ok",
56
+ executedMigration: executed,
57
+ version: executed.version,
58
+ name: executed.name,
59
+ localMigration
60
+ });
61
+ }
62
+ const latestExecuted = sortedExecuted.length > 0 ? sortedExecuted[sortedExecuted.length - 1] : null;
63
+ for (const localMigration of localMigrations) {
64
+ if (allMigrations.find((it) => it.version === localMigration.version)) {
65
+ continue;
66
+ }
67
+ const migrationContent = await localMigration.getContent();
68
+ if (MigrationFile.isSchemaMigration(migrationContent) && migrationContent.modifications.length === 0) {
69
+ allMigrations.push({
70
+ state: "skip_empty",
71
+ localMigration,
72
+ version: localMigration.version,
73
+ name: localMigration.name
74
+ });
75
+ continue;
76
+ }
77
+ if (latestExecuted && latestExecuted.version > localMigration.version) {
78
+ allMigrations.push({
79
+ state: "to_execute_error",
80
+ localMigration,
81
+ version: localMigration.version,
82
+ name: localMigration.name,
83
+ errorMessage: `Must follow latest executed migration ${latestExecuted.name}`
84
+ });
85
+ continue;
86
+ }
87
+ allMigrations.push({
88
+ state: "to_execute_ok",
89
+ localMigration,
90
+ version: localMigration.version,
91
+ name: localMigration.name
92
+ });
93
+ }
94
+ const allMigrationsSorted = sortMigrations(allMigrations);
95
+ return {
96
+ allMigrations: allMigrationsSorted,
97
+ errorMigrations: allMigrationsSorted.filter(isErrorMigrationStatus),
98
+ migrationsToExecute: allMigrationsSorted.filter(
99
+ (it) => it.state === "to_execute_ok" || force && it.state === "to_execute_error"
100
+ /* TO_EXECUTE_ERROR */
101
+ )
102
+ };
103
+ }
104
+ }
105
+ exports.MigrationState = MigrationState;
106
+ exports.MigrationsStatusResolver = MigrationsStatusResolver;
107
+ exports.sortMigrations = sortMigrations;
108
+ //# sourceMappingURL=migrations.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.cjs","sources":["../../../../packages/migrations-client/src/migrations.ts"],"sourcesContent":["import { calculateMigrationChecksum, Migration, MigrationInfo } from '@contember/schema-migrations'\nimport { isSchemaMigration, MigrationFile } from './MigrationFile'\n\nexport interface ExecutedMigrationInfo extends MigrationInfo {\n\treadonly executedAt: Date\n\treadonly checksum: string\n}\n\nexport interface ExecutedMigration extends Migration {\n\treadonly executedAt: Date\n\treadonly checksum: string\n}\n\nexport enum MigrationState {\n\tTO_EXECUTE_OK = 'to_execute_ok',\n\tTO_EXECUTE_ERROR = 'to_execute_error',\n\tSKIP_EMPTY = 'skip_empty',\n\tEXECUTED_OK = 'executed_ok',\n\tEXECUTED_ERROR = 'executed_error',\n\tEXECUTED_MISSING = 'executed_missing',\n}\n\nexport interface MigrationStatusBase<S extends MigrationState> {\n\tstate: S\n\tversion: string\n\tname: string\n}\n\nexport interface MigrationToExecuteOkStatus extends MigrationStatusBase<MigrationState.TO_EXECUTE_OK> {\n\tlocalMigration: MigrationFile\n}\n\ninterface MigrationToExecuteInvalidStatus extends MigrationStatusBase<MigrationState.TO_EXECUTE_ERROR> {\n\tlocalMigration: MigrationFile\n\terrorMessage: string\n}\n\ninterface MigrationExecutedOkStatus extends MigrationStatusBase<MigrationState.EXECUTED_OK> {\n\texecutedMigration: ExecutedMigrationInfo\n\tlocalMigration: MigrationFile\n}\n\ninterface MigrationExecutedMissingStatus extends MigrationStatusBase<MigrationState.EXECUTED_MISSING> {\n\texecutedMigration: ExecutedMigrationInfo\n\terrorMessage: string\n}\n\ninterface MigrationExecutedErrorStatus extends MigrationStatusBase<MigrationState.EXECUTED_ERROR> {\n\texecutedMigration: ExecutedMigrationInfo\n\tlocalMigration: MigrationFile\n\terrorMessage: string\n}\n\nexport interface MigrationSkipStatus extends MigrationStatusBase<MigrationState.SKIP_EMPTY> {\n\tlocalMigration: MigrationFile\n}\n\nexport type ErrorMigrationStatus =\n\t| MigrationToExecuteInvalidStatus\n\t| MigrationExecutedMissingStatus\n\t| MigrationExecutedErrorStatus\n\nexport type AnyMigrationStatus =\n\t| ErrorMigrationStatus\n\t| MigrationToExecuteOkStatus\n\t| MigrationExecutedOkStatus\n\t| MigrationSkipStatus\n\nconst isErrorMigrationStatus = (migration: AnyMigrationStatus): migration is ErrorMigrationStatus =>\n\t[MigrationState.EXECUTED_ERROR, MigrationState.EXECUTED_MISSING, MigrationState.TO_EXECUTE_ERROR].includes(\n\t\tmigration.state,\n\t)\n\nexport const sortMigrations = <M extends { version: string }>(migrations: M[]): M[] => {\n\treturn [...migrations].sort((a, b) => a.version.localeCompare(b.version))\n}\n\nexport class MigrationsStatusResolver {\n\tasync getMigrationsStatus(\n\t\texecutedMigrations: ExecutedMigrationInfo[],\n\t\tlocalMigrations: MigrationFile[],\n\t\tforce: boolean = false,\n\t): Promise<{\n\t\tallMigrations: AnyMigrationStatus[]\n\t\terrorMigrations: ErrorMigrationStatus[]\n\t\tmigrationsToExecute: MigrationToExecuteOkStatus[]\n\t}> {\n\t\tconst sortedExecuted = sortMigrations(executedMigrations)\n\n\t\tconst allMigrations: AnyMigrationStatus[] = []\n\t\tfor (const executed of sortedExecuted) {\n\t\t\tconst localMigration = localMigrations.find(it => it.version === executed.version)\n\t\t\tif (!localMigration) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.EXECUTED_MISSING,\n\t\t\t\t\texecutedMigration: executed,\n\t\t\t\t\tversion: executed.version,\n\t\t\t\t\tname: executed.name,\n\t\t\t\t\terrorMessage: `Migration ${executed.name} is missing locally`,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst migrationContent = await localMigration.getContent()\n\n\t\t\tconst localChecksum = !isSchemaMigration(migrationContent) ? null : calculateMigrationChecksum(migrationContent)\n\n\t\t\tif (localChecksum !== executed.checksum) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.EXECUTED_ERROR,\n\t\t\t\t\texecutedMigration: executed,\n\t\t\t\t\tversion: executed.version,\n\t\t\t\t\tname: executed.name,\n\t\t\t\t\tlocalMigration,\n\t\t\t\t\terrorMessage: `Checksum of executed migration \"${executed.checksum}\" does not match \"${localChecksum}\"`,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tallMigrations.push({\n\t\t\t\tstate: MigrationState.EXECUTED_OK,\n\t\t\t\texecutedMigration: executed,\n\t\t\t\tversion: executed.version,\n\t\t\t\tname: executed.name,\n\t\t\t\tlocalMigration,\n\t\t\t})\n\t\t}\n\n\t\tconst latestExecuted = sortedExecuted.length > 0 ? sortedExecuted[sortedExecuted.length - 1] : null\n\t\tfor (const localMigration of localMigrations) {\n\t\t\tif (allMigrations.find(it => it.version === localMigration.version)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst migrationContent = await localMigration.getContent()\n\t\t\tif (isSchemaMigration(migrationContent) && migrationContent.modifications.length === 0) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.SKIP_EMPTY,\n\t\t\t\t\tlocalMigration,\n\t\t\t\t\tversion: localMigration.version,\n\t\t\t\t\tname: localMigration.name,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (latestExecuted && latestExecuted.version > localMigration.version) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.TO_EXECUTE_ERROR,\n\t\t\t\t\tlocalMigration,\n\t\t\t\t\tversion: localMigration.version,\n\t\t\t\t\tname: localMigration.name,\n\t\t\t\t\terrorMessage: `Must follow latest executed migration ${latestExecuted.name}`,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tallMigrations.push({\n\t\t\t\tstate: MigrationState.TO_EXECUTE_OK,\n\t\t\t\tlocalMigration,\n\t\t\t\tversion: localMigration.version,\n\t\t\t\tname: localMigration.name,\n\t\t\t})\n\t\t}\n\t\tconst allMigrationsSorted = sortMigrations(allMigrations)\n\n\t\treturn {\n\t\t\tallMigrations: allMigrationsSorted,\n\t\t\terrorMigrations: allMigrationsSorted.filter(isErrorMigrationStatus),\n\t\t\tmigrationsToExecute: allMigrationsSorted.filter(\n\t\t\t\t(it): it is MigrationToExecuteOkStatus => it.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n}\n"],"names":["MigrationState","isSchemaMigration","calculateMigrationChecksum"],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { calculateMigrationChecksum } from "@contember/schema-migrations";
2
+ import { isSchemaMigration } from "./MigrationFile.js";
3
+ var MigrationState = /* @__PURE__ */ ((MigrationState2) => {
4
+ MigrationState2["TO_EXECUTE_OK"] = "to_execute_ok";
5
+ MigrationState2["TO_EXECUTE_ERROR"] = "to_execute_error";
6
+ MigrationState2["SKIP_EMPTY"] = "skip_empty";
7
+ MigrationState2["EXECUTED_OK"] = "executed_ok";
8
+ MigrationState2["EXECUTED_ERROR"] = "executed_error";
9
+ MigrationState2["EXECUTED_MISSING"] = "executed_missing";
10
+ return MigrationState2;
11
+ })(MigrationState || {});
12
+ const isErrorMigrationStatus = (migration) => [
13
+ "executed_error",
14
+ "executed_missing",
15
+ "to_execute_error"
16
+ /* TO_EXECUTE_ERROR */
17
+ ].includes(
18
+ migration.state
19
+ );
20
+ const sortMigrations = (migrations) => {
21
+ return [...migrations].sort((a, b) => a.version.localeCompare(b.version));
22
+ };
23
+ class MigrationsStatusResolver {
24
+ async getMigrationsStatus(executedMigrations, localMigrations, force = false) {
25
+ const sortedExecuted = sortMigrations(executedMigrations);
26
+ const allMigrations = [];
27
+ for (const executed of sortedExecuted) {
28
+ const localMigration = localMigrations.find((it) => it.version === executed.version);
29
+ if (!localMigration) {
30
+ allMigrations.push({
31
+ state: "executed_missing",
32
+ executedMigration: executed,
33
+ version: executed.version,
34
+ name: executed.name,
35
+ errorMessage: `Migration ${executed.name} is missing locally`
36
+ });
37
+ continue;
38
+ }
39
+ const migrationContent = await localMigration.getContent();
40
+ const localChecksum = !isSchemaMigration(migrationContent) ? null : calculateMigrationChecksum(migrationContent);
41
+ if (localChecksum !== executed.checksum) {
42
+ allMigrations.push({
43
+ state: "executed_error",
44
+ executedMigration: executed,
45
+ version: executed.version,
46
+ name: executed.name,
47
+ localMigration,
48
+ errorMessage: `Checksum of executed migration "${executed.checksum}" does not match "${localChecksum}"`
49
+ });
50
+ continue;
51
+ }
52
+ allMigrations.push({
53
+ state: "executed_ok",
54
+ executedMigration: executed,
55
+ version: executed.version,
56
+ name: executed.name,
57
+ localMigration
58
+ });
59
+ }
60
+ const latestExecuted = sortedExecuted.length > 0 ? sortedExecuted[sortedExecuted.length - 1] : null;
61
+ for (const localMigration of localMigrations) {
62
+ if (allMigrations.find((it) => it.version === localMigration.version)) {
63
+ continue;
64
+ }
65
+ const migrationContent = await localMigration.getContent();
66
+ if (isSchemaMigration(migrationContent) && migrationContent.modifications.length === 0) {
67
+ allMigrations.push({
68
+ state: "skip_empty",
69
+ localMigration,
70
+ version: localMigration.version,
71
+ name: localMigration.name
72
+ });
73
+ continue;
74
+ }
75
+ if (latestExecuted && latestExecuted.version > localMigration.version) {
76
+ allMigrations.push({
77
+ state: "to_execute_error",
78
+ localMigration,
79
+ version: localMigration.version,
80
+ name: localMigration.name,
81
+ errorMessage: `Must follow latest executed migration ${latestExecuted.name}`
82
+ });
83
+ continue;
84
+ }
85
+ allMigrations.push({
86
+ state: "to_execute_ok",
87
+ localMigration,
88
+ version: localMigration.version,
89
+ name: localMigration.name
90
+ });
91
+ }
92
+ const allMigrationsSorted = sortMigrations(allMigrations);
93
+ return {
94
+ allMigrations: allMigrationsSorted,
95
+ errorMigrations: allMigrationsSorted.filter(isErrorMigrationStatus),
96
+ migrationsToExecute: allMigrationsSorted.filter(
97
+ (it) => it.state === "to_execute_ok" || force && it.state === "to_execute_error"
98
+ /* TO_EXECUTE_ERROR */
99
+ )
100
+ };
101
+ }
102
+ }
103
+ export {
104
+ MigrationState,
105
+ MigrationsStatusResolver,
106
+ sortMigrations
107
+ };
108
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sources":["../../../../packages/migrations-client/src/migrations.ts"],"sourcesContent":["import { calculateMigrationChecksum, Migration, MigrationInfo } from '@contember/schema-migrations'\nimport { isSchemaMigration, MigrationFile } from './MigrationFile'\n\nexport interface ExecutedMigrationInfo extends MigrationInfo {\n\treadonly executedAt: Date\n\treadonly checksum: string\n}\n\nexport interface ExecutedMigration extends Migration {\n\treadonly executedAt: Date\n\treadonly checksum: string\n}\n\nexport enum MigrationState {\n\tTO_EXECUTE_OK = 'to_execute_ok',\n\tTO_EXECUTE_ERROR = 'to_execute_error',\n\tSKIP_EMPTY = 'skip_empty',\n\tEXECUTED_OK = 'executed_ok',\n\tEXECUTED_ERROR = 'executed_error',\n\tEXECUTED_MISSING = 'executed_missing',\n}\n\nexport interface MigrationStatusBase<S extends MigrationState> {\n\tstate: S\n\tversion: string\n\tname: string\n}\n\nexport interface MigrationToExecuteOkStatus extends MigrationStatusBase<MigrationState.TO_EXECUTE_OK> {\n\tlocalMigration: MigrationFile\n}\n\ninterface MigrationToExecuteInvalidStatus extends MigrationStatusBase<MigrationState.TO_EXECUTE_ERROR> {\n\tlocalMigration: MigrationFile\n\terrorMessage: string\n}\n\ninterface MigrationExecutedOkStatus extends MigrationStatusBase<MigrationState.EXECUTED_OK> {\n\texecutedMigration: ExecutedMigrationInfo\n\tlocalMigration: MigrationFile\n}\n\ninterface MigrationExecutedMissingStatus extends MigrationStatusBase<MigrationState.EXECUTED_MISSING> {\n\texecutedMigration: ExecutedMigrationInfo\n\terrorMessage: string\n}\n\ninterface MigrationExecutedErrorStatus extends MigrationStatusBase<MigrationState.EXECUTED_ERROR> {\n\texecutedMigration: ExecutedMigrationInfo\n\tlocalMigration: MigrationFile\n\terrorMessage: string\n}\n\nexport interface MigrationSkipStatus extends MigrationStatusBase<MigrationState.SKIP_EMPTY> {\n\tlocalMigration: MigrationFile\n}\n\nexport type ErrorMigrationStatus =\n\t| MigrationToExecuteInvalidStatus\n\t| MigrationExecutedMissingStatus\n\t| MigrationExecutedErrorStatus\n\nexport type AnyMigrationStatus =\n\t| ErrorMigrationStatus\n\t| MigrationToExecuteOkStatus\n\t| MigrationExecutedOkStatus\n\t| MigrationSkipStatus\n\nconst isErrorMigrationStatus = (migration: AnyMigrationStatus): migration is ErrorMigrationStatus =>\n\t[MigrationState.EXECUTED_ERROR, MigrationState.EXECUTED_MISSING, MigrationState.TO_EXECUTE_ERROR].includes(\n\t\tmigration.state,\n\t)\n\nexport const sortMigrations = <M extends { version: string }>(migrations: M[]): M[] => {\n\treturn [...migrations].sort((a, b) => a.version.localeCompare(b.version))\n}\n\nexport class MigrationsStatusResolver {\n\tasync getMigrationsStatus(\n\t\texecutedMigrations: ExecutedMigrationInfo[],\n\t\tlocalMigrations: MigrationFile[],\n\t\tforce: boolean = false,\n\t): Promise<{\n\t\tallMigrations: AnyMigrationStatus[]\n\t\terrorMigrations: ErrorMigrationStatus[]\n\t\tmigrationsToExecute: MigrationToExecuteOkStatus[]\n\t}> {\n\t\tconst sortedExecuted = sortMigrations(executedMigrations)\n\n\t\tconst allMigrations: AnyMigrationStatus[] = []\n\t\tfor (const executed of sortedExecuted) {\n\t\t\tconst localMigration = localMigrations.find(it => it.version === executed.version)\n\t\t\tif (!localMigration) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.EXECUTED_MISSING,\n\t\t\t\t\texecutedMigration: executed,\n\t\t\t\t\tversion: executed.version,\n\t\t\t\t\tname: executed.name,\n\t\t\t\t\terrorMessage: `Migration ${executed.name} is missing locally`,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst migrationContent = await localMigration.getContent()\n\n\t\t\tconst localChecksum = !isSchemaMigration(migrationContent) ? null : calculateMigrationChecksum(migrationContent)\n\n\t\t\tif (localChecksum !== executed.checksum) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.EXECUTED_ERROR,\n\t\t\t\t\texecutedMigration: executed,\n\t\t\t\t\tversion: executed.version,\n\t\t\t\t\tname: executed.name,\n\t\t\t\t\tlocalMigration,\n\t\t\t\t\terrorMessage: `Checksum of executed migration \"${executed.checksum}\" does not match \"${localChecksum}\"`,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tallMigrations.push({\n\t\t\t\tstate: MigrationState.EXECUTED_OK,\n\t\t\t\texecutedMigration: executed,\n\t\t\t\tversion: executed.version,\n\t\t\t\tname: executed.name,\n\t\t\t\tlocalMigration,\n\t\t\t})\n\t\t}\n\n\t\tconst latestExecuted = sortedExecuted.length > 0 ? sortedExecuted[sortedExecuted.length - 1] : null\n\t\tfor (const localMigration of localMigrations) {\n\t\t\tif (allMigrations.find(it => it.version === localMigration.version)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst migrationContent = await localMigration.getContent()\n\t\t\tif (isSchemaMigration(migrationContent) && migrationContent.modifications.length === 0) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.SKIP_EMPTY,\n\t\t\t\t\tlocalMigration,\n\t\t\t\t\tversion: localMigration.version,\n\t\t\t\t\tname: localMigration.name,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (latestExecuted && latestExecuted.version > localMigration.version) {\n\t\t\t\tallMigrations.push({\n\t\t\t\t\tstate: MigrationState.TO_EXECUTE_ERROR,\n\t\t\t\t\tlocalMigration,\n\t\t\t\t\tversion: localMigration.version,\n\t\t\t\t\tname: localMigration.name,\n\t\t\t\t\terrorMessage: `Must follow latest executed migration ${latestExecuted.name}`,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tallMigrations.push({\n\t\t\t\tstate: MigrationState.TO_EXECUTE_OK,\n\t\t\t\tlocalMigration,\n\t\t\t\tversion: localMigration.version,\n\t\t\t\tname: localMigration.name,\n\t\t\t})\n\t\t}\n\t\tconst allMigrationsSorted = sortMigrations(allMigrations)\n\n\t\treturn {\n\t\t\tallMigrations: allMigrationsSorted,\n\t\t\terrorMigrations: allMigrationsSorted.filter(isErrorMigrationStatus),\n\t\t\tmigrationsToExecute: allMigrationsSorted.filter(\n\t\t\t\t(it): it is MigrationToExecuteOkStatus => it.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n}\n"],"names":["MigrationState"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function assertNever(_) {
4
+ throw new Error();
5
+ }
6
+ exports.assertNever = assertNever;
7
+ //# sourceMappingURL=assertNever.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertNever.cjs","sources":["../../../../../packages/migrations-client/src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":";;AAAO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI,MAAA;AACX;;"}
@@ -0,0 +1,7 @@
1
+ function assertNever(_) {
2
+ throw new Error();
3
+ }
4
+ export {
5
+ assertNever
6
+ };
7
+ //# sourceMappingURL=assertNever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertNever.js","sources":["../../../../../packages/migrations-client/src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI,MAAA;AACX;"}
@@ -0,0 +1,10 @@
1
+ import { MigrationFileLoader } from './MigrationFileLoader';
2
+ import { MigrationParser } from './MigrationParser';
3
+ import { MigrationContent, MigrationFile } from './MigrationFile';
4
+ export declare class JsLoader implements MigrationFileLoader {
5
+ private readonly migrationParser;
6
+ private readonly jsExecutor;
7
+ constructor(migrationParser: MigrationParser, jsExecutor: (file: string) => Promise<any>);
8
+ load(file: MigrationFile): Promise<MigrationContent>;
9
+ }
10
+ //# sourceMappingURL=JsLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsLoader.d.ts","sourceRoot":"","sources":["../../src/JsLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAiD,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEhH,qBAAa,QAAS,YAAW,mBAAmB;IAElD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC;IAI/C,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAqBjE"}
@@ -0,0 +1,9 @@
1
+ import { MigrationFileLoader } from './MigrationFileLoader';
2
+ import { MigrationParser } from './MigrationParser';
3
+ import { MigrationFile } from './MigrationFile';
4
+ export declare class JsonLoader implements MigrationFileLoader {
5
+ private readonly migrationParser;
6
+ constructor(migrationParser: MigrationParser);
7
+ load(file: MigrationFile): Promise<import("./MigrationFile").ResolvedMigrationContent>;
8
+ }
9
+ //# sourceMappingURL=JsonLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonLoader.d.ts","sourceRoot":"","sources":["../../src/JsonLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,qBAAa,UAAW,YAAW,mBAAmB;IAEpD,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAIrC,IAAI,CAAC,IAAI,EAAE,aAAa;CAMrC"}
@@ -0,0 +1,21 @@
1
+ import { MigrationFilesManager } from './MigrationFilesManager';
2
+ import { Schema } from '@contember/schema';
3
+ import { Migration, SchemaDiffer } from '@contember/schema-migrations';
4
+ export declare class MigrationCreator {
5
+ private readonly migrationFilesManager;
6
+ private readonly schemaDiffer;
7
+ private readonly emptyTemplates;
8
+ constructor(migrationFilesManager: MigrationFilesManager, schemaDiffer: SchemaDiffer, emptyTemplates?: Record<string, string>);
9
+ createEmptyMigrationFile(migrationName: string, format: string): Promise<string>;
10
+ prepareMigration(initialSchema: Schema, newSchema: Schema, migrationName: string, { skipInitialSchemaValidation }?: {
11
+ skipInitialSchemaValidation?: boolean;
12
+ }): Promise<{
13
+ migration: Migration;
14
+ initialSchema: Schema;
15
+ } | null>;
16
+ saveMigration(migration: Migration): Promise<string>;
17
+ removeMigration(name: string): Promise<void>;
18
+ private createMigration;
19
+ static createContent({ modifications, formatVersion }: Migration): string;
20
+ }
21
+ //# sourceMappingURL=MigrationCreator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationCreator.d.ts","sourceRoot":"","sources":["../../src/MigrationCreator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,MAAM,8BAA8B,CAAA;AAGtF,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,qBAAqB,EAAE,qBAAqB,EAC5C,YAAY,EAAE,YAAY,EAC1B,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAGvD,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhF,gBAAgB,CACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,EAAE,2BAAmC,EAAE,GAAE;QAAE,2BAA2B,CAAC,EAAE,OAAO,CAAA;KAAO,GACrF,OAAO,CAAC;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAa5D,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAMpD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,OAAO,CAAC,eAAe;WAKT,aAAa,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,SAAS,GAAG,MAAM;CAGhF"}
@@ -0,0 +1,13 @@
1
+ import { MigrationToExecuteOkStatus } from './migrations';
2
+ import { ContentMigrationFactoryArgs } from './MigrationFile';
3
+ import { SystemClient } from './SystemClient';
4
+ export declare class MigrationExecutor {
5
+ executeMigrations({ client, migrations, contentMigrationFactoryArgs, force, log, }: {
6
+ client: SystemClient;
7
+ migrations: MigrationToExecuteOkStatus[];
8
+ contentMigrationFactoryArgs: Omit<ContentMigrationFactoryArgs, 'migration'>;
9
+ log: (message: string) => void;
10
+ force?: boolean;
11
+ }): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=MigrationExecuteHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationExecuteHelper.d.ts","sourceRoot":"","sources":["../../src/MigrationExecuteHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,2BAA2B,EAA4B,MAAM,iBAAiB,CAAA;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,qBAAa,iBAAiB;IACvB,iBAAiB,CAAC,EACvB,MAAM,EACN,UAAU,EACV,2BAA2B,EAC3B,KAAK,EACL,GAAgB,GAChB,EAAE;QACF,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,0BAA0B,EAAE,CAAA;QACxC,2BAA2B,EAAE,IAAI,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAA;QAC3E,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;QAC9B,KAAK,CAAC,EAAE,OAAO,CAAA;KACf,GAAG,OAAO,CAAC,IAAI,CAAC;CA6DjB"}