@contember/schema-migrations 1.4.0-alpha.2 → 1.4.0-alpha.4
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/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/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/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/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/Migration.ts +1 -1
- package/src/index.ts +0 -4
- 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/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/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
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
|
-
})
|