@contember/schema-migrations 1.2.0-alpha.1 → 1.2.0-alpha.12

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 (264) hide show
  1. package/dist/src/MigrationDescriber.d.ts +1 -2
  2. package/dist/src/MigrationDescriber.d.ts.map +1 -1
  3. package/dist/src/MigrationDescriber.js +5 -7
  4. package/dist/src/MigrationDescriber.js.map +1 -1
  5. package/dist/src/SchemaDiffer.d.ts.map +1 -1
  6. package/dist/src/SchemaDiffer.js +36 -46
  7. package/dist/src/SchemaDiffer.js.map +1 -1
  8. package/dist/src/SchemaMigrator.d.ts +1 -1
  9. package/dist/src/SchemaMigrator.d.ts.map +1 -1
  10. package/dist/src/index.d.ts +1 -5
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +1 -11
  13. package/dist/src/index.js.map +1 -1
  14. package/dist/src/modifications/ModificationHandler.d.ts +11 -6
  15. package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
  16. package/dist/src/modifications/ModificationHandler.js +9 -1
  17. package/dist/src/modifications/ModificationHandler.js.map +1 -1
  18. package/dist/src/modifications/ModificationHandlerFactory.d.ts +6 -5
  19. package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
  20. package/dist/src/modifications/ModificationHandlerFactory.js +42 -37
  21. package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
  22. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts +13 -2
  23. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
  24. package/dist/src/modifications/acl/PatchAclSchemaModification.js +28 -28
  25. package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
  26. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts +17 -3
  27. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
  28. package/dist/src/modifications/acl/UpdateAclSchemaModification.js +33 -30
  29. package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
  30. package/dist/src/modifications/columns/CreateColumnModification.d.ts +23 -3
  31. package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
  32. package/dist/src/modifications/columns/CreateColumnModification.js +72 -69
  33. package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
  34. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +21 -3
  35. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
  36. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +72 -71
  37. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
  38. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts +20 -2
  39. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
  40. package/dist/src/modifications/columns/UpdateColumnNameModification.js +97 -94
  41. package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
  42. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +21 -3
  43. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
  44. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +72 -66
  45. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
  46. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +18 -2
  47. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
  48. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +45 -42
  49. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
  50. package/dist/src/modifications/differs/ChangeViewNonViewDiffer.js +1 -1
  51. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js +1 -1
  52. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +1 -1
  53. package/dist/src/modifications/entities/CreateEntityModification.d.ts +21 -6
  54. package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
  55. package/dist/src/modifications/entities/CreateEntityModification.js +66 -62
  56. package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
  57. package/dist/src/modifications/entities/CreateViewModification.d.ts +23 -6
  58. package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
  59. package/dist/src/modifications/entities/CreateViewModification.js +59 -55
  60. package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
  61. package/dist/src/modifications/entities/RemoveEntityModification.d.ts +21 -2
  62. package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
  63. package/dist/src/modifications/entities/RemoveEntityModification.js +73 -70
  64. package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
  65. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +19 -2
  66. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
  67. package/dist/src/modifications/entities/ToggleEventLogModification.js +57 -54
  68. package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
  69. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +18 -2
  70. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
  71. package/dist/src/modifications/entities/UpdateEntityNameModification.js +78 -78
  72. package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
  73. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts +18 -2
  74. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts.map +1 -1
  75. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js +40 -34
  76. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
  77. package/dist/src/modifications/entities/UpdateViewModification.d.ts +15 -3
  78. package/dist/src/modifications/entities/UpdateViewModification.d.ts.map +1 -1
  79. package/dist/src/modifications/entities/UpdateViewModification.js +28 -28
  80. package/dist/src/modifications/entities/UpdateViewModification.js.map +1 -1
  81. package/dist/src/modifications/enums/CreateEnumModification.d.ts +18 -2
  82. package/dist/src/modifications/enums/CreateEnumModification.d.ts.map +1 -1
  83. package/dist/src/modifications/enums/CreateEnumModification.js +42 -36
  84. package/dist/src/modifications/enums/CreateEnumModification.js.map +1 -1
  85. package/dist/src/modifications/enums/RemoveEnumModification.d.ts +18 -2
  86. package/dist/src/modifications/enums/RemoveEnumModification.d.ts.map +1 -1
  87. package/dist/src/modifications/enums/RemoveEnumModification.js +36 -33
  88. package/dist/src/modifications/enums/RemoveEnumModification.js.map +1 -1
  89. package/dist/src/modifications/enums/UpdateEnumModification.d.ts +19 -2
  90. package/dist/src/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
  91. package/dist/src/modifications/enums/UpdateEnumModification.js +43 -40
  92. package/dist/src/modifications/enums/UpdateEnumModification.js.map +1 -1
  93. package/dist/src/modifications/fields/RemoveFieldModification.d.ts +20 -2
  94. package/dist/src/modifications/fields/RemoveFieldModification.d.ts.map +1 -1
  95. package/dist/src/modifications/fields/RemoveFieldModification.js +67 -64
  96. package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
  97. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +18 -2
  98. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
  99. package/dist/src/modifications/fields/UpdateFieldNameModification.js +132 -132
  100. package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
  101. package/dist/src/modifications/index.d.ts +14 -0
  102. package/dist/src/modifications/index.d.ts.map +1 -0
  103. package/dist/src/modifications/index.js +32 -0
  104. package/dist/src/modifications/index.js.map +1 -0
  105. package/dist/src/modifications/indexes/CreateIndexModification.d.ts +23 -0
  106. package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -0
  107. package/dist/src/modifications/indexes/CreateIndexModification.js +75 -0
  108. package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -0
  109. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +23 -0
  110. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -0
  111. package/dist/src/modifications/indexes/RemoveIndexModification.js +56 -0
  112. package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -0
  113. package/dist/src/modifications/indexes/index.d.ts +3 -0
  114. package/dist/src/modifications/indexes/index.d.ts.map +1 -0
  115. package/dist/src/modifications/indexes/index.js +19 -0
  116. package/dist/src/modifications/indexes/index.js.map +1 -0
  117. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +23 -3
  118. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
  119. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +68 -65
  120. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
  121. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +23 -2
  122. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
  123. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +73 -70
  124. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
  125. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +20 -3
  126. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
  127. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +36 -33
  128. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
  129. package/dist/src/modifications/relations/CreateRelationModification.d.ts +25 -3
  130. package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
  131. package/dist/src/modifications/relations/CreateRelationModification.js +88 -85
  132. package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
  133. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +20 -2
  134. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
  135. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +42 -39
  136. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
  137. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +20 -2
  138. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
  139. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +45 -42
  140. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
  141. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts +21 -2
  142. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
  143. package/dist/src/modifications/relations/MakeRelationNotNullModification.js +55 -52
  144. package/dist/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
  145. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts +20 -2
  146. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
  147. package/dist/src/modifications/relations/MakeRelationNullableModification.js +54 -51
  148. package/dist/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
  149. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +27 -0
  150. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -0
  151. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +84 -0
  152. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -0
  153. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +20 -3
  154. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
  155. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +42 -39
  156. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
  157. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +20 -3
  158. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
  159. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +43 -40
  160. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
  161. package/dist/src/modifications/relations/index.d.ts +1 -1
  162. package/dist/src/modifications/relations/index.d.ts.map +1 -1
  163. package/dist/src/modifications/relations/index.js +1 -1
  164. package/dist/src/modifications/relations/index.js.map +1 -1
  165. package/dist/src/modifications/utils/columnUtils.d.ts +3 -0
  166. package/dist/src/modifications/utils/columnUtils.d.ts.map +1 -0
  167. package/dist/src/modifications/utils/columnUtils.js +9 -0
  168. package/dist/src/modifications/utils/columnUtils.js.map +1 -0
  169. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts +13 -2
  170. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
  171. package/dist/src/modifications/validation/PatchValidationSchemaModification.js +28 -28
  172. package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
  173. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +17 -3
  174. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
  175. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +33 -30
  176. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
  177. package/dist/src/tsconfig.tsbuildinfo +1 -1
  178. package/dist/src/utils/PartialEntity.d.ts +5 -0
  179. package/dist/src/utils/PartialEntity.d.ts.map +1 -0
  180. package/dist/src/utils/PartialEntity.js +3 -0
  181. package/dist/src/utils/PartialEntity.js.map +1 -0
  182. package/dist/tests/cases/integration/createAndDropIndex.test.d.ts +2 -0
  183. package/dist/tests/cases/integration/createAndDropIndex.test.d.ts.map +1 -0
  184. package/dist/tests/cases/integration/createAndDropIndex.test.js +57 -0
  185. package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -0
  186. package/dist/tests/cases/integration/createColumn.test.js +36 -0
  187. package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
  188. package/dist/tests/cases/integration/createEntity.test.js +2 -0
  189. package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
  190. package/dist/tests/cases/integration/createManyHasMany.test.js +1 -0
  191. package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
  192. package/dist/tests/cases/integration/createManyHasOne.test.js +1 -0
  193. package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
  194. package/dist/tests/cases/integration/createOneHasMany.test.js +1 -0
  195. package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
  196. package/dist/tests/cases/integration/createOneHasOne.test.js +2 -0
  197. package/dist/tests/cases/integration/createOneHasOne.test.js.map +1 -1
  198. package/dist/tests/cases/integration/createView.test.js +1 -0
  199. package/dist/tests/cases/integration/createView.test.js.map +1 -1
  200. package/dist/tests/cases/integration/updateView.test.js +9 -0
  201. package/dist/tests/cases/integration/updateView.test.js.map +1 -1
  202. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  203. package/package.json +7 -7
  204. package/src/MigrationDescriber.ts +8 -8
  205. package/src/SchemaDiffer.ts +65 -76
  206. package/src/SchemaMigrator.ts +1 -1
  207. package/src/index.ts +1 -5
  208. package/src/modifications/ModificationHandler.ts +20 -8
  209. package/src/modifications/ModificationHandlerFactory.ts +65 -61
  210. package/src/modifications/acl/PatchAclSchemaModification.ts +7 -8
  211. package/src/modifications/acl/UpdateAclSchemaModification.ts +16 -15
  212. package/src/modifications/columns/CreateColumnModification.ts +21 -18
  213. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +44 -42
  214. package/src/modifications/columns/UpdateColumnNameModification.ts +60 -53
  215. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +23 -17
  216. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +18 -14
  217. package/src/modifications/differs/ChangeViewNonViewDiffer.ts +2 -2
  218. package/src/modifications/differs/RemoveChangedFieldDiffer.ts +2 -2
  219. package/src/modifications/differs/RemoveChangedViewDiffer.ts +2 -2
  220. package/src/modifications/entities/CreateEntityModification.ts +21 -12
  221. package/src/modifications/entities/CreateViewModification.ts +13 -11
  222. package/src/modifications/entities/RemoveEntityModification.ts +22 -15
  223. package/src/modifications/entities/ToggleEventLogModification.ts +20 -13
  224. package/src/modifications/entities/UpdateEntityNameModification.ts +9 -9
  225. package/src/modifications/entities/UpdateEntityTableNameModification.ts +18 -13
  226. package/src/modifications/entities/UpdateViewModification.ts +7 -7
  227. package/src/modifications/enums/CreateEnumModification.ts +18 -13
  228. package/src/modifications/enums/RemoveEnumModification.ts +14 -12
  229. package/src/modifications/enums/UpdateEnumModification.ts +15 -13
  230. package/src/modifications/fields/RemoveFieldModification.ts +20 -17
  231. package/src/modifications/fields/UpdateFieldNameModification.ts +16 -17
  232. package/src/modifications/index.ts +13 -0
  233. package/src/modifications/indexes/CreateIndexModification.ts +83 -0
  234. package/src/modifications/indexes/RemoveIndexModification.ts +68 -0
  235. package/src/modifications/indexes/index.ts +2 -0
  236. package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +35 -25
  237. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +31 -24
  238. package/src/modifications/relations/CreateRelationInverseSideModification.ts +15 -13
  239. package/src/modifications/relations/CreateRelationModification.ts +35 -27
  240. package/src/modifications/relations/DisableOrphanRemovalModification.ts +15 -12
  241. package/src/modifications/relations/EnableOrphanRemovalModification.ts +16 -13
  242. package/src/modifications/relations/MakeRelationNotNullModification.ts +16 -14
  243. package/src/modifications/relations/MakeRelationNullableModification.ts +17 -13
  244. package/src/modifications/relations/{ToggleManyHasManyEventLogModification.ts → ToggleJunctionEventLogModification.ts} +21 -14
  245. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +16 -14
  246. package/src/modifications/relations/UpdateRelationOrderByModification.ts +17 -14
  247. package/src/modifications/relations/index.ts +1 -1
  248. package/src/modifications/utils/columnUtils.ts +5 -0
  249. package/src/modifications/validation/PatchValidationSchemaModification.ts +7 -7
  250. package/src/modifications/validation/UpdateValidationSchemaModification.ts +17 -14
  251. package/src/utils/PartialEntity.ts +5 -0
  252. package/tests/cases/integration/createAndDropIndex.test.ts +44 -0
  253. package/tests/cases/integration/createColumn.test.ts +33 -0
  254. package/tests/cases/integration/createEntity.test.ts +2 -0
  255. package/tests/cases/integration/createManyHasMany.test.ts +1 -0
  256. package/tests/cases/integration/createManyHasOne.test.ts +1 -0
  257. package/tests/cases/integration/createOneHasMany.test.ts +1 -0
  258. package/tests/cases/integration/createOneHasOne.test.ts +2 -0
  259. package/tests/cases/integration/createView.test.ts +1 -0
  260. package/tests/cases/integration/updateView.test.ts +9 -0
  261. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts +0 -8
  262. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts.map +0 -1
  263. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js +0 -81
  264. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js.map +0 -1
@@ -0,0 +1,83 @@
1
+ import { MigrationBuilder } from '@contember/database-migrations'
2
+ import { Model, Schema } from '@contember/schema'
3
+ import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
+ import { acceptFieldVisitor } from '@contember/schema-utils'
6
+
7
+ export class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {
8
+ constructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}
9
+
10
+ public createSql(builder: MigrationBuilder): void {
11
+ const entity = this.schema.model.entities[this.data.entityName]
12
+ if (entity.view) {
13
+ return
14
+ }
15
+ const fields = this.data.index.fields
16
+ const columns = fields.map(fieldName => {
17
+ return acceptFieldVisitor(this.schema.model, entity, fieldName, {
18
+ visitColumn: ({ column }) => {
19
+ return column.columnName
20
+ },
21
+ visitManyHasOne: ({ relation }) => {
22
+ return relation.joiningColumn.columnName
23
+ },
24
+ visitOneHasOneOwning: ({ relation }) => {
25
+ return relation.joiningColumn.columnName
26
+ },
27
+ visitOneHasMany: () => {
28
+ throw new Error(`Cannot create index on 1:m relation in ${entity.name}.${fieldName}`)
29
+ },
30
+ visitOneHasOneInverse: () => {
31
+ throw new Error(`Cannot create index on 1:1 inverse relation in ${entity.name}.${fieldName}`)
32
+ },
33
+ visitManyHasManyOwning: () => {
34
+ throw new Error(`Cannot create index on m:m relation in ${entity.name}.${fieldName}`)
35
+ },
36
+ visitManyHasManyInverse: () => {
37
+ throw new Error(`Cannot create index on m:m inverse relation in ${entity.name}.${fieldName}`)
38
+ },
39
+ })
40
+ })
41
+ builder.addIndex(entity.tableName, [...columns], {
42
+ name: this.data.index.name,
43
+ })
44
+ }
45
+
46
+ public getSchemaUpdater(): SchemaUpdater {
47
+ return updateModel(
48
+ updateEntity(this.data.entityName, ({ entity }) => ({
49
+ ...entity,
50
+ indexes: {
51
+ ...entity.indexes,
52
+ [this.data.index.name]: this.data.index,
53
+ },
54
+ })),
55
+ )
56
+ }
57
+
58
+ describe() {
59
+ return {
60
+ message: `Create index(${this.data.index.fields.join(', ')}) on entity ${this.data.entityName}`,
61
+ }
62
+ }
63
+ }
64
+
65
+ export const createIndexModification = createModificationType({
66
+ id: 'createIndex',
67
+ handler: CreateIndexModificationHandler,
68
+ })
69
+
70
+ export class CreateIndexDiffer implements Differ {
71
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
72
+ return Object.values(updatedSchema.model.entities).flatMap(entity =>
73
+ Object.values(entity.indexes)
74
+ .filter(it => !originalSchema.model.entities[entity.name].indexes[it.name])
75
+ .map(index => createIndexModification.createModification({ entityName: entity.name, index })),
76
+ )
77
+ }
78
+ }
79
+
80
+ export interface CreateIndexModificationData {
81
+ entityName: string
82
+ index: Model.Index
83
+ }
@@ -0,0 +1,68 @@
1
+ import { MigrationBuilder } from '@contember/database-migrations'
2
+ import { Schema } from '@contember/schema'
3
+ import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
+ import deepEqual from 'fast-deep-equal'
6
+
7
+ export class RemoveIndexModificationHandler implements ModificationHandler<RemoveIndexModificationData> {
8
+ constructor(private readonly data: RemoveIndexModificationData, private readonly schema: Schema) {}
9
+
10
+ public createSql(builder: MigrationBuilder): void {
11
+ const entity = this.schema.model.entities[this.data.entityName]
12
+ if (entity.view) {
13
+ return
14
+ }
15
+ builder.dropIndex(entity.tableName, [], {
16
+ name: this.data.indexName,
17
+ })
18
+ }
19
+
20
+ public getSchemaUpdater(): SchemaUpdater {
21
+ return updateModel(
22
+ updateEntity(this.data.entityName, ({ entity }) => {
23
+ const { [this.data.indexName]: removed, ...indexes } = entity.indexes
24
+ return {
25
+ ...entity,
26
+ indexes,
27
+ }
28
+ }),
29
+ )
30
+ }
31
+
32
+ describe() {
33
+ const fields = this.schema.model.entities[this.data.entityName].indexes[this.data.indexName].fields
34
+ return { message: `Remove index (${fields.join(', ')}) on entity ${this.data.entityName}` }
35
+ }
36
+ }
37
+
38
+ export const removeIndexModification = createModificationType({
39
+ id: 'removeIndex',
40
+ handler: RemoveIndexModificationHandler,
41
+ })
42
+
43
+
44
+ export class RemoveIndexDiffer implements Differ {
45
+
46
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
47
+ return Object.values(originalSchema.model.entities).flatMap(entity =>
48
+ Object.values(entity.indexes)
49
+ .filter(
50
+ it =>
51
+ updatedSchema.model.entities[entity.name] &&
52
+ (!updatedSchema.model.entities[entity.name].indexes[it.name] ||
53
+ !deepEqual(it.fields, updatedSchema.model.entities[entity.name].indexes[it.name].fields)),
54
+ )
55
+ .map(index =>
56
+ removeIndexModification.createModification({
57
+ entityName: entity.name,
58
+ indexName: index.name,
59
+ }),
60
+ ),
61
+ )
62
+ }
63
+ }
64
+
65
+ export interface RemoveIndexModificationData {
66
+ entityName: string
67
+ indexName: string
68
+ }
@@ -0,0 +1,2 @@
1
+ export * from './CreateIndexModification'
2
+ export * from './RemoveIndexModification'
@@ -1,16 +1,20 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { addField, SchemaUpdater, updateEntity, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandler, ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
4
+ import {
5
+ createModificationType,
6
+ Differ,
7
+ ModificationHandler,
8
+ ModificationHandlerOptions,
9
+ } from '../ModificationHandler'
5
10
  import { isInverseRelation, isOwningRelation } from '@contember/schema-utils'
6
11
  import { updateRelations } from '../utils/diffUtils'
7
- import { UpdateFieldNameModification } from '../fields'
8
12
  import { createJunctionTableSql } from '../utils/createJunctionTable'
9
13
  import { wrapIdentifier } from '@contember/database'
10
14
  import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
15
+ import { updateFieldNameModification } from '../fields'
11
16
 
12
- export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHandlerStatic<ConvertOneHasManyToManyHasManyRelationModificationData> = class {
13
- static id = 'convertOneHasManyToManyHasManyRelation'
17
+ export class ConvertOneHasManyToManyHasManyRelationModificationHandler implements ModificationHandler<ConvertOneHasManyToManyHasManyRelationModificationData> {
14
18
  private subModification: ModificationHandler<any>
15
19
 
16
20
  constructor(
@@ -18,7 +22,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
18
22
  private readonly schema: Schema,
19
23
  private readonly options: ModificationHandlerOptions,
20
24
  ) {
21
- this.subModification = new UpdateFieldNameModification(
25
+ this.subModification = updateFieldNameModification.createHandler(
22
26
  {
23
27
  entityName: this.data.entityName,
24
28
  fieldName: this.data.fieldName,
@@ -63,11 +67,33 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
63
67
  }
64
68
  }
65
69
 
66
- static createModification(data: ConvertOneHasManyToManyHasManyRelationModificationData) {
67
- return { modification: this.id, ...data }
70
+
71
+
72
+
73
+ private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
74
+ const entity = this.schema.model.entities[this.data.entityName]
75
+ const relation = entity.fields[this.data.fieldName]
76
+ if (relation.type !== Model.RelationType.ManyHasOne) {
77
+ throw new Error()
78
+ }
79
+ return { entity, relation }
68
80
  }
81
+ }
82
+
83
+ export const convertOneHasManyToManyHasManyRelationModification = createModificationType({
84
+ id: 'convertOneHasManyToManyHasManyRelation',
85
+ handler: ConvertOneHasManyToManyHasManyRelationModificationHandler,
86
+ })
69
87
 
70
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
88
+ export interface ConvertOneHasManyToManyHasManyRelationModificationData {
89
+ entityName: string
90
+ fieldName: string
91
+ owningSide: PartialManyHasManyRelation
92
+ inverseSide?: Model.ManyHasManyInverseRelation
93
+ }
94
+
95
+ export class ConvertOneHasManyToManyHasManyRelationDiffer implements Differ {
96
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
71
97
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
72
98
  if (
73
99
  isInverseRelation(originalRelation) &&
@@ -81,7 +107,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
81
107
  if (owningSide.type !== Model.RelationType.ManyHasMany || !isOwningRelation(owningSide)) {
82
108
  throw new Error()
83
109
  }
84
- return ConvertOneHasManyToManyHasManyRelationModification.createModification({
110
+ return convertOneHasManyToManyHasManyRelationModification.createModification({
85
111
  entityName: updatedRelation.target,
86
112
  fieldName: owningOldName,
87
113
  owningSide,
@@ -91,20 +117,4 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
91
117
  return undefined
92
118
  })
93
119
  }
94
-
95
- private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
96
- const entity = this.schema.model.entities[this.data.entityName]
97
- const relation = entity.fields[this.data.fieldName]
98
- if (relation.type !== Model.RelationType.ManyHasOne) {
99
- throw new Error()
100
- }
101
- return { entity, relation }
102
- }
103
- }
104
-
105
- export interface ConvertOneHasManyToManyHasManyRelationModificationData {
106
- entityName: string
107
- fieldName: string
108
- owningSide: PartialManyHasManyRelation
109
- inverseSide?: Model.ManyHasManyInverseRelation
110
120
  }
@@ -1,14 +1,18 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateEntity, updateField, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandler, ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
4
+ import {
5
+ createModificationType,
6
+ Differ,
7
+ ModificationHandler,
8
+ ModificationHandlerOptions,
9
+ } from '../ModificationHandler'
5
10
  import { isOwningRelation, NamingHelper } from '@contember/schema-utils'
6
11
  import { updateRelations } from '../utils/diffUtils'
7
- import { UpdateFieldNameModification } from '../fields'
8
12
  import { NoopModification } from '../NoopModification'
13
+ import { updateFieldNameModification } from '../fields'
9
14
 
10
- export const ConvertOneToManyRelationModification: ModificationHandlerStatic<ConvertOneToManyRelationModificationData> = class {
11
- static id = 'convertOneToManyRelation'
15
+ export class ConvertOneToManyRelationModificationHandler implements ModificationHandler<ConvertOneToManyRelationModificationData> {
12
16
  private subModification: ModificationHandler<any>
13
17
 
14
18
  constructor(
@@ -18,7 +22,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
18
22
  ) {
19
23
  const { relation } = this.getRelation()
20
24
  this.subModification = data.newInverseSideFieldName && relation.inversedBy ?
21
- new UpdateFieldNameModification(
25
+ updateFieldNameModification.createHandler(
22
26
  {
23
27
  entityName: relation.target,
24
28
  fieldName: relation.inversedBy,
@@ -77,11 +81,29 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
77
81
  }
78
82
  }
79
83
 
80
- static createModification(data: ConvertOneToManyRelationModificationData) {
81
- return { modification: this.id, ...data }
84
+ private getRelation() {
85
+ const entity = this.schema.model.entities[this.data.entityName]
86
+ const relation = entity.fields[this.data.fieldName]
87
+ if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
88
+ throw new Error()
89
+ }
90
+ return { entity, relation }
82
91
  }
92
+ }
93
+
94
+ export interface ConvertOneToManyRelationModificationData {
95
+ entityName: string
96
+ fieldName: string
97
+ newInverseSideFieldName?: string
98
+ }
99
+
100
+ export const convertOneToManyRelationModification = createModificationType({
101
+ id: 'convertOneToManyRelation',
102
+ handler: ConvertOneToManyRelationModificationHandler,
103
+ })
83
104
 
84
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
105
+ export class ConvertOneToManyRelationDiffer implements Differ {
106
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
85
107
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
86
108
  if (
87
109
  isOwningRelation(originalRelation) &&
@@ -90,7 +112,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
90
112
  updatedRelation.type === Model.RelationType.ManyHasOne
91
113
  ) {
92
114
  const isInverseSideRenamed = originalRelation.inversedBy && updatedRelation.inversedBy && originalRelation.inversedBy !== updatedRelation.inversedBy
93
- return ConvertOneToManyRelationModification.createModification({
115
+ return convertOneToManyRelationModification.createModification({
94
116
  entityName: updatedEntity.name,
95
117
  fieldName: updatedRelation.name,
96
118
  ...(isInverseSideRenamed ? {
@@ -101,19 +123,4 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
101
123
  return undefined
102
124
  })
103
125
  }
104
-
105
- private getRelation() {
106
- const entity = this.schema.model.entities[this.data.entityName]
107
- const relation = entity.fields[this.data.fieldName]
108
- if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
109
- throw new Error()
110
- }
111
- return { entity, relation }
112
- }
113
- }
114
-
115
- export interface ConvertOneToManyRelationModificationData {
116
- entityName: string
117
- fieldName: string
118
- newInverseSideFieldName?: string
119
126
  }
@@ -1,12 +1,11 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { addField, SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { createFields } from '../utils/diffUtils'
6
6
  import { isInverseRelation, isRelation } from '@contember/schema-utils'
7
7
 
8
- export const CreateRelationInverseSideModification: ModificationHandlerStatic<CreateRelationInverseSideModificationData> = class {
9
- static id = 'createRelationInverseSide'
8
+ export class CreateRelationInverseSideModificationHandler implements ModificationHandler<CreateRelationInverseSideModificationData> {
10
9
  constructor(private readonly data: CreateRelationInverseSideModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {}
@@ -27,25 +26,28 @@ export const CreateRelationInverseSideModification: ModificationHandlerStatic<Cr
27
26
  describe() {
28
27
  return { message: `Add relation ${this.data.entityName}.${this.data.relation.name}` }
29
28
  }
29
+ }
30
30
 
31
- static createModification(data: CreateRelationInverseSideModificationData) {
32
- return { modification: this.id, ...data }
33
- }
31
+ export interface CreateRelationInverseSideModificationData {
32
+ entityName: string
33
+ relation: Model.AnyRelation & Model.InverseRelation
34
+ }
34
35
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
+ export const createRelationInverseSideModification = createModificationType({
37
+ id: 'createRelationInverseSide',
38
+ handler: CreateRelationInverseSideModificationHandler,
39
+ })
40
+
41
+ export class CreateRelationInverseSideDiffer implements Differ {
42
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
43
  return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
37
44
  if (!isRelation(newField) || !isInverseRelation(newField)) {
38
45
  return undefined
39
46
  }
40
- return CreateRelationInverseSideModification.createModification({
47
+ return createRelationInverseSideModification.createModification({
41
48
  entityName: updatedEntity.name,
42
49
  relation: newField,
43
50
  })
44
51
  })
45
52
  }
46
53
  }
47
-
48
- export interface CreateRelationInverseSideModificationData {
49
- entityName: string
50
- relation: Model.AnyRelation & Model.InverseRelation
51
- }
@@ -8,7 +8,12 @@ import {
8
8
  } from '@contember/schema-utils'
9
9
  import { MigrationBuilder } from '@contember/database-migrations'
10
10
  import { addField, SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
11
- import { ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
11
+ import {
12
+ createModificationType,
13
+ Differ,
14
+ ModificationHandler,
15
+ ModificationHandlerOptions,
16
+ } from '../ModificationHandler'
12
17
  import { isIt } from '../../utils/isIt'
13
18
  import { createFields } from '../utils/diffUtils'
14
19
  import { getPrimaryColumnType } from '../utils/getPrimaryColumnType'
@@ -16,8 +21,7 @@ import { createJunctionTableSql } from '../utils/createJunctionTable'
16
21
  import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
17
22
 
18
23
 
19
- export const CreateRelationModification: ModificationHandlerStatic<CreateRelationModificationData> = class {
20
- static id = 'createRelation'
24
+ export class CreateRelationModificationHandler implements ModificationHandler<CreateRelationModificationData> {
21
25
 
22
26
  constructor(
23
27
  private readonly data: CreateRelationModificationData,
@@ -55,18 +59,18 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
55
59
  })
56
60
  }
57
61
  acceptRelationTypeVisitor(this.schema.model, entity, this.getNormalizedOwningSide(), {
58
- visitManyHasOne: ({}, relation, {}, _) => {
62
+ visitManyHasOne: ({ relation }) => {
59
63
  createOwningSide(relation)
60
64
  builder.addIndex(entity.tableName, relation.joiningColumn.columnName)
61
65
  },
62
66
  visitOneHasMany: () => {},
63
- visitOneHasOneOwning: ({}, relation, {}, _) => {
67
+ visitOneHasOneOwning: ({ relation }) => {
64
68
  createOwningSide(relation)
65
69
  const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
66
70
  builder.addConstraint(entity.tableName, uniqueConstraintName, { unique: [relation.joiningColumn.columnName] })
67
71
  },
68
72
  visitOneHasOneInverse: () => {},
69
- visitManyHasManyOwning: ({}, relation, {}, _) => {
73
+ visitManyHasManyOwning: ({ relation }) => {
70
74
  createJunctionTableSql(builder, this.options.systemSchema, entity, targetEntity, relation)
71
75
  },
72
76
  visitManyHasManyInverse: () => {},
@@ -91,11 +95,32 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
91
95
  return { message: `Add relation ${this.data.entityName}.${this.data.owningSide.name}`, failureWarning }
92
96
  }
93
97
 
94
- static createModification(data: CreateRelationModificationData) {
95
- return { modification: this.id, ...data }
98
+
99
+ private getNormalizedOwningSide(): Model.AnyOwningRelation {
100
+ if (this.data.owningSide.type === Model.RelationType.ManyHasMany) {
101
+ return normalizeManyHasManyRelation(this.data.owningSide)
102
+ }
103
+ return this.data.owningSide
96
104
  }
105
+ }
106
+
107
+
108
+ export type CreateRelationModificationData = {
109
+ entityName: string
110
+ owningSide:
111
+ | Model.ManyHasOneRelation
112
+ | Model.OneHasOneOwningRelation
113
+ | PartialManyHasManyRelation
114
+ inverseSide?: Model.AnyInverseRelation
115
+ }
97
116
 
98
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
117
+ export const createRelationModification = createModificationType({
118
+ id: 'createRelation',
119
+ handler: CreateRelationModificationHandler,
120
+ })
121
+
122
+ export class CreateRelationDiffer implements Differ {
123
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
99
124
  return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
100
125
  if (!isRelation(newField) || !isOwningRelation(newField)) {
101
126
  return undefined
@@ -106,28 +131,11 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
106
131
  if (inverseSide && !(isRelation(inverseSide) && isInverseRelation(inverseSide))) {
107
132
  throw new Error()
108
133
  }
109
- return CreateRelationModification.createModification({
134
+ return createRelationModification.createModification({
110
135
  entityName: updatedEntity.name,
111
136
  owningSide: newField,
112
137
  ...(inverseSide ? { inverseSide } : {}),
113
138
  })
114
139
  })
115
140
  }
116
-
117
- private getNormalizedOwningSide(): Model.AnyOwningRelation {
118
- if (this.data.owningSide.type === Model.RelationType.ManyHasMany) {
119
- return normalizeManyHasManyRelation(this.data.owningSide)
120
- }
121
- return this.data.owningSide
122
- }
123
- }
124
-
125
-
126
- export type CreateRelationModificationData = {
127
- entityName: string
128
- owningSide:
129
- | Model.ManyHasOneRelation
130
- | Model.OneHasOneOwningRelation
131
- | PartialManyHasManyRelation
132
- inverseSide?: Model.AnyInverseRelation
133
141
  }
@@ -1,12 +1,11 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { isOwningRelation } from '@contember/schema-utils'
6
6
  import { updateRelations } from '../utils/diffUtils'
7
7
 
8
- export const DisableOrphanRemovalModification: ModificationHandlerStatic<DisableOrphanRemovalModificationData> = class {
9
- static id = 'disableOrphanRemoval'
8
+ export class DisableOrphanRemovalModificationHandler implements ModificationHandler<DisableOrphanRemovalModificationData> {
10
9
 
11
10
  constructor(private readonly data: DisableOrphanRemovalModificationData, private readonly schema: Schema) {}
12
11
 
@@ -27,12 +26,20 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
27
26
  message: `Disable orphan removal on ${this.data.entityName}.${this.data.fieldName}`,
28
27
  }
29
28
  }
29
+ }
30
30
 
31
- static createModification(data: DisableOrphanRemovalModificationData) {
32
- return { modification: this.id, ...data }
33
- }
31
+ export interface DisableOrphanRemovalModificationData {
32
+ entityName: string
33
+ fieldName: string
34
+ }
34
35
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
+ export const disableOrphanRemovalModification = createModificationType({
37
+ id: 'disableOrphanRemoval',
38
+ handler: DisableOrphanRemovalModificationHandler,
39
+ })
40
+
41
+ export class DisableOrphanRemovalDiffer implements Differ {
42
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
43
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
37
44
  if (
38
45
  isOwningRelation(originalRelation) &&
@@ -42,7 +49,7 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
42
49
  originalRelation.orphanRemoval &&
43
50
  !updatedRelation.orphanRemoval
44
51
  ) {
45
- return DisableOrphanRemovalModification.createModification({
52
+ return disableOrphanRemovalModification.createModification({
46
53
  entityName: updatedEntity.name,
47
54
  fieldName: updatedRelation.name,
48
55
  })
@@ -51,7 +58,3 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
51
58
  })
52
59
  }
53
60
  }
54
- export interface DisableOrphanRemovalModificationData {
55
- entityName: string
56
- fieldName: string
57
- }
@@ -1,12 +1,11 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { isOwningRelation } from '@contember/schema-utils'
6
6
  import { updateRelations } from '../utils/diffUtils'
7
7
 
8
- export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOrphanRemovalModificationData> = class {
9
- static id = 'enableOrphanRemoval'
8
+ export class EnableOrphanRemovalModificationHandler implements ModificationHandler<EnableOrphanRemovalModificationData> {
10
9
  constructor(private readonly data: EnableOrphanRemovalModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {}
@@ -30,11 +29,20 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
30
29
  }
31
30
  }
32
31
 
33
- static createModification(data: EnableOrphanRemovalModificationData) {
34
- return { modification: this.id, ...data }
35
- }
32
+ }
33
+
34
+ export interface EnableOrphanRemovalModificationData {
35
+ entityName: string
36
+ fieldName: string
37
+ }
36
38
 
37
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
39
+ export const enableOrphanRemovalModification = createModificationType({
40
+ id: 'enableOrphanRemoval',
41
+ handler: EnableOrphanRemovalModificationHandler,
42
+ })
43
+
44
+ export class EnableOrphanRemovalDiffer implements Differ {
45
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
38
46
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
39
47
  if (
40
48
  isOwningRelation(originalRelation) &&
@@ -44,7 +52,7 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
44
52
  !originalRelation.orphanRemoval &&
45
53
  updatedRelation.orphanRemoval
46
54
  ) {
47
- return EnableOrphanRemovalModification.createModification({
55
+ return enableOrphanRemovalModification.createModification({
48
56
  entityName: updatedEntity.name,
49
57
  fieldName: updatedRelation.name,
50
58
  })
@@ -53,8 +61,3 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
53
61
  })
54
62
  }
55
63
  }
56
-
57
- export interface EnableOrphanRemovalModificationData {
58
- entityName: string
59
- fieldName: string
60
- }