@contember/migrations-client 2.1.0-alpha.3 → 2.1.0-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/development/src/JsLoader.cjs +2 -2
- package/dist/development/src/JsLoader.cjs.map +1 -1
- package/dist/development/src/JsLoader.js +2 -2
- package/dist/development/src/JsLoader.js.map +1 -1
- package/dist/development/src/MigrationExecuteHelper.cjs +4 -1
- package/dist/development/src/MigrationExecuteHelper.cjs.map +1 -1
- package/dist/development/src/MigrationExecuteHelper.js +4 -1
- package/dist/development/src/MigrationExecuteHelper.js.map +1 -1
- package/dist/development/src/MigrationFile.cjs.map +1 -1
- package/dist/development/src/MigrationFile.js.map +1 -1
- package/dist/development/src/migrations.cjs +11 -0
- package/dist/development/src/migrations.cjs.map +1 -1
- package/dist/development/src/migrations.js +11 -0
- package/dist/development/src/migrations.js.map +1 -1
- package/dist/production/src/JsLoader.cjs +2 -2
- package/dist/production/src/JsLoader.cjs.map +1 -1
- package/dist/production/src/JsLoader.js +2 -2
- package/dist/production/src/JsLoader.js.map +1 -1
- package/dist/production/src/MigrationExecuteHelper.cjs +4 -1
- package/dist/production/src/MigrationExecuteHelper.cjs.map +1 -1
- package/dist/production/src/MigrationExecuteHelper.js +4 -1
- package/dist/production/src/MigrationExecuteHelper.js.map +1 -1
- package/dist/production/src/MigrationFile.cjs.map +1 -1
- package/dist/production/src/MigrationFile.js.map +1 -1
- package/dist/production/src/migrations.cjs +11 -0
- package/dist/production/src/migrations.cjs.map +1 -1
- package/dist/production/src/migrations.js +11 -0
- package/dist/production/src/migrations.js.map +1 -1
- package/dist/types/JsLoader.d.ts.map +1 -1
- package/dist/types/MigrationExecuteHelper.d.ts +1 -1
- package/dist/types/MigrationExecuteHelper.d.ts.map +1 -1
- package/dist/types/MigrationFile.d.ts +3 -0
- package/dist/types/MigrationFile.d.ts.map +1 -1
- package/dist/types/migrations.d.ts +5 -1
- package/dist/types/migrations.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/JsLoader.ts +3 -7
- package/src/MigrationExecuteHelper.ts +5 -2
- package/src/MigrationFile.ts +3 -0
- package/src/migrations.ts +20 -3
|
@@ -15,8 +15,8 @@ class JsLoader {
|
|
|
15
15
|
}
|
|
16
16
|
return {
|
|
17
17
|
type: "factory",
|
|
18
|
-
factory: async () => {
|
|
19
|
-
const result = await exports2.default();
|
|
18
|
+
factory: async (args) => {
|
|
19
|
+
const result = await exports2.default(args);
|
|
20
20
|
const migration = this.migrationParser.parse(file, result ?? { queries: [] });
|
|
21
21
|
if (migration.type !== "content") {
|
|
22
22
|
throw new Error();
|
|
@@ -1 +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, 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\n\tpublic async load(file: MigrationFile): Promise<MigrationContent> {\n\
|
|
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\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\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,EAAA;AAAA,EAKlB,MAAa,KAAK,MAAgD;AACjE,UAAMA,WAAU,MAAM,KAAK,WAAW,KAAK,IAAI;AAC3C,QAAA,EAAE,aAAaA,aAAY,EAAE,WAAWA,aAAY,EAAE,aAAaA,WAAU;AAC1E,YAAA,8CAA8C,KAAK,IAAI;AAAA,IAAA;AAE1D,QAAA,OAAOA,SAAQ,YAAY,YAAY;AAC1C,aAAO,KAAK,gBAAgB,MAAM,MAAMA,SAAQ,WAAWA,QAAO;AAAA,IAAA;AAG5D,WAAA;AAAA,MACN,MAAM;AAAA,MACN,SAAS,OAAO,SAAiE;AAChF,cAAM,SAAS,MAAMA,SAAQ,QAAQ,IAAI;AACnC,cAAA,YAAY,KAAK,gBAAgB,MAAM,MAAM,UAAU,EAAE,SAAS,CAAA,GAAI;AACxE,YAAA,UAAU,SAAS,WAAW;AACjC,gBAAM,IAAI,MAAM;AAAA,QAAA;AAEV,eAAA;AAAA,MAAA;AAAA,IAGT;AAAA,EAAA;AAEF;;"}
|
|
@@ -13,8 +13,8 @@ class JsLoader {
|
|
|
13
13
|
}
|
|
14
14
|
return {
|
|
15
15
|
type: "factory",
|
|
16
|
-
factory: async () => {
|
|
17
|
-
const result = await exports.default();
|
|
16
|
+
factory: async (args) => {
|
|
17
|
+
const result = await exports.default(args);
|
|
18
18
|
const migration = this.migrationParser.parse(file, result ?? { queries: [] });
|
|
19
19
|
if (migration.type !== "content") {
|
|
20
20
|
throw new Error();
|
|
@@ -1 +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, 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\n\tpublic async load(file: MigrationFile): Promise<MigrationContent> {\n\
|
|
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\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\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"AAIO,MAAM,SAAwC;AAAA,EACpD,YACkB,iBACA,YAChB;AAFgB,SAAA,kBAAA;AACA,SAAA,aAAA;AAAA,EAAA;AAAA,EAKlB,MAAa,KAAK,MAAgD;AACjE,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,IAAI;AAC3C,QAAA,EAAE,aAAa,YAAY,EAAE,WAAW,YAAY,EAAE,aAAa,UAAU;AAC1E,YAAA,8CAA8C,KAAK,IAAI;AAAA,IAAA;AAE1D,QAAA,OAAO,QAAQ,YAAY,YAAY;AAC1C,aAAO,KAAK,gBAAgB,MAAM,MAAM,QAAQ,WAAW,OAAO;AAAA,IAAA;AAG5D,WAAA;AAAA,MACN,MAAM;AAAA,MACN,SAAS,OAAO,SAAiE;AAChF,cAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI;AACnC,cAAA,YAAY,KAAK,gBAAgB,MAAM,MAAM,UAAU,EAAE,SAAS,CAAA,GAAI;AACxE,YAAA,UAAU,SAAS,WAAW;AACjC,gBAAM,IAAI,MAAM;AAAA,QAAA;AAEV,eAAA;AAAA,MAAA;AAAA,IAGT;AAAA,EAAA;AAEF;"}
|
|
@@ -53,7 +53,10 @@ class MigrationExecutor {
|
|
|
53
53
|
const migrationContent = await migration.localMigration.getContent();
|
|
54
54
|
if (migrationContent.type === "factory") {
|
|
55
55
|
await executeMigrations();
|
|
56
|
-
const result = await migrationContent.factory(
|
|
56
|
+
const result = await migrationContent.factory({
|
|
57
|
+
...contentMigrationFactoryArgs,
|
|
58
|
+
migration: migration.localMigration
|
|
59
|
+
});
|
|
57
60
|
migrationsToRun.push(result);
|
|
58
61
|
await executeMigrations();
|
|
59
62
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationExecuteHelper.cjs","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: ContentMigrationFactoryArgs
|
|
1
|
+
{"version":3,"file":"MigrationExecuteHelper.cjs","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: Omit<ContentMigrationFactoryArgs, 'migration'>\n\t\tlog: (message: string) => void\n\t\tforce?: boolean\n\t}): Promise<void> {\n\t\tif (migrations.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tlet migrationsToRun: ResolvedMigrationContent[] = []\n\n\t\tconst executeMigrations = async () => {\n\t\t\tif (migrationsToRun.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait client.migrate(\n\t\t\t\tmigrationsToRun.map(it => {\n\t\t\t\t\tif (it.type === 'schema') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'SCHEMA',\n\t\t\t\t\t\t\tschemaMigration: {\n\t\t\t\t\t\t\t\tformatVersion: it.formatVersion,\n\t\t\t\t\t\t\t\tmodifications: it.modifications,\n\t\t\t\t\t\t\t\tskippedErrors: it.skippedErrors,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (it.type === 'content') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'CONTENT',\n\t\t\t\t\t\t\tcontentMigration: it.queries,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn assertNever(it)\n\t\t\t\t}),\n\t\t\t\tforce,\n\t\t\t)\n\t\t\tmigrationsToRun.forEach(it => {\n\t\t\t\tlog(it.name)\n\t\t\t})\n\t\t\tmigrationsToRun = []\n\t\t}\n\n\t\tlog('Executing...')\n\n\t\tfor (const migration of migrations) {\n\t\t\tconst migrationContent = await migration.localMigration.getContent()\n\t\t\tif (migrationContent.type === 'factory') {\n\t\t\t\tawait executeMigrations()\n\t\t\t\tconst result = await migrationContent.factory({\n\t\t\t\t\t...contentMigrationFactoryArgs,\n\t\t\t\t\tmigration: migration.localMigration,\n\t\t\t\t})\n\t\t\t\tmigrationsToRun.push(result)\n\t\t\t\tawait executeMigrations()\n\t\t\t} else {\n\t\t\t\tmigrationsToRun.push(migrationContent)\n\t\t\t}\n\t\t}\n\t\tawait executeMigrations()\n\t\tlog('Migration executed')\n\t}\n}\n"],"names":["assertNever"],"mappings":";;;AAMO,MAAM,kBAAkB;AAAA,EAE9B,MAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM;AAAA,EAAA,GAOK;AACb,QAAA,WAAW,WAAW,GAAG;AAC5B;AAAA,IAAA;AAED,QAAI,kBAA8C,CAAC;AAEnD,UAAM,oBAAoB,YAAY;AACjC,UAAA,gBAAgB,WAAW,GAAG;AACjC;AAAA,MAAA;AAED,YAAM,OAAO;AAAA,QACZ,gBAAgB,IAAI,CAAM,OAAA;AACrB,cAAA,GAAG,SAAS,UAAU;AAClB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,iBAAiB;AAAA,gBAChB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,cAAA;AAAA,YAEpB;AAAA,UAAA;AAEG,cAAA,GAAG,SAAS,WAAW;AACnB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,kBAAkB,GAAG;AAAA,YACtB;AAAA,UAAA;AAED,iBAAOA,wBAAc;AAAA,QAAA,CACrB;AAAA,QACD;AAAA,MACD;AACA,sBAAgB,QAAQ,CAAM,OAAA;AAC7B,YAAI,GAAG,IAAI;AAAA,MAAA,CACX;AACD,wBAAkB,CAAC;AAAA,IACpB;AAEA,QAAI,cAAc;AAElB,eAAW,aAAa,YAAY;AACnC,YAAM,mBAAmB,MAAM,UAAU,eAAe,WAAW;AAC/D,UAAA,iBAAiB,SAAS,WAAW;AACxC,cAAM,kBAAkB;AAClB,cAAA,SAAS,MAAM,iBAAiB,QAAQ;AAAA,UAC7C,GAAG;AAAA,UACH,WAAW,UAAU;AAAA,QAAA,CACrB;AACD,wBAAgB,KAAK,MAAM;AAC3B,cAAM,kBAAkB;AAAA,MAAA,OAClB;AACN,wBAAgB,KAAK,gBAAgB;AAAA,MAAA;AAAA,IACtC;AAED,UAAM,kBAAkB;AACxB,QAAI,oBAAoB;AAAA,EAAA;AAE1B;;"}
|
|
@@ -51,7 +51,10 @@ class MigrationExecutor {
|
|
|
51
51
|
const migrationContent = await migration.localMigration.getContent();
|
|
52
52
|
if (migrationContent.type === "factory") {
|
|
53
53
|
await executeMigrations();
|
|
54
|
-
const result = await migrationContent.factory(
|
|
54
|
+
const result = await migrationContent.factory({
|
|
55
|
+
...contentMigrationFactoryArgs,
|
|
56
|
+
migration: migration.localMigration
|
|
57
|
+
});
|
|
55
58
|
migrationsToRun.push(result);
|
|
56
59
|
await executeMigrations();
|
|
57
60
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationExecuteHelper.js","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: ContentMigrationFactoryArgs
|
|
1
|
+
{"version":3,"file":"MigrationExecuteHelper.js","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: Omit<ContentMigrationFactoryArgs, 'migration'>\n\t\tlog: (message: string) => void\n\t\tforce?: boolean\n\t}): Promise<void> {\n\t\tif (migrations.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tlet migrationsToRun: ResolvedMigrationContent[] = []\n\n\t\tconst executeMigrations = async () => {\n\t\t\tif (migrationsToRun.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait client.migrate(\n\t\t\t\tmigrationsToRun.map(it => {\n\t\t\t\t\tif (it.type === 'schema') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'SCHEMA',\n\t\t\t\t\t\t\tschemaMigration: {\n\t\t\t\t\t\t\t\tformatVersion: it.formatVersion,\n\t\t\t\t\t\t\t\tmodifications: it.modifications,\n\t\t\t\t\t\t\t\tskippedErrors: it.skippedErrors,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (it.type === 'content') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'CONTENT',\n\t\t\t\t\t\t\tcontentMigration: it.queries,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn assertNever(it)\n\t\t\t\t}),\n\t\t\t\tforce,\n\t\t\t)\n\t\t\tmigrationsToRun.forEach(it => {\n\t\t\t\tlog(it.name)\n\t\t\t})\n\t\t\tmigrationsToRun = []\n\t\t}\n\n\t\tlog('Executing...')\n\n\t\tfor (const migration of migrations) {\n\t\t\tconst migrationContent = await migration.localMigration.getContent()\n\t\t\tif (migrationContent.type === 'factory') {\n\t\t\t\tawait executeMigrations()\n\t\t\t\tconst result = await migrationContent.factory({\n\t\t\t\t\t...contentMigrationFactoryArgs,\n\t\t\t\t\tmigration: migration.localMigration,\n\t\t\t\t})\n\t\t\t\tmigrationsToRun.push(result)\n\t\t\t\tawait executeMigrations()\n\t\t\t} else {\n\t\t\t\tmigrationsToRun.push(migrationContent)\n\t\t\t}\n\t\t}\n\t\tawait executeMigrations()\n\t\tlog('Migration executed')\n\t}\n}\n"],"names":[],"mappings":";AAMO,MAAM,kBAAkB;AAAA,EAE9B,MAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM;AAAA,EAAA,GAOK;AACb,QAAA,WAAW,WAAW,GAAG;AAC5B;AAAA,IAAA;AAED,QAAI,kBAA8C,CAAC;AAEnD,UAAM,oBAAoB,YAAY;AACjC,UAAA,gBAAgB,WAAW,GAAG;AACjC;AAAA,MAAA;AAED,YAAM,OAAO;AAAA,QACZ,gBAAgB,IAAI,CAAM,OAAA;AACrB,cAAA,GAAG,SAAS,UAAU;AAClB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,iBAAiB;AAAA,gBAChB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,cAAA;AAAA,YAEpB;AAAA,UAAA;AAEG,cAAA,GAAG,SAAS,WAAW;AACnB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,kBAAkB,GAAG;AAAA,YACtB;AAAA,UAAA;AAED,iBAAO,YAAc;AAAA,QAAA,CACrB;AAAA,QACD;AAAA,MACD;AACA,sBAAgB,QAAQ,CAAM,OAAA;AAC7B,YAAI,GAAG,IAAI;AAAA,MAAA,CACX;AACD,wBAAkB,CAAC;AAAA,IACpB;AAEA,QAAI,cAAc;AAElB,eAAW,aAAa,YAAY;AACnC,YAAM,mBAAmB,MAAM,UAAU,eAAe,WAAW;AAC/D,UAAA,iBAAiB,SAAS,WAAW;AACxC,cAAM,kBAAkB;AAClB,cAAA,SAAS,MAAM,iBAAiB,QAAQ;AAAA,UAC7C,GAAG;AAAA,UACH,WAAW,UAAU;AAAA,QAAA,CACrB;AACD,wBAAgB,KAAK,MAAM;AAC3B,cAAM,kBAAkB;AAAA,MAAA,OAClB;AACN,wBAAgB,KAAK,gBAAgB;AAAA,MAAA;AAAA,IACtC;AAED,UAAM,kBAAkB;AACxB,QAAI,oBAAoB;AAAA,EAAA;AAE1B;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationFile.cjs","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"MigrationFile.cjs","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\nimport { SchemaVersionBuilder } from './SchemaVersionBuilder'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n\tmigration: MigrationFile\n\tschemaVersionBuilder: SchemaVersionBuilder\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":";;AAYO,MAAM,oBAAoB,CAAC,YAA0D,OAAO,YAAY,cAAc,mBAAmB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationFile.js","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MigrationFile.js","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\nimport { SchemaVersionBuilder } from './SchemaVersionBuilder'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n\tmigration: MigrationFile\n\tschemaVersionBuilder: SchemaVersionBuilder\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":"AAYO,MAAM,oBAAoB,CAAC,YAA0D,OAAO,YAAY,cAAc,mBAAmB;"}
|
|
@@ -5,6 +5,7 @@ const MigrationFile = require("./MigrationFile.cjs");
|
|
|
5
5
|
var MigrationState = /* @__PURE__ */ ((MigrationState2) => {
|
|
6
6
|
MigrationState2["TO_EXECUTE_OK"] = "to_execute_ok";
|
|
7
7
|
MigrationState2["TO_EXECUTE_ERROR"] = "to_execute_error";
|
|
8
|
+
MigrationState2["SKIP_EMPTY"] = "skip_empty";
|
|
8
9
|
MigrationState2["EXECUTED_OK"] = "executed_ok";
|
|
9
10
|
MigrationState2["EXECUTED_ERROR"] = "executed_error";
|
|
10
11
|
MigrationState2["EXECUTED_MISSING"] = "executed_missing";
|
|
@@ -63,6 +64,16 @@ class MigrationsStatusResolver {
|
|
|
63
64
|
if (allMigrations.find((it) => it.version === localMigration.version)) {
|
|
64
65
|
continue;
|
|
65
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
|
+
}
|
|
66
77
|
if (latestExecuted && latestExecuted.version > localMigration.version) {
|
|
67
78
|
allMigrations.push({
|
|
68
79
|
state: "to_execute_error",
|
|
@@ -1 +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\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 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\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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState","isSchemaMigration","calculateMigrationChecksum"],"mappings":";;;;AAaY,IAAA,mCAAAA,oBAAL;AACNA,kBAAA,eAAgB,IAAA;AAChBA,kBAAA,kBAAmB,IAAA;AACnBA,kBAAA,aAAc,IAAA;AACdA,kBAAA,gBAAiB,IAAA;AACjBA,kBAAA,kBAAmB,IAAA;
|
|
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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState","isSchemaMigration","calculateMigrationChecksum"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { isSchemaMigration } from "./MigrationFile.js";
|
|
|
3
3
|
var MigrationState = /* @__PURE__ */ ((MigrationState2) => {
|
|
4
4
|
MigrationState2["TO_EXECUTE_OK"] = "to_execute_ok";
|
|
5
5
|
MigrationState2["TO_EXECUTE_ERROR"] = "to_execute_error";
|
|
6
|
+
MigrationState2["SKIP_EMPTY"] = "skip_empty";
|
|
6
7
|
MigrationState2["EXECUTED_OK"] = "executed_ok";
|
|
7
8
|
MigrationState2["EXECUTED_ERROR"] = "executed_error";
|
|
8
9
|
MigrationState2["EXECUTED_MISSING"] = "executed_missing";
|
|
@@ -61,6 +62,16 @@ class MigrationsStatusResolver {
|
|
|
61
62
|
if (allMigrations.find((it) => it.version === localMigration.version)) {
|
|
62
63
|
continue;
|
|
63
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
|
+
}
|
|
64
75
|
if (latestExecuted && latestExecuted.version > localMigration.version) {
|
|
65
76
|
allMigrations.push({
|
|
66
77
|
state: "to_execute_error",
|
|
@@ -1 +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\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 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\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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState"],"mappings":";;AAaY,IAAA,mCAAAA,oBAAL;AACNA,kBAAA,eAAgB,IAAA;AAChBA,kBAAA,kBAAmB,IAAA;AACnBA,kBAAA,aAAc,IAAA;AACdA,kBAAA,gBAAiB,IAAA;AACjBA,kBAAA,kBAAmB,IAAA;
|
|
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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState"],"mappings":";;AAaY,IAAA,mCAAAA,oBAAL;AACNA,kBAAA,eAAgB,IAAA;AAChBA,kBAAA,kBAAmB,IAAA;AACnBA,kBAAA,YAAa,IAAA;AACbA,kBAAA,aAAc,IAAA;AACdA,kBAAA,gBAAiB,IAAA;AACjBA,kBAAA,kBAAmB,IAAA;AANRA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAwDZ,MAAM,yBAAyB,CAAC,cAC/B;AAAA,EAAC;AAAA,EAA+B;AAAA,EAAiC;AAAA;EAAiC;AAAA,EACjG,UAAU;AACX;AAEY,MAAA,iBAAiB,CAAgC,eAAyB;AACtF,SAAO,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,cAAc,EAAE,OAAO,CAAC;AACzE;AAEO,MAAM,yBAAyB;AAAA,EAErC,MAAM,oBACL,oBACA,iBACA,QAAiB,OAKf;AACI,UAAA,iBAAiB,eAAe,kBAAkB;AAExD,UAAM,gBAAsC,CAAC;AAC7C,eAAW,YAAY,gBAAgB;AACtC,YAAM,iBAAiB,gBAAgB,KAAK,QAAM,GAAG,YAAY,SAAS,OAAO;AACjF,UAAI,CAAC,gBAAgB;AACpB,sBAAc,KAAK;AAAA,UAClB,OAAO;AAAA,UACP,mBAAmB;AAAA,UACnB,SAAS,SAAS;AAAA,UAClB,MAAM,SAAS;AAAA,UACf,cAAc,aAAa,SAAS,IAAI;AAAA,QAAA,CACxC;AACD;AAAA,MAAA;AAEK,YAAA,mBAAmB,MAAM,eAAe,WAAW;AAEzD,YAAM,gBAAgB,CAAC,kBAAkB,gBAAgB,IAAI,OAAO,2BAA2B,gBAAgB;AAE3G,UAAA,kBAAkB,SAAS,UAAU;AACxC,sBAAc,KAAK;AAAA,UAClB,OAAO;AAAA,UACP,mBAAmB;AAAA,UACnB,SAAS,SAAS;AAAA,UAClB,MAAM,SAAS;AAAA,UACf;AAAA,UACA,cAAc,mCAAmC,SAAS,QAAQ,qBAAqB,aAAa;AAAA,QAAA,CACpG;AACD;AAAA,MAAA;AAED,oBAAc,KAAK;AAAA,QAClB,OAAO;AAAA,QACP,mBAAmB;AAAA,QACnB,SAAS,SAAS;AAAA,QAClB,MAAM,SAAS;AAAA,QACf;AAAA,MAAA,CACA;AAAA,IAAA;AAGI,UAAA,iBAAiB,eAAe,SAAS,IAAI,eAAe,eAAe,SAAS,CAAC,IAAI;AAC/F,eAAW,kBAAkB,iBAAiB;AAC7C,UAAI,cAAc,KAAK,CAAA,OAAM,GAAG,YAAY,eAAe,OAAO,GAAG;AACpE;AAAA,MAAA;AAEK,YAAA,mBAAmB,MAAM,eAAe,WAAW;AACzD,UAAI,kBAAkB,gBAAgB,KAAK,iBAAiB,cAAc,WAAW,GAAG;AACvF,sBAAc,KAAK;AAAA,UAClB,OAAO;AAAA,UACP;AAAA,UACA,SAAS,eAAe;AAAA,UACxB,MAAM,eAAe;AAAA,QAAA,CACrB;AACD;AAAA,MAAA;AAGD,UAAI,kBAAkB,eAAe,UAAU,eAAe,SAAS;AACtE,sBAAc,KAAK;AAAA,UAClB,OAAO;AAAA,UACP;AAAA,UACA,SAAS,eAAe;AAAA,UACxB,MAAM,eAAe;AAAA,UACrB,cAAc,yCAAyC,eAAe,IAAI;AAAA,QAAA,CAC1E;AACD;AAAA,MAAA;AAED,oBAAc,KAAK;AAAA,QAClB,OAAO;AAAA,QACP;AAAA,QACA,SAAS,eAAe;AAAA,QACxB,MAAM,eAAe;AAAA,MAAA,CACrB;AAAA,IAAA;AAEI,UAAA,sBAAsB,eAAe,aAAa;AAEjD,WAAA;AAAA,MACN,eAAe;AAAA,MACf,iBAAiB,oBAAoB,OAAO,sBAAsB;AAAA,MAClE,qBAAqB,oBAAoB;AAAA,QACxC,CAAC,OACA,GAAG,UAAU,mBAAiC,SAAS,GAAG,UAAU;AAAA;AAAA,MAAA;AAAA,IAEvE;AAAA,EAAA;AAGF;"}
|
|
@@ -15,8 +15,8 @@ class JsLoader {
|
|
|
15
15
|
}
|
|
16
16
|
return {
|
|
17
17
|
type: "factory",
|
|
18
|
-
factory: async () => {
|
|
19
|
-
const result = await exports2.default();
|
|
18
|
+
factory: async (args) => {
|
|
19
|
+
const result = await exports2.default(args);
|
|
20
20
|
const migration = this.migrationParser.parse(file, result ?? { queries: [] });
|
|
21
21
|
if (migration.type !== "content") {
|
|
22
22
|
throw new Error();
|
|
@@ -1 +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, 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\n\tpublic async load(file: MigrationFile): Promise<MigrationContent> {\n\
|
|
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\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\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,EAAA;AAAA,EAKlB,MAAa,KAAK,MAAgD;AACjE,UAAMA,WAAU,MAAM,KAAK,WAAW,KAAK,IAAI;AAC3C,QAAA,EAAE,aAAaA,aAAY,EAAE,WAAWA,aAAY,EAAE,aAAaA,WAAU;AAC1E,YAAA,8CAA8C,KAAK,IAAI;AAAA,IAAA;AAE1D,QAAA,OAAOA,SAAQ,YAAY,YAAY;AAC1C,aAAO,KAAK,gBAAgB,MAAM,MAAMA,SAAQ,WAAWA,QAAO;AAAA,IAAA;AAG5D,WAAA;AAAA,MACN,MAAM;AAAA,MACN,SAAS,OAAO,SAAiE;AAChF,cAAM,SAAS,MAAMA,SAAQ,QAAQ,IAAI;AACnC,cAAA,YAAY,KAAK,gBAAgB,MAAM,MAAM,UAAU,EAAE,SAAS,CAAA,GAAI;AACxE,YAAA,UAAU,SAAS,WAAW;AACjC,gBAAM,IAAI,MAAM;AAAA,QAAA;AAEV,eAAA;AAAA,MAAA;AAAA,IAGT;AAAA,EAAA;AAEF;;"}
|
|
@@ -13,8 +13,8 @@ class JsLoader {
|
|
|
13
13
|
}
|
|
14
14
|
return {
|
|
15
15
|
type: "factory",
|
|
16
|
-
factory: async () => {
|
|
17
|
-
const result = await exports.default();
|
|
16
|
+
factory: async (args) => {
|
|
17
|
+
const result = await exports.default(args);
|
|
18
18
|
const migration = this.migrationParser.parse(file, result ?? { queries: [] });
|
|
19
19
|
if (migration.type !== "content") {
|
|
20
20
|
throw new Error();
|
|
@@ -1 +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, 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\n\tpublic async load(file: MigrationFile): Promise<MigrationContent> {\n\
|
|
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\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\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"AAIO,MAAM,SAAwC;AAAA,EACpD,YACkB,iBACA,YAChB;AAFgB,SAAA,kBAAA;AACA,SAAA,aAAA;AAAA,EAAA;AAAA,EAKlB,MAAa,KAAK,MAAgD;AACjE,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,IAAI;AAC3C,QAAA,EAAE,aAAa,YAAY,EAAE,WAAW,YAAY,EAAE,aAAa,UAAU;AAC1E,YAAA,8CAA8C,KAAK,IAAI;AAAA,IAAA;AAE1D,QAAA,OAAO,QAAQ,YAAY,YAAY;AAC1C,aAAO,KAAK,gBAAgB,MAAM,MAAM,QAAQ,WAAW,OAAO;AAAA,IAAA;AAG5D,WAAA;AAAA,MACN,MAAM;AAAA,MACN,SAAS,OAAO,SAAiE;AAChF,cAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI;AACnC,cAAA,YAAY,KAAK,gBAAgB,MAAM,MAAM,UAAU,EAAE,SAAS,CAAA,GAAI;AACxE,YAAA,UAAU,SAAS,WAAW;AACjC,gBAAM,IAAI,MAAM;AAAA,QAAA;AAEV,eAAA;AAAA,MAAA;AAAA,IAGT;AAAA,EAAA;AAEF;"}
|
|
@@ -53,7 +53,10 @@ class MigrationExecutor {
|
|
|
53
53
|
const migrationContent = await migration.localMigration.getContent();
|
|
54
54
|
if (migrationContent.type === "factory") {
|
|
55
55
|
await executeMigrations();
|
|
56
|
-
const result = await migrationContent.factory(
|
|
56
|
+
const result = await migrationContent.factory({
|
|
57
|
+
...contentMigrationFactoryArgs,
|
|
58
|
+
migration: migration.localMigration
|
|
59
|
+
});
|
|
57
60
|
migrationsToRun.push(result);
|
|
58
61
|
await executeMigrations();
|
|
59
62
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationExecuteHelper.cjs","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: ContentMigrationFactoryArgs
|
|
1
|
+
{"version":3,"file":"MigrationExecuteHelper.cjs","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: Omit<ContentMigrationFactoryArgs, 'migration'>\n\t\tlog: (message: string) => void\n\t\tforce?: boolean\n\t}): Promise<void> {\n\t\tif (migrations.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tlet migrationsToRun: ResolvedMigrationContent[] = []\n\n\t\tconst executeMigrations = async () => {\n\t\t\tif (migrationsToRun.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait client.migrate(\n\t\t\t\tmigrationsToRun.map(it => {\n\t\t\t\t\tif (it.type === 'schema') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'SCHEMA',\n\t\t\t\t\t\t\tschemaMigration: {\n\t\t\t\t\t\t\t\tformatVersion: it.formatVersion,\n\t\t\t\t\t\t\t\tmodifications: it.modifications,\n\t\t\t\t\t\t\t\tskippedErrors: it.skippedErrors,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (it.type === 'content') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'CONTENT',\n\t\t\t\t\t\t\tcontentMigration: it.queries,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn assertNever(it)\n\t\t\t\t}),\n\t\t\t\tforce,\n\t\t\t)\n\t\t\tmigrationsToRun.forEach(it => {\n\t\t\t\tlog(it.name)\n\t\t\t})\n\t\t\tmigrationsToRun = []\n\t\t}\n\n\t\tlog('Executing...')\n\n\t\tfor (const migration of migrations) {\n\t\t\tconst migrationContent = await migration.localMigration.getContent()\n\t\t\tif (migrationContent.type === 'factory') {\n\t\t\t\tawait executeMigrations()\n\t\t\t\tconst result = await migrationContent.factory({\n\t\t\t\t\t...contentMigrationFactoryArgs,\n\t\t\t\t\tmigration: migration.localMigration,\n\t\t\t\t})\n\t\t\t\tmigrationsToRun.push(result)\n\t\t\t\tawait executeMigrations()\n\t\t\t} else {\n\t\t\t\tmigrationsToRun.push(migrationContent)\n\t\t\t}\n\t\t}\n\t\tawait executeMigrations()\n\t\tlog('Migration executed')\n\t}\n}\n"],"names":["assertNever"],"mappings":";;;AAMO,MAAM,kBAAkB;AAAA,EAE9B,MAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM;AAAA,EAAA,GAOK;AACb,QAAA,WAAW,WAAW,GAAG;AAC5B;AAAA,IAAA;AAED,QAAI,kBAA8C,CAAC;AAEnD,UAAM,oBAAoB,YAAY;AACjC,UAAA,gBAAgB,WAAW,GAAG;AACjC;AAAA,MAAA;AAED,YAAM,OAAO;AAAA,QACZ,gBAAgB,IAAI,CAAM,OAAA;AACrB,cAAA,GAAG,SAAS,UAAU;AAClB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,iBAAiB;AAAA,gBAChB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,cAAA;AAAA,YAEpB;AAAA,UAAA;AAEG,cAAA,GAAG,SAAS,WAAW;AACnB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,kBAAkB,GAAG;AAAA,YACtB;AAAA,UAAA;AAED,iBAAOA,wBAAc;AAAA,QAAA,CACrB;AAAA,QACD;AAAA,MACD;AACA,sBAAgB,QAAQ,CAAM,OAAA;AAC7B,YAAI,GAAG,IAAI;AAAA,MAAA,CACX;AACD,wBAAkB,CAAC;AAAA,IACpB;AAEA,QAAI,cAAc;AAElB,eAAW,aAAa,YAAY;AACnC,YAAM,mBAAmB,MAAM,UAAU,eAAe,WAAW;AAC/D,UAAA,iBAAiB,SAAS,WAAW;AACxC,cAAM,kBAAkB;AAClB,cAAA,SAAS,MAAM,iBAAiB,QAAQ;AAAA,UAC7C,GAAG;AAAA,UACH,WAAW,UAAU;AAAA,QAAA,CACrB;AACD,wBAAgB,KAAK,MAAM;AAC3B,cAAM,kBAAkB;AAAA,MAAA,OAClB;AACN,wBAAgB,KAAK,gBAAgB;AAAA,MAAA;AAAA,IACtC;AAED,UAAM,kBAAkB;AACxB,QAAI,oBAAoB;AAAA,EAAA;AAE1B;;"}
|
|
@@ -51,7 +51,10 @@ class MigrationExecutor {
|
|
|
51
51
|
const migrationContent = await migration.localMigration.getContent();
|
|
52
52
|
if (migrationContent.type === "factory") {
|
|
53
53
|
await executeMigrations();
|
|
54
|
-
const result = await migrationContent.factory(
|
|
54
|
+
const result = await migrationContent.factory({
|
|
55
|
+
...contentMigrationFactoryArgs,
|
|
56
|
+
migration: migration.localMigration
|
|
57
|
+
});
|
|
55
58
|
migrationsToRun.push(result);
|
|
56
59
|
await executeMigrations();
|
|
57
60
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationExecuteHelper.js","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: ContentMigrationFactoryArgs
|
|
1
|
+
{"version":3,"file":"MigrationExecuteHelper.js","sources":["../../../../packages/migrations-client/src/MigrationExecuteHelper.ts"],"sourcesContent":["import { MigrationToExecuteOkStatus } from './migrations'\nimport { ContentMigrationFactoryArgs, ResolvedMigrationContent } from './MigrationFile'\nimport { assertNever } from './utils/assertNever'\nimport { SystemClient } from './SystemClient'\n\n\nexport class MigrationExecutor {\n\n\tasync executeMigrations({\n\t\tclient,\n\t\tmigrations,\n\t\tcontentMigrationFactoryArgs,\n\t\tforce,\n\t\tlog = () => null,\n\t}: {\n\t\tclient: SystemClient\n\t\tmigrations: MigrationToExecuteOkStatus[]\n\t\tcontentMigrationFactoryArgs: Omit<ContentMigrationFactoryArgs, 'migration'>\n\t\tlog: (message: string) => void\n\t\tforce?: boolean\n\t}): Promise<void> {\n\t\tif (migrations.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tlet migrationsToRun: ResolvedMigrationContent[] = []\n\n\t\tconst executeMigrations = async () => {\n\t\t\tif (migrationsToRun.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait client.migrate(\n\t\t\t\tmigrationsToRun.map(it => {\n\t\t\t\t\tif (it.type === 'schema') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'SCHEMA',\n\t\t\t\t\t\t\tschemaMigration: {\n\t\t\t\t\t\t\t\tformatVersion: it.formatVersion,\n\t\t\t\t\t\t\t\tmodifications: it.modifications,\n\t\t\t\t\t\t\t\tskippedErrors: it.skippedErrors,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (it.type === 'content') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: it.version,\n\t\t\t\t\t\t\tname: it.name,\n\t\t\t\t\t\t\ttype: 'CONTENT',\n\t\t\t\t\t\t\tcontentMigration: it.queries,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn assertNever(it)\n\t\t\t\t}),\n\t\t\t\tforce,\n\t\t\t)\n\t\t\tmigrationsToRun.forEach(it => {\n\t\t\t\tlog(it.name)\n\t\t\t})\n\t\t\tmigrationsToRun = []\n\t\t}\n\n\t\tlog('Executing...')\n\n\t\tfor (const migration of migrations) {\n\t\t\tconst migrationContent = await migration.localMigration.getContent()\n\t\t\tif (migrationContent.type === 'factory') {\n\t\t\t\tawait executeMigrations()\n\t\t\t\tconst result = await migrationContent.factory({\n\t\t\t\t\t...contentMigrationFactoryArgs,\n\t\t\t\t\tmigration: migration.localMigration,\n\t\t\t\t})\n\t\t\t\tmigrationsToRun.push(result)\n\t\t\t\tawait executeMigrations()\n\t\t\t} else {\n\t\t\t\tmigrationsToRun.push(migrationContent)\n\t\t\t}\n\t\t}\n\t\tawait executeMigrations()\n\t\tlog('Migration executed')\n\t}\n}\n"],"names":[],"mappings":";AAMO,MAAM,kBAAkB;AAAA,EAE9B,MAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM;AAAA,EAAA,GAOK;AACb,QAAA,WAAW,WAAW,GAAG;AAC5B;AAAA,IAAA;AAED,QAAI,kBAA8C,CAAC;AAEnD,UAAM,oBAAoB,YAAY;AACjC,UAAA,gBAAgB,WAAW,GAAG;AACjC;AAAA,MAAA;AAED,YAAM,OAAO;AAAA,QACZ,gBAAgB,IAAI,CAAM,OAAA;AACrB,cAAA,GAAG,SAAS,UAAU;AAClB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,iBAAiB;AAAA,gBAChB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,gBAClB,eAAe,GAAG;AAAA,cAAA;AAAA,YAEpB;AAAA,UAAA;AAEG,cAAA,GAAG,SAAS,WAAW;AACnB,mBAAA;AAAA,cACN,SAAS,GAAG;AAAA,cACZ,MAAM,GAAG;AAAA,cACT,MAAM;AAAA,cACN,kBAAkB,GAAG;AAAA,YACtB;AAAA,UAAA;AAED,iBAAO,YAAc;AAAA,QAAA,CACrB;AAAA,QACD;AAAA,MACD;AACA,sBAAgB,QAAQ,CAAM,OAAA;AAC7B,YAAI,GAAG,IAAI;AAAA,MAAA,CACX;AACD,wBAAkB,CAAC;AAAA,IACpB;AAEA,QAAI,cAAc;AAElB,eAAW,aAAa,YAAY;AACnC,YAAM,mBAAmB,MAAM,UAAU,eAAe,WAAW;AAC/D,UAAA,iBAAiB,SAAS,WAAW;AACxC,cAAM,kBAAkB;AAClB,cAAA,SAAS,MAAM,iBAAiB,QAAQ;AAAA,UAC7C,GAAG;AAAA,UACH,WAAW,UAAU;AAAA,QAAA,CACrB;AACD,wBAAgB,KAAK,MAAM;AAC3B,cAAM,kBAAkB;AAAA,MAAA,OAClB;AACN,wBAAgB,KAAK,gBAAgB;AAAA,MAAA;AAAA,IACtC;AAED,UAAM,kBAAkB;AACxB,QAAI,oBAAoB;AAAA,EAAA;AAE1B;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationFile.cjs","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"MigrationFile.cjs","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\nimport { SchemaVersionBuilder } from './SchemaVersionBuilder'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n\tmigration: MigrationFile\n\tschemaVersionBuilder: SchemaVersionBuilder\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":";;AAYO,MAAM,oBAAoB,CAAC,YAA0D,OAAO,YAAY,cAAc,mBAAmB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationFile.js","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MigrationFile.js","sources":["../../../../packages/migrations-client/src/MigrationFile.ts"],"sourcesContent":["import { Migration } from '@contember/schema-migrations'\nimport { JSONObject } from './utils/json'\nimport { SchemaVersionBuilder } from './SchemaVersionBuilder'\n\nexport interface MigrationFile {\n\tpath: string\n\tversion: string\n\tname: string\n\n\tgetContent: () => Promise<MigrationContent>\n}\n\nexport const isSchemaMigration = (content: MigrationContent): content is SchemaMigration => typeof content !== 'function' && 'modifications' in content\n\nexport type ResolvedMigrationContent =\n\t| SchemaMigration\n\t| ContentMigration\n\nexport type MigrationContent =\n\t| ResolvedMigrationContent\n\t| ContentMigrationFactory\n\nexport type SchemaMigration =\n\t& {\n\t\ttype: 'schema'\n\t}\n\t& Migration\n\nexport type ContentMigration = {\n\ttype: 'content'\n\tversion: string\n\tname: string\n\tqueries: ContentMigrationQuery[]\n}\n\nexport type ContentMigrationFactoryArgs = {\n\tapiBaseUrl: string\n\tprojectName: string\n\tapiToken: string\n\tmigration: MigrationFile\n\tschemaVersionBuilder: SchemaVersionBuilder\n}\n\nexport type ContentMigrationFactory = {\n\ttype: 'factory'\n\tfactory: (args: ContentMigrationFactoryArgs) => Promise<ContentMigration>\n}\n\nexport type ContentMigrationQuery = {\n\tquery: string\n\tvariables?: JSONObject\n\tstage?: string\n\tcheckMutationResult?: boolean\n}\n\n"],"names":[],"mappings":"AAYO,MAAM,oBAAoB,CAAC,YAA0D,OAAO,YAAY,cAAc,mBAAmB;"}
|
|
@@ -5,6 +5,7 @@ const MigrationFile = require("./MigrationFile.cjs");
|
|
|
5
5
|
var MigrationState = /* @__PURE__ */ ((MigrationState2) => {
|
|
6
6
|
MigrationState2["TO_EXECUTE_OK"] = "to_execute_ok";
|
|
7
7
|
MigrationState2["TO_EXECUTE_ERROR"] = "to_execute_error";
|
|
8
|
+
MigrationState2["SKIP_EMPTY"] = "skip_empty";
|
|
8
9
|
MigrationState2["EXECUTED_OK"] = "executed_ok";
|
|
9
10
|
MigrationState2["EXECUTED_ERROR"] = "executed_error";
|
|
10
11
|
MigrationState2["EXECUTED_MISSING"] = "executed_missing";
|
|
@@ -63,6 +64,16 @@ class MigrationsStatusResolver {
|
|
|
63
64
|
if (allMigrations.find((it) => it.version === localMigration.version)) {
|
|
64
65
|
continue;
|
|
65
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
|
+
}
|
|
66
77
|
if (latestExecuted && latestExecuted.version > localMigration.version) {
|
|
67
78
|
allMigrations.push({
|
|
68
79
|
state: "to_execute_error",
|
|
@@ -1 +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\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 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\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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState","isSchemaMigration","calculateMigrationChecksum"],"mappings":";;;;AAaY,IAAA,mCAAAA,oBAAL;AACNA,kBAAA,eAAgB,IAAA;AAChBA,kBAAA,kBAAmB,IAAA;AACnBA,kBAAA,aAAc,IAAA;AACdA,kBAAA,gBAAiB,IAAA;AACjBA,kBAAA,kBAAmB,IAAA;
|
|
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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState","isSchemaMigration","calculateMigrationChecksum"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { isSchemaMigration } from "./MigrationFile.js";
|
|
|
3
3
|
var MigrationState = /* @__PURE__ */ ((MigrationState2) => {
|
|
4
4
|
MigrationState2["TO_EXECUTE_OK"] = "to_execute_ok";
|
|
5
5
|
MigrationState2["TO_EXECUTE_ERROR"] = "to_execute_error";
|
|
6
|
+
MigrationState2["SKIP_EMPTY"] = "skip_empty";
|
|
6
7
|
MigrationState2["EXECUTED_OK"] = "executed_ok";
|
|
7
8
|
MigrationState2["EXECUTED_ERROR"] = "executed_error";
|
|
8
9
|
MigrationState2["EXECUTED_MISSING"] = "executed_missing";
|
|
@@ -61,6 +62,16 @@ class MigrationsStatusResolver {
|
|
|
61
62
|
if (allMigrations.find((it) => it.version === localMigration.version)) {
|
|
62
63
|
continue;
|
|
63
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
|
+
}
|
|
64
75
|
if (latestExecuted && latestExecuted.version > localMigration.version) {
|
|
65
76
|
allMigrations.push({
|
|
66
77
|
state: "to_execute_error",
|
|
@@ -1 +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\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 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\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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState"],"mappings":";;AAaY,IAAA,mCAAAA,oBAAL;AACNA,kBAAA,eAAgB,IAAA;AAChBA,kBAAA,kBAAmB,IAAA;AACnBA,kBAAA,aAAc,IAAA;AACdA,kBAAA,gBAAiB,IAAA;AACjBA,kBAAA,kBAAmB,IAAA;
|
|
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\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\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 =>\n\t\t\t\t\tit.state === MigrationState.TO_EXECUTE_OK || (force && it.state === MigrationState.TO_EXECUTE_ERROR),\n\t\t\t),\n\t\t}\n\t}\n\n}\n"],"names":["MigrationState"],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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;IAK/C,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsBjE"}
|
|
@@ -5,7 +5,7 @@ export declare class MigrationExecutor {
|
|
|
5
5
|
executeMigrations({ client, migrations, contentMigrationFactoryArgs, force, log, }: {
|
|
6
6
|
client: SystemClient;
|
|
7
7
|
migrations: MigrationToExecuteOkStatus[];
|
|
8
|
-
contentMigrationFactoryArgs: ContentMigrationFactoryArgs
|
|
8
|
+
contentMigrationFactoryArgs: Omit<ContentMigrationFactoryArgs, 'migration'>;
|
|
9
9
|
log: (message: string) => void;
|
|
10
10
|
force?: boolean;
|
|
11
11
|
}): Promise<void>;
|
|
@@ -1 +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;AAG7C,qBAAa,iBAAiB;IAEvB,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,2BAA2B,CAAA;
|
|
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;AAG7C,qBAAa,iBAAiB;IAEvB,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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Migration } from '@contember/schema-migrations';
|
|
2
2
|
import { JSONObject } from './utils/json';
|
|
3
|
+
import { SchemaVersionBuilder } from './SchemaVersionBuilder';
|
|
3
4
|
export interface MigrationFile {
|
|
4
5
|
path: string;
|
|
5
6
|
version: string;
|
|
@@ -22,6 +23,8 @@ export type ContentMigrationFactoryArgs = {
|
|
|
22
23
|
apiBaseUrl: string;
|
|
23
24
|
projectName: string;
|
|
24
25
|
apiToken: string;
|
|
26
|
+
migration: MigrationFile;
|
|
27
|
+
schemaVersionBuilder: SchemaVersionBuilder;
|
|
25
28
|
};
|
|
26
29
|
export type ContentMigrationFactory = {
|
|
27
30
|
type: 'factory';
|