@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,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,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const schemaMigrations = require("@contember/schema-migrations");
4
+ const JsLoader = require("./src/JsLoader.cjs");
5
+ const JsonLoader = require("./src/JsonLoader.cjs");
6
+ const MigrationCreator = require("./src/MigrationCreator.cjs");
7
+ const MigrationExecuteHelper = require("./src/MigrationExecuteHelper.cjs");
8
+ const MigrationFile = require("./src/MigrationFile.cjs");
9
+ const MigrationFilesManager = require("./src/MigrationFilesManager.cjs");
10
+ const MigrationParser = require("./src/MigrationParser.cjs");
11
+ const migrations = require("./src/migrations.cjs");
12
+ const MigrationsResolver = require("./src/MigrationsResolver.cjs");
13
+ const SchemaVersionBuilder = require("./src/SchemaVersionBuilder.cjs");
14
+ const SystemClient = require("./src/SystemClient.cjs");
15
+ Object.defineProperty(exports, "MigrationDescriber", {
16
+ enumerable: true,
17
+ get: () => schemaMigrations.MigrationDescriber
18
+ });
19
+ Object.defineProperty(exports, "ModificationHandlerFactory", {
20
+ enumerable: true,
21
+ get: () => schemaMigrations.ModificationHandlerFactory
22
+ });
23
+ Object.defineProperty(exports, "SchemaDiffer", {
24
+ enumerable: true,
25
+ get: () => schemaMigrations.SchemaDiffer
26
+ });
27
+ Object.defineProperty(exports, "SchemaMigrator", {
28
+ enumerable: true,
29
+ get: () => schemaMigrations.SchemaMigrator
30
+ });
31
+ Object.defineProperty(exports, "VERSION_LATEST", {
32
+ enumerable: true,
33
+ get: () => schemaMigrations.VERSION_LATEST
34
+ });
35
+ Object.defineProperty(exports, "calculateMigrationChecksum", {
36
+ enumerable: true,
37
+ get: () => schemaMigrations.calculateMigrationChecksum
38
+ });
39
+ exports.JsLoader = JsLoader.JsLoader;
40
+ exports.JsonLoader = JsonLoader.JsonLoader;
41
+ exports.MigrationCreator = MigrationCreator.MigrationCreator;
42
+ exports.MigrationExecutor = MigrationExecuteHelper.MigrationExecutor;
43
+ exports.isSchemaMigration = MigrationFile.isSchemaMigration;
44
+ exports.MigrationFilesManager = MigrationFilesManager.MigrationFilesManager;
45
+ exports.MigrationParser = MigrationParser.MigrationParser;
46
+ exports.MigrationState = migrations.MigrationState;
47
+ exports.MigrationsStatusResolver = migrations.MigrationsStatusResolver;
48
+ exports.sortMigrations = migrations.sortMigrations;
49
+ exports.MigrationsResolver = MigrationsResolver.MigrationsResolver;
50
+ exports.SchemaVersionBuilder = SchemaVersionBuilder.SchemaVersionBuilder;
51
+ exports.MigrateErrorCode = SystemClient.MigrateErrorCode;
52
+ exports.SystemClient = SystemClient.SystemClient;
53
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,35 @@
1
+ import { MigrationDescriber, ModificationHandlerFactory, SchemaDiffer, SchemaMigrator, VERSION_LATEST, calculateMigrationChecksum } from "@contember/schema-migrations";
2
+ import { JsLoader } from "./src/JsLoader.js";
3
+ import { JsonLoader } from "./src/JsonLoader.js";
4
+ import { MigrationCreator } from "./src/MigrationCreator.js";
5
+ import { MigrationExecutor } from "./src/MigrationExecuteHelper.js";
6
+ import { isSchemaMigration } from "./src/MigrationFile.js";
7
+ import { MigrationFilesManager } from "./src/MigrationFilesManager.js";
8
+ import { MigrationParser } from "./src/MigrationParser.js";
9
+ import { MigrationState, MigrationsStatusResolver, sortMigrations } from "./src/migrations.js";
10
+ import { MigrationsResolver } from "./src/MigrationsResolver.js";
11
+ import { SchemaVersionBuilder } from "./src/SchemaVersionBuilder.js";
12
+ import { MigrateErrorCode, SystemClient } from "./src/SystemClient.js";
13
+ export {
14
+ JsLoader,
15
+ JsonLoader,
16
+ MigrateErrorCode,
17
+ MigrationCreator,
18
+ MigrationDescriber,
19
+ MigrationExecutor,
20
+ MigrationFilesManager,
21
+ MigrationParser,
22
+ MigrationState,
23
+ MigrationsResolver,
24
+ MigrationsStatusResolver,
25
+ ModificationHandlerFactory,
26
+ SchemaDiffer,
27
+ SchemaMigrator,
28
+ SchemaVersionBuilder,
29
+ SystemClient,
30
+ VERSION_LATEST,
31
+ calculateMigrationChecksum,
32
+ isSchemaMigration,
33
+ sortMigrations
34
+ };
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ class JsLoader {
4
+ constructor(migrationParser, jsExecutor) {
5
+ this.migrationParser = migrationParser;
6
+ this.jsExecutor = jsExecutor;
7
+ }
8
+ async load(file) {
9
+ const exports$1 = await this.jsExecutor(file.path);
10
+ if (!("default" in exports$1) && !("query" in exports$1) && !("queries" in exports$1)) {
11
+ throw `export "default" or "query" is required in ${file.path}`;
12
+ }
13
+ if (typeof exports$1.default !== "function") {
14
+ return this.migrationParser.parse(file, exports$1.default || exports$1);
15
+ }
16
+ return {
17
+ type: "factory",
18
+ factory: async (args) => {
19
+ const result = await exports$1.default(args);
20
+ const migration = this.migrationParser.parse(file, result ?? { queries: [] });
21
+ if (migration.type !== "content") {
22
+ throw new Error();
23
+ }
24
+ return migration;
25
+ }
26
+ };
27
+ }
28
+ }
29
+ exports.JsLoader = JsLoader;
30
+ //# sourceMappingURL=JsLoader.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsLoader.cjs","sources":["../../../../packages/migrations-client/src/JsLoader.ts"],"sourcesContent":["import { MigrationFileLoader } from './MigrationFileLoader'\nimport { MigrationParser } from './MigrationParser'\nimport { ContentMigration, ContentMigrationFactoryArgs, MigrationContent, MigrationFile } from './MigrationFile'\n\nexport class JsLoader implements MigrationFileLoader {\n\tconstructor(\n\t\tprivate readonly migrationParser: MigrationParser,\n\t\tprivate readonly jsExecutor: (file: string) => Promise<any>,\n\t) {\n\t}\n\n\tpublic async load(file: MigrationFile): Promise<MigrationContent> {\n\t\tconst exports = await this.jsExecutor(file.path)\n\t\tif (!('default' in exports) && !('query' in exports) && !('queries' in exports)) {\n\t\t\tthrow `export \"default\" or \"query\" is required in ${file.path}`\n\t\t}\n\t\tif (typeof exports.default !== 'function') {\n\t\t\treturn this.migrationParser.parse(file, exports.default || exports)\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'factory',\n\t\t\tfactory: async (args: ContentMigrationFactoryArgs): Promise<ContentMigration> => {\n\t\t\t\tconst result = await exports.default(args)\n\t\t\t\tconst migration = this.migrationParser.parse(file, result ?? { queries: [] })\n\t\t\t\tif (migration.type !== 'content') {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\treturn migration\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["exports"],"mappings":";;AAIO,MAAM,SAAwC;AAAA,EACpD,YACkB,iBACA,YAChB;AAFgB,SAAA,kBAAA;AACA,SAAA,aAAA;AAAA,EAElB;AAAA,EAEA,MAAa,KAAK,MAAgD;AACjE,UAAMA,YAAU,MAAM,KAAK,WAAW,KAAK,IAAI;AAC/C,QAAI,EAAE,aAAaA,cAAY,EAAE,WAAWA,cAAY,EAAE,aAAaA,YAAU;AAChF,YAAM,8CAA8C,KAAK,IAAI;AAAA,IAC9D;AACA,QAAI,OAAOA,UAAQ,YAAY,YAAY;AAC1C,aAAO,KAAK,gBAAgB,MAAM,MAAMA,UAAQ,WAAWA,SAAO;AAAA,IACnE;AAEA,WAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS,OAAO,SAAiE;AAChF,cAAM,SAAS,MAAMA,UAAQ,QAAQ,IAAI;AACzC,cAAM,YAAY,KAAK,gBAAgB,MAAM,MAAM,UAAU,EAAE,SAAS,CAAA,GAAI;AAC5E,YAAI,UAAU,SAAS,WAAW;AACjC,gBAAM,IAAI,MAAA;AAAA,QACX;AACA,eAAO;AAAA,MACR;AAAA,IAAA;AAAA,EAEF;AACD;;"}
@@ -0,0 +1,30 @@
1
+ class JsLoader {
2
+ constructor(migrationParser, jsExecutor) {
3
+ this.migrationParser = migrationParser;
4
+ this.jsExecutor = jsExecutor;
5
+ }
6
+ async load(file) {
7
+ const exports$1 = await this.jsExecutor(file.path);
8
+ if (!("default" in exports$1) && !("query" in exports$1) && !("queries" in exports$1)) {
9
+ throw `export "default" or "query" is required in ${file.path}`;
10
+ }
11
+ if (typeof exports$1.default !== "function") {
12
+ return this.migrationParser.parse(file, exports$1.default || exports$1);
13
+ }
14
+ return {
15
+ type: "factory",
16
+ factory: async (args) => {
17
+ const result = await exports$1.default(args);
18
+ const migration = this.migrationParser.parse(file, result ?? { queries: [] });
19
+ if (migration.type !== "content") {
20
+ throw new Error();
21
+ }
22
+ return migration;
23
+ }
24
+ };
25
+ }
26
+ }
27
+ export {
28
+ JsLoader
29
+ };
30
+ //# sourceMappingURL=JsLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsLoader.js","sources":["../../../../packages/migrations-client/src/JsLoader.ts"],"sourcesContent":["import { MigrationFileLoader } from './MigrationFileLoader'\nimport { MigrationParser } from './MigrationParser'\nimport { ContentMigration, ContentMigrationFactoryArgs, MigrationContent, MigrationFile } from './MigrationFile'\n\nexport class JsLoader implements MigrationFileLoader {\n\tconstructor(\n\t\tprivate readonly migrationParser: MigrationParser,\n\t\tprivate readonly jsExecutor: (file: string) => Promise<any>,\n\t) {\n\t}\n\n\tpublic async load(file: MigrationFile): Promise<MigrationContent> {\n\t\tconst exports = await this.jsExecutor(file.path)\n\t\tif (!('default' in exports) && !('query' in exports) && !('queries' in exports)) {\n\t\t\tthrow `export \"default\" or \"query\" is required in ${file.path}`\n\t\t}\n\t\tif (typeof exports.default !== 'function') {\n\t\t\treturn this.migrationParser.parse(file, exports.default || exports)\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'factory',\n\t\t\tfactory: async (args: ContentMigrationFactoryArgs): Promise<ContentMigration> => {\n\t\t\t\tconst result = await exports.default(args)\n\t\t\t\tconst migration = this.migrationParser.parse(file, result ?? { queries: [] })\n\t\t\t\tif (migration.type !== 'content') {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t\treturn migration\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["exports"],"mappings":"AAIO,MAAM,SAAwC;AAAA,EACpD,YACkB,iBACA,YAChB;AAFgB,SAAA,kBAAA;AACA,SAAA,aAAA;AAAA,EAElB;AAAA,EAEA,MAAa,KAAK,MAAgD;AACjE,UAAMA,YAAU,MAAM,KAAK,WAAW,KAAK,IAAI;AAC/C,QAAI,EAAE,aAAaA,cAAY,EAAE,WAAWA,cAAY,EAAE,aAAaA,YAAU;AAChF,YAAM,8CAA8C,KAAK,IAAI;AAAA,IAC9D;AACA,QAAI,OAAOA,UAAQ,YAAY,YAAY;AAC1C,aAAO,KAAK,gBAAgB,MAAM,MAAMA,UAAQ,WAAWA,SAAO;AAAA,IACnE;AAEA,WAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS,OAAO,SAAiE;AAChF,cAAM,SAAS,MAAMA,UAAQ,QAAQ,IAAI;AACzC,cAAM,YAAY,KAAK,gBAAgB,MAAM,MAAM,UAAU,EAAE,SAAS,CAAA,GAAI;AAC5E,YAAI,UAAU,SAAS,WAAW;AACjC,gBAAM,IAAI,MAAA;AAAA,QACX;AACA,eAAO;AAAA,MACR;AAAA,IAAA;AAAA,EAEF;AACD;"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const fs = require("node:fs/promises");
4
+ function _interopNamespaceDefault(e) {
5
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
6
+ if (e) {
7
+ for (const k in e) {
8
+ if (k !== "default") {
9
+ const d = Object.getOwnPropertyDescriptor(e, k);
10
+ Object.defineProperty(n, k, d.get ? d : {
11
+ enumerable: true,
12
+ get: () => e[k]
13
+ });
14
+ }
15
+ }
16
+ }
17
+ n.default = e;
18
+ return Object.freeze(n);
19
+ }
20
+ const fs__namespace = /* @__PURE__ */ _interopNamespaceDefault(fs);
21
+ class JsonLoader {
22
+ constructor(migrationParser) {
23
+ this.migrationParser = migrationParser;
24
+ }
25
+ async load(file) {
26
+ return this.migrationParser.parse(
27
+ file,
28
+ JSON.parse(await fs__namespace.readFile(file.path, { encoding: "utf8" }))
29
+ );
30
+ }
31
+ }
32
+ exports.JsonLoader = JsonLoader;
33
+ //# sourceMappingURL=JsonLoader.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonLoader.cjs","sources":["../../../../packages/migrations-client/src/JsonLoader.ts"],"sourcesContent":["import { MigrationFileLoader } from './MigrationFileLoader'\nimport * as fs from 'node:fs/promises'\nimport { MigrationParser } from './MigrationParser'\nimport { MigrationFile } from './MigrationFile'\n\nexport class JsonLoader implements MigrationFileLoader {\n\tconstructor(\n\t\tprivate readonly migrationParser: MigrationParser,\n\t) {\n\t}\n\n\tpublic async load(file: MigrationFile) {\n\t\treturn this.migrationParser.parse(\n\t\t\tfile,\n\t\t\tJSON.parse(await fs.readFile(file.path, { encoding: 'utf8' })),\n\t\t)\n\t}\n}\n"],"names":["fs"],"mappings":";;;;;;;;;;;;;;;;;;;;AAKO,MAAM,WAA0C;AAAA,EACtD,YACkB,iBAChB;AADgB,SAAA,kBAAA;AAAA,EAElB;AAAA,EAEA,MAAa,KAAK,MAAqB;AACtC,WAAO,KAAK,gBAAgB;AAAA,MAC3B;AAAA,MACA,KAAK,MAAM,MAAMA,cAAG,SAAS,KAAK,MAAM,EAAE,UAAU,QAAQ,CAAC;AAAA,IAAA;AAAA,EAE/D;AACD;;"}
@@ -0,0 +1,16 @@
1
+ import * as fs from "node:fs/promises";
2
+ class JsonLoader {
3
+ constructor(migrationParser) {
4
+ this.migrationParser = migrationParser;
5
+ }
6
+ async load(file) {
7
+ return this.migrationParser.parse(
8
+ file,
9
+ JSON.parse(await fs.readFile(file.path, { encoding: "utf8" }))
10
+ );
11
+ }
12
+ }
13
+ export {
14
+ JsonLoader
15
+ };
16
+ //# sourceMappingURL=JsonLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonLoader.js","sources":["../../../../packages/migrations-client/src/JsonLoader.ts"],"sourcesContent":["import { MigrationFileLoader } from './MigrationFileLoader'\nimport * as fs from 'node:fs/promises'\nimport { MigrationParser } from './MigrationParser'\nimport { MigrationFile } from './MigrationFile'\n\nexport class JsonLoader implements MigrationFileLoader {\n\tconstructor(\n\t\tprivate readonly migrationParser: MigrationParser,\n\t) {\n\t}\n\n\tpublic async load(file: MigrationFile) {\n\t\treturn this.migrationParser.parse(\n\t\t\tfile,\n\t\t\tJSON.parse(await fs.readFile(file.path, { encoding: 'utf8' })),\n\t\t)\n\t}\n}\n"],"names":[],"mappings":";AAKO,MAAM,WAA0C;AAAA,EACtD,YACkB,iBAChB;AADgB,SAAA,kBAAA;AAAA,EAElB;AAAA,EAEA,MAAa,KAAK,MAAqB;AACtC,WAAO,KAAK,gBAAgB;AAAA,MAC3B;AAAA,MACA,KAAK,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,EAAE,UAAU,QAAQ,CAAC;AAAA,IAAA;AAAA,EAE/D;AACD;"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const schemaMigrations = require("@contember/schema-migrations");
4
+ const engineCommon = require("@contember/engine-common");
5
+ class MigrationCreator {
6
+ constructor(migrationFilesManager, schemaDiffer, emptyTemplates = {}) {
7
+ this.migrationFilesManager = migrationFilesManager;
8
+ this.schemaDiffer = schemaDiffer;
9
+ this.emptyTemplates = emptyTemplates;
10
+ }
11
+ async createEmptyMigrationFile(migrationName, format) {
12
+ if (!this.emptyTemplates.hasOwnProperty(format)) {
13
+ throw new Error(`Unknown format ${format}`);
14
+ }
15
+ await this.migrationFilesManager.createDirIfNotExist();
16
+ const [, fullName] = engineCommon.MigrationVersionHelper.createVersion(migrationName);
17
+ const filename = await this.migrationFilesManager.createFile(this.emptyTemplates[format], fullName, format);
18
+ return filename;
19
+ }
20
+ async prepareMigration(initialSchema, newSchema, migrationName, { skipInitialSchemaValidation = false } = {}) {
21
+ await this.migrationFilesManager.createDirIfNotExist();
22
+ const modifications = this.schemaDiffer.diffSchemas(initialSchema, newSchema, { skipInitialSchemaValidation });
23
+ if (modifications.length === 0) {
24
+ return null;
25
+ }
26
+ const migration = this.createMigration(modifications, migrationName);
27
+ return { initialSchema, migration };
28
+ }
29
+ async saveMigration(migration) {
30
+ const jsonDiff = MigrationCreator.createContent(migration);
31
+ const filename = await this.migrationFilesManager.createFile(jsonDiff, migration.name);
32
+ return filename;
33
+ }
34
+ async removeMigration(name) {
35
+ await this.migrationFilesManager.removeFile(name);
36
+ }
37
+ createMigration(modifications, name) {
38
+ const [version, fullName] = engineCommon.MigrationVersionHelper.createVersion(name);
39
+ return { formatVersion: schemaMigrations.VERSION_LATEST, modifications, version, name: fullName };
40
+ }
41
+ static createContent({ modifications, formatVersion }) {
42
+ return JSON.stringify({ formatVersion, modifications }, void 0, " ") + "\n";
43
+ }
44
+ }
45
+ exports.MigrationCreator = MigrationCreator;
46
+ //# sourceMappingURL=MigrationCreator.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationCreator.cjs","sources":["../../../../packages/migrations-client/src/MigrationCreator.ts"],"sourcesContent":["import { MigrationFilesManager } from './MigrationFilesManager'\nimport { Schema } from '@contember/schema'\nimport { Migration, SchemaDiffer, VERSION_LATEST } from '@contember/schema-migrations'\nimport { MigrationVersionHelper } from '@contember/engine-common'\n\nexport class MigrationCreator {\n\tconstructor(\n\t\tprivate readonly migrationFilesManager: MigrationFilesManager,\n\t\tprivate readonly schemaDiffer: SchemaDiffer,\n\t\tprivate readonly emptyTemplates: Record<string, string> = {},\n\t) {}\n\n\tasync createEmptyMigrationFile(migrationName: string, format: string): Promise<string> {\n\t\tif (!this.emptyTemplates.hasOwnProperty(format)) {\n\t\t\tthrow new Error(`Unknown format ${format}`)\n\t\t}\n\t\tawait this.migrationFilesManager.createDirIfNotExist()\n\t\tconst [, fullName] = MigrationVersionHelper.createVersion(migrationName)\n\t\tconst filename = await this.migrationFilesManager.createFile(this.emptyTemplates[format], fullName, format)\n\n\t\treturn filename\n\t}\n\n\tasync prepareMigration(\n\t\tinitialSchema: Schema,\n\t\tnewSchema: Schema,\n\t\tmigrationName: string,\n\t\t{ skipInitialSchemaValidation = false }: { skipInitialSchemaValidation?: boolean } = {},\n\t): Promise<{ migration: Migration; initialSchema: Schema } | null> {\n\t\tawait this.migrationFilesManager.createDirIfNotExist()\n\n\t\tconst modifications = this.schemaDiffer.diffSchemas(initialSchema, newSchema, { skipInitialSchemaValidation })\n\t\tif (modifications.length === 0) {\n\t\t\treturn null\n\t\t}\n\n\t\tconst migration = this.createMigration(modifications, migrationName)\n\n\t\treturn { initialSchema, migration }\n\t}\n\n\tasync saveMigration(migration: Migration): Promise<string> {\n\t\tconst jsonDiff = MigrationCreator.createContent(migration)\n\t\tconst filename = await this.migrationFilesManager.createFile(jsonDiff, migration.name)\n\t\treturn filename\n\t}\n\n\tasync removeMigration(name: string): Promise<void> {\n\t\tawait this.migrationFilesManager.removeFile(name)\n\t}\n\n\tprivate createMigration(modifications: Migration.Modification[], name: string): Migration {\n\t\tconst [version, fullName] = MigrationVersionHelper.createVersion(name)\n\t\treturn { formatVersion: VERSION_LATEST, modifications, version, name: fullName }\n\t}\n\n\tpublic static createContent({ modifications, formatVersion }: Migration): string {\n\t\treturn JSON.stringify({ formatVersion, modifications }, undefined, '\\t') + '\\n'\n\t}\n}\n"],"names":["MigrationVersionHelper","VERSION_LATEST"],"mappings":";;;;AAKO,MAAM,iBAAiB;AAAA,EAC7B,YACkB,uBACA,cACA,iBAAyC,CAAA,GACzD;AAHgB,SAAA,wBAAA;AACA,SAAA,eAAA;AACA,SAAA,iBAAA;AAAA,EACf;AAAA,EAEH,MAAM,yBAAyB,eAAuB,QAAiC;AACtF,QAAI,CAAC,KAAK,eAAe,eAAe,MAAM,GAAG;AAChD,YAAM,IAAI,MAAM,kBAAkB,MAAM,EAAE;AAAA,IAC3C;AACA,UAAM,KAAK,sBAAsB,oBAAA;AACjC,UAAM,CAAA,EAAG,QAAQ,IAAIA,oCAAuB,cAAc,aAAa;AACvE,UAAM,WAAW,MAAM,KAAK,sBAAsB,WAAW,KAAK,eAAe,MAAM,GAAG,UAAU,MAAM;AAE1G,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,iBACL,eACA,WACA,eACA,EAAE,8BAA8B,MAAA,IAAqD,IACnB;AAClE,UAAM,KAAK,sBAAsB,oBAAA;AAEjC,UAAM,gBAAgB,KAAK,aAAa,YAAY,eAAe,WAAW,EAAE,6BAA6B;AAC7G,QAAI,cAAc,WAAW,GAAG;AAC/B,aAAO;AAAA,IACR;AAEA,UAAM,YAAY,KAAK,gBAAgB,eAAe,aAAa;AAEnE,WAAO,EAAE,eAAe,UAAA;AAAA,EACzB;AAAA,EAEA,MAAM,cAAc,WAAuC;AAC1D,UAAM,WAAW,iBAAiB,cAAc,SAAS;AACzD,UAAM,WAAW,MAAM,KAAK,sBAAsB,WAAW,UAAU,UAAU,IAAI;AACrF,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,gBAAgB,MAA6B;AAClD,UAAM,KAAK,sBAAsB,WAAW,IAAI;AAAA,EACjD;AAAA,EAEQ,gBAAgB,eAAyC,MAAyB;AACzF,UAAM,CAAC,SAAS,QAAQ,IAAIA,aAAAA,uBAAuB,cAAc,IAAI;AACrE,WAAO,EAAE,eAAeC,iBAAAA,gBAAgB,eAAe,SAAS,MAAM,SAAA;AAAA,EACvE;AAAA,EAEA,OAAc,cAAc,EAAE,eAAe,iBAAoC;AAChF,WAAO,KAAK,UAAU,EAAE,eAAe,iBAAiB,QAAW,GAAI,IAAI;AAAA,EAC5E;AACD;;"}
@@ -0,0 +1,46 @@
1
+ import { VERSION_LATEST } from "@contember/schema-migrations";
2
+ import { MigrationVersionHelper } from "@contember/engine-common";
3
+ class MigrationCreator {
4
+ constructor(migrationFilesManager, schemaDiffer, emptyTemplates = {}) {
5
+ this.migrationFilesManager = migrationFilesManager;
6
+ this.schemaDiffer = schemaDiffer;
7
+ this.emptyTemplates = emptyTemplates;
8
+ }
9
+ async createEmptyMigrationFile(migrationName, format) {
10
+ if (!this.emptyTemplates.hasOwnProperty(format)) {
11
+ throw new Error(`Unknown format ${format}`);
12
+ }
13
+ await this.migrationFilesManager.createDirIfNotExist();
14
+ const [, fullName] = MigrationVersionHelper.createVersion(migrationName);
15
+ const filename = await this.migrationFilesManager.createFile(this.emptyTemplates[format], fullName, format);
16
+ return filename;
17
+ }
18
+ async prepareMigration(initialSchema, newSchema, migrationName, { skipInitialSchemaValidation = false } = {}) {
19
+ await this.migrationFilesManager.createDirIfNotExist();
20
+ const modifications = this.schemaDiffer.diffSchemas(initialSchema, newSchema, { skipInitialSchemaValidation });
21
+ if (modifications.length === 0) {
22
+ return null;
23
+ }
24
+ const migration = this.createMigration(modifications, migrationName);
25
+ return { initialSchema, migration };
26
+ }
27
+ async saveMigration(migration) {
28
+ const jsonDiff = MigrationCreator.createContent(migration);
29
+ const filename = await this.migrationFilesManager.createFile(jsonDiff, migration.name);
30
+ return filename;
31
+ }
32
+ async removeMigration(name) {
33
+ await this.migrationFilesManager.removeFile(name);
34
+ }
35
+ createMigration(modifications, name) {
36
+ const [version, fullName] = MigrationVersionHelper.createVersion(name);
37
+ return { formatVersion: VERSION_LATEST, modifications, version, name: fullName };
38
+ }
39
+ static createContent({ modifications, formatVersion }) {
40
+ return JSON.stringify({ formatVersion, modifications }, void 0, " ") + "\n";
41
+ }
42
+ }
43
+ export {
44
+ MigrationCreator
45
+ };
46
+ //# sourceMappingURL=MigrationCreator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationCreator.js","sources":["../../../../packages/migrations-client/src/MigrationCreator.ts"],"sourcesContent":["import { MigrationFilesManager } from './MigrationFilesManager'\nimport { Schema } from '@contember/schema'\nimport { Migration, SchemaDiffer, VERSION_LATEST } from '@contember/schema-migrations'\nimport { MigrationVersionHelper } from '@contember/engine-common'\n\nexport class MigrationCreator {\n\tconstructor(\n\t\tprivate readonly migrationFilesManager: MigrationFilesManager,\n\t\tprivate readonly schemaDiffer: SchemaDiffer,\n\t\tprivate readonly emptyTemplates: Record<string, string> = {},\n\t) {}\n\n\tasync createEmptyMigrationFile(migrationName: string, format: string): Promise<string> {\n\t\tif (!this.emptyTemplates.hasOwnProperty(format)) {\n\t\t\tthrow new Error(`Unknown format ${format}`)\n\t\t}\n\t\tawait this.migrationFilesManager.createDirIfNotExist()\n\t\tconst [, fullName] = MigrationVersionHelper.createVersion(migrationName)\n\t\tconst filename = await this.migrationFilesManager.createFile(this.emptyTemplates[format], fullName, format)\n\n\t\treturn filename\n\t}\n\n\tasync prepareMigration(\n\t\tinitialSchema: Schema,\n\t\tnewSchema: Schema,\n\t\tmigrationName: string,\n\t\t{ skipInitialSchemaValidation = false }: { skipInitialSchemaValidation?: boolean } = {},\n\t): Promise<{ migration: Migration; initialSchema: Schema } | null> {\n\t\tawait this.migrationFilesManager.createDirIfNotExist()\n\n\t\tconst modifications = this.schemaDiffer.diffSchemas(initialSchema, newSchema, { skipInitialSchemaValidation })\n\t\tif (modifications.length === 0) {\n\t\t\treturn null\n\t\t}\n\n\t\tconst migration = this.createMigration(modifications, migrationName)\n\n\t\treturn { initialSchema, migration }\n\t}\n\n\tasync saveMigration(migration: Migration): Promise<string> {\n\t\tconst jsonDiff = MigrationCreator.createContent(migration)\n\t\tconst filename = await this.migrationFilesManager.createFile(jsonDiff, migration.name)\n\t\treturn filename\n\t}\n\n\tasync removeMigration(name: string): Promise<void> {\n\t\tawait this.migrationFilesManager.removeFile(name)\n\t}\n\n\tprivate createMigration(modifications: Migration.Modification[], name: string): Migration {\n\t\tconst [version, fullName] = MigrationVersionHelper.createVersion(name)\n\t\treturn { formatVersion: VERSION_LATEST, modifications, version, name: fullName }\n\t}\n\n\tpublic static createContent({ modifications, formatVersion }: Migration): string {\n\t\treturn JSON.stringify({ formatVersion, modifications }, undefined, '\\t') + '\\n'\n\t}\n}\n"],"names":[],"mappings":";;AAKO,MAAM,iBAAiB;AAAA,EAC7B,YACkB,uBACA,cACA,iBAAyC,CAAA,GACzD;AAHgB,SAAA,wBAAA;AACA,SAAA,eAAA;AACA,SAAA,iBAAA;AAAA,EACf;AAAA,EAEH,MAAM,yBAAyB,eAAuB,QAAiC;AACtF,QAAI,CAAC,KAAK,eAAe,eAAe,MAAM,GAAG;AAChD,YAAM,IAAI,MAAM,kBAAkB,MAAM,EAAE;AAAA,IAC3C;AACA,UAAM,KAAK,sBAAsB,oBAAA;AACjC,UAAM,CAAA,EAAG,QAAQ,IAAI,uBAAuB,cAAc,aAAa;AACvE,UAAM,WAAW,MAAM,KAAK,sBAAsB,WAAW,KAAK,eAAe,MAAM,GAAG,UAAU,MAAM;AAE1G,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,iBACL,eACA,WACA,eACA,EAAE,8BAA8B,MAAA,IAAqD,IACnB;AAClE,UAAM,KAAK,sBAAsB,oBAAA;AAEjC,UAAM,gBAAgB,KAAK,aAAa,YAAY,eAAe,WAAW,EAAE,6BAA6B;AAC7G,QAAI,cAAc,WAAW,GAAG;AAC/B,aAAO;AAAA,IACR;AAEA,UAAM,YAAY,KAAK,gBAAgB,eAAe,aAAa;AAEnE,WAAO,EAAE,eAAe,UAAA;AAAA,EACzB;AAAA,EAEA,MAAM,cAAc,WAAuC;AAC1D,UAAM,WAAW,iBAAiB,cAAc,SAAS;AACzD,UAAM,WAAW,MAAM,KAAK,sBAAsB,WAAW,UAAU,UAAU,IAAI;AACrF,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,gBAAgB,MAA6B;AAClD,UAAM,KAAK,sBAAsB,WAAW,IAAI;AAAA,EACjD;AAAA,EAEQ,gBAAgB,eAAyC,MAAyB;AACzF,UAAM,CAAC,SAAS,QAAQ,IAAI,uBAAuB,cAAc,IAAI;AACrE,WAAO,EAAE,eAAe,gBAAgB,eAAe,SAAS,MAAM,SAAA;AAAA,EACvE;AAAA,EAEA,OAAc,cAAc,EAAE,eAAe,iBAAoC;AAChF,WAAO,KAAK,UAAU,EAAE,eAAe,iBAAiB,QAAW,GAAI,IAAI;AAAA,EAC5E;AACD;"}