@contember/schema-migrations 1.4.0-alpha.1 → 1.4.0-alpha.3
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/src/Migration.d.ts +1 -1
- package/dist/src/Migration.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +2 -0
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +0 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.js +2 -0
- package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts +1 -2
- package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/acl/PatchAclSchemaModification.js +1 -1
- package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
- package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts +1 -2
- package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/acl/UpdateAclSchemaModification.js +1 -1
- package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
- package/dist/src/modifications/actions/CreateTargetModification.d.ts +1 -2
- package/dist/src/modifications/actions/CreateTargetModification.d.ts.map +1 -1
- package/dist/src/modifications/actions/CreateTargetModification.js +1 -1
- package/dist/src/modifications/actions/CreateTargetModification.js.map +1 -1
- package/dist/src/modifications/actions/CreateTriggerModification.d.ts +1 -2
- package/dist/src/modifications/actions/CreateTriggerModification.d.ts.map +1 -1
- package/dist/src/modifications/actions/CreateTriggerModification.js +1 -1
- package/dist/src/modifications/actions/CreateTriggerModification.js.map +1 -1
- package/dist/src/modifications/actions/RemoveTargetModification.d.ts +1 -2
- package/dist/src/modifications/actions/RemoveTargetModification.d.ts.map +1 -1
- package/dist/src/modifications/actions/RemoveTargetModification.js +1 -1
- package/dist/src/modifications/actions/RemoveTargetModification.js.map +1 -1
- package/dist/src/modifications/actions/RemoveTriggerModification.d.ts +1 -2
- package/dist/src/modifications/actions/RemoveTriggerModification.d.ts.map +1 -1
- package/dist/src/modifications/actions/RemoveTriggerModification.js +1 -1
- package/dist/src/modifications/actions/RemoveTriggerModification.js.map +1 -1
- package/dist/src/modifications/actions/UpdateTargetModification.d.ts +1 -2
- package/dist/src/modifications/actions/UpdateTargetModification.d.ts.map +1 -1
- package/dist/src/modifications/actions/UpdateTargetModification.js +1 -1
- package/dist/src/modifications/actions/UpdateTargetModification.js.map +1 -1
- package/dist/src/modifications/actions/UpdateTriggerModification.d.ts +1 -2
- package/dist/src/modifications/actions/UpdateTriggerModification.d.ts.map +1 -1
- package/dist/src/modifications/actions/UpdateTriggerModification.js +1 -1
- package/dist/src/modifications/actions/UpdateTriggerModification.js.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.d.ts +28 -0
- package/dist/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.d.ts.map +1 -0
- package/dist/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.js +98 -0
- package/dist/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.js.map +1 -0
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +4 -2
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +1 -2
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +1 -1
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +1 -2
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +1 -1
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +1 -2
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +1 -1
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +1 -2
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +1 -1
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
- package/dist/src/modifications/settings/UpdateSettingsModification.d.ts +1 -2
- package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -1
- package/dist/src/modifications/settings/UpdateSettingsModification.js +1 -1
- package/dist/src/modifications/settings/UpdateSettingsModification.js.map +1 -1
- package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts +1 -2
- package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/validation/PatchValidationSchemaModification.js +1 -1
- package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +1 -2
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +1 -1
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/integration/convertManyHasOneToOneHasOneRelation.test.d.ts +2 -0
- package/dist/tests/cases/integration/convertManyHasOneToOneHasOneRelation.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/convertManyHasOneToOneHasOneRelation.test.js +59 -0
- package/dist/tests/cases/integration/convertManyHasOneToOneHasOneRelation.test.js.map +1 -0
- package/dist/tests/cases/integration/convertOneToManyRelation.test.js +37 -0
- package/dist/tests/cases/integration/convertOneToManyRelation.test.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/Migration.ts +1 -1
- package/src/SchemaDiffer.ts +2 -0
- package/src/index.ts +0 -4
- package/src/modifications/ModificationHandlerFactory.ts +2 -0
- package/src/modifications/acl/PatchAclSchemaModification.ts +1 -2
- package/src/modifications/acl/UpdateAclSchemaModification.ts +1 -2
- package/src/modifications/actions/CreateTargetModification.ts +1 -2
- package/src/modifications/actions/CreateTriggerModification.ts +1 -2
- package/src/modifications/actions/RemoveTargetModification.ts +1 -2
- package/src/modifications/actions/RemoveTriggerModification.ts +1 -2
- package/src/modifications/actions/UpdateTargetModification.ts +1 -3
- package/src/modifications/actions/UpdateTriggerModification.ts +1 -2
- package/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.ts +145 -0
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +3 -2
- package/src/modifications/relations/CreateRelationInverseSideModification.ts +1 -2
- package/src/modifications/relations/DisableOrphanRemovalModification.ts +1 -2
- package/src/modifications/relations/EnableOrphanRemovalModification.ts +1 -2
- package/src/modifications/relations/UpdateRelationOrderByModification.ts +1 -2
- package/src/modifications/settings/UpdateSettingsModification.ts +1 -2
- package/src/modifications/validation/PatchValidationSchemaModification.ts +1 -2
- package/src/modifications/validation/UpdateValidationSchemaModification.ts +1 -2
- package/tests/cases/integration/convertManyHasOneToOneHasOneRelation.test.ts +48 -0
- package/tests/cases/integration/convertOneToManyRelation.test.ts +42 -0
- package/dist/src/MigrationCreator.d.ts +0 -20
- package/dist/src/MigrationCreator.d.ts.map +0 -1
- package/dist/src/MigrationCreator.js +0 -37
- package/dist/src/MigrationCreator.js.map +0 -1
- package/dist/src/MigrationFilesManager.d.ts +0 -22
- package/dist/src/MigrationFilesManager.d.ts.map +0 -1
- package/dist/src/MigrationFilesManager.js +0 -99
- package/dist/src/MigrationFilesManager.js.map +0 -1
- package/dist/src/MigrationsResolver.d.ts +0 -9
- package/dist/src/MigrationsResolver.d.ts.map +0 -1
- package/dist/src/MigrationsResolver.js +0 -27
- package/dist/src/MigrationsResolver.js.map +0 -1
- package/dist/src/SchemaVersionBuilder.d.ts +0 -13
- package/dist/src/SchemaVersionBuilder.d.ts.map +0 -1
- package/dist/src/SchemaVersionBuilder.js +0 -26
- package/dist/src/SchemaVersionBuilder.js.map +0 -1
- package/dist/tests/scripts/checkCreateConsistentMigrations.d.ts +0 -2
- package/dist/tests/scripts/checkCreateConsistentMigrations.d.ts.map +0 -1
- package/dist/tests/scripts/checkCreateConsistentMigrations.js +0 -28
- package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +0 -1
- package/src/MigrationCreator.ts +0 -50
- package/src/MigrationFilesManager.ts +0 -91
- package/src/MigrationsResolver.ts +0 -25
- package/src/SchemaVersionBuilder.ts +0 -33
- package/tests/scripts/checkCreateConsistentMigrations.ts +0 -32
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
declare class MigrationFilesManager {
|
|
2
|
-
readonly directory: string;
|
|
3
|
-
constructor(directory: string);
|
|
4
|
-
createFile(content: string, name: string): Promise<string>;
|
|
5
|
-
removeFile(name: string): Promise<void>;
|
|
6
|
-
moveFile(oldName: string, newName: string): Promise<void>;
|
|
7
|
-
createDirIfNotExist(): Promise<void>;
|
|
8
|
-
listFiles(): Promise<string[]>;
|
|
9
|
-
private tryReadDir;
|
|
10
|
-
readFiles(predicate?: (version: string) => boolean): Promise<MigrationFilesManager.MigrationFile[]>;
|
|
11
|
-
static createForProject(projectsDirectory: string, projectSlug: string): MigrationFilesManager;
|
|
12
|
-
private formatPath;
|
|
13
|
-
}
|
|
14
|
-
declare namespace MigrationFilesManager {
|
|
15
|
-
type MigrationFile = {
|
|
16
|
-
filename: string;
|
|
17
|
-
path: string;
|
|
18
|
-
content: string;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
export { MigrationFilesManager };
|
|
22
|
-
//# sourceMappingURL=MigrationFilesManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationFilesManager.d.ts","sourceRoot":"","sources":["../../src/MigrationFilesManager.ts"],"names":[],"mappings":"AAIA,cAAM,qBAAqB;aACE,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;IAEhC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1D,UAAU,CAAC,IAAI,EAAE,MAAM;IAKvB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIzC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUpC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAa7B,UAAU;IAWX,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;WAclG,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,qBAAqB;IAKrG,OAAO,CAAC,UAAU;CAKlB;AAED,kBAAU,qBAAqB,CAAC;IAC/B,KAAY,aAAa,GAAG;QAC3B,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KACf,CAAA;CACD;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.MigrationFilesManager = void 0;
|
|
27
|
-
const engine_common_1 = require("@contember/engine-common");
|
|
28
|
-
const fs = __importStar(require("node:fs/promises"));
|
|
29
|
-
const path = __importStar(require("node:path"));
|
|
30
|
-
class MigrationFilesManager {
|
|
31
|
-
constructor(directory) {
|
|
32
|
-
this.directory = directory;
|
|
33
|
-
}
|
|
34
|
-
async createFile(content, name) {
|
|
35
|
-
const path = this.formatPath(name);
|
|
36
|
-
await fs.writeFile(path, content, { encoding: 'utf8' });
|
|
37
|
-
return await fs.realpath(path);
|
|
38
|
-
}
|
|
39
|
-
async removeFile(name) {
|
|
40
|
-
const path = this.formatPath(name);
|
|
41
|
-
await fs.unlink(path);
|
|
42
|
-
}
|
|
43
|
-
async moveFile(oldName, newName) {
|
|
44
|
-
await fs.rename(this.formatPath(oldName), this.formatPath(newName));
|
|
45
|
-
}
|
|
46
|
-
async createDirIfNotExist() {
|
|
47
|
-
try {
|
|
48
|
-
await fs.mkdir(this.directory);
|
|
49
|
-
}
|
|
50
|
-
catch (e) {
|
|
51
|
-
if (!(e instanceof Error) || !('code' in e) || e.code !== 'EEXIST') {
|
|
52
|
-
throw e;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
async listFiles() {
|
|
57
|
-
const files = await this.tryReadDir();
|
|
58
|
-
const filteredFiles = await Promise.all(files
|
|
59
|
-
.filter(file => file.endsWith(`.json`))
|
|
60
|
-
.filter(async (file) => {
|
|
61
|
-
return (await fs.lstat(`${this.directory}/${file}`)).isFile();
|
|
62
|
-
}));
|
|
63
|
-
return filteredFiles.sort();
|
|
64
|
-
}
|
|
65
|
-
async tryReadDir() {
|
|
66
|
-
try {
|
|
67
|
-
return await fs.readdir(this.directory);
|
|
68
|
-
}
|
|
69
|
-
catch (e) {
|
|
70
|
-
if (e instanceof Error && 'code' in e && e.code === 'ENOENT') {
|
|
71
|
-
return [];
|
|
72
|
-
}
|
|
73
|
-
throw e;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
async readFiles(predicate) {
|
|
77
|
-
let files = await this.listFiles();
|
|
78
|
-
if (predicate) {
|
|
79
|
-
files = files.filter(filename => predicate(engine_common_1.MigrationVersionHelper.extractVersion(filename)));
|
|
80
|
-
}
|
|
81
|
-
const filesWithContent = files.map(async (filename) => ({
|
|
82
|
-
filename: filename,
|
|
83
|
-
path: `${this.directory}/${filename}`,
|
|
84
|
-
content: await fs.readFile(`${this.directory}/${filename}`, { encoding: 'utf8' }),
|
|
85
|
-
}));
|
|
86
|
-
return await Promise.all(filesWithContent);
|
|
87
|
-
}
|
|
88
|
-
static createForProject(projectsDirectory, projectSlug) {
|
|
89
|
-
const migrationsDir = path.join(projectsDirectory, projectSlug, 'migrations');
|
|
90
|
-
return new MigrationFilesManager(migrationsDir);
|
|
91
|
-
}
|
|
92
|
-
formatPath(version) {
|
|
93
|
-
const filename = `${version}.json`;
|
|
94
|
-
const path = `${this.directory}/${filename}`;
|
|
95
|
-
return path;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.MigrationFilesManager = MigrationFilesManager;
|
|
99
|
-
//# sourceMappingURL=MigrationFilesManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationFilesManager.js","sourceRoot":"","sources":["../../src/MigrationFilesManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { MigrationFilesManager } from './MigrationFilesManager';
|
|
2
|
-
import { Migration } from './Migration';
|
|
3
|
-
export declare class MigrationsResolver {
|
|
4
|
-
private readonly migrationFilesManager;
|
|
5
|
-
constructor(migrationFilesManager: MigrationFilesManager);
|
|
6
|
-
get directory(): string;
|
|
7
|
-
getMigrations(): Promise<Migration[]>;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=MigrationsResolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationsResolver.d.ts","sourceRoot":"","sources":["../../src/MigrationsResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAG/D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,qBAAa,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAArB,qBAAqB,EAAE,qBAAqB;IAEzE,IAAW,SAAS,IAAI,MAAM,CAE7B;IAEY,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;CAYlD"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MigrationsResolver = void 0;
|
|
4
|
-
const ModificationVersions_1 = require("./modifications/ModificationVersions");
|
|
5
|
-
const engine_common_1 = require("@contember/engine-common");
|
|
6
|
-
class MigrationsResolver {
|
|
7
|
-
constructor(migrationFilesManager) {
|
|
8
|
-
this.migrationFilesManager = migrationFilesManager;
|
|
9
|
-
}
|
|
10
|
-
get directory() {
|
|
11
|
-
return this.migrationFilesManager.directory;
|
|
12
|
-
}
|
|
13
|
-
async getMigrations() {
|
|
14
|
-
return (await this.migrationFilesManager.readFiles()).map(({ filename, content }) => {
|
|
15
|
-
const parsed = JSON.parse(content);
|
|
16
|
-
return {
|
|
17
|
-
version: engine_common_1.MigrationVersionHelper.extractVersion(filename),
|
|
18
|
-
name: engine_common_1.MigrationVersionHelper.extractName(filename),
|
|
19
|
-
formatVersion: parsed.formatVersion || ModificationVersions_1.VERSION_INITIAL,
|
|
20
|
-
modifications: parsed.modifications,
|
|
21
|
-
...(parsed.skippedErrors ? { skippedErrors: parsed.skippedErrors } : {}),
|
|
22
|
-
};
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.MigrationsResolver = MigrationsResolver;
|
|
27
|
-
//# sourceMappingURL=MigrationsResolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationsResolver.js","sourceRoot":"","sources":["../../src/MigrationsResolver.ts"],"names":[],"mappings":";;;AACA,+EAAsE;AACtE,4DAAiE;AAGjE,MAAa,kBAAkB;IAC9B,YAA6B,qBAA4C;QAA5C,0BAAqB,GAArB,qBAAqB,CAAuB;IAAG,CAAC;IAE7E,IAAW,SAAS;QACnB,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAA;IAC5C,CAAC;IAEM,KAAK,CAAC,aAAa;QACzB,OAAO,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAClC,OAAO;gBACN,OAAO,EAAE,sCAAsB,CAAC,cAAc,CAAC,QAAQ,CAAC;gBACxD,IAAI,EAAE,sCAAsB,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAClD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,sCAAe;gBACtD,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxE,CAAA;QACF,CAAC,CAAC,CAAA;IACH,CAAC;CACD;AAnBD,gDAmBC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Schema } from '@contember/schema';
|
|
2
|
-
import { SchemaMigrator } from './SchemaMigrator';
|
|
3
|
-
import { MigrationsResolver } from './MigrationsResolver';
|
|
4
|
-
export declare class SchemaVersionBuilder {
|
|
5
|
-
private readonly migrationsResolver;
|
|
6
|
-
private readonly schemaMigrator;
|
|
7
|
-
constructor(migrationsResolver: MigrationsResolver, schemaMigrator: SchemaMigrator);
|
|
8
|
-
buildSchema(targetVersion?: string): Promise<Schema>;
|
|
9
|
-
buildSchemaUntil(targetVersion: string): Promise<Schema>;
|
|
10
|
-
continue(schema: Schema, previousVersion: string | null, targetVersion: string): Promise<Schema>;
|
|
11
|
-
buildSchemaAdvanced(initialSchema: Schema, condition: (version: string) => boolean): Promise<Schema>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=SchemaVersionBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaVersionBuilder.d.ts","sourceRoot":"","sources":["../../src/SchemaVersionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,qBAAa,oBAAoB;IAE/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc;IAG1C,WAAW,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpD,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzF,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CASjH"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SchemaVersionBuilder = void 0;
|
|
4
|
-
const schema_utils_1 = require("@contember/schema-utils");
|
|
5
|
-
class SchemaVersionBuilder {
|
|
6
|
-
constructor(migrationsResolver, schemaMigrator) {
|
|
7
|
-
this.migrationsResolver = migrationsResolver;
|
|
8
|
-
this.schemaMigrator = schemaMigrator;
|
|
9
|
-
}
|
|
10
|
-
async buildSchema(targetVersion) {
|
|
11
|
-
return this.buildSchemaAdvanced(schema_utils_1.emptySchema, version => !targetVersion || version <= targetVersion);
|
|
12
|
-
}
|
|
13
|
-
async buildSchemaUntil(targetVersion) {
|
|
14
|
-
return this.buildSchemaAdvanced(schema_utils_1.emptySchema, version => version < targetVersion);
|
|
15
|
-
}
|
|
16
|
-
async continue(schema, previousVersion, targetVersion) {
|
|
17
|
-
return this.buildSchemaAdvanced(schema, version => version <= targetVersion && version > (previousVersion || ''));
|
|
18
|
-
}
|
|
19
|
-
async buildSchemaAdvanced(initialSchema, condition) {
|
|
20
|
-
return (await this.migrationsResolver.getMigrations())
|
|
21
|
-
.filter(({ version }) => condition(version))
|
|
22
|
-
.reduce((schema, { modifications, formatVersion }) => this.schemaMigrator.applyModifications(schema, modifications, formatVersion), initialSchema);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.SchemaVersionBuilder = SchemaVersionBuilder;
|
|
26
|
-
//# sourceMappingURL=SchemaVersionBuilder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaVersionBuilder.js","sourceRoot":"","sources":["../../src/SchemaVersionBuilder.ts"],"names":[],"mappings":";;;AACA,0DAAqD;AAIrD,MAAa,oBAAoB;IAChC,YACkB,kBAAsC,EACtC,cAA8B;QAD9B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,mBAAc,GAAd,cAAc,CAAgB;IAC7C,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,aAAsB;QACvC,OAAO,IAAI,CAAC,mBAAmB,CAAC,0BAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,aAAa,IAAI,OAAO,IAAI,aAAa,CAAC,CAAA;IACpG,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,aAAqB;QAC3C,OAAO,IAAI,CAAC,mBAAmB,CAAC,0BAAW,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,GAAG,aAAa,CAAC,CAAA;IACjF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,eAA8B,EAAE,aAAqB;QACnF,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,IAAI,aAAa,IAAI,OAAO,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAA;IAClH,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,aAAqB,EAAE,SAAuC;QAC9F,OAAO,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;aACpD,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aAC3C,MAAM,CACN,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,EAAE,CAC5C,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,EAC7E,aAAa,CACb,CAAA;IACH,CAAC;CACD;AA3BD,oDA2BC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"checkCreateConsistentMigrations.d.ts","sourceRoot":"","sources":["../../../tests/scripts/checkCreateConsistentMigrations.ts"],"names":[],"mappings":""}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const node_path_1 = require("node:path");
|
|
4
|
-
const src_1 = require("../../src");
|
|
5
|
-
const schema_utils_1 = require("@contember/schema-utils");
|
|
6
|
-
(async () => {
|
|
7
|
-
// eslint-disable-next-line no-console
|
|
8
|
-
console.log((0, node_path_1.relative)(process.cwd(), process.argv[2]));
|
|
9
|
-
const migrationsResolver = new src_1.MigrationsResolver(new src_1.MigrationFilesManager((0, node_path_1.relative)(process.cwd(), process.argv[2])));
|
|
10
|
-
const modificationHandlerFactory = new src_1.ModificationHandlerFactory(src_1.ModificationHandlerFactory.defaultFactoryMap);
|
|
11
|
-
const differ = new src_1.SchemaDiffer(new src_1.SchemaMigrator(modificationHandlerFactory));
|
|
12
|
-
const migrator = new src_1.SchemaMigrator(modificationHandlerFactory);
|
|
13
|
-
let schema = schema_utils_1.emptySchema;
|
|
14
|
-
for (const migration of await migrationsResolver.getMigrations()) {
|
|
15
|
-
const nextSchema = migrator.applyModifications(schema, migration.modifications, migration.formatVersion);
|
|
16
|
-
(0, schema_utils_1.schemaType)(nextSchema);
|
|
17
|
-
const nextSchemaWithoutMeta = nextSchema;
|
|
18
|
-
differ.diffSchemas(schema, nextSchemaWithoutMeta);
|
|
19
|
-
schema = nextSchema;
|
|
20
|
-
}
|
|
21
|
-
// eslint-disable-next-line no-console
|
|
22
|
-
console.log('OK');
|
|
23
|
-
})().catch(e => {
|
|
24
|
-
// eslint-disable-next-line no-console
|
|
25
|
-
console.error(e);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=checkCreateConsistentMigrations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"checkCreateConsistentMigrations.js","sourceRoot":"","sources":["../../../tests/scripts/checkCreateConsistentMigrations.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,mCAMkB;AAClB,0DACC;AAAA,CAAC,KAAK,IAAI,EAAE;IACZ,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,IAAA,oBAAQ,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,MAAM,kBAAkB,GAAG,IAAI,wBAAkB,CAAC,IAAI,2BAAqB,CAAC,IAAA,oBAAQ,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtH,MAAM,0BAA0B,GAAG,IAAI,gCAA0B,CAAC,gCAA0B,CAAC,iBAAiB,CAAC,CAAA;IAC/G,MAAM,MAAM,GAAG,IAAI,kBAAY,CAAC,IAAI,oBAAc,CAAC,0BAA0B,CAAC,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,IAAI,oBAAc,CAAC,0BAA0B,CAAC,CAAA;IAC/D,IAAI,MAAM,GAAG,0BAAW,CAAA;IACxB,KAAK,MAAM,SAAS,IAAI,MAAM,kBAAkB,CAAC,aAAa,EAAE,EAAE;QACjE,MAAM,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAA;QACxG,IAAA,yBAAU,EAAC,UAAU,CAAC,CAAA;QACtB,MAAM,qBAAqB,GAAG,UAAU,CAAA;QACxC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;QAEjD,MAAM,GAAG,UAAU,CAAA;KACnB;IACD,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACd,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChB,CAAC,CAAC,CAAA"}
|
package/src/MigrationCreator.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { MigrationFilesManager } from './MigrationFilesManager'
|
|
2
|
-
import { Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaDiffer } from './SchemaDiffer'
|
|
4
|
-
import { VERSION_LATEST } from './modifications/ModificationVersions'
|
|
5
|
-
import { Migration } from './Migration'
|
|
6
|
-
import { MigrationVersionHelper } from '@contember/engine-common'
|
|
7
|
-
|
|
8
|
-
export class MigrationCreator {
|
|
9
|
-
constructor(
|
|
10
|
-
private readonly migrationFilesManager: MigrationFilesManager,
|
|
11
|
-
private readonly schemaDiffer: SchemaDiffer,
|
|
12
|
-
) {}
|
|
13
|
-
|
|
14
|
-
async prepareMigration(
|
|
15
|
-
initialSchema: Schema,
|
|
16
|
-
newSchema: Schema,
|
|
17
|
-
migrationName: string,
|
|
18
|
-
{ skipInitialSchemaValidation = false }: { skipInitialSchemaValidation?: boolean } = {},
|
|
19
|
-
): Promise<{ migration: Migration; initialSchema: Schema } | null> {
|
|
20
|
-
await this.migrationFilesManager.createDirIfNotExist()
|
|
21
|
-
|
|
22
|
-
const modifications = this.schemaDiffer.diffSchemas(initialSchema, newSchema, { skipInitialSchemaValidation })
|
|
23
|
-
if (modifications.length === 0) {
|
|
24
|
-
return null
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const migration = this.createMigration(modifications, migrationName)
|
|
28
|
-
|
|
29
|
-
return { initialSchema, migration }
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async saveMigration(migration: Migration): Promise<string> {
|
|
33
|
-
const jsonDiff = MigrationCreator.createContent(migration)
|
|
34
|
-
const filename = await this.migrationFilesManager.createFile(jsonDiff, migration.name)
|
|
35
|
-
return filename
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async removeMigration(name: string): Promise<void> {
|
|
39
|
-
await this.migrationFilesManager.removeFile(name)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
private createMigration(modifications: Migration.Modification[], name: string): Migration {
|
|
43
|
-
const [version, fullName] = MigrationVersionHelper.createVersion(name)
|
|
44
|
-
return { formatVersion: VERSION_LATEST, modifications, version, name: fullName }
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
public static createContent({ modifications, formatVersion }: Migration): string {
|
|
48
|
-
return JSON.stringify({ formatVersion, modifications }, undefined, '\t') + '\n'
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { MigrationVersionHelper } from '@contember/engine-common'
|
|
2
|
-
import * as fs from 'node:fs/promises'
|
|
3
|
-
import * as path from 'node:path'
|
|
4
|
-
|
|
5
|
-
class MigrationFilesManager {
|
|
6
|
-
constructor(public readonly directory: string) {}
|
|
7
|
-
|
|
8
|
-
public async createFile(content: string, name: string): Promise<string> {
|
|
9
|
-
const path = this.formatPath(name)
|
|
10
|
-
await fs.writeFile(path, content, { encoding: 'utf8' })
|
|
11
|
-
return await fs.realpath(path)
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public async removeFile(name: string) {
|
|
15
|
-
const path = this.formatPath(name)
|
|
16
|
-
await fs.unlink(path)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public async moveFile(oldName: string, newName: string) {
|
|
20
|
-
await fs.rename(this.formatPath(oldName), this.formatPath(newName))
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
public async createDirIfNotExist(): Promise<void> {
|
|
24
|
-
try {
|
|
25
|
-
await fs.mkdir(this.directory)
|
|
26
|
-
} catch (e) {
|
|
27
|
-
if (!(e instanceof Error) || !('code' in e) || (e as any).code !== 'EEXIST') {
|
|
28
|
-
throw e
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public async listFiles(): Promise<string[]> {
|
|
34
|
-
const files: string[] = await this.tryReadDir()
|
|
35
|
-
|
|
36
|
-
const filteredFiles: string[] = await Promise.all(
|
|
37
|
-
files
|
|
38
|
-
.filter(file => file.endsWith(`.json`))
|
|
39
|
-
.filter(async file => {
|
|
40
|
-
return (await fs.lstat(`${this.directory}/${file}`)).isFile()
|
|
41
|
-
}),
|
|
42
|
-
)
|
|
43
|
-
return filteredFiles.sort()
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
private async tryReadDir(): Promise<string[]> {
|
|
47
|
-
try {
|
|
48
|
-
return await fs.readdir(this.directory)
|
|
49
|
-
} catch (e) {
|
|
50
|
-
if (e instanceof Error && 'code' in e && (e as any).code === 'ENOENT') {
|
|
51
|
-
return []
|
|
52
|
-
}
|
|
53
|
-
throw e
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public async readFiles(predicate?: (version: string) => boolean): Promise<MigrationFilesManager.MigrationFile[]> {
|
|
58
|
-
let files = await this.listFiles()
|
|
59
|
-
if (predicate) {
|
|
60
|
-
files = files.filter(filename => predicate(MigrationVersionHelper.extractVersion(filename)))
|
|
61
|
-
}
|
|
62
|
-
const filesWithContent = files.map(async filename => ({
|
|
63
|
-
filename: filename,
|
|
64
|
-
path: `${this.directory}/${filename}`,
|
|
65
|
-
content: await fs.readFile(`${this.directory}/${filename}`, { encoding: 'utf8' }),
|
|
66
|
-
}))
|
|
67
|
-
|
|
68
|
-
return await Promise.all(filesWithContent)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public static createForProject(projectsDirectory: string, projectSlug: string): MigrationFilesManager {
|
|
72
|
-
const migrationsDir = path.join(projectsDirectory, projectSlug, 'migrations')
|
|
73
|
-
return new MigrationFilesManager(migrationsDir)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
private formatPath(version: string) {
|
|
77
|
-
const filename = `${version}.json`
|
|
78
|
-
const path = `${this.directory}/${filename}`
|
|
79
|
-
return path
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
namespace MigrationFilesManager {
|
|
84
|
-
export type MigrationFile = {
|
|
85
|
-
filename: string
|
|
86
|
-
path: string
|
|
87
|
-
content: string
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export { MigrationFilesManager }
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { MigrationFilesManager } from './MigrationFilesManager'
|
|
2
|
-
import { VERSION_INITIAL } from './modifications/ModificationVersions'
|
|
3
|
-
import { MigrationVersionHelper } from '@contember/engine-common'
|
|
4
|
-
import { Migration } from './Migration'
|
|
5
|
-
|
|
6
|
-
export class MigrationsResolver {
|
|
7
|
-
constructor(private readonly migrationFilesManager: MigrationFilesManager) {}
|
|
8
|
-
|
|
9
|
-
public get directory(): string {
|
|
10
|
-
return this.migrationFilesManager.directory
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
public async getMigrations(): Promise<Migration[]> {
|
|
14
|
-
return (await this.migrationFilesManager.readFiles()).map(({ filename, content }) => {
|
|
15
|
-
const parsed = JSON.parse(content)
|
|
16
|
-
return {
|
|
17
|
-
version: MigrationVersionHelper.extractVersion(filename),
|
|
18
|
-
name: MigrationVersionHelper.extractName(filename),
|
|
19
|
-
formatVersion: parsed.formatVersion || VERSION_INITIAL,
|
|
20
|
-
modifications: parsed.modifications,
|
|
21
|
-
...(parsed.skippedErrors ? { skippedErrors: parsed.skippedErrors } : {}),
|
|
22
|
-
}
|
|
23
|
-
})
|
|
24
|
-
}
|
|
25
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Schema } from '@contember/schema'
|
|
2
|
-
import { emptySchema } from '@contember/schema-utils'
|
|
3
|
-
import { SchemaMigrator } from './SchemaMigrator'
|
|
4
|
-
import { MigrationsResolver } from './MigrationsResolver'
|
|
5
|
-
|
|
6
|
-
export class SchemaVersionBuilder {
|
|
7
|
-
constructor(
|
|
8
|
-
private readonly migrationsResolver: MigrationsResolver,
|
|
9
|
-
private readonly schemaMigrator: SchemaMigrator,
|
|
10
|
-
) {}
|
|
11
|
-
|
|
12
|
-
async buildSchema(targetVersion?: string): Promise<Schema> {
|
|
13
|
-
return this.buildSchemaAdvanced(emptySchema, version => !targetVersion || version <= targetVersion)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async buildSchemaUntil(targetVersion: string): Promise<Schema> {
|
|
17
|
-
return this.buildSchemaAdvanced(emptySchema, version => version < targetVersion)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async continue(schema: Schema, previousVersion: string | null, targetVersion: string): Promise<Schema> {
|
|
21
|
-
return this.buildSchemaAdvanced(schema, version => version <= targetVersion && version > (previousVersion || ''))
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public async buildSchemaAdvanced(initialSchema: Schema, condition: (version: string) => boolean): Promise<Schema> {
|
|
25
|
-
return (await this.migrationsResolver.getMigrations())
|
|
26
|
-
.filter(({ version }) => condition(version))
|
|
27
|
-
.reduce<Schema>(
|
|
28
|
-
(schema, { modifications, formatVersion }) =>
|
|
29
|
-
this.schemaMigrator.applyModifications(schema, modifications, formatVersion),
|
|
30
|
-
initialSchema,
|
|
31
|
-
)
|
|
32
|
-
}
|
|
33
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { relative } from 'node:path'
|
|
2
|
-
import {
|
|
3
|
-
MigrationFilesManager,
|
|
4
|
-
MigrationsResolver,
|
|
5
|
-
ModificationHandlerFactory,
|
|
6
|
-
SchemaDiffer,
|
|
7
|
-
SchemaMigrator,
|
|
8
|
-
} from '../../src'
|
|
9
|
-
import { emptySchema, schemaType } from '@contember/schema-utils'
|
|
10
|
-
;(async () => {
|
|
11
|
-
// eslint-disable-next-line no-console
|
|
12
|
-
console.log(relative(process.cwd(), process.argv[2]))
|
|
13
|
-
const migrationsResolver = new MigrationsResolver(new MigrationFilesManager(relative(process.cwd(), process.argv[2])))
|
|
14
|
-
const modificationHandlerFactory = new ModificationHandlerFactory(ModificationHandlerFactory.defaultFactoryMap)
|
|
15
|
-
const differ = new SchemaDiffer(new SchemaMigrator(modificationHandlerFactory))
|
|
16
|
-
const migrator = new SchemaMigrator(modificationHandlerFactory)
|
|
17
|
-
let schema = emptySchema
|
|
18
|
-
for (const migration of await migrationsResolver.getMigrations()) {
|
|
19
|
-
const nextSchema = migrator.applyModifications(schema, migration.modifications, migration.formatVersion)
|
|
20
|
-
schemaType(nextSchema)
|
|
21
|
-
const nextSchemaWithoutMeta = nextSchema
|
|
22
|
-
differ.diffSchemas(schema, nextSchemaWithoutMeta)
|
|
23
|
-
|
|
24
|
-
schema = nextSchema
|
|
25
|
-
}
|
|
26
|
-
// eslint-disable-next-line no-console
|
|
27
|
-
console.log('OK')
|
|
28
|
-
})().catch(e => {
|
|
29
|
-
// eslint-disable-next-line no-console
|
|
30
|
-
console.error(e)
|
|
31
|
-
process.exit(1)
|
|
32
|
-
})
|