@contember/schema-migrations 1.1.2 → 1.2.0-alpha.11

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 (256) 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 +70 -67
  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 +73 -70
  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 +65 -61
  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/validation/PatchValidationSchemaModification.d.ts +13 -2
  166. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
  167. package/dist/src/modifications/validation/PatchValidationSchemaModification.js +28 -28
  168. package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
  169. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +17 -3
  170. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
  171. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +33 -30
  172. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
  173. package/dist/src/tsconfig.tsbuildinfo +1 -1
  174. package/dist/src/utils/PartialEntity.d.ts +5 -0
  175. package/dist/src/utils/PartialEntity.d.ts.map +1 -0
  176. package/dist/src/utils/PartialEntity.js +3 -0
  177. package/dist/src/utils/PartialEntity.js.map +1 -0
  178. package/dist/tests/cases/integration/createAndDropIndex.test.d.ts +2 -0
  179. package/dist/tests/cases/integration/createAndDropIndex.test.d.ts.map +1 -0
  180. package/dist/tests/cases/integration/createAndDropIndex.test.js +57 -0
  181. package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -0
  182. package/dist/tests/cases/integration/createEntity.test.js +2 -0
  183. package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
  184. package/dist/tests/cases/integration/createManyHasMany.test.js +1 -0
  185. package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
  186. package/dist/tests/cases/integration/createManyHasOne.test.js +1 -0
  187. package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
  188. package/dist/tests/cases/integration/createOneHasMany.test.js +1 -0
  189. package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
  190. package/dist/tests/cases/integration/createOneHasOne.test.js +2 -0
  191. package/dist/tests/cases/integration/createOneHasOne.test.js.map +1 -1
  192. package/dist/tests/cases/integration/createView.test.js +1 -0
  193. package/dist/tests/cases/integration/createView.test.js.map +1 -1
  194. package/dist/tests/cases/integration/updateView.test.js +9 -0
  195. package/dist/tests/cases/integration/updateView.test.js.map +1 -1
  196. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +7 -7
  198. package/src/MigrationDescriber.ts +8 -8
  199. package/src/SchemaDiffer.ts +65 -76
  200. package/src/SchemaMigrator.ts +1 -1
  201. package/src/index.ts +1 -5
  202. package/src/modifications/ModificationHandler.ts +20 -8
  203. package/src/modifications/ModificationHandlerFactory.ts +65 -61
  204. package/src/modifications/acl/PatchAclSchemaModification.ts +7 -8
  205. package/src/modifications/acl/UpdateAclSchemaModification.ts +16 -15
  206. package/src/modifications/columns/CreateColumnModification.ts +18 -16
  207. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +27 -25
  208. package/src/modifications/columns/UpdateColumnNameModification.ts +60 -53
  209. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +23 -17
  210. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +18 -14
  211. package/src/modifications/differs/ChangeViewNonViewDiffer.ts +2 -2
  212. package/src/modifications/differs/RemoveChangedFieldDiffer.ts +2 -2
  213. package/src/modifications/differs/RemoveChangedViewDiffer.ts +2 -2
  214. package/src/modifications/entities/CreateEntityModification.ts +19 -11
  215. package/src/modifications/entities/CreateViewModification.ts +13 -11
  216. package/src/modifications/entities/RemoveEntityModification.ts +22 -15
  217. package/src/modifications/entities/ToggleEventLogModification.ts +20 -13
  218. package/src/modifications/entities/UpdateEntityNameModification.ts +9 -9
  219. package/src/modifications/entities/UpdateEntityTableNameModification.ts +18 -13
  220. package/src/modifications/entities/UpdateViewModification.ts +7 -7
  221. package/src/modifications/enums/CreateEnumModification.ts +18 -13
  222. package/src/modifications/enums/RemoveEnumModification.ts +14 -12
  223. package/src/modifications/enums/UpdateEnumModification.ts +15 -13
  224. package/src/modifications/fields/RemoveFieldModification.ts +20 -17
  225. package/src/modifications/fields/UpdateFieldNameModification.ts +16 -17
  226. package/src/modifications/index.ts +13 -0
  227. package/src/modifications/indexes/CreateIndexModification.ts +83 -0
  228. package/src/modifications/indexes/RemoveIndexModification.ts +68 -0
  229. package/src/modifications/indexes/index.ts +2 -0
  230. package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +35 -25
  231. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +31 -24
  232. package/src/modifications/relations/CreateRelationInverseSideModification.ts +15 -13
  233. package/src/modifications/relations/CreateRelationModification.ts +35 -27
  234. package/src/modifications/relations/DisableOrphanRemovalModification.ts +15 -12
  235. package/src/modifications/relations/EnableOrphanRemovalModification.ts +16 -13
  236. package/src/modifications/relations/MakeRelationNotNullModification.ts +16 -14
  237. package/src/modifications/relations/MakeRelationNullableModification.ts +17 -13
  238. package/src/modifications/relations/{ToggleManyHasManyEventLogModification.ts → ToggleJunctionEventLogModification.ts} +21 -14
  239. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +16 -14
  240. package/src/modifications/relations/UpdateRelationOrderByModification.ts +17 -14
  241. package/src/modifications/relations/index.ts +1 -1
  242. package/src/modifications/validation/PatchValidationSchemaModification.ts +7 -7
  243. package/src/modifications/validation/UpdateValidationSchemaModification.ts +17 -14
  244. package/src/utils/PartialEntity.ts +5 -0
  245. package/tests/cases/integration/createAndDropIndex.test.ts +44 -0
  246. package/tests/cases/integration/createEntity.test.ts +2 -0
  247. package/tests/cases/integration/createManyHasMany.test.ts +1 -0
  248. package/tests/cases/integration/createManyHasOne.test.ts +1 -0
  249. package/tests/cases/integration/createOneHasMany.test.ts +1 -0
  250. package/tests/cases/integration/createOneHasOne.test.ts +2 -0
  251. package/tests/cases/integration/createView.test.ts +1 -0
  252. package/tests/cases/integration/updateView.test.ts +9 -0
  253. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts +0 -8
  254. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts.map +0 -1
  255. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js +0 -81
  256. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js.map +0 -1
@@ -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
- }
@@ -1,13 +1,12 @@
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 { getEntity, tryGetColumnName } from '@contember/schema-utils'
6
6
  import { isIt } from '../../utils/isIt'
7
7
  import { updateRelations } from '../utils/diffUtils'
8
8
 
9
- export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRelationNotNullModificationData> = class {
10
- static id = 'makeRelationNotNull'
9
+ export class MakeRelationNotNullModificationHandler implements ModificationHandler<MakeRelationNotNullModificationData> {
11
10
  constructor(private readonly data: MakeRelationNotNullModificationData, private readonly schema: Schema) {}
12
11
 
13
12
  public createSql(builder: MigrationBuilder): void {
@@ -43,12 +42,21 @@ export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRela
43
42
  failureWarning: 'Changing to not-null may fail in runtime',
44
43
  }
45
44
  }
45
+ }
46
46
 
47
- static createModification(data: MakeRelationNotNullModificationData) {
48
- return { modification: this.id, ...data }
49
- }
47
+ export interface MakeRelationNotNullModificationData {
48
+ entityName: string
49
+ fieldName: string
50
+ // todo fillValue
51
+ }
50
52
 
51
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
53
+ export const makeRelationNotNullModification = createModificationType({
54
+ id: 'makeRelationNotNull',
55
+ handler: MakeRelationNotNullModificationHandler,
56
+ })
57
+
58
+ export class MakeRelationNotNullDiffer implements Differ {
59
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
52
60
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
53
61
  if (
54
62
  originalRelation.type === updatedRelation.type &&
@@ -57,7 +65,7 @@ export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRela
57
65
  !updatedRelation.nullable &&
58
66
  originalRelation.nullable
59
67
  ) {
60
- return MakeRelationNotNullModification.createModification({
68
+ return makeRelationNotNullModification.createModification({
61
69
  entityName: updatedEntity.name,
62
70
  fieldName: updatedRelation.name,
63
71
  })
@@ -66,9 +74,3 @@ export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRela
66
74
  })
67
75
  }
68
76
  }
69
-
70
- export interface MakeRelationNotNullModificationData {
71
- entityName: string
72
- fieldName: string
73
- // todo fillValue
74
- }
@@ -1,13 +1,12 @@
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 { getEntity, tryGetColumnName } from '@contember/schema-utils'
6
6
  import { isIt } from '../../utils/isIt'
7
7
  import { updateRelations } from '../utils/diffUtils'
8
8
 
9
- export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRelationNullableModificationData> = class {
10
- static id = 'makeRelationNullable'
9
+ export class MakeRelationNullableModificationHandler implements ModificationHandler<MakeRelationNullableModificationData> {
11
10
  constructor(private readonly data: MakeRelationNullableModificationData, private readonly schema: Schema) {}
12
11
 
13
12
  public createSql(builder: MigrationBuilder): void {
@@ -43,11 +42,21 @@ export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRel
43
42
  }
44
43
  }
45
44
 
46
- static createModification(data: MakeRelationNullableModificationData) {
47
- return { modification: this.id, ...data }
48
- }
45
+ }
46
+
47
+ export interface MakeRelationNullableModificationData {
48
+ entityName: string
49
+ fieldName: string
50
+ }
49
51
 
50
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
52
+
53
+ export const makeRelationNullableModification = createModificationType({
54
+ id: 'makeRelationNullable',
55
+ handler: MakeRelationNullableModificationHandler,
56
+ })
57
+
58
+ export class MakeRelationNullableDiffer implements Differ {
59
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
51
60
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
52
61
  if (
53
62
  originalRelation.type === updatedRelation.type &&
@@ -56,7 +65,7 @@ export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRel
56
65
  updatedRelation.nullable &&
57
66
  !originalRelation.nullable
58
67
  ) {
59
- return MakeRelationNullableModification.createModification({
68
+ return makeRelationNullableModification.createModification({
60
69
  entityName: updatedEntity.name,
61
70
  fieldName: updatedRelation.name,
62
71
  })
@@ -65,8 +74,3 @@ export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRel
65
74
  })
66
75
  }
67
76
  }
68
-
69
- export interface MakeRelationNullableModificationData {
70
- entityName: string
71
- fieldName: string
72
- }
@@ -1,7 +1,12 @@
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 { ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
4
+ import {
5
+ createModificationType,
6
+ Differ,
7
+ ModificationHandler,
8
+ ModificationHandlerOptions,
9
+ } from '../ModificationHandler'
5
10
  import {
6
11
  createEventTrigger,
7
12
  createEventTrxTrigger,
@@ -12,8 +17,7 @@ import { isOwningRelation, isRelation } from '@contember/schema-utils'
12
17
  import { updateRelations } from '../utils/diffUtils'
13
18
  import { isIt } from '../../utils/isIt'
14
19
 
15
- export const ToggleJunctionEventLogModification: ModificationHandlerStatic<ToggleJunctionEventLogModificationData> = class {
16
- static id = 'toggleJunctionEventLog'
20
+ export class ToggleJunctionEventLogModificationHandler implements ModificationHandler<ToggleJunctionEventLogModificationData> {
17
21
 
18
22
  constructor(
19
23
  private readonly data: ToggleJunctionEventLogModificationData,
@@ -67,12 +71,21 @@ export const ToggleJunctionEventLogModification: ModificationHandlerStatic<Toggl
67
71
  message: `${this.data.enabled ? 'Enable' : 'Disable'} event log for ${this.data.entityName}.${this.data.fieldName}`,
68
72
  }
69
73
  }
74
+ }
70
75
 
71
- static createModification(data: ToggleJunctionEventLogModificationData) {
72
- return { modification: this.id, ...data }
73
- }
76
+ export interface ToggleJunctionEventLogModificationData {
77
+ entityName: string
78
+ fieldName: string
79
+ enabled: boolean
80
+ }
74
81
 
75
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
82
+ export const toggleJunctionEventLogModification = createModificationType({
83
+ id: 'toggleJunctionEventLog',
84
+ handler: ToggleJunctionEventLogModificationHandler,
85
+ })
86
+
87
+ export class ToggleJunctionEventLogDiffer implements Differ {
88
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
76
89
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
77
90
  if (
78
91
  originalRelation.type === updatedRelation.type &&
@@ -82,7 +95,7 @@ export const ToggleJunctionEventLogModification: ModificationHandlerStatic<Toggl
82
95
  const newValue = updatedRelation.joiningTable.eventLog?.enabled ?? false
83
96
  const oldValue = originalRelation.joiningTable.eventLog?.enabled ?? false
84
97
  if (newValue !== oldValue) {
85
- return ToggleJunctionEventLogModification.createModification({
98
+ return toggleJunctionEventLogModification.createModification({
86
99
  entityName: updatedEntity.name,
87
100
  fieldName: updatedRelation.name,
88
101
  enabled: newValue,
@@ -94,9 +107,3 @@ export const ToggleJunctionEventLogModification: ModificationHandlerStatic<Toggl
94
107
 
95
108
  }
96
109
  }
97
-
98
- export interface ToggleJunctionEventLogModificationData {
99
- entityName: string
100
- fieldName: string
101
- enabled: boolean
102
- }
@@ -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 { isIt } from '../../utils/isIt'
6
6
  import { updateRelations } from '../utils/diffUtils'
7
7
 
8
- export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<UpdateRelationOnDeleteModificationData> = class {
9
- static id = 'updateRelationOnDelete'
8
+ export class UpdateRelationOnDeleteModificationHandler implements ModificationHandler<UpdateRelationOnDeleteModificationData> {
10
9
  constructor(private readonly data: UpdateRelationOnDeleteModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {}
@@ -27,12 +26,21 @@ export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<Updat
27
26
  describe() {
28
27
  return { message: `Change on-delete policy of relation ${this.data.entityName}.${this.data.fieldName}` }
29
28
  }
29
+ }
30
30
 
31
- static createModification(data: UpdateRelationOnDeleteModificationData) {
32
- return { modification: this.id, ...data }
33
- }
31
+ export interface UpdateRelationOnDeleteModificationData {
32
+ entityName: string
33
+ fieldName: string
34
+ onDelete: Model.OnDelete
35
+ }
34
36
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
37
+ export const updateRelationOnDeleteModification = createModificationType({
38
+ id: 'updateRelationOnDelete',
39
+ handler: UpdateRelationOnDeleteModificationHandler,
40
+ })
41
+
42
+ export class UpdateRelationOnDeleteDiffer implements Differ {
43
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
44
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
37
45
  if (
38
46
  originalRelation.type === updatedRelation.type &&
@@ -40,7 +48,7 @@ export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<Updat
40
48
  isIt<Model.JoiningColumnRelation>(originalRelation, 'joiningColumn') &&
41
49
  updatedRelation.joiningColumn.onDelete !== originalRelation.joiningColumn.onDelete
42
50
  ) {
43
- return UpdateRelationOnDeleteModification.createModification({
51
+ return updateRelationOnDeleteModification.createModification({
44
52
  entityName: updatedEntity.name,
45
53
  fieldName: updatedRelation.name,
46
54
  onDelete: updatedRelation.joiningColumn.onDelete,
@@ -50,9 +58,3 @@ export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<Updat
50
58
  })
51
59
  }
52
60
  }
53
-
54
- export interface UpdateRelationOnDeleteModificationData {
55
- entityName: string
56
- fieldName: string
57
- onDelete: Model.OnDelete
58
- }