@contember/schema-migrations 1.1.1 → 1.2.0-alpha.10

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 +23 -16
  209. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +21 -15
  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 +16 -13
  225. package/src/modifications/fields/UpdateFieldNameModification.ts +9 -10
  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 +32 -24
  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
@@ -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,
@@ -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
- }
@@ -1,12 +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 deepEqual from 'fast-deep-equal'
6
6
  import { updateRelations } from '../utils/diffUtils'
7
7
 
8
- export const UpdateRelationOrderByModification: ModificationHandlerStatic<UpdateRelationOrderByModificationData> = class {
9
- static id = 'updateRelationOrderBy'
8
+ export class UpdateRelationOrderByModificationHandler implements ModificationHandler<UpdateRelationOrderByModificationData> {
9
+
10
10
  constructor(private readonly data: UpdateRelationOrderByModificationData, private readonly schema: Schema) {}
11
11
 
12
12
  public createSql(builder: MigrationBuilder): void {}
@@ -27,12 +27,21 @@ export const UpdateRelationOrderByModification: ModificationHandlerStatic<Update
27
27
  describe() {
28
28
  return { message: `Update order-by of relation ${this.data.entityName}.${this.data.fieldName}` }
29
29
  }
30
+ }
30
31
 
31
- static createModification(data: UpdateRelationOrderByModificationData) {
32
- return { modification: this.id, ...data }
33
- }
32
+ export interface UpdateRelationOrderByModificationData {
33
+ entityName: string
34
+ fieldName: string
35
+ orderBy: readonly Model.OrderBy[]
36
+ }
34
37
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
38
+ export const updateRelationOrderByModification = createModificationType({
39
+ id: 'updateRelationOrderBy',
40
+ handler: UpdateRelationOrderByModificationHandler,
41
+ })
42
+
43
+ export class UpdateRelationOrderByDiffer implements Differ {
44
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
45
  return updateRelations(originalSchema, updatedSchema, ({ updatedRelation, originalRelation, updatedEntity }) => {
37
46
  const isItOrderable = (relation: Model.AnyRelation): relation is Model.OrderableRelation & Model.AnyRelation =>
38
47
  relation.type === Model.RelationType.ManyHasMany || relation.type === Model.RelationType.OneHasMany
@@ -42,7 +51,7 @@ export const UpdateRelationOrderByModification: ModificationHandlerStatic<Update
42
51
  isItOrderable(originalRelation) &&
43
52
  !deepEqual(updatedRelation.orderBy || [], originalRelation.orderBy || [])
44
53
  ) {
45
- return UpdateRelationOrderByModification.createModification({
54
+ return updateRelationOrderByModification.createModification({
46
55
  entityName: updatedEntity.name,
47
56
  fieldName: updatedRelation.name,
48
57
  orderBy: updatedRelation.orderBy || [],
@@ -52,9 +61,3 @@ export const UpdateRelationOrderByModification: ModificationHandlerStatic<Update
52
61
  })
53
62
  }
54
63
  }
55
-
56
- export interface UpdateRelationOrderByModificationData {
57
- entityName: string
58
- fieldName: string
59
- orderBy: readonly Model.OrderBy[]
60
- }
@@ -6,6 +6,6 @@ export * from './DisableOrphanRemovalModification'
6
6
  export * from './EnableOrphanRemovalModification'
7
7
  export * from './MakeRelationNotNullModification'
8
8
  export * from './MakeRelationNullableModification'
9
- export * from './ToggleManyHasManyEventLogModification'
9
+ export * from './ToggleJunctionEventLogModification'
10
10
  export * from './UpdateRelationOnDeleteModification'
11
11
  export * from './UpdateRelationOrderByModification'
@@ -1,11 +1,10 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { SchemaUpdater } from '../utils/schemaUpdateUtils'
3
- import { ModificationHandlerStatic } from '../ModificationHandler'
3
+ import { createModificationType, ModificationHandler } from '../ModificationHandler'
4
4
  import { applyPatch, Operation } from 'rfc6902'
5
5
  import deepCopy from '../../utils/deepCopy'
6
6
 
7
- export const PatchValidationSchemaModification: ModificationHandlerStatic<PatchValidationSchemaModificationData> = class {
8
- static id = 'patchValidationSchema'
7
+ export class PatchValidationSchemaModificationHandler implements ModificationHandler<PatchValidationSchemaModificationData> {
9
8
  constructor(private readonly data: PatchValidationSchemaModificationData) {}
10
9
 
11
10
  public createSql(builder: MigrationBuilder): void {}
@@ -28,12 +27,13 @@ export const PatchValidationSchemaModification: ModificationHandlerStatic<PatchV
28
27
  describe() {
29
28
  return { message: 'Update validation schema' }
30
29
  }
31
-
32
- static createModification(data: PatchValidationSchemaModificationData) {
33
- return { modification: this.id, ...data }
34
- }
35
30
  }
36
31
 
37
32
  export interface PatchValidationSchemaModificationData {
38
33
  patch: Operation[]
39
34
  }
35
+
36
+ export const patchValidationSchemaModification = createModificationType({
37
+ id: 'patchValidationSchema',
38
+ handler: PatchValidationSchemaModificationHandler,
39
+ })
@@ -1,13 +1,12 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Schema, Validation } from '@contember/schema'
3
3
  import { SchemaUpdater } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import deepEqual from 'fast-deep-equal'
6
6
  import { createPatch } from 'rfc6902'
7
- import { PatchValidationSchemaModification } from './PatchValidationSchemaModification'
7
+ import { patchValidationSchemaModification } from './PatchValidationSchemaModification'
8
8
 
9
- export const UpdateValidationSchemaModification: ModificationHandlerStatic<UpdateValidationSchemaModificationData> = class {
10
- static id = 'updateValidationSchema'
9
+ export class UpdateValidationSchemaModificationHandler implements ModificationHandler<UpdateValidationSchemaModificationData> {
11
10
  constructor(private readonly data: UpdateValidationSchemaModificationData) {}
12
11
 
13
12
  public createSql(builder: MigrationBuilder): void {}
@@ -23,22 +22,26 @@ export const UpdateValidationSchemaModification: ModificationHandlerStatic<Updat
23
22
  return { message: 'Update validation schema' }
24
23
  }
25
24
 
26
- static createModification(data: UpdateValidationSchemaModificationData) {
27
- return { modification: this.id, ...data }
28
- }
25
+ }
26
+
27
+ export interface UpdateValidationSchemaModificationData {
28
+ schema: Validation.Schema
29
+ }
29
30
 
30
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
31
+ export const updateValidationSchemaModification = createModificationType({
32
+ id: 'updateValidationSchema',
33
+ handler: UpdateValidationSchemaModificationHandler,
34
+ })
35
+
36
+ export class UpdateValidationSchemaDiffer implements Differ {
37
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
31
38
  if (deepEqual(originalSchema.validation, updatedSchema.validation)) {
32
39
  return []
33
40
  }
34
41
  const patch = createPatch(originalSchema.validation, updatedSchema.validation)
35
42
  if (patch.length <= 20) {
36
- return [PatchValidationSchemaModification.createModification({ patch })]
43
+ return [patchValidationSchemaModification.createModification({ patch })]
37
44
  }
38
- return [UpdateValidationSchemaModification.createModification({ schema: updatedSchema.validation })]
45
+ return [updateValidationSchemaModification.createModification({ schema: updatedSchema.validation })]
39
46
  }
40
47
  }
41
-
42
- export interface UpdateValidationSchemaModificationData {
43
- schema: Validation.Schema
44
- }
@@ -0,0 +1,5 @@
1
+ import { Model } from '@contember/schema'
2
+
3
+ type SomePartial<E, K extends keyof E> = Omit<E, K> & Partial<Pick<E, K>>
4
+
5
+ export type PartialEntity = SomePartial<Model.Entity, 'eventLog' | 'indexes'>
@@ -0,0 +1,44 @@
1
+ import { testMigrations } from '../../src/tests'
2
+ import { SQL } from '../../src/tags'
3
+ import { SchemaDefinition as def } from '@contember/schema-definition'
4
+
5
+ namespace SchemaWithoutIndex {
6
+ export class Article {
7
+ title = def.stringColumn()
8
+ }
9
+ }
10
+
11
+ namespace SchemaWithIndex {
12
+ @def.Index('title')
13
+ export class Article {
14
+ title = def.stringColumn()
15
+ }
16
+ }
17
+
18
+
19
+ testMigrations('create index', {
20
+ originalSchema: def.createModel(SchemaWithoutIndex),
21
+ updatedSchema: def.createModel(SchemaWithIndex),
22
+ diff: [
23
+ {
24
+ modification: 'createIndex',
25
+ entityName: 'Article',
26
+ index: { name: 'idx_Article_title_2dc66a', fields: ['title'] },
27
+ },
28
+ ],
29
+ sql: SQL`CREATE INDEX "idx_Article_title_2dc66a" ON "article" ("title");`,
30
+ })
31
+
32
+
33
+ testMigrations('drop index', {
34
+ originalSchema: def.createModel(SchemaWithIndex),
35
+ updatedSchema: def.createModel(SchemaWithoutIndex),
36
+ diff: [
37
+ {
38
+ modification: 'removeIndex',
39
+ entityName: 'Article',
40
+ indexName: 'idx_Article_title_2dc66a',
41
+ },
42
+ ],
43
+ sql: SQL`DROP INDEX "idx_Article_title_2dc66a";`,
44
+ })