@contember/migrations-client 2.1.0-alpha.30 → 2.1.0-alpha.36
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/package.json +13 -8
- package/src/JsLoader.ts +0 -2
- package/src/MigrationExecuteHelper.ts +0 -2
- package/src/MigrationFile.ts +2 -2
- package/src/MigrationFilesManager.ts +1 -1
- package/src/MigrationsResolver.ts +1 -4
- package/src/SchemaVersionBuilder.ts +1 -2
- package/src/index.ts +2 -5
- package/src/migrations.ts +1 -5
- package/dist/development/index.cjs +0 -53
- package/dist/development/index.cjs.map +0 -1
- package/dist/development/index.js +0 -35
- package/dist/development/index.js.map +0 -1
- package/dist/development/src/JsLoader.cjs +0 -30
- package/dist/development/src/JsLoader.cjs.map +0 -1
- package/dist/development/src/JsLoader.js +0 -30
- package/dist/development/src/JsLoader.js.map +0 -1
- package/dist/development/src/JsonLoader.cjs +0 -33
- package/dist/development/src/JsonLoader.cjs.map +0 -1
- package/dist/development/src/JsonLoader.js +0 -16
- package/dist/development/src/JsonLoader.js.map +0 -1
- package/dist/development/src/MigrationCreator.cjs +0 -46
- package/dist/development/src/MigrationCreator.cjs.map +0 -1
- package/dist/development/src/MigrationCreator.js +0 -46
- package/dist/development/src/MigrationCreator.js.map +0 -1
- package/dist/development/src/MigrationExecuteHelper.cjs +0 -71
- package/dist/development/src/MigrationExecuteHelper.cjs.map +0 -1
- package/dist/development/src/MigrationExecuteHelper.js +0 -71
- package/dist/development/src/MigrationExecuteHelper.js.map +0 -1
- package/dist/development/src/MigrationFile.cjs +0 -5
- package/dist/development/src/MigrationFile.cjs.map +0 -1
- package/dist/development/src/MigrationFile.js +0 -5
- package/dist/development/src/MigrationFile.js.map +0 -1
- package/dist/development/src/MigrationFilesManager.cjs +0 -106
- package/dist/development/src/MigrationFilesManager.cjs.map +0 -1
- package/dist/development/src/MigrationFilesManager.js +0 -89
- package/dist/development/src/MigrationFilesManager.js.map +0 -1
- package/dist/development/src/MigrationParser.cjs +0 -31
- package/dist/development/src/MigrationParser.cjs.map +0 -1
- package/dist/development/src/MigrationParser.js +0 -31
- package/dist/development/src/MigrationParser.js.map +0 -1
- package/dist/development/src/MigrationsResolver.cjs +0 -36
- package/dist/development/src/MigrationsResolver.cjs.map +0 -1
- package/dist/development/src/MigrationsResolver.js +0 -36
- package/dist/development/src/MigrationsResolver.js.map +0 -1
- package/dist/development/src/SchemaVersionBuilder.cjs +0 -26
- package/dist/development/src/SchemaVersionBuilder.cjs.map +0 -1
- package/dist/development/src/SchemaVersionBuilder.js +0 -26
- package/dist/development/src/SchemaVersionBuilder.js.map +0 -1
- package/dist/development/src/SystemClient.cjs +0 -117
- package/dist/development/src/SystemClient.cjs.map +0 -1
- package/dist/development/src/SystemClient.js +0 -117
- package/dist/development/src/SystemClient.js.map +0 -1
- package/dist/development/src/migrations.cjs +0 -108
- package/dist/development/src/migrations.cjs.map +0 -1
- package/dist/development/src/migrations.js +0 -108
- package/dist/development/src/migrations.js.map +0 -1
- package/dist/development/src/utils/assertNever.cjs +0 -7
- package/dist/development/src/utils/assertNever.cjs.map +0 -1
- package/dist/development/src/utils/assertNever.js +0 -7
- package/dist/development/src/utils/assertNever.js.map +0 -1
- package/dist/production/index.cjs +0 -53
- package/dist/production/index.cjs.map +0 -1
- package/dist/production/index.js +0 -35
- package/dist/production/index.js.map +0 -1
- package/dist/production/src/JsLoader.cjs +0 -30
- package/dist/production/src/JsLoader.cjs.map +0 -1
- package/dist/production/src/JsLoader.js +0 -30
- package/dist/production/src/JsLoader.js.map +0 -1
- package/dist/production/src/JsonLoader.cjs +0 -33
- package/dist/production/src/JsonLoader.cjs.map +0 -1
- package/dist/production/src/JsonLoader.js +0 -16
- package/dist/production/src/JsonLoader.js.map +0 -1
- package/dist/production/src/MigrationCreator.cjs +0 -46
- package/dist/production/src/MigrationCreator.cjs.map +0 -1
- package/dist/production/src/MigrationCreator.js +0 -46
- package/dist/production/src/MigrationCreator.js.map +0 -1
- package/dist/production/src/MigrationExecuteHelper.cjs +0 -71
- package/dist/production/src/MigrationExecuteHelper.cjs.map +0 -1
- package/dist/production/src/MigrationExecuteHelper.js +0 -71
- package/dist/production/src/MigrationExecuteHelper.js.map +0 -1
- package/dist/production/src/MigrationFile.cjs +0 -5
- package/dist/production/src/MigrationFile.cjs.map +0 -1
- package/dist/production/src/MigrationFile.js +0 -5
- package/dist/production/src/MigrationFile.js.map +0 -1
- package/dist/production/src/MigrationFilesManager.cjs +0 -106
- package/dist/production/src/MigrationFilesManager.cjs.map +0 -1
- package/dist/production/src/MigrationFilesManager.js +0 -89
- package/dist/production/src/MigrationFilesManager.js.map +0 -1
- package/dist/production/src/MigrationParser.cjs +0 -31
- package/dist/production/src/MigrationParser.cjs.map +0 -1
- package/dist/production/src/MigrationParser.js +0 -31
- package/dist/production/src/MigrationParser.js.map +0 -1
- package/dist/production/src/MigrationsResolver.cjs +0 -36
- package/dist/production/src/MigrationsResolver.cjs.map +0 -1
- package/dist/production/src/MigrationsResolver.js +0 -36
- package/dist/production/src/MigrationsResolver.js.map +0 -1
- package/dist/production/src/SchemaVersionBuilder.cjs +0 -26
- package/dist/production/src/SchemaVersionBuilder.cjs.map +0 -1
- package/dist/production/src/SchemaVersionBuilder.js +0 -26
- package/dist/production/src/SchemaVersionBuilder.js.map +0 -1
- package/dist/production/src/SystemClient.cjs +0 -117
- package/dist/production/src/SystemClient.cjs.map +0 -1
- package/dist/production/src/SystemClient.js +0 -117
- package/dist/production/src/SystemClient.js.map +0 -1
- package/dist/production/src/migrations.cjs +0 -108
- package/dist/production/src/migrations.cjs.map +0 -1
- package/dist/production/src/migrations.js +0 -108
- package/dist/production/src/migrations.js.map +0 -1
- package/dist/production/src/utils/assertNever.cjs +0 -7
- package/dist/production/src/utils/assertNever.cjs.map +0 -1
- package/dist/production/src/utils/assertNever.js +0 -7
- package/dist/production/src/utils/assertNever.js.map +0 -1
- package/dist/types/JsLoader.d.ts +0 -10
- package/dist/types/JsLoader.d.ts.map +0 -1
- package/dist/types/JsonLoader.d.ts +0 -9
- package/dist/types/JsonLoader.d.ts.map +0 -1
- package/dist/types/MigrationCreator.d.ts +0 -21
- package/dist/types/MigrationCreator.d.ts.map +0 -1
- package/dist/types/MigrationExecuteHelper.d.ts +0 -13
- package/dist/types/MigrationExecuteHelper.d.ts.map +0 -1
- package/dist/types/MigrationFile.d.ts +0 -39
- package/dist/types/MigrationFile.d.ts.map +0 -1
- package/dist/types/MigrationFileLoader.d.ts +0 -5
- package/dist/types/MigrationFileLoader.d.ts.map +0 -1
- package/dist/types/MigrationFilesManager.d.ts +0 -18
- package/dist/types/MigrationFilesManager.d.ts.map +0 -1
- package/dist/types/MigrationParser.d.ts +0 -6
- package/dist/types/MigrationParser.d.ts.map +0 -1
- package/dist/types/MigrationsResolver.d.ts +0 -14
- package/dist/types/MigrationsResolver.d.ts.map +0 -1
- package/dist/types/SchemaVersionBuilder.d.ts +0 -13
- package/dist/types/SchemaVersionBuilder.d.ts.map +0 -1
- package/dist/types/SystemClient.d.ts +0 -29
- package/dist/types/SystemClient.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -15
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/migrations.d.ts +0 -60
- package/dist/types/migrations.d.ts.map +0 -1
- package/dist/types/tsconfig.tsbuildinfo +0 -1
- package/dist/types/utils/assertNever.d.ts +0 -2
- package/dist/types/utils/assertNever.d.ts.map +0 -1
- package/dist/types/utils/json.d.ts +0 -7
- package/dist/types/utils/json.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationFilesManager.js","sources":["../../../../packages/migrations-client/src/MigrationFilesManager.ts"],"sourcesContent":["import { MigrationVersionHelper } from '@contember/engine-common'\nimport * as fs from 'node:fs/promises'\nimport { MigrationFileLoader } from './MigrationFileLoader'\nimport { MigrationContent, MigrationFile } from './MigrationFile'\nimport { join } from 'node:path'\nimport { Dirent } from 'node:fs'\n\nexport class MigrationFilesManager {\n\tprivate migrations: null | Promise<MigrationFile[]> = null\n\n\tconstructor(\n\t\tpublic readonly directory: string,\n\t\tprivate readonly loaders: Record<string, MigrationFileLoader>,\n\t) {}\n\n\tpublic async createFile(content: string, name: string, extension = 'json'): Promise<string> {\n\t\tthis.migrations = null\n\t\tconst path = this.formatPath(name, extension)\n\t\tawait fs.writeFile(path, content, { encoding: 'utf8' })\n\t\treturn await fs.realpath(path)\n\t}\n\n\tpublic async removeFile(name: string) {\n\t\tthis.migrations = null\n\t\tconst path = this.formatPath(name)\n\t\tawait fs.unlink(path)\n\t}\n\n\tpublic async moveFile(oldName: string, newName: string) {\n\t\tthis.migrations = null\n\t\tawait fs.rename(this.formatPath(oldName), this.formatPath(newName))\n\t}\n\n\tpublic async createDirIfNotExist(): Promise<void> {\n\t\ttry {\n\t\t\tawait fs.mkdir(this.directory)\n\t\t} catch (e) {\n\t\t\tif (!(e instanceof Error) || !('code' in e) || (e as any).code !== 'EEXIST') {\n\t\t\t\tthrow e\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async readFiles(): Promise<MigrationFile[]> {\n\t\treturn this.migrations ??= this.forceReadFiles()\n\t}\n\n\tpublic async forceReadFiles(): Promise<MigrationFile[]> {\n\t\tconst files = (await this.listFiles()).map(it => ({\n\t\t\tfilename: it,\n\t\t\tversion: MigrationVersionHelper.extractVersion(it),\n\t\t}))\n\n\t\treturn files.map(({ version, filename }): MigrationFile => {\n\t\t\tconst ext = filename.substring(filename.lastIndexOf('.') + 1)\n\t\t\tconst path = join(this.directory, filename)\n\t\t\tlet content: Promise<MigrationContent> | null = null\n\t\t\tconst file: MigrationFile = {\n\t\t\t\tpath: path,\n\t\t\t\tversion: version,\n\t\t\t\tname: MigrationVersionHelper.extractName(path.substring(path.lastIndexOf('/') + 1)),\n\t\t\t\tgetContent: () => {\n\t\t\t\t\tcontent ??= this.loaders[ext].load(file)\n\t\t\t\t\treturn content\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn file\n\t\t})\n\t}\n\n\tprivate async tryReadDir(): Promise<Dirent[]> {\n\t\ttry {\n\t\t\treturn await fs.readdir(this.directory, { withFileTypes: true })\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error && 'code' in e && (e as any).code === 'ENOENT') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tprivate async listFiles(): Promise<string[]> {\n\t\tconst files = await this.tryReadDir()\n\n\t\tconst extensions = Object.keys(this.loaders).join('|')\n\t\tconst regex = new RegExp('^\\\\d{4}-\\\\d{2}-\\\\d{2}-\\\\d{6}-[\\\\w-]+\\\\.(' + extensions + ')$')\n\t\tconst filteredFiles = await Promise.all(\n\t\t\tfiles\n\t\t\t\t.filter(it => it.isFile())\n\t\t\t\t.map(it => it.name)\n\t\t\t\t.filter(it => it.match(regex)),\n\t\t)\n\n\t\treturn filteredFiles.sort()\n\t}\n\n\tprivate formatPath(version: string, extension = 'json'): string {\n\t\tconst filename = `${version}.${extension}`\n\t\tconst path = `${this.directory}/${filename}`\n\t\treturn path\n\t}\n}\n"],"names":[],"mappings":";;;;;;AAOO,MAAM,sBAAsB;AAAA,EAGlC,YACiB,WACC,SAChB;AAFe,SAAA,YAAA;AACC,SAAA,UAAA;AAJlB,kBAAA,MAAQ,cAA8C,IAAA;AAAA,EAAA;AAAA,EAOtD,MAAa,WAAW,SAAiB,MAAc,YAAY,QAAyB;AAC3F,SAAK,aAAa;AAClB,UAAM,OAAO,KAAK,WAAW,MAAM,SAAS;AAC5C,UAAM,GAAG,UAAU,MAAM,SAAS,EAAE,UAAU,QAAQ;AAC/C,WAAA,MAAM,GAAG,SAAS,IAAI;AAAA,EAAA;AAAA,EAG9B,MAAa,WAAW,MAAc;AACrC,SAAK,aAAa;AACZ,UAAA,OAAO,KAAK,WAAW,IAAI;AAC3B,UAAA,GAAG,OAAO,IAAI;AAAA,EAAA;AAAA,EAGrB,MAAa,SAAS,SAAiB,SAAiB;AACvD,SAAK,aAAa;AACZ,UAAA,GAAG,OAAO,KAAK,WAAW,OAAO,GAAG,KAAK,WAAW,OAAO,CAAC;AAAA,EAAA;AAAA,EAGnE,MAAa,sBAAqC;AAC7C,QAAA;AACG,YAAA,GAAG,MAAM,KAAK,SAAS;AAAA,aACrB,GAAG;AACP,UAAA,EAAE,aAAa,UAAU,EAAE,UAAU,MAAO,EAAU,SAAS,UAAU;AACtE,cAAA;AAAA,MAAA;AAAA,IACP;AAAA,EACD;AAAA,EAGD,MAAa,YAAsC;AAClD,WAAO,KAAK,eAAL,KAAK,aAAe,KAAK;EAAe;AAAA,EAGhD,MAAa,iBAA2C;AACvD,UAAM,SAAS,MAAM,KAAK,UAAU,GAAG,IAAI,CAAO,QAAA;AAAA,MACjD,UAAU;AAAA,MACV,SAAS,uBAAuB,eAAe,EAAE;AAAA,IAAA,EAChD;AAEF,WAAO,MAAM,IAAI,CAAC,EAAE,SAAS,eAA8B;AAC1D,YAAM,MAAM,SAAS,UAAU,SAAS,YAAY,GAAG,IAAI,CAAC;AAC5D,YAAM,OAAO,KAAK,KAAK,WAAW,QAAQ;AAC1C,UAAI,UAA4C;AAChD,YAAM,OAAsB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,MAAM,uBAAuB,YAAY,KAAK,UAAU,KAAK,YAAY,GAAG,IAAI,CAAC,CAAC;AAAA,QAClF,YAAY,MAAM;AACjB,sBAAA,UAAY,KAAK,QAAQ,GAAG,EAAE,KAAK,IAAI;AAChC,iBAAA;AAAA,QAAA;AAAA,MAET;AACO,aAAA;AAAA,IAAA,CACP;AAAA,EAAA;AAAA,EAGF,MAAc,aAAgC;AACzC,QAAA;AACI,aAAA,MAAM,GAAG,QAAQ,KAAK,WAAW,EAAE,eAAe,MAAM;AAAA,aACvD,GAAG;AACX,UAAI,aAAa,SAAS,UAAU,KAAM,EAAU,SAAS,UAAU;AACtE,eAAO,CAAC;AAAA,MAAA;AAEH,YAAA;AAAA,IAAA;AAAA,EACP;AAAA,EAGD,MAAc,YAA+B;AACtC,UAAA,QAAQ,MAAM,KAAK,WAAW;AAEpC,UAAM,aAAa,OAAO,KAAK,KAAK,OAAO,EAAE,KAAK,GAAG;AACrD,UAAM,QAAQ,IAAI,OAAO,6CAA6C,aAAc,IAAI;AAClF,UAAA,gBAAgB,MAAM,QAAQ;AAAA,MACnC,MACE,OAAO,CAAA,OAAM,GAAG,OAAA,CAAQ,EACxB,IAAI,CAAM,OAAA,GAAG,IAAI,EACjB,OAAO,QAAM,GAAG,MAAM,KAAK,CAAC;AAAA,IAC/B;AAEA,WAAO,cAAc,KAAK;AAAA,EAAA;AAAA,EAGnB,WAAW,SAAiB,YAAY,QAAgB;AAC/D,UAAM,WAAW,GAAG,OAAO,IAAI,SAAS;AACxC,UAAM,OAAO,GAAG,KAAK,SAAS,IAAI,QAAQ;AACnC,WAAA;AAAA,EAAA;AAET;"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const schemaMigrations = require("@contember/schema-migrations");
|
|
4
|
-
class MigrationParser {
|
|
5
|
-
parse(migrationFile, content) {
|
|
6
|
-
if (typeof content !== "object" || content === null) {
|
|
7
|
-
throw new Error("Invalid migration");
|
|
8
|
-
}
|
|
9
|
-
if ("modifications" in content) {
|
|
10
|
-
const validated = content;
|
|
11
|
-
return {
|
|
12
|
-
type: "schema",
|
|
13
|
-
version: migrationFile.version,
|
|
14
|
-
name: migrationFile.name,
|
|
15
|
-
formatVersion: validated.formatVersion || schemaMigrations.VERSION_INITIAL,
|
|
16
|
-
modifications: validated.modifications,
|
|
17
|
-
...validated.skippedErrors ? { skippedErrors: validated.skippedErrors } : {}
|
|
18
|
-
};
|
|
19
|
-
} else if ("queries" in content || "query" in content) {
|
|
20
|
-
return {
|
|
21
|
-
type: "content",
|
|
22
|
-
version: migrationFile.version,
|
|
23
|
-
name: migrationFile.name,
|
|
24
|
-
queries: "queries" in content ? content.queries : [content]
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
throw new Error("Invalid migration content");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.MigrationParser = MigrationParser;
|
|
31
|
-
//# sourceMappingURL=MigrationParser.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationParser.cjs","sources":["../../../../packages/migrations-client/src/MigrationParser.ts"],"sourcesContent":["import { Migration, VERSION_INITIAL } from '@contember/schema-migrations'\nimport { ContentMigrationQuery, MigrationFile, ResolvedMigrationContent } from './MigrationFile'\nimport { JSONValue } from './utils/json'\n\nexport class MigrationParser {\n\tpublic parse(migrationFile: MigrationFile, content: JSONValue): ResolvedMigrationContent {\n\t\tif (typeof content !== 'object' || content === null) {\n\t\t\tthrow new Error('Invalid migration')\n\t\t}\n\n\t\tif ('modifications' in content) {\n\t\t\tconst validated = content as Migration // todo validate\n\n\t\t\treturn {\n\t\t\t\ttype: 'schema',\n\t\t\t\tversion: migrationFile.version,\n\t\t\t\tname: migrationFile.name,\n\t\t\t\tformatVersion: validated.formatVersion || VERSION_INITIAL,\n\t\t\t\tmodifications: validated.modifications,\n\t\t\t\t...(validated.skippedErrors ? { skippedErrors: validated.skippedErrors } : {}),\n\t\t\t}\n\t\t} else if ('queries' in content || 'query' in content) {\n\t\t\treturn {\n\t\t\t\ttype: 'content',\n\t\t\t\tversion: migrationFile.version,\n\t\t\t\tname: migrationFile.name,\n\t\t\t\tqueries: ('queries' in content ? content.queries : [content]) as ContentMigrationQuery[],\n\t\t\t}\n\t\t}\n\t\tthrow new Error('Invalid migration content')\n\t}\n}\n"],"names":["VERSION_INITIAL"],"mappings":";;;AAIO,MAAM,gBAAgB;AAAA,EACrB,MAAM,eAA8B,SAA8C;AACxF,QAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AAC9C,YAAA,IAAI,MAAM,mBAAmB;AAAA,IAAA;AAGpC,QAAI,mBAAmB,SAAS;AAC/B,YAAM,YAAY;AAEX,aAAA;AAAA,QACN,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,QACvB,MAAM,cAAc;AAAA,QACpB,eAAe,UAAU,iBAAiBA,iBAAA;AAAA,QAC1C,eAAe,UAAU;AAAA,QACzB,GAAI,UAAU,gBAAgB,EAAE,eAAe,UAAU,cAAA,IAAkB,CAAA;AAAA,MAC5E;AAAA,IACU,WAAA,aAAa,WAAW,WAAW,SAAS;AAC/C,aAAA;AAAA,QACN,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,QACvB,MAAM,cAAc;AAAA,QACpB,SAAU,aAAa,UAAU,QAAQ,UAAU,CAAC,OAAO;AAAA,MAC5D;AAAA,IAAA;AAEK,UAAA,IAAI,MAAM,2BAA2B;AAAA,EAAA;AAE7C;;"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { VERSION_INITIAL } from "@contember/schema-migrations";
|
|
2
|
-
class MigrationParser {
|
|
3
|
-
parse(migrationFile, content) {
|
|
4
|
-
if (typeof content !== "object" || content === null) {
|
|
5
|
-
throw new Error("Invalid migration");
|
|
6
|
-
}
|
|
7
|
-
if ("modifications" in content) {
|
|
8
|
-
const validated = content;
|
|
9
|
-
return {
|
|
10
|
-
type: "schema",
|
|
11
|
-
version: migrationFile.version,
|
|
12
|
-
name: migrationFile.name,
|
|
13
|
-
formatVersion: validated.formatVersion || VERSION_INITIAL,
|
|
14
|
-
modifications: validated.modifications,
|
|
15
|
-
...validated.skippedErrors ? { skippedErrors: validated.skippedErrors } : {}
|
|
16
|
-
};
|
|
17
|
-
} else if ("queries" in content || "query" in content) {
|
|
18
|
-
return {
|
|
19
|
-
type: "content",
|
|
20
|
-
version: migrationFile.version,
|
|
21
|
-
name: migrationFile.name,
|
|
22
|
-
queries: "queries" in content ? content.queries : [content]
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
throw new Error("Invalid migration content");
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export {
|
|
29
|
-
MigrationParser
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=MigrationParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationParser.js","sources":["../../../../packages/migrations-client/src/MigrationParser.ts"],"sourcesContent":["import { Migration, VERSION_INITIAL } from '@contember/schema-migrations'\nimport { ContentMigrationQuery, MigrationFile, ResolvedMigrationContent } from './MigrationFile'\nimport { JSONValue } from './utils/json'\n\nexport class MigrationParser {\n\tpublic parse(migrationFile: MigrationFile, content: JSONValue): ResolvedMigrationContent {\n\t\tif (typeof content !== 'object' || content === null) {\n\t\t\tthrow new Error('Invalid migration')\n\t\t}\n\n\t\tif ('modifications' in content) {\n\t\t\tconst validated = content as Migration // todo validate\n\n\t\t\treturn {\n\t\t\t\ttype: 'schema',\n\t\t\t\tversion: migrationFile.version,\n\t\t\t\tname: migrationFile.name,\n\t\t\t\tformatVersion: validated.formatVersion || VERSION_INITIAL,\n\t\t\t\tmodifications: validated.modifications,\n\t\t\t\t...(validated.skippedErrors ? { skippedErrors: validated.skippedErrors } : {}),\n\t\t\t}\n\t\t} else if ('queries' in content || 'query' in content) {\n\t\t\treturn {\n\t\t\t\ttype: 'content',\n\t\t\t\tversion: migrationFile.version,\n\t\t\t\tname: migrationFile.name,\n\t\t\t\tqueries: ('queries' in content ? content.queries : [content]) as ContentMigrationQuery[],\n\t\t\t}\n\t\t}\n\t\tthrow new Error('Invalid migration content')\n\t}\n}\n"],"names":[],"mappings":";AAIO,MAAM,gBAAgB;AAAA,EACrB,MAAM,eAA8B,SAA8C;AACxF,QAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AAC9C,YAAA,IAAI,MAAM,mBAAmB;AAAA,IAAA;AAGpC,QAAI,mBAAmB,SAAS;AAC/B,YAAM,YAAY;AAEX,aAAA;AAAA,QACN,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,QACvB,MAAM,cAAc;AAAA,QACpB,eAAe,UAAU,iBAAiB;AAAA,QAC1C,eAAe,UAAU;AAAA,QACzB,GAAI,UAAU,gBAAgB,EAAE,eAAe,UAAU,cAAA,IAAkB,CAAA;AAAA,MAC5E;AAAA,IACU,WAAA,aAAa,WAAW,WAAW,SAAS;AAC/C,aAAA;AAAA,QACN,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,QACvB,MAAM,cAAc;AAAA,QACpB,SAAU,aAAa,UAAU,QAAQ,UAAU,CAAC,OAAO;AAAA,MAC5D;AAAA,IAAA;AAEK,UAAA,IAAI,MAAM,2BAA2B;AAAA,EAAA;AAE7C;"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const MigrationFile = require("./MigrationFile.cjs");
|
|
4
|
-
const engineCommon = require("@contember/engine-common");
|
|
5
|
-
class MigrationsResolver {
|
|
6
|
-
constructor(migrationFilesManager) {
|
|
7
|
-
this.migrationFilesManager = migrationFilesManager;
|
|
8
|
-
}
|
|
9
|
-
get directory() {
|
|
10
|
-
return this.migrationFilesManager.directory;
|
|
11
|
-
}
|
|
12
|
-
async getMigrationFiles() {
|
|
13
|
-
return await this.migrationFilesManager.readFiles();
|
|
14
|
-
}
|
|
15
|
-
async getSchemaMigrations() {
|
|
16
|
-
const migrationFiles = await this.getMigrationFiles();
|
|
17
|
-
const migrations = await Promise.all(migrationFiles.map(this.convertMigrationFileToSchemaMigration));
|
|
18
|
-
return migrations.filter((it) => it !== null);
|
|
19
|
-
}
|
|
20
|
-
async findLatestSchemaMigration() {
|
|
21
|
-
const migrations = await this.getSchemaMigrations();
|
|
22
|
-
return migrations.length > 0 ? migrations[migrations.length - 1] : null;
|
|
23
|
-
}
|
|
24
|
-
async findSchemaMigrationByVersion(version) {
|
|
25
|
-
const migrations = await this.getSchemaMigrations();
|
|
26
|
-
return migrations.find(
|
|
27
|
-
(it) => engineCommon.MigrationVersionHelper.extractVersion(it.version) === engineCommon.MigrationVersionHelper.extractVersion(version)
|
|
28
|
-
) ?? null;
|
|
29
|
-
}
|
|
30
|
-
async convertMigrationFileToSchemaMigration(file) {
|
|
31
|
-
const result = await file.getContent();
|
|
32
|
-
return MigrationFile.isSchemaMigration(result) ? result : null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.MigrationsResolver = MigrationsResolver;
|
|
36
|
-
//# sourceMappingURL=MigrationsResolver.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationsResolver.cjs","sources":["../../../../packages/migrations-client/src/MigrationsResolver.ts"],"sourcesContent":["import { MigrationFilesManager } from './MigrationFilesManager'\nimport { Migration } from '@contember/schema-migrations'\nimport { isSchemaMigration, MigrationFile } from './MigrationFile'\nimport { MigrationVersionHelper } from '@contember/engine-common'\n\nexport class MigrationsResolver {\n\n\tconstructor(private readonly migrationFilesManager: MigrationFilesManager) {}\n\n\tpublic get directory(): string {\n\t\treturn this.migrationFilesManager.directory\n\t}\n\n\tpublic async getMigrationFiles(): Promise<MigrationFile[]> {\n\t\treturn await this.migrationFilesManager.readFiles()\n\t}\n\n\tpublic async getSchemaMigrations(): Promise<Migration[]> {\n\t\tconst migrationFiles = await this.getMigrationFiles()\n\n\t\tconst migrations = await Promise.all(migrationFiles.map(this.convertMigrationFileToSchemaMigration))\n\n\t\treturn migrations.filter((it): it is Migration => it !== null)\n\t}\n\n\tpublic async findLatestSchemaMigration(): Promise<Migration | null> {\n\t\tconst migrations = await this.getSchemaMigrations()\n\t\treturn migrations.length > 0 ? migrations[migrations.length - 1] : null\n\t}\n\n\tpublic async findSchemaMigrationByVersion(version: string): Promise<Migration | null> {\n\t\tconst migrations = await this.getSchemaMigrations()\n\t\treturn migrations\n\t\t\t.find(it =>\n\t\t\t\tMigrationVersionHelper.extractVersion(it.version) === MigrationVersionHelper.extractVersion(version),\n\t\t\t)\n\t\t\t?? null\n\t}\n\n\tprivate async convertMigrationFileToSchemaMigration(file: MigrationFile): Promise<Migration | null> {\n\t\tconst result = await file.getContent()\n\t\treturn isSchemaMigration(result) ? result : null\n\t}\n}\n"],"names":["MigrationVersionHelper","isSchemaMigration"],"mappings":";;;;AAKO,MAAM,mBAAmB;AAAA,EAE/B,YAA6B,uBAA8C;AAA9C,SAAA,wBAAA;AAAA,EAAA;AAAA,EAE7B,IAAW,YAAoB;AAC9B,WAAO,KAAK,sBAAsB;AAAA,EAAA;AAAA,EAGnC,MAAa,oBAA8C;AACnD,WAAA,MAAM,KAAK,sBAAsB,UAAU;AAAA,EAAA;AAAA,EAGnD,MAAa,sBAA4C;AAClD,UAAA,iBAAiB,MAAM,KAAK,kBAAkB;AAE9C,UAAA,aAAa,MAAM,QAAQ,IAAI,eAAe,IAAI,KAAK,qCAAqC,CAAC;AAEnG,WAAO,WAAW,OAAO,CAAC,OAAwB,OAAO,IAAI;AAAA,EAAA;AAAA,EAG9D,MAAa,4BAAuD;AAC7D,UAAA,aAAa,MAAM,KAAK,oBAAoB;AAClD,WAAO,WAAW,SAAS,IAAI,WAAW,WAAW,SAAS,CAAC,IAAI;AAAA,EAAA;AAAA,EAGpE,MAAa,6BAA6B,SAA4C;AAC/E,UAAA,aAAa,MAAM,KAAK,oBAAoB;AAClD,WAAO,WACL;AAAA,MAAK,CAAA,OACLA,oCAAuB,eAAe,GAAG,OAAO,MAAMA,aAAAA,uBAAuB,eAAe,OAAO;AAAA,IAAA,KAEjG;AAAA,EAAA;AAAA,EAGL,MAAc,sCAAsC,MAAgD;AAC7F,UAAA,SAAS,MAAM,KAAK,WAAW;AAC9B,WAAAC,gCAAkB,MAAM,IAAI,SAAS;AAAA,EAAA;AAE9C;;"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { isSchemaMigration } from "./MigrationFile.js";
|
|
2
|
-
import { MigrationVersionHelper } from "@contember/engine-common";
|
|
3
|
-
class MigrationsResolver {
|
|
4
|
-
constructor(migrationFilesManager) {
|
|
5
|
-
this.migrationFilesManager = migrationFilesManager;
|
|
6
|
-
}
|
|
7
|
-
get directory() {
|
|
8
|
-
return this.migrationFilesManager.directory;
|
|
9
|
-
}
|
|
10
|
-
async getMigrationFiles() {
|
|
11
|
-
return await this.migrationFilesManager.readFiles();
|
|
12
|
-
}
|
|
13
|
-
async getSchemaMigrations() {
|
|
14
|
-
const migrationFiles = await this.getMigrationFiles();
|
|
15
|
-
const migrations = await Promise.all(migrationFiles.map(this.convertMigrationFileToSchemaMigration));
|
|
16
|
-
return migrations.filter((it) => it !== null);
|
|
17
|
-
}
|
|
18
|
-
async findLatestSchemaMigration() {
|
|
19
|
-
const migrations = await this.getSchemaMigrations();
|
|
20
|
-
return migrations.length > 0 ? migrations[migrations.length - 1] : null;
|
|
21
|
-
}
|
|
22
|
-
async findSchemaMigrationByVersion(version) {
|
|
23
|
-
const migrations = await this.getSchemaMigrations();
|
|
24
|
-
return migrations.find(
|
|
25
|
-
(it) => MigrationVersionHelper.extractVersion(it.version) === MigrationVersionHelper.extractVersion(version)
|
|
26
|
-
) ?? null;
|
|
27
|
-
}
|
|
28
|
-
async convertMigrationFileToSchemaMigration(file) {
|
|
29
|
-
const result = await file.getContent();
|
|
30
|
-
return isSchemaMigration(result) ? result : null;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export {
|
|
34
|
-
MigrationsResolver
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=MigrationsResolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationsResolver.js","sources":["../../../../packages/migrations-client/src/MigrationsResolver.ts"],"sourcesContent":["import { MigrationFilesManager } from './MigrationFilesManager'\nimport { Migration } from '@contember/schema-migrations'\nimport { isSchemaMigration, MigrationFile } from './MigrationFile'\nimport { MigrationVersionHelper } from '@contember/engine-common'\n\nexport class MigrationsResolver {\n\n\tconstructor(private readonly migrationFilesManager: MigrationFilesManager) {}\n\n\tpublic get directory(): string {\n\t\treturn this.migrationFilesManager.directory\n\t}\n\n\tpublic async getMigrationFiles(): Promise<MigrationFile[]> {\n\t\treturn await this.migrationFilesManager.readFiles()\n\t}\n\n\tpublic async getSchemaMigrations(): Promise<Migration[]> {\n\t\tconst migrationFiles = await this.getMigrationFiles()\n\n\t\tconst migrations = await Promise.all(migrationFiles.map(this.convertMigrationFileToSchemaMigration))\n\n\t\treturn migrations.filter((it): it is Migration => it !== null)\n\t}\n\n\tpublic async findLatestSchemaMigration(): Promise<Migration | null> {\n\t\tconst migrations = await this.getSchemaMigrations()\n\t\treturn migrations.length > 0 ? migrations[migrations.length - 1] : null\n\t}\n\n\tpublic async findSchemaMigrationByVersion(version: string): Promise<Migration | null> {\n\t\tconst migrations = await this.getSchemaMigrations()\n\t\treturn migrations\n\t\t\t.find(it =>\n\t\t\t\tMigrationVersionHelper.extractVersion(it.version) === MigrationVersionHelper.extractVersion(version),\n\t\t\t)\n\t\t\t?? null\n\t}\n\n\tprivate async convertMigrationFileToSchemaMigration(file: MigrationFile): Promise<Migration | null> {\n\t\tconst result = await file.getContent()\n\t\treturn isSchemaMigration(result) ? result : null\n\t}\n}\n"],"names":[],"mappings":";;AAKO,MAAM,mBAAmB;AAAA,EAE/B,YAA6B,uBAA8C;AAA9C,SAAA,wBAAA;AAAA,EAAA;AAAA,EAE7B,IAAW,YAAoB;AAC9B,WAAO,KAAK,sBAAsB;AAAA,EAAA;AAAA,EAGnC,MAAa,oBAA8C;AACnD,WAAA,MAAM,KAAK,sBAAsB,UAAU;AAAA,EAAA;AAAA,EAGnD,MAAa,sBAA4C;AAClD,UAAA,iBAAiB,MAAM,KAAK,kBAAkB;AAE9C,UAAA,aAAa,MAAM,QAAQ,IAAI,eAAe,IAAI,KAAK,qCAAqC,CAAC;AAEnG,WAAO,WAAW,OAAO,CAAC,OAAwB,OAAO,IAAI;AAAA,EAAA;AAAA,EAG9D,MAAa,4BAAuD;AAC7D,UAAA,aAAa,MAAM,KAAK,oBAAoB;AAClD,WAAO,WAAW,SAAS,IAAI,WAAW,WAAW,SAAS,CAAC,IAAI;AAAA,EAAA;AAAA,EAGpE,MAAa,6BAA6B,SAA4C;AAC/E,UAAA,aAAa,MAAM,KAAK,oBAAoB;AAClD,WAAO,WACL;AAAA,MAAK,CAAA,OACL,uBAAuB,eAAe,GAAG,OAAO,MAAM,uBAAuB,eAAe,OAAO;AAAA,IAAA,KAEjG;AAAA,EAAA;AAAA,EAGL,MAAc,sCAAsC,MAAgD;AAC7F,UAAA,SAAS,MAAM,KAAK,WAAW;AAC9B,WAAA,kBAAkB,MAAM,IAAI,SAAS;AAAA,EAAA;AAE9C;"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const schemaUtils = require("@contember/schema-utils");
|
|
4
|
-
class SchemaVersionBuilder {
|
|
5
|
-
constructor(migrationsResolver, schemaMigrator) {
|
|
6
|
-
this.migrationsResolver = migrationsResolver;
|
|
7
|
-
this.schemaMigrator = schemaMigrator;
|
|
8
|
-
}
|
|
9
|
-
async buildSchema(targetVersion) {
|
|
10
|
-
return this.buildSchemaAdvanced(schemaUtils.emptySchema, (version) => !targetVersion || version <= targetVersion);
|
|
11
|
-
}
|
|
12
|
-
async buildSchemaUntil(targetVersion) {
|
|
13
|
-
return this.buildSchemaAdvanced(schemaUtils.emptySchema, (version) => version < targetVersion);
|
|
14
|
-
}
|
|
15
|
-
async continue(schema, previousVersion, targetVersion) {
|
|
16
|
-
return this.buildSchemaAdvanced(schema, (version) => version <= targetVersion && version > (previousVersion || ""));
|
|
17
|
-
}
|
|
18
|
-
async buildSchemaAdvanced(initialSchema, condition) {
|
|
19
|
-
return (await this.migrationsResolver.getSchemaMigrations()).filter(({ version }) => condition(version)).reduce(
|
|
20
|
-
(schema, { modifications, formatVersion }) => this.schemaMigrator.applyModifications(schema, modifications, formatVersion),
|
|
21
|
-
initialSchema
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.SchemaVersionBuilder = SchemaVersionBuilder;
|
|
26
|
-
//# sourceMappingURL=SchemaVersionBuilder.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaVersionBuilder.cjs","sources":["../../../../packages/migrations-client/src/SchemaVersionBuilder.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport { emptySchema } from '@contember/schema-utils'\nimport { SchemaMigrator } from '@contember/schema-migrations'\nimport { MigrationsResolver } from './MigrationsResolver'\n\nexport class SchemaVersionBuilder {\n\tconstructor(\n\t\tprivate readonly migrationsResolver: MigrationsResolver,\n\t\tprivate readonly schemaMigrator: SchemaMigrator,\n\t) {}\n\n\tasync buildSchema(targetVersion?: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(emptySchema, version => !targetVersion || version <= targetVersion)\n\t}\n\n\tasync buildSchemaUntil(targetVersion: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(emptySchema, version => version < targetVersion)\n\t}\n\n\tasync continue(schema: Schema, previousVersion: string | null, targetVersion: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(schema, version => version <= targetVersion && version > (previousVersion || ''))\n\t}\n\n\tpublic async buildSchemaAdvanced(initialSchema: Schema, condition: (version: string) => boolean): Promise<Schema> {\n\t\treturn (await this.migrationsResolver.getSchemaMigrations())\n\t\t\t.filter(({ version }) => condition(version))\n\t\t\t.reduce<Schema>(\n\t\t\t\t(schema, { modifications, formatVersion }) =>\n\t\t\t\t\tthis.schemaMigrator.applyModifications(schema, modifications, formatVersion),\n\t\t\t\tinitialSchema,\n\t\t\t)\n\t}\n}\n"],"names":["emptySchema"],"mappings":";;;AAKO,MAAM,qBAAqB;AAAA,EACjC,YACkB,oBACA,gBAChB;AAFgB,SAAA,qBAAA;AACA,SAAA,iBAAA;AAAA,EAAA;AAAA,EAGlB,MAAM,YAAY,eAAyC;AAC1D,WAAO,KAAK,oBAAoBA,yBAAa,aAAW,CAAC,iBAAiB,WAAW,aAAa;AAAA,EAAA;AAAA,EAGnG,MAAM,iBAAiB,eAAwC;AAC9D,WAAO,KAAK,oBAAoBA,YAAAA,aAAa,CAAA,YAAW,UAAU,aAAa;AAAA,EAAA;AAAA,EAGhF,MAAM,SAAS,QAAgB,iBAAgC,eAAwC;AAC/F,WAAA,KAAK,oBAAoB,QAAQ,CAAA,YAAW,WAAW,iBAAiB,WAAW,mBAAmB,GAAG;AAAA,EAAA;AAAA,EAGjH,MAAa,oBAAoB,eAAuB,WAA0D;AACjH,YAAQ,MAAM,KAAK,mBAAmB,oBAAA,GACpC,OAAO,CAAC,EAAE,QAAQ,MAAM,UAAU,OAAO,CAAC,EAC1C;AAAA,MACA,CAAC,QAAQ,EAAE,eAAe,oBACzB,KAAK,eAAe,mBAAmB,QAAQ,eAAe,aAAa;AAAA,MAC5E;AAAA,IACD;AAAA,EAAA;AAEH;;"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { emptySchema } from "@contember/schema-utils";
|
|
2
|
-
class SchemaVersionBuilder {
|
|
3
|
-
constructor(migrationsResolver, schemaMigrator) {
|
|
4
|
-
this.migrationsResolver = migrationsResolver;
|
|
5
|
-
this.schemaMigrator = schemaMigrator;
|
|
6
|
-
}
|
|
7
|
-
async buildSchema(targetVersion) {
|
|
8
|
-
return this.buildSchemaAdvanced(emptySchema, (version) => !targetVersion || version <= targetVersion);
|
|
9
|
-
}
|
|
10
|
-
async buildSchemaUntil(targetVersion) {
|
|
11
|
-
return this.buildSchemaAdvanced(emptySchema, (version) => version < targetVersion);
|
|
12
|
-
}
|
|
13
|
-
async continue(schema, previousVersion, targetVersion) {
|
|
14
|
-
return this.buildSchemaAdvanced(schema, (version) => version <= targetVersion && version > (previousVersion || ""));
|
|
15
|
-
}
|
|
16
|
-
async buildSchemaAdvanced(initialSchema, condition) {
|
|
17
|
-
return (await this.migrationsResolver.getSchemaMigrations()).filter(({ version }) => condition(version)).reduce(
|
|
18
|
-
(schema, { modifications, formatVersion }) => this.schemaMigrator.applyModifications(schema, modifications, formatVersion),
|
|
19
|
-
initialSchema
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export {
|
|
24
|
-
SchemaVersionBuilder
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=SchemaVersionBuilder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaVersionBuilder.js","sources":["../../../../packages/migrations-client/src/SchemaVersionBuilder.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport { emptySchema } from '@contember/schema-utils'\nimport { SchemaMigrator } from '@contember/schema-migrations'\nimport { MigrationsResolver } from './MigrationsResolver'\n\nexport class SchemaVersionBuilder {\n\tconstructor(\n\t\tprivate readonly migrationsResolver: MigrationsResolver,\n\t\tprivate readonly schemaMigrator: SchemaMigrator,\n\t) {}\n\n\tasync buildSchema(targetVersion?: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(emptySchema, version => !targetVersion || version <= targetVersion)\n\t}\n\n\tasync buildSchemaUntil(targetVersion: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(emptySchema, version => version < targetVersion)\n\t}\n\n\tasync continue(schema: Schema, previousVersion: string | null, targetVersion: string): Promise<Schema> {\n\t\treturn this.buildSchemaAdvanced(schema, version => version <= targetVersion && version > (previousVersion || ''))\n\t}\n\n\tpublic async buildSchemaAdvanced(initialSchema: Schema, condition: (version: string) => boolean): Promise<Schema> {\n\t\treturn (await this.migrationsResolver.getSchemaMigrations())\n\t\t\t.filter(({ version }) => condition(version))\n\t\t\t.reduce<Schema>(\n\t\t\t\t(schema, { modifications, formatVersion }) =>\n\t\t\t\t\tthis.schemaMigrator.applyModifications(schema, modifications, formatVersion),\n\t\t\t\tinitialSchema,\n\t\t\t)\n\t}\n}\n"],"names":[],"mappings":";AAKO,MAAM,qBAAqB;AAAA,EACjC,YACkB,oBACA,gBAChB;AAFgB,SAAA,qBAAA;AACA,SAAA,iBAAA;AAAA,EAAA;AAAA,EAGlB,MAAM,YAAY,eAAyC;AAC1D,WAAO,KAAK,oBAAoB,aAAa,aAAW,CAAC,iBAAiB,WAAW,aAAa;AAAA,EAAA;AAAA,EAGnG,MAAM,iBAAiB,eAAwC;AAC9D,WAAO,KAAK,oBAAoB,aAAa,CAAA,YAAW,UAAU,aAAa;AAAA,EAAA;AAAA,EAGhF,MAAM,SAAS,QAAgB,iBAAgC,eAAwC;AAC/F,WAAA,KAAK,oBAAoB,QAAQ,CAAA,YAAW,WAAW,iBAAiB,WAAW,mBAAmB,GAAG;AAAA,EAAA;AAAA,EAGjH,MAAa,oBAAoB,eAAuB,WAA0D;AACjH,YAAQ,MAAM,KAAK,mBAAmB,oBAAA,GACpC,OAAO,CAAC,EAAE,QAAQ,MAAM,UAAU,OAAO,CAAC,EAC1C;AAAA,MACA,CAAC,QAAQ,EAAE,eAAe,oBACzB,KAAK,eAAe,mBAAmB,QAAQ,eAAe,aAAa;AAAA,MAC5E;AAAA,IACD;AAAA,EAAA;AAEH;"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const graphqlClient = require("@contember/graphql-client");
|
|
4
|
-
var MigrateErrorCode = /* @__PURE__ */ ((MigrateErrorCode2) => {
|
|
5
|
-
MigrateErrorCode2["MustFollowLatest"] = "MUST_FOLLOW_LATEST";
|
|
6
|
-
MigrateErrorCode2["AlreadyExecuted"] = "ALREADY_EXECUTED";
|
|
7
|
-
MigrateErrorCode2["InvalidFormat"] = "INVALID_FORMAT";
|
|
8
|
-
MigrateErrorCode2["InvalidSchema"] = "INVALID_SCHEMA";
|
|
9
|
-
MigrateErrorCode2["MigrationFailed"] = "MIGRATION_FAILED";
|
|
10
|
-
return MigrateErrorCode2;
|
|
11
|
-
})(MigrateErrorCode || {});
|
|
12
|
-
class SystemClient {
|
|
13
|
-
constructor(apiClient) {
|
|
14
|
-
this.apiClient = apiClient;
|
|
15
|
-
}
|
|
16
|
-
static create(baseUrl, projectName, apiToken) {
|
|
17
|
-
const graphqlClient$1 = new graphqlClient.GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken });
|
|
18
|
-
return new SystemClient(graphqlClient$1);
|
|
19
|
-
}
|
|
20
|
-
async migrate(migrations, force = false) {
|
|
21
|
-
const query = `
|
|
22
|
-
mutation($migrations: [Migration!]!) {
|
|
23
|
-
migrate: ${force ? "forceMigrate" : "migrate"}(migrations: $migrations) {
|
|
24
|
-
ok
|
|
25
|
-
errors {
|
|
26
|
-
code
|
|
27
|
-
migration
|
|
28
|
-
message: developerMessage
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
`;
|
|
33
|
-
const result = (await this.apiClient.execute(query, {
|
|
34
|
-
variables: {
|
|
35
|
-
migrations
|
|
36
|
-
}
|
|
37
|
-
})).migrate;
|
|
38
|
-
if (!result.ok) {
|
|
39
|
-
throw result.errors;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
async migrationDelete(version) {
|
|
43
|
-
const query = `
|
|
44
|
-
mutation($version: String!) {
|
|
45
|
-
migrationDelete(migration: $version) {
|
|
46
|
-
ok
|
|
47
|
-
error {
|
|
48
|
-
developerMessage
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
`;
|
|
53
|
-
const result = (await this.apiClient.execute(query, {
|
|
54
|
-
variables: {
|
|
55
|
-
version
|
|
56
|
-
}
|
|
57
|
-
})).migrationDelete;
|
|
58
|
-
if (!result.ok) {
|
|
59
|
-
throw result.error?.developerMessage;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async migrationModify(version, modification) {
|
|
63
|
-
const query = `
|
|
64
|
-
mutation($version: String!, $modification: MigrationModification!) {
|
|
65
|
-
migrationModify(migration: $version, modification: $modification) {
|
|
66
|
-
ok
|
|
67
|
-
error {
|
|
68
|
-
developerMessage
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
`;
|
|
73
|
-
const result = (await this.apiClient.execute(query, {
|
|
74
|
-
variables: {
|
|
75
|
-
version,
|
|
76
|
-
modification
|
|
77
|
-
}
|
|
78
|
-
})).migrationModify;
|
|
79
|
-
if (!result.ok) {
|
|
80
|
-
throw result.error?.developerMessage;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
async listExecutedMigrations() {
|
|
84
|
-
const query = `query {
|
|
85
|
-
executedMigrations {
|
|
86
|
-
name
|
|
87
|
-
version
|
|
88
|
-
formatVersion
|
|
89
|
-
checksum
|
|
90
|
-
executedAt
|
|
91
|
-
}
|
|
92
|
-
}`;
|
|
93
|
-
return (await this.apiClient.execute(query, {})).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }));
|
|
94
|
-
}
|
|
95
|
-
async getExecutedMigration(version) {
|
|
96
|
-
const query = `query($version: String!) {
|
|
97
|
-
executedMigrations(version: $version) {
|
|
98
|
-
name
|
|
99
|
-
version
|
|
100
|
-
formatVersion
|
|
101
|
-
checksum
|
|
102
|
-
executedAt
|
|
103
|
-
modifications
|
|
104
|
-
}
|
|
105
|
-
}`;
|
|
106
|
-
return (await this.apiClient.execute(query, { variables: { version } })).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
const createSystemUrl = (baseUrl, projectName) => {
|
|
110
|
-
if (baseUrl.endsWith("/")) {
|
|
111
|
-
baseUrl = baseUrl.substring(0, baseUrl.length - 1);
|
|
112
|
-
}
|
|
113
|
-
return baseUrl + "/system/" + projectName;
|
|
114
|
-
};
|
|
115
|
-
exports.MigrateErrorCode = MigrateErrorCode;
|
|
116
|
-
exports.SystemClient = SystemClient;
|
|
117
|
-
//# sourceMappingURL=SystemClient.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SystemClient.cjs","sources":["../../../../packages/migrations-client/src/SystemClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\nimport { ExecutedMigration, ExecutedMigrationInfo } from './migrations'\n\nexport type MigrateError = {\n\treadonly code: MigrateErrorCode\n\treadonly migration: string\n\treadonly message: string\n}\n\nexport enum MigrateErrorCode {\n\tMustFollowLatest = 'MUST_FOLLOW_LATEST',\n\tAlreadyExecuted = 'ALREADY_EXECUTED',\n\tInvalidFormat = 'INVALID_FORMAT',\n\tInvalidSchema = 'INVALID_SCHEMA',\n\tMigrationFailed = 'MIGRATION_FAILED',\n}\n\nexport type MigrateResponse = {\n\treadonly ok: boolean\n\treadonly errors: MigrateError[]\n}\n\nexport class SystemClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(baseUrl: string, projectName: string, apiToken: string): SystemClient {\n\t\tconst graphqlClient = new GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken })\n\t\treturn new SystemClient(graphqlClient)\n\t}\n\n\tpublic async migrate(migrations: any[], force = false): Promise<void> {\n\t\tconst query = `\nmutation($migrations: [Migration!]!) {\n\tmigrate: ${force ? 'forceMigrate' : 'migrate'}(migrations: $migrations) {\n\t\tok\n\t\terrors {\n\t\t\tcode\n\t\t\tmigration\n\t\t\tmessage: developerMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrate: { ok: boolean; errors: { code: MigrateErrorCode; migration: string; message: string }[] }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tmigrations,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrate\n\t\tif (!result.ok) {\n\t\t\tthrow result.errors\n\t\t}\n\t}\n\n\tpublic async migrationDelete(version: string): Promise<void> {\n\t\tconst query = `\nmutation($version: String!) {\n\tmigrationDelete(migration: $version) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationDelete: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationDelete\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async migrationModify(version: string, modification: Partial<any>): Promise<void> {\n\t\tconst query = `\nmutation($version: String!, $modification: MigrationModification!) {\n\tmigrationModify(migration: $version, modification: $modification) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationModify: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t\tmodification,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationModify\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async listExecutedMigrations(): Promise<ExecutedMigrationInfo[]> {\n\t\tconst query = `query {\n\texecutedMigrations {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t}\n}`\n\t\treturn (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\texecutedMigrations: ExecutedMigrationInfo[]\n\t\t\t}>(query, {})\n\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))\n\t}\n\n\tpublic async getExecutedMigration(version: string): Promise<ExecutedMigration> {\n\t\tconst query = `query($version: String!) {\n\texecutedMigrations(version: $version) {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t\tmodifications\n\t}\n}`\n\t\treturn (\n\t\t\t(\n\t\t\t\tawait this.apiClient.execute<{\n\t\t\t\t\texecutedMigrations: ExecutedMigration[]\n\t\t\t\t}>(query, { variables: { version } })\n\t\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null\n\t\t)\n\t}\n}\n\nconst createSystemUrl = (baseUrl: string, projectName: string) => {\n\tif (baseUrl.endsWith('/')) {\n\t\tbaseUrl = baseUrl.substring(0, baseUrl.length - 1)\n\t}\n\treturn baseUrl + '/system/' + projectName\n}\n"],"names":["MigrateErrorCode","graphqlClient","GraphQlClient"],"mappings":";;;AASY,IAAA,qCAAAA,sBAAL;AACNA,oBAAA,kBAAmB,IAAA;AACnBA,oBAAA,iBAAkB,IAAA;AAClBA,oBAAA,eAAgB,IAAA;AAChBA,oBAAA,eAAgB,IAAA;AAChBA,oBAAA,iBAAkB,IAAA;AALPA,SAAAA;AAAA,GAAA,oBAAA,CAAA,CAAA;AAaL,MAAM,aAAa;AAAA,EACzB,YAA6B,WAA0B;AAA1B,SAAA,YAAA;AAAA,EAAA;AAAA,EAE7B,OAAc,OAAO,SAAiB,aAAqB,UAAgC;AACpF,UAAAC,kBAAgB,IAAIC,cAAA,cAAc,EAAE,KAAK,gBAAgB,SAAS,WAAW,GAAG,UAAU;AACzF,WAAA,IAAI,aAAaD,eAAa;AAAA,EAAA;AAAA,EAGtC,MAAa,QAAQ,YAAmB,QAAQ,OAAsB;AACrE,UAAM,QAAQ;AAAA;AAAA,YAEJ,QAAQ,iBAAiB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU5C,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IAED,CAAA,GACA;AACE,QAAA,CAAC,OAAO,IAAI;AACf,YAAM,OAAO;AAAA,IAAA;AAAA,EACd;AAAA,EAGD,MAAa,gBAAgB,SAAgC;AAC5D,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IAED,CAAA,GACA;AACE,QAAA,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IAAA;AAAA,EACrB;AAAA,EAGD,MAAa,gBAAgB,SAAiB,cAA2C;AACxF,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MAAA;AAAA,IAED,CAAA,GACA;AACE,QAAA,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IAAA;AAAA,EACrB;AAAA,EAGD,MAAa,yBAA2D;AACvE,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUb,YAAA,MAAM,KAAK,UAAU,QAElB,OAAO,CAAE,CAAA,GACX,mBAAmB,IAAI,SAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,IAAI;AAAA,EAAA;AAAA,EAGhF,MAAa,qBAAqB,SAA6C;AAC9E,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYZ,YAAA,MAAM,KAAK,UAAU,QAElB,OAAO,EAAE,WAAW,EAAE,UAAW,CAAA,GACnC,mBAAmB,IAAI,CAAA,QAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,KAAK;AAAA,EAAA;AAG1F;AAEA,MAAM,kBAAkB,CAAC,SAAiB,gBAAwB;AAC7D,MAAA,QAAQ,SAAS,GAAG,GAAG;AAC1B,cAAU,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,EAAA;AAElD,SAAO,UAAU,aAAa;AAC/B;;;"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { GraphQlClient } from "@contember/graphql-client";
|
|
2
|
-
var MigrateErrorCode = /* @__PURE__ */ ((MigrateErrorCode2) => {
|
|
3
|
-
MigrateErrorCode2["MustFollowLatest"] = "MUST_FOLLOW_LATEST";
|
|
4
|
-
MigrateErrorCode2["AlreadyExecuted"] = "ALREADY_EXECUTED";
|
|
5
|
-
MigrateErrorCode2["InvalidFormat"] = "INVALID_FORMAT";
|
|
6
|
-
MigrateErrorCode2["InvalidSchema"] = "INVALID_SCHEMA";
|
|
7
|
-
MigrateErrorCode2["MigrationFailed"] = "MIGRATION_FAILED";
|
|
8
|
-
return MigrateErrorCode2;
|
|
9
|
-
})(MigrateErrorCode || {});
|
|
10
|
-
class SystemClient {
|
|
11
|
-
constructor(apiClient) {
|
|
12
|
-
this.apiClient = apiClient;
|
|
13
|
-
}
|
|
14
|
-
static create(baseUrl, projectName, apiToken) {
|
|
15
|
-
const graphqlClient = new GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken });
|
|
16
|
-
return new SystemClient(graphqlClient);
|
|
17
|
-
}
|
|
18
|
-
async migrate(migrations, force = false) {
|
|
19
|
-
const query = `
|
|
20
|
-
mutation($migrations: [Migration!]!) {
|
|
21
|
-
migrate: ${force ? "forceMigrate" : "migrate"}(migrations: $migrations) {
|
|
22
|
-
ok
|
|
23
|
-
errors {
|
|
24
|
-
code
|
|
25
|
-
migration
|
|
26
|
-
message: developerMessage
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
`;
|
|
31
|
-
const result = (await this.apiClient.execute(query, {
|
|
32
|
-
variables: {
|
|
33
|
-
migrations
|
|
34
|
-
}
|
|
35
|
-
})).migrate;
|
|
36
|
-
if (!result.ok) {
|
|
37
|
-
throw result.errors;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
async migrationDelete(version) {
|
|
41
|
-
const query = `
|
|
42
|
-
mutation($version: String!) {
|
|
43
|
-
migrationDelete(migration: $version) {
|
|
44
|
-
ok
|
|
45
|
-
error {
|
|
46
|
-
developerMessage
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
`;
|
|
51
|
-
const result = (await this.apiClient.execute(query, {
|
|
52
|
-
variables: {
|
|
53
|
-
version
|
|
54
|
-
}
|
|
55
|
-
})).migrationDelete;
|
|
56
|
-
if (!result.ok) {
|
|
57
|
-
throw result.error?.developerMessage;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
async migrationModify(version, modification) {
|
|
61
|
-
const query = `
|
|
62
|
-
mutation($version: String!, $modification: MigrationModification!) {
|
|
63
|
-
migrationModify(migration: $version, modification: $modification) {
|
|
64
|
-
ok
|
|
65
|
-
error {
|
|
66
|
-
developerMessage
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
`;
|
|
71
|
-
const result = (await this.apiClient.execute(query, {
|
|
72
|
-
variables: {
|
|
73
|
-
version,
|
|
74
|
-
modification
|
|
75
|
-
}
|
|
76
|
-
})).migrationModify;
|
|
77
|
-
if (!result.ok) {
|
|
78
|
-
throw result.error?.developerMessage;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
async listExecutedMigrations() {
|
|
82
|
-
const query = `query {
|
|
83
|
-
executedMigrations {
|
|
84
|
-
name
|
|
85
|
-
version
|
|
86
|
-
formatVersion
|
|
87
|
-
checksum
|
|
88
|
-
executedAt
|
|
89
|
-
}
|
|
90
|
-
}`;
|
|
91
|
-
return (await this.apiClient.execute(query, {})).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }));
|
|
92
|
-
}
|
|
93
|
-
async getExecutedMigration(version) {
|
|
94
|
-
const query = `query($version: String!) {
|
|
95
|
-
executedMigrations(version: $version) {
|
|
96
|
-
name
|
|
97
|
-
version
|
|
98
|
-
formatVersion
|
|
99
|
-
checksum
|
|
100
|
-
executedAt
|
|
101
|
-
modifications
|
|
102
|
-
}
|
|
103
|
-
}`;
|
|
104
|
-
return (await this.apiClient.execute(query, { variables: { version } })).executedMigrations.map((it) => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
const createSystemUrl = (baseUrl, projectName) => {
|
|
108
|
-
if (baseUrl.endsWith("/")) {
|
|
109
|
-
baseUrl = baseUrl.substring(0, baseUrl.length - 1);
|
|
110
|
-
}
|
|
111
|
-
return baseUrl + "/system/" + projectName;
|
|
112
|
-
};
|
|
113
|
-
export {
|
|
114
|
-
MigrateErrorCode,
|
|
115
|
-
SystemClient
|
|
116
|
-
};
|
|
117
|
-
//# sourceMappingURL=SystemClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SystemClient.js","sources":["../../../../packages/migrations-client/src/SystemClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\nimport { ExecutedMigration, ExecutedMigrationInfo } from './migrations'\n\nexport type MigrateError = {\n\treadonly code: MigrateErrorCode\n\treadonly migration: string\n\treadonly message: string\n}\n\nexport enum MigrateErrorCode {\n\tMustFollowLatest = 'MUST_FOLLOW_LATEST',\n\tAlreadyExecuted = 'ALREADY_EXECUTED',\n\tInvalidFormat = 'INVALID_FORMAT',\n\tInvalidSchema = 'INVALID_SCHEMA',\n\tMigrationFailed = 'MIGRATION_FAILED',\n}\n\nexport type MigrateResponse = {\n\treadonly ok: boolean\n\treadonly errors: MigrateError[]\n}\n\nexport class SystemClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(baseUrl: string, projectName: string, apiToken: string): SystemClient {\n\t\tconst graphqlClient = new GraphQlClient({ url: createSystemUrl(baseUrl, projectName), apiToken })\n\t\treturn new SystemClient(graphqlClient)\n\t}\n\n\tpublic async migrate(migrations: any[], force = false): Promise<void> {\n\t\tconst query = `\nmutation($migrations: [Migration!]!) {\n\tmigrate: ${force ? 'forceMigrate' : 'migrate'}(migrations: $migrations) {\n\t\tok\n\t\terrors {\n\t\t\tcode\n\t\t\tmigration\n\t\t\tmessage: developerMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrate: { ok: boolean; errors: { code: MigrateErrorCode; migration: string; message: string }[] }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tmigrations,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrate\n\t\tif (!result.ok) {\n\t\t\tthrow result.errors\n\t\t}\n\t}\n\n\tpublic async migrationDelete(version: string): Promise<void> {\n\t\tconst query = `\nmutation($version: String!) {\n\tmigrationDelete(migration: $version) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationDelete: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationDelete\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async migrationModify(version: string, modification: Partial<any>): Promise<void> {\n\t\tconst query = `\nmutation($version: String!, $modification: MigrationModification!) {\n\tmigrationModify(migration: $version, modification: $modification) {\n\t\tok\n\t\terror {\n\t\t\tdeveloperMessage\n\t\t}\n\t}\n}\n`\n\t\tconst result = (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\tmigrationModify: { ok: boolean; error?: { developerMessage: string } }\n\t\t\t}>(query, {\n\t\t\t\tvariables: {\n\t\t\t\t\tversion,\n\t\t\t\t\tmodification,\n\t\t\t\t},\n\t\t\t})\n\t\t).migrationModify\n\t\tif (!result.ok) {\n\t\t\tthrow result.error?.developerMessage\n\t\t}\n\t}\n\n\tpublic async listExecutedMigrations(): Promise<ExecutedMigrationInfo[]> {\n\t\tconst query = `query {\n\texecutedMigrations {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t}\n}`\n\t\treturn (\n\t\t\tawait this.apiClient.execute<{\n\t\t\t\texecutedMigrations: ExecutedMigrationInfo[]\n\t\t\t}>(query, {})\n\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))\n\t}\n\n\tpublic async getExecutedMigration(version: string): Promise<ExecutedMigration> {\n\t\tconst query = `query($version: String!) {\n\texecutedMigrations(version: $version) {\n\t\tname\n\t\tversion\n\t\tformatVersion\n\t\tchecksum\n\t\texecutedAt\n\t\tmodifications\n\t}\n}`\n\t\treturn (\n\t\t\t(\n\t\t\t\tawait this.apiClient.execute<{\n\t\t\t\t\texecutedMigrations: ExecutedMigration[]\n\t\t\t\t}>(query, { variables: { version } })\n\t\t\t).executedMigrations.map(it => ({ ...it, executedAt: new Date(it.executedAt) }))[0] || null\n\t\t)\n\t}\n}\n\nconst createSystemUrl = (baseUrl: string, projectName: string) => {\n\tif (baseUrl.endsWith('/')) {\n\t\tbaseUrl = baseUrl.substring(0, baseUrl.length - 1)\n\t}\n\treturn baseUrl + '/system/' + projectName\n}\n"],"names":["MigrateErrorCode"],"mappings":";AASY,IAAA,qCAAAA,sBAAL;AACNA,oBAAA,kBAAmB,IAAA;AACnBA,oBAAA,iBAAkB,IAAA;AAClBA,oBAAA,eAAgB,IAAA;AAChBA,oBAAA,eAAgB,IAAA;AAChBA,oBAAA,iBAAkB,IAAA;AALPA,SAAAA;AAAA,GAAA,oBAAA,CAAA,CAAA;AAaL,MAAM,aAAa;AAAA,EACzB,YAA6B,WAA0B;AAA1B,SAAA,YAAA;AAAA,EAAA;AAAA,EAE7B,OAAc,OAAO,SAAiB,aAAqB,UAAgC;AACpF,UAAA,gBAAgB,IAAI,cAAc,EAAE,KAAK,gBAAgB,SAAS,WAAW,GAAG,UAAU;AACzF,WAAA,IAAI,aAAa,aAAa;AAAA,EAAA;AAAA,EAGtC,MAAa,QAAQ,YAAmB,QAAQ,OAAsB;AACrE,UAAM,QAAQ;AAAA;AAAA,YAEJ,QAAQ,iBAAiB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU5C,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IAED,CAAA,GACA;AACE,QAAA,CAAC,OAAO,IAAI;AACf,YAAM,OAAO;AAAA,IAAA;AAAA,EACd;AAAA,EAGD,MAAa,gBAAgB,SAAgC;AAC5D,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,MAAA;AAAA,IAED,CAAA,GACA;AACE,QAAA,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IAAA;AAAA,EACrB;AAAA,EAGD,MAAa,gBAAgB,SAAiB,cAA2C;AACxF,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUd,UAAM,UACL,MAAM,KAAK,UAAU,QAElB,OAAO;AAAA,MACT,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MAAA;AAAA,IAED,CAAA,GACA;AACE,QAAA,CAAC,OAAO,IAAI;AACf,YAAM,OAAO,OAAO;AAAA,IAAA;AAAA,EACrB;AAAA,EAGD,MAAa,yBAA2D;AACvE,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUb,YAAA,MAAM,KAAK,UAAU,QAElB,OAAO,CAAE,CAAA,GACX,mBAAmB,IAAI,SAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,IAAI;AAAA,EAAA;AAAA,EAGhF,MAAa,qBAAqB,SAA6C;AAC9E,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYZ,YAAA,MAAM,KAAK,UAAU,QAElB,OAAO,EAAE,WAAW,EAAE,UAAW,CAAA,GACnC,mBAAmB,IAAI,CAAA,QAAO,EAAE,GAAG,IAAI,YAAY,IAAI,KAAK,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,KAAK;AAAA,EAAA;AAG1F;AAEA,MAAM,kBAAkB,CAAC,SAAiB,gBAAwB;AAC7D,MAAA,QAAQ,SAAS,GAAG,GAAG;AAC1B,cAAU,QAAQ,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,EAAA;AAElD,SAAO,UAAU,aAAa;AAC/B;"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const schemaMigrations = require("@contember/schema-migrations");
|
|
4
|
-
const MigrationFile = require("./MigrationFile.cjs");
|
|
5
|
-
var MigrationState = /* @__PURE__ */ ((MigrationState2) => {
|
|
6
|
-
MigrationState2["TO_EXECUTE_OK"] = "to_execute_ok";
|
|
7
|
-
MigrationState2["TO_EXECUTE_ERROR"] = "to_execute_error";
|
|
8
|
-
MigrationState2["SKIP_EMPTY"] = "skip_empty";
|
|
9
|
-
MigrationState2["EXECUTED_OK"] = "executed_ok";
|
|
10
|
-
MigrationState2["EXECUTED_ERROR"] = "executed_error";
|
|
11
|
-
MigrationState2["EXECUTED_MISSING"] = "executed_missing";
|
|
12
|
-
return MigrationState2;
|
|
13
|
-
})(MigrationState || {});
|
|
14
|
-
const isErrorMigrationStatus = (migration) => [
|
|
15
|
-
"executed_error",
|
|
16
|
-
"executed_missing",
|
|
17
|
-
"to_execute_error"
|
|
18
|
-
/* TO_EXECUTE_ERROR */
|
|
19
|
-
].includes(
|
|
20
|
-
migration.state
|
|
21
|
-
);
|
|
22
|
-
const sortMigrations = (migrations) => {
|
|
23
|
-
return [...migrations].sort((a, b) => a.version.localeCompare(b.version));
|
|
24
|
-
};
|
|
25
|
-
class MigrationsStatusResolver {
|
|
26
|
-
async getMigrationsStatus(executedMigrations, localMigrations, force = false) {
|
|
27
|
-
const sortedExecuted = sortMigrations(executedMigrations);
|
|
28
|
-
const allMigrations = [];
|
|
29
|
-
for (const executed of sortedExecuted) {
|
|
30
|
-
const localMigration = localMigrations.find((it) => it.version === executed.version);
|
|
31
|
-
if (!localMigration) {
|
|
32
|
-
allMigrations.push({
|
|
33
|
-
state: "executed_missing",
|
|
34
|
-
executedMigration: executed,
|
|
35
|
-
version: executed.version,
|
|
36
|
-
name: executed.name,
|
|
37
|
-
errorMessage: `Migration ${executed.name} is missing locally`
|
|
38
|
-
});
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
const migrationContent = await localMigration.getContent();
|
|
42
|
-
const localChecksum = !MigrationFile.isSchemaMigration(migrationContent) ? null : schemaMigrations.calculateMigrationChecksum(migrationContent);
|
|
43
|
-
if (localChecksum !== executed.checksum) {
|
|
44
|
-
allMigrations.push({
|
|
45
|
-
state: "executed_error",
|
|
46
|
-
executedMigration: executed,
|
|
47
|
-
version: executed.version,
|
|
48
|
-
name: executed.name,
|
|
49
|
-
localMigration,
|
|
50
|
-
errorMessage: `Checksum of executed migration "${executed.checksum}" does not match "${localChecksum}"`
|
|
51
|
-
});
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
allMigrations.push({
|
|
55
|
-
state: "executed_ok",
|
|
56
|
-
executedMigration: executed,
|
|
57
|
-
version: executed.version,
|
|
58
|
-
name: executed.name,
|
|
59
|
-
localMigration
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
const latestExecuted = sortedExecuted.length > 0 ? sortedExecuted[sortedExecuted.length - 1] : null;
|
|
63
|
-
for (const localMigration of localMigrations) {
|
|
64
|
-
if (allMigrations.find((it) => it.version === localMigration.version)) {
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
const migrationContent = await localMigration.getContent();
|
|
68
|
-
if (MigrationFile.isSchemaMigration(migrationContent) && migrationContent.modifications.length === 0) {
|
|
69
|
-
allMigrations.push({
|
|
70
|
-
state: "skip_empty",
|
|
71
|
-
localMigration,
|
|
72
|
-
version: localMigration.version,
|
|
73
|
-
name: localMigration.name
|
|
74
|
-
});
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (latestExecuted && latestExecuted.version > localMigration.version) {
|
|
78
|
-
allMigrations.push({
|
|
79
|
-
state: "to_execute_error",
|
|
80
|
-
localMigration,
|
|
81
|
-
version: localMigration.version,
|
|
82
|
-
name: localMigration.name,
|
|
83
|
-
errorMessage: `Must follow latest executed migration ${latestExecuted.name}`
|
|
84
|
-
});
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
allMigrations.push({
|
|
88
|
-
state: "to_execute_ok",
|
|
89
|
-
localMigration,
|
|
90
|
-
version: localMigration.version,
|
|
91
|
-
name: localMigration.name
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
const allMigrationsSorted = sortMigrations(allMigrations);
|
|
95
|
-
return {
|
|
96
|
-
allMigrations: allMigrationsSorted,
|
|
97
|
-
errorMigrations: allMigrationsSorted.filter(isErrorMigrationStatus),
|
|
98
|
-
migrationsToExecute: allMigrationsSorted.filter(
|
|
99
|
-
(it) => it.state === "to_execute_ok" || force && it.state === "to_execute_error"
|
|
100
|
-
/* TO_EXECUTE_ERROR */
|
|
101
|
-
)
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
exports.MigrationState = MigrationState;
|
|
106
|
-
exports.MigrationsStatusResolver = MigrationsStatusResolver;
|
|
107
|
-
exports.sortMigrations = sortMigrations;
|
|
108
|
-
//# sourceMappingURL=migrations.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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":";;;;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,CAACC,gCAAkB,gBAAgB,IAAI,OAAOC,4CAA2B,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,UAAID,cAAAA,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;;;;"}
|