@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.
Files changed (111) hide show
  1. package/dist/src/Migration.d.ts +1 -1
  2. package/dist/src/Migration.d.ts.map +1 -1
  3. package/dist/src/index.d.ts +0 -4
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +0 -4
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts +1 -2
  8. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
  9. package/dist/src/modifications/acl/PatchAclSchemaModification.js +1 -1
  10. package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
  11. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts +1 -2
  12. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
  13. package/dist/src/modifications/acl/UpdateAclSchemaModification.js +1 -1
  14. package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
  15. package/dist/src/modifications/actions/CreateTargetModification.d.ts +1 -2
  16. package/dist/src/modifications/actions/CreateTargetModification.d.ts.map +1 -1
  17. package/dist/src/modifications/actions/CreateTargetModification.js +1 -1
  18. package/dist/src/modifications/actions/CreateTargetModification.js.map +1 -1
  19. package/dist/src/modifications/actions/CreateTriggerModification.d.ts +1 -2
  20. package/dist/src/modifications/actions/CreateTriggerModification.d.ts.map +1 -1
  21. package/dist/src/modifications/actions/CreateTriggerModification.js +1 -1
  22. package/dist/src/modifications/actions/CreateTriggerModification.js.map +1 -1
  23. package/dist/src/modifications/actions/RemoveTargetModification.d.ts +1 -2
  24. package/dist/src/modifications/actions/RemoveTargetModification.d.ts.map +1 -1
  25. package/dist/src/modifications/actions/RemoveTargetModification.js +1 -1
  26. package/dist/src/modifications/actions/RemoveTargetModification.js.map +1 -1
  27. package/dist/src/modifications/actions/RemoveTriggerModification.d.ts +1 -2
  28. package/dist/src/modifications/actions/RemoveTriggerModification.d.ts.map +1 -1
  29. package/dist/src/modifications/actions/RemoveTriggerModification.js +1 -1
  30. package/dist/src/modifications/actions/RemoveTriggerModification.js.map +1 -1
  31. package/dist/src/modifications/actions/UpdateTargetModification.d.ts +1 -2
  32. package/dist/src/modifications/actions/UpdateTargetModification.d.ts.map +1 -1
  33. package/dist/src/modifications/actions/UpdateTargetModification.js +1 -1
  34. package/dist/src/modifications/actions/UpdateTargetModification.js.map +1 -1
  35. package/dist/src/modifications/actions/UpdateTriggerModification.d.ts +1 -2
  36. package/dist/src/modifications/actions/UpdateTriggerModification.d.ts.map +1 -1
  37. package/dist/src/modifications/actions/UpdateTriggerModification.js +1 -1
  38. package/dist/src/modifications/actions/UpdateTriggerModification.js.map +1 -1
  39. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +1 -2
  40. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
  41. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +1 -1
  42. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
  43. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +1 -2
  44. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
  45. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +1 -1
  46. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
  47. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +1 -2
  48. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
  49. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +1 -1
  50. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
  51. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +1 -2
  52. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
  53. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +1 -1
  54. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
  55. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts +1 -2
  56. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -1
  57. package/dist/src/modifications/settings/UpdateSettingsModification.js +1 -1
  58. package/dist/src/modifications/settings/UpdateSettingsModification.js.map +1 -1
  59. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts +1 -2
  60. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
  61. package/dist/src/modifications/validation/PatchValidationSchemaModification.js +1 -1
  62. package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
  63. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +1 -2
  64. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
  65. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +1 -1
  66. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
  67. package/dist/src/tsconfig.tsbuildinfo +1 -1
  68. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +7 -7
  70. package/src/Migration.ts +1 -1
  71. package/src/index.ts +0 -4
  72. package/src/modifications/acl/PatchAclSchemaModification.ts +1 -2
  73. package/src/modifications/acl/UpdateAclSchemaModification.ts +1 -2
  74. package/src/modifications/actions/CreateTargetModification.ts +1 -2
  75. package/src/modifications/actions/CreateTriggerModification.ts +1 -2
  76. package/src/modifications/actions/RemoveTargetModification.ts +1 -2
  77. package/src/modifications/actions/RemoveTriggerModification.ts +1 -2
  78. package/src/modifications/actions/UpdateTargetModification.ts +1 -3
  79. package/src/modifications/actions/UpdateTriggerModification.ts +1 -2
  80. package/src/modifications/relations/CreateRelationInverseSideModification.ts +1 -2
  81. package/src/modifications/relations/DisableOrphanRemovalModification.ts +1 -2
  82. package/src/modifications/relations/EnableOrphanRemovalModification.ts +1 -2
  83. package/src/modifications/relations/UpdateRelationOrderByModification.ts +1 -2
  84. package/src/modifications/settings/UpdateSettingsModification.ts +1 -2
  85. package/src/modifications/validation/PatchValidationSchemaModification.ts +1 -2
  86. package/src/modifications/validation/UpdateValidationSchemaModification.ts +1 -2
  87. package/dist/src/MigrationCreator.d.ts +0 -20
  88. package/dist/src/MigrationCreator.d.ts.map +0 -1
  89. package/dist/src/MigrationCreator.js +0 -37
  90. package/dist/src/MigrationCreator.js.map +0 -1
  91. package/dist/src/MigrationFilesManager.d.ts +0 -22
  92. package/dist/src/MigrationFilesManager.d.ts.map +0 -1
  93. package/dist/src/MigrationFilesManager.js +0 -99
  94. package/dist/src/MigrationFilesManager.js.map +0 -1
  95. package/dist/src/MigrationsResolver.d.ts +0 -9
  96. package/dist/src/MigrationsResolver.d.ts.map +0 -1
  97. package/dist/src/MigrationsResolver.js +0 -27
  98. package/dist/src/MigrationsResolver.js.map +0 -1
  99. package/dist/src/SchemaVersionBuilder.d.ts +0 -13
  100. package/dist/src/SchemaVersionBuilder.d.ts.map +0 -1
  101. package/dist/src/SchemaVersionBuilder.js +0 -26
  102. package/dist/src/SchemaVersionBuilder.js.map +0 -1
  103. package/dist/tests/scripts/checkCreateConsistentMigrations.d.ts +0 -2
  104. package/dist/tests/scripts/checkCreateConsistentMigrations.d.ts.map +0 -1
  105. package/dist/tests/scripts/checkCreateConsistentMigrations.js +0 -28
  106. package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +0 -1
  107. package/src/MigrationCreator.ts +0 -50
  108. package/src/MigrationFilesManager.ts +0 -91
  109. package/src/MigrationsResolver.ts +0 -25
  110. package/src/SchemaVersionBuilder.ts +0 -33
  111. package/tests/scripts/checkCreateConsistentMigrations.ts +0 -32
@@ -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
- })