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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/src/MigrationDescriber.d.ts +1 -2
  2. package/dist/src/MigrationDescriber.d.ts.map +1 -1
  3. package/dist/src/MigrationDescriber.js +5 -7
  4. package/dist/src/MigrationDescriber.js.map +1 -1
  5. package/dist/src/SchemaDiffer.d.ts.map +1 -1
  6. package/dist/src/SchemaDiffer.js +36 -46
  7. package/dist/src/SchemaDiffer.js.map +1 -1
  8. package/dist/src/SchemaMigrator.d.ts +1 -1
  9. package/dist/src/SchemaMigrator.d.ts.map +1 -1
  10. package/dist/src/index.d.ts +1 -5
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +1 -11
  13. package/dist/src/index.js.map +1 -1
  14. package/dist/src/modifications/ModificationHandler.d.ts +11 -6
  15. package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
  16. package/dist/src/modifications/ModificationHandler.js +9 -1
  17. package/dist/src/modifications/ModificationHandler.js.map +1 -1
  18. package/dist/src/modifications/ModificationHandlerFactory.d.ts +6 -5
  19. package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
  20. package/dist/src/modifications/ModificationHandlerFactory.js +42 -37
  21. package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
  22. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts +13 -2
  23. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
  24. package/dist/src/modifications/acl/PatchAclSchemaModification.js +28 -28
  25. package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
  26. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts +17 -3
  27. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
  28. package/dist/src/modifications/acl/UpdateAclSchemaModification.js +33 -30
  29. package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
  30. package/dist/src/modifications/columns/CreateColumnModification.d.ts +23 -3
  31. package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
  32. package/dist/src/modifications/columns/CreateColumnModification.js +72 -69
  33. package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
  34. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +21 -3
  35. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
  36. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +72 -71
  37. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
  38. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts +20 -2
  39. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
  40. package/dist/src/modifications/columns/UpdateColumnNameModification.js +97 -94
  41. package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
  42. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +21 -3
  43. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
  44. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +72 -66
  45. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
  46. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +18 -2
  47. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
  48. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +45 -42
  49. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
  50. package/dist/src/modifications/differs/ChangeViewNonViewDiffer.js +1 -1
  51. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js +1 -1
  52. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +1 -1
  53. package/dist/src/modifications/entities/CreateEntityModification.d.ts +21 -6
  54. package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
  55. package/dist/src/modifications/entities/CreateEntityModification.js +66 -62
  56. package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
  57. package/dist/src/modifications/entities/CreateViewModification.d.ts +23 -6
  58. package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
  59. package/dist/src/modifications/entities/CreateViewModification.js +59 -55
  60. package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
  61. package/dist/src/modifications/entities/RemoveEntityModification.d.ts +21 -2
  62. package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
  63. package/dist/src/modifications/entities/RemoveEntityModification.js +73 -70
  64. package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
  65. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +19 -2
  66. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
  67. package/dist/src/modifications/entities/ToggleEventLogModification.js +57 -54
  68. package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
  69. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +18 -2
  70. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
  71. package/dist/src/modifications/entities/UpdateEntityNameModification.js +78 -78
  72. package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
  73. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts +18 -2
  74. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts.map +1 -1
  75. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js +40 -34
  76. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
  77. package/dist/src/modifications/entities/UpdateViewModification.d.ts +15 -3
  78. package/dist/src/modifications/entities/UpdateViewModification.d.ts.map +1 -1
  79. package/dist/src/modifications/entities/UpdateViewModification.js +28 -28
  80. package/dist/src/modifications/entities/UpdateViewModification.js.map +1 -1
  81. package/dist/src/modifications/enums/CreateEnumModification.d.ts +18 -2
  82. package/dist/src/modifications/enums/CreateEnumModification.d.ts.map +1 -1
  83. package/dist/src/modifications/enums/CreateEnumModification.js +42 -36
  84. package/dist/src/modifications/enums/CreateEnumModification.js.map +1 -1
  85. package/dist/src/modifications/enums/RemoveEnumModification.d.ts +18 -2
  86. package/dist/src/modifications/enums/RemoveEnumModification.d.ts.map +1 -1
  87. package/dist/src/modifications/enums/RemoveEnumModification.js +36 -33
  88. package/dist/src/modifications/enums/RemoveEnumModification.js.map +1 -1
  89. package/dist/src/modifications/enums/UpdateEnumModification.d.ts +19 -2
  90. package/dist/src/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
  91. package/dist/src/modifications/enums/UpdateEnumModification.js +43 -40
  92. package/dist/src/modifications/enums/UpdateEnumModification.js.map +1 -1
  93. package/dist/src/modifications/fields/RemoveFieldModification.d.ts +20 -2
  94. package/dist/src/modifications/fields/RemoveFieldModification.d.ts.map +1 -1
  95. package/dist/src/modifications/fields/RemoveFieldModification.js +67 -64
  96. package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
  97. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +18 -2
  98. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
  99. package/dist/src/modifications/fields/UpdateFieldNameModification.js +132 -132
  100. package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
  101. package/dist/src/modifications/index.d.ts +14 -0
  102. package/dist/src/modifications/index.d.ts.map +1 -0
  103. package/dist/src/modifications/index.js +32 -0
  104. package/dist/src/modifications/index.js.map +1 -0
  105. package/dist/src/modifications/indexes/CreateIndexModification.d.ts +23 -0
  106. package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -0
  107. package/dist/src/modifications/indexes/CreateIndexModification.js +75 -0
  108. package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -0
  109. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +23 -0
  110. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -0
  111. package/dist/src/modifications/indexes/RemoveIndexModification.js +56 -0
  112. package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -0
  113. package/dist/src/modifications/indexes/index.d.ts +3 -0
  114. package/dist/src/modifications/indexes/index.d.ts.map +1 -0
  115. package/dist/src/modifications/indexes/index.js +19 -0
  116. package/dist/src/modifications/indexes/index.js.map +1 -0
  117. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +23 -3
  118. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
  119. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +68 -65
  120. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
  121. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +23 -2
  122. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
  123. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +73 -70
  124. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
  125. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +20 -3
  126. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
  127. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +36 -33
  128. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
  129. package/dist/src/modifications/relations/CreateRelationModification.d.ts +25 -3
  130. package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
  131. package/dist/src/modifications/relations/CreateRelationModification.js +88 -85
  132. package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
  133. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +20 -2
  134. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
  135. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +42 -39
  136. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
  137. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +20 -2
  138. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
  139. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +45 -42
  140. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
  141. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts +21 -2
  142. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
  143. package/dist/src/modifications/relations/MakeRelationNotNullModification.js +55 -52
  144. package/dist/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
  145. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts +20 -2
  146. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
  147. package/dist/src/modifications/relations/MakeRelationNullableModification.js +54 -51
  148. package/dist/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
  149. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +27 -0
  150. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -0
  151. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +84 -0
  152. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -0
  153. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +20 -3
  154. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
  155. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +42 -39
  156. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
  157. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +20 -3
  158. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
  159. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +43 -40
  160. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
  161. package/dist/src/modifications/relations/index.d.ts +1 -1
  162. package/dist/src/modifications/relations/index.d.ts.map +1 -1
  163. package/dist/src/modifications/relations/index.js +1 -1
  164. package/dist/src/modifications/relations/index.js.map +1 -1
  165. package/dist/src/modifications/utils/columnUtils.d.ts +3 -0
  166. package/dist/src/modifications/utils/columnUtils.d.ts.map +1 -0
  167. package/dist/src/modifications/utils/columnUtils.js +9 -0
  168. package/dist/src/modifications/utils/columnUtils.js.map +1 -0
  169. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts +13 -2
  170. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
  171. package/dist/src/modifications/validation/PatchValidationSchemaModification.js +28 -28
  172. package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
  173. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +17 -3
  174. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
  175. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +33 -30
  176. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
  177. package/dist/src/tsconfig.tsbuildinfo +1 -1
  178. package/dist/src/utils/PartialEntity.d.ts +5 -0
  179. package/dist/src/utils/PartialEntity.d.ts.map +1 -0
  180. package/dist/src/utils/PartialEntity.js +3 -0
  181. package/dist/src/utils/PartialEntity.js.map +1 -0
  182. package/dist/tests/cases/integration/createAndDropIndex.test.d.ts +2 -0
  183. package/dist/tests/cases/integration/createAndDropIndex.test.d.ts.map +1 -0
  184. package/dist/tests/cases/integration/createAndDropIndex.test.js +57 -0
  185. package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -0
  186. package/dist/tests/cases/integration/createColumn.test.js +36 -0
  187. package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
  188. package/dist/tests/cases/integration/createEntity.test.js +2 -0
  189. package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
  190. package/dist/tests/cases/integration/createManyHasMany.test.js +1 -0
  191. package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
  192. package/dist/tests/cases/integration/createManyHasOne.test.js +1 -0
  193. package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
  194. package/dist/tests/cases/integration/createOneHasMany.test.js +1 -0
  195. package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
  196. package/dist/tests/cases/integration/createOneHasOne.test.js +2 -0
  197. package/dist/tests/cases/integration/createOneHasOne.test.js.map +1 -1
  198. package/dist/tests/cases/integration/createView.test.js +1 -0
  199. package/dist/tests/cases/integration/createView.test.js.map +1 -1
  200. package/dist/tests/cases/integration/updateView.test.js +9 -0
  201. package/dist/tests/cases/integration/updateView.test.js.map +1 -1
  202. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  203. package/package.json +7 -7
  204. package/src/MigrationDescriber.ts +8 -8
  205. package/src/SchemaDiffer.ts +65 -76
  206. package/src/SchemaMigrator.ts +1 -1
  207. package/src/index.ts +1 -5
  208. package/src/modifications/ModificationHandler.ts +20 -8
  209. package/src/modifications/ModificationHandlerFactory.ts +65 -61
  210. package/src/modifications/acl/PatchAclSchemaModification.ts +7 -8
  211. package/src/modifications/acl/UpdateAclSchemaModification.ts +16 -15
  212. package/src/modifications/columns/CreateColumnModification.ts +21 -18
  213. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +44 -42
  214. package/src/modifications/columns/UpdateColumnNameModification.ts +60 -53
  215. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +23 -17
  216. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +18 -14
  217. package/src/modifications/differs/ChangeViewNonViewDiffer.ts +2 -2
  218. package/src/modifications/differs/RemoveChangedFieldDiffer.ts +2 -2
  219. package/src/modifications/differs/RemoveChangedViewDiffer.ts +2 -2
  220. package/src/modifications/entities/CreateEntityModification.ts +21 -12
  221. package/src/modifications/entities/CreateViewModification.ts +13 -11
  222. package/src/modifications/entities/RemoveEntityModification.ts +22 -15
  223. package/src/modifications/entities/ToggleEventLogModification.ts +20 -13
  224. package/src/modifications/entities/UpdateEntityNameModification.ts +9 -9
  225. package/src/modifications/entities/UpdateEntityTableNameModification.ts +18 -13
  226. package/src/modifications/entities/UpdateViewModification.ts +7 -7
  227. package/src/modifications/enums/CreateEnumModification.ts +18 -13
  228. package/src/modifications/enums/RemoveEnumModification.ts +14 -12
  229. package/src/modifications/enums/UpdateEnumModification.ts +15 -13
  230. package/src/modifications/fields/RemoveFieldModification.ts +20 -17
  231. package/src/modifications/fields/UpdateFieldNameModification.ts +16 -17
  232. package/src/modifications/index.ts +13 -0
  233. package/src/modifications/indexes/CreateIndexModification.ts +83 -0
  234. package/src/modifications/indexes/RemoveIndexModification.ts +68 -0
  235. package/src/modifications/indexes/index.ts +2 -0
  236. package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +35 -25
  237. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +31 -24
  238. package/src/modifications/relations/CreateRelationInverseSideModification.ts +15 -13
  239. package/src/modifications/relations/CreateRelationModification.ts +35 -27
  240. package/src/modifications/relations/DisableOrphanRemovalModification.ts +15 -12
  241. package/src/modifications/relations/EnableOrphanRemovalModification.ts +16 -13
  242. package/src/modifications/relations/MakeRelationNotNullModification.ts +16 -14
  243. package/src/modifications/relations/MakeRelationNullableModification.ts +17 -13
  244. package/src/modifications/relations/{ToggleManyHasManyEventLogModification.ts → ToggleJunctionEventLogModification.ts} +21 -14
  245. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +16 -14
  246. package/src/modifications/relations/UpdateRelationOrderByModification.ts +17 -14
  247. package/src/modifications/relations/index.ts +1 -1
  248. package/src/modifications/utils/columnUtils.ts +5 -0
  249. package/src/modifications/validation/PatchValidationSchemaModification.ts +7 -7
  250. package/src/modifications/validation/UpdateValidationSchemaModification.ts +17 -14
  251. package/src/utils/PartialEntity.ts +5 -0
  252. package/tests/cases/integration/createAndDropIndex.test.ts +44 -0
  253. package/tests/cases/integration/createColumn.test.ts +33 -0
  254. package/tests/cases/integration/createEntity.test.ts +2 -0
  255. package/tests/cases/integration/createManyHasMany.test.ts +1 -0
  256. package/tests/cases/integration/createManyHasOne.test.ts +1 -0
  257. package/tests/cases/integration/createOneHasMany.test.ts +1 -0
  258. package/tests/cases/integration/createOneHasOne.test.ts +2 -0
  259. package/tests/cases/integration/createView.test.ts +1 -0
  260. package/tests/cases/integration/updateView.test.ts +9 -0
  261. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts +0 -8
  262. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts.map +0 -1
  263. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js +0 -81
  264. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js.map +0 -1
@@ -10,40 +10,39 @@ import {
10
10
  import { SchemaMigrator } from './SchemaMigrator'
11
11
  import { Migration } from './Migration'
12
12
  import { ImplementationException } from './exceptions'
13
- import { VERSION_LATEST } from './modifications/ModificationVersions'
14
- import { CreateUniqueConstraintModification, RemoveUniqueConstraintModification } from './modifications/constraints'
15
- import { RemoveFieldModification } from './modifications/fields'
16
13
  import {
17
- CreateEntityModification,
18
- CreateViewModification,
19
- RemoveEntityModification,
20
- ToggleEventLogModification,
21
- UpdateEntityTableNameModification,
22
- } from './modifications/entities'
23
- import { CreateEnumModification, RemoveEnumModification, UpdateEnumModification } from './modifications/enums'
24
- import {
25
- CreateColumnModification,
26
- UpdateColumnDefinitionModification,
27
- UpdateColumnNameModification,
28
- } from './modifications/columns'
29
- import {
30
- ConvertOneHasManyToManyHasManyRelationModification,
31
- ConvertOneToManyRelationModification,
32
- CreateRelationInverseSideModification,
33
- CreateRelationModification,
34
- DisableOrphanRemovalModification,
35
- EnableOrphanRemovalModification,
36
- MakeRelationNotNullModification,
37
- MakeRelationNullableModification,
38
- ToggleJunctionEventLogModification,
39
- UpdateRelationOnDeleteModification,
40
- UpdateRelationOrderByModification,
41
- } from './modifications/relations'
42
- import { PatchAclSchemaModification, UpdateAclSchemaModification } from './modifications/acl'
43
- import { PatchValidationSchemaModification, UpdateValidationSchemaModification } from './modifications/validation'
44
- import { CreateDiff, Differ } from './modifications/ModificationHandler'
45
- import { isDefined } from './utils/isDefined'
14
+ ConvertOneHasManyToManyHasManyRelationDiffer,
15
+ ConvertOneToManyRelationDiffer,
16
+ CreateColumnDiffer,
17
+ CreateEntityDiffer,
18
+ CreateEnumDiffer,
19
+ CreateRelationDiffer,
20
+ CreateRelationInverseSideDiffer,
21
+ CreateUniqueConstraintDiffer,
22
+ CreateViewDiffer,
23
+ Differ,
24
+ DisableOrphanRemovalDiffer,
25
+ EnableOrphanRemovalDiffer,
26
+ MakeRelationNotNullDiffer,
27
+ MakeRelationNullableDiffer,
28
+ RemoveEntityDiffer,
29
+ RemoveEnumDiffer,
30
+ RemoveFieldDiffer,
31
+ RemoveUniqueConstraintDiffer,
32
+ ToggleEventLogDiffer,
33
+ ToggleJunctionEventLogDiffer,
34
+ UpdateAclSchemaDiffer,
35
+ UpdateColumnDefinitionDiffer,
36
+ UpdateColumnNameDiffer,
37
+ UpdateEntityTableNameDiffer,
38
+ UpdateEnumDiffer,
39
+ UpdateRelationOnDeleteDiffer,
40
+ UpdateRelationOrderByDiffer,
41
+ UpdateValidationSchemaDiffer,
42
+ VERSION_LATEST,
43
+ } from './modifications'
46
44
  import { ChangeViewNonViewDiffer, RemoveChangedFieldDiffer, RemoveChangedViewDiffer } from './modifications/differs'
45
+ import { CreateIndexDiffer, RemoveIndexDiffer } from './modifications/indexes'
47
46
 
48
47
  export class SchemaDiffer {
49
48
  constructor(private readonly schemaMigrator: SchemaMigrator) {}
@@ -58,56 +57,46 @@ export class SchemaDiffer {
58
57
  throw new InvalidSchemaException('updated schema is not valid', updatedErrors)
59
58
  }
60
59
 
61
- const differs: (CreateDiff | Differ)[] = [
62
- ConvertOneToManyRelationModification.createDiff,
63
- ConvertOneHasManyToManyHasManyRelationModification.createDiff,
64
-
65
- RemoveUniqueConstraintModification.createDiff,
66
- new ChangeViewNonViewDiffer().createDiff,
67
- new RemoveChangedViewDiffer().createDiff,
68
- RemoveEntityModification.createDiff,
69
- RemoveFieldModification.createDiff,
70
- CreateEnumModification.createDiff,
71
-
72
- UpdateEntityTableNameModification.createDiff,
73
- ToggleEventLogModification.createDiff,
74
- ToggleJunctionEventLogModification.createDiff,
75
- UpdateColumnDefinitionModification.createDiff,
76
- UpdateColumnNameModification.createDiff,
77
- UpdateRelationOnDeleteModification.createDiff,
78
- MakeRelationNotNullModification.createDiff,
79
- MakeRelationNullableModification.createDiff,
80
- EnableOrphanRemovalModification.createDiff,
81
- DisableOrphanRemovalModification.createDiff,
82
- UpdateRelationOrderByModification.createDiff,
83
- UpdateEnumModification.createDiff,
84
-
60
+ const differs: Differ[] = [
61
+ new ConvertOneToManyRelationDiffer(),
62
+ new ConvertOneHasManyToManyHasManyRelationDiffer(),
63
+ new RemoveUniqueConstraintDiffer(),
64
+ new RemoveIndexDiffer(),
65
+ new ChangeViewNonViewDiffer(),
66
+ new RemoveChangedViewDiffer(),
67
+ new RemoveEntityDiffer(),
68
+ new RemoveFieldDiffer(),
69
+ new CreateEnumDiffer(),
70
+ new UpdateEntityTableNameDiffer(),
71
+ new ToggleEventLogDiffer(),
72
+ new ToggleJunctionEventLogDiffer(),
73
+ new UpdateColumnDefinitionDiffer(),
74
+ new UpdateColumnNameDiffer(),
75
+ new UpdateRelationOnDeleteDiffer(),
76
+ new MakeRelationNotNullDiffer(),
77
+ new MakeRelationNullableDiffer(),
78
+ new EnableOrphanRemovalDiffer(),
79
+ new DisableOrphanRemovalDiffer(),
80
+ new UpdateRelationOrderByDiffer(),
81
+ new UpdateEnumDiffer(),
85
82
  new RemoveChangedFieldDiffer(it => !isRelation(it) || isOwningRelation(it)),
86
83
  new RemoveChangedFieldDiffer(it => isRelation(it) && isInverseRelation(it)),
87
- CreateEntityModification.createDiff,
88
- CreateColumnModification.createDiff,
89
- CreateViewModification.createDiff,
90
-
91
- CreateRelationModification.createDiff,
92
- CreateRelationInverseSideModification.createDiff,
93
-
94
- CreateUniqueConstraintModification.createDiff,
95
-
96
- RemoveEnumModification.createDiff,
97
-
98
- UpdateAclSchemaModification.createDiff,
99
- PatchAclSchemaModification.createDiff,
100
-
101
- UpdateValidationSchemaModification.createDiff,
102
- PatchValidationSchemaModification.createDiff,
103
- ].filter(isDefined)
84
+ new CreateEntityDiffer(),
85
+ new CreateColumnDiffer(),
86
+ new CreateViewDiffer(),
87
+ new CreateRelationDiffer(),
88
+ new CreateRelationInverseSideDiffer(),
89
+ new CreateUniqueConstraintDiffer(),
90
+ new CreateIndexDiffer(),
91
+ new RemoveEnumDiffer(),
92
+ new UpdateAclSchemaDiffer(),
93
+ new UpdateValidationSchemaDiffer(),
94
+ ]
104
95
 
105
96
  const diffs: Migration.Modification[] = []
106
97
  let appliedDiffsSchema = originalSchema
107
98
  for (const differ of differs) {
108
- const differDiffs = 'createDiff' in differ
109
- ? differ.createDiff(appliedDiffsSchema, updatedSchema)
110
- : differ(appliedDiffsSchema, updatedSchema)
99
+ const differDiffs = differ.createDiff(appliedDiffsSchema, updatedSchema)
111
100
  appliedDiffsSchema = this.schemaMigrator.applyModifications(appliedDiffsSchema, differDiffs, VERSION_LATEST)
112
101
  diffs.push(...differDiffs)
113
102
  }
@@ -1,5 +1,5 @@
1
1
  import { Schema } from '@contember/schema'
2
- import ModificationHandlerFactory from './modifications/ModificationHandlerFactory'
2
+ import { ModificationHandlerFactory } from './modifications'
3
3
  import { Migration } from './Migration'
4
4
 
5
5
  export class SchemaMigrator {
package/src/index.ts CHANGED
@@ -6,10 +6,6 @@ export * from './SchemaMigrator'
6
6
  export * from './SchemaDiffer'
7
7
  export * from './MigrationCreator'
8
8
  export * from './MigrationDescriber'
9
- export { default as ModificationHandlerFactory } from './modifications/ModificationHandlerFactory'
10
- export * from './modifications/ModificationVersions'
11
- export * from './modifications/ModificationHandler'
12
- export * from './modifications/utils/sqlUpdateUtils'
9
+ export * from './modifications'
13
10
  export * from './MigrationFilesManager'
14
11
  export * from './MigrationVersionHelper'
15
- export { SchemaUpdateError } from './modifications/exceptions'
@@ -20,21 +20,33 @@ export interface ModificationHandler<Data> {
20
20
  describe(context: ModificationDescriptionContext): ModificationDescription
21
21
  }
22
22
 
23
- export type CreateDiff = (originalSchema: Schema, updatedSchema: Schema) => Migration.Modification[]
24
-
25
23
  export interface ModificationHandlerOptions {
26
24
  formatVersion: number
27
25
  systemSchema: string
28
26
  }
29
27
 
30
- export interface ModificationHandlerStatic<Data> {
31
- id: string
32
- createModification: (data: Data) => Migration.Modification<Data>
33
- createDiff?: CreateDiff
34
-
28
+ export interface ModificationHandlerConstructor<Data> {
35
29
  new(data: Data, schema: Schema, options: ModificationHandlerOptions): ModificationHandler<Data>
36
30
  }
37
31
 
38
32
  export interface Differ {
39
- createDiff: CreateDiff
33
+ createDiff: (originalSchema: Schema, updatedSchema: Schema) => Migration.Modification[]
34
+ }
35
+
36
+
37
+ export interface ModificationType<Id extends String, Data> {
38
+ id: Id
39
+ createModification: (data: Data) => Migration.Modification<Data>
40
+ createHandler: (data: Data, schema: Schema, options: ModificationHandlerOptions) => ModificationHandler<Data>
41
+ }
42
+
43
+ export const createModificationType = <Data, Id extends string>({ handler, id }: {
44
+ id: Id
45
+ handler: ModificationHandlerConstructor<Data>
46
+ }): ModificationType<Id, Data> => {
47
+ return {
48
+ id,
49
+ createModification: data => ({ modification: id, ...data }),
50
+ createHandler: (data, schema, options) => new handler(data, schema, options),
51
+ }
40
52
  }
@@ -1,84 +1,88 @@
1
1
  import { Schema } from '@contember/schema'
2
- import { ModificationHandler, ModificationHandlerOptions, ModificationHandlerStatic } from './ModificationHandler'
3
- import { CreateColumnModification, UpdateColumnDefinitionModification, UpdateColumnNameModification } from './columns'
4
- import { PatchValidationSchemaModification, UpdateValidationSchemaModification } from './validation'
5
- import { PatchAclSchemaModification, UpdateAclSchemaModification } from './acl'
6
- import { CreateUniqueConstraintModification, RemoveUniqueConstraintModification } from './constraints'
2
+ import { ModificationHandler, ModificationHandlerOptions, ModificationType } from './ModificationHandler'
3
+ import { patchAclSchemaModification, updateAclSchemaModification } from './acl'
4
+ import { createColumnModification, updateColumnDefinitionModification, updateColumnNameModification } from './columns'
5
+ import { createUniqueConstraintModification, removeUniqueConstraintModification } from './constraints'
7
6
  import {
8
- CreateEntityModification,
9
- CreateViewModification,
10
- RemoveEntityModification,
11
- ToggleEventLogModification,
12
- UpdateEntityNameModification,
13
- UpdateEntityTableNameModification,
7
+ createEntityModification, createViewModification,
8
+ removeEntityModification, toggleEventLogModification,
9
+ updateEntityNameModification,
10
+ updateEntityTableNameModification,
14
11
  } from './entities'
15
- import { CreateEnumModification, RemoveEnumModification, UpdateEnumModification } from './enums'
16
- import { RemoveFieldModification, UpdateFieldNameModification } from './fields'
12
+ import { updateViewModification } from './entities/UpdateViewModification'
17
13
  import {
18
- ConvertOneHasManyToManyHasManyRelationModification,
19
- ConvertOneToManyRelationModification,
20
- CreateRelationInverseSideModification,
21
- CreateRelationModification,
22
- DisableOrphanRemovalModification,
23
- EnableOrphanRemovalModification,
24
- MakeRelationNotNullModification,
25
- MakeRelationNullableModification,
26
- ToggleJunctionEventLogModification,
27
- UpdateRelationOnDeleteModification,
28
- UpdateRelationOrderByModification,
14
+ createEnumModification,
15
+ removeEnumModification,
16
+ updateEnumModification,
17
+ } from './enums'
18
+ import { removeFieldModification, updateFieldNameModification } from './fields'
19
+ import {
20
+ convertOneHasManyToManyHasManyRelationModification,
21
+ convertOneToManyRelationModification,
22
+ createRelationInverseSideModification,
23
+ createRelationModification, disableOrphanRemovalModification,
24
+ enableOrphanRemovalModification,
25
+ makeRelationNotNullModification,
26
+ makeRelationNullableModification, toggleJunctionEventLogModification,
27
+ updateRelationOnDeleteModification,
28
+ updateRelationOrderByModification,
29
29
  } from './relations'
30
- import { UpdateViewModification } from './entities/UpdateViewModification'
30
+ import { patchValidationSchemaModification, updateValidationSchemaModification } from './validation'
31
+ import { createIndexModification, removeIndexModification } from './indexes'
32
+
31
33
 
32
34
  class ModificationHandlerFactory {
33
- constructor(private readonly map: Record<string, ModificationHandlerStatic<any>>) {}
35
+ constructor(private readonly map: Record<string, ModificationType<string, any>>) {}
34
36
 
35
37
  public create<D>(name: string, data: D, schema: Schema, options: ModificationHandlerOptions): ModificationHandler<D> {
36
38
  if (!this.map[name]) {
37
39
  throw new Error(`Undefined modification handler for ${name}`)
38
40
  }
39
- return new this.map[name](data, schema, options)
41
+ return this.map[name].createHandler(data, schema, options)
40
42
  }
41
43
  }
42
44
 
43
45
  namespace ModificationHandlerFactory {
44
- export type HandlerMap<D> = { [modificationName: string]: ModificationHandlerStatic<D> }
46
+ type HandlerMap<D> = { [modificationName: string]: ModificationType<string, D> }
45
47
 
46
48
  const handlers = [
47
- UpdateAclSchemaModification,
48
- PatchAclSchemaModification,
49
- CreateColumnModification,
50
- UpdateColumnDefinitionModification,
51
- UpdateColumnNameModification,
52
- CreateUniqueConstraintModification,
53
- RemoveUniqueConstraintModification,
54
- CreateEntityModification,
55
- RemoveEntityModification,
56
- UpdateEntityNameModification,
57
- UpdateEntityTableNameModification,
58
- UpdateViewModification,
59
- CreateViewModification,
60
- CreateEnumModification,
61
- RemoveEnumModification,
62
- UpdateEnumModification,
63
- RemoveFieldModification,
64
- UpdateFieldNameModification,
65
- CreateRelationInverseSideModification,
66
- CreateRelationModification,
67
- UpdateRelationOnDeleteModification,
68
- UpdateRelationOrderByModification,
69
- MakeRelationNotNullModification,
70
- MakeRelationNullableModification,
71
- EnableOrphanRemovalModification,
72
- DisableOrphanRemovalModification,
73
- UpdateValidationSchemaModification,
74
- PatchValidationSchemaModification,
75
- ConvertOneToManyRelationModification,
76
- ToggleEventLogModification,
77
- ToggleJunctionEventLogModification,
78
- ConvertOneHasManyToManyHasManyRelationModification,
49
+ updateAclSchemaModification,
50
+ patchAclSchemaModification,
51
+ createColumnModification,
52
+ updateColumnDefinitionModification,
53
+ updateColumnNameModification,
54
+ createUniqueConstraintModification,
55
+ removeUniqueConstraintModification,
56
+ createIndexModification,
57
+ removeIndexModification,
58
+ createEntityModification,
59
+ removeEntityModification,
60
+ updateEntityNameModification,
61
+ updateEntityTableNameModification,
62
+ updateViewModification,
63
+ createViewModification,
64
+ createEnumModification,
65
+ removeEnumModification,
66
+ updateEnumModification,
67
+ removeFieldModification,
68
+ updateFieldNameModification,
69
+ createRelationInverseSideModification,
70
+ createRelationModification,
71
+ updateRelationOnDeleteModification,
72
+ updateRelationOrderByModification,
73
+ makeRelationNotNullModification,
74
+ makeRelationNullableModification,
75
+ enableOrphanRemovalModification,
76
+ disableOrphanRemovalModification,
77
+ updateValidationSchemaModification,
78
+ patchValidationSchemaModification,
79
+ convertOneToManyRelationModification,
80
+ toggleEventLogModification,
81
+ toggleJunctionEventLogModification,
82
+ convertOneHasManyToManyHasManyRelationModification,
79
83
  ]
80
84
 
81
85
  export const defaultFactoryMap: HandlerMap<any> = Object.fromEntries(handlers.map(it => [it.id, it]))
82
86
  }
83
87
 
84
- export default ModificationHandlerFactory
88
+ export { ModificationHandlerFactory }
@@ -1,12 +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 PatchAclSchemaModification: ModificationHandlerStatic<PatchAclSchemaModificationData> = class {
8
- static id = 'patchAclSchema'
9
-
7
+ export class PatchAclSchemaModificationHandler implements ModificationHandler<PatchAclSchemaModificationData>{
10
8
  constructor(private readonly data: PatchAclSchemaModificationData) {}
11
9
 
12
10
  public createSql(builder: MigrationBuilder): void {}
@@ -29,12 +27,13 @@ export const PatchAclSchemaModification: ModificationHandlerStatic<PatchAclSchem
29
27
  describe() {
30
28
  return { message: 'Update ACL schema' }
31
29
  }
32
-
33
- static createModification(data: PatchAclSchemaModificationData) {
34
- return { modification: this.id, ...data }
35
- }
36
30
  }
37
31
 
32
+ export const patchAclSchemaModification = createModificationType({
33
+ id: 'patchAclSchema',
34
+ handler: PatchAclSchemaModificationHandler,
35
+ })
36
+
38
37
  export interface PatchAclSchemaModificationData {
39
38
  patch: Operation[]
40
39
  }
@@ -1,14 +1,12 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Acl, Schema } 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 { PatchAclSchemaModification } from './PatchAclSchemaModification'
8
-
9
- export const UpdateAclSchemaModification: ModificationHandlerStatic<UpdateAclSchemaModificationData> = class {
10
- public static id = 'updateAclSchema'
7
+ import { patchAclSchemaModification } from './PatchAclSchemaModification'
11
8
 
9
+ export class UpdateAclSchemaModificationHandler implements ModificationHandler<UpdateAclSchemaModificationData>{
12
10
  constructor(private readonly data: UpdateAclSchemaModificationData) {}
13
11
 
14
12
  public createSql(builder: MigrationBuilder): void {}
@@ -23,23 +21,26 @@ export const UpdateAclSchemaModification: ModificationHandlerStatic<UpdateAclSch
23
21
  describe() {
24
22
  return { message: 'Update ACL schema' }
25
23
  }
24
+ }
26
25
 
27
- static createModification(data: UpdateAclSchemaModificationData) {
28
- return { modification: this.id, ...data }
29
- }
26
+ export interface UpdateAclSchemaModificationData {
27
+ schema: Acl.Schema
28
+ }
30
29
 
31
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
30
+ export const updateAclSchemaModification = createModificationType({
31
+ id: 'updateAclSchema',
32
+ handler: UpdateAclSchemaModificationHandler,
33
+ })
34
+
35
+ export class UpdateAclSchemaDiffer implements Differ {
36
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
32
37
  if (deepEqual(originalSchema.acl, updatedSchema.acl)) {
33
38
  return []
34
39
  }
35
40
  const patch = createPatch(originalSchema.acl, updatedSchema.acl)
36
41
  if (patch.length <= 100) {
37
- return [PatchAclSchemaModification.createModification({ patch })]
42
+ return [patchAclSchemaModification.createModification({ patch })]
38
43
  }
39
- return [UpdateAclSchemaModification.createModification({ schema: updatedSchema.acl })]
44
+ return [updateAclSchemaModification.createModification({ schema: updatedSchema.acl })]
40
45
  }
41
46
  }
42
-
43
- export interface UpdateAclSchemaModificationData {
44
- schema: Acl.Schema
45
- }
@@ -1,15 +1,14 @@
1
1
  import { escapeValue, MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { addField, SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { wrapIdentifier } from '../../utils/dbHelpers'
6
6
  import { getColumnName, isColumn } from '@contember/schema-utils'
7
7
  import { ImplementationException } from '../../exceptions'
8
8
  import { createFields } from '../utils/diffUtils'
9
+ import { getColumnSqlType } from '../utils/columnUtils'
9
10
 
10
- export const CreateColumnModification: ModificationHandlerStatic<CreateColumnModificationData> = class {
11
- static id = 'createColumn'
12
-
11
+ export class CreateColumnModificationHandler implements ModificationHandler<CreateColumnModificationData> {
13
12
  constructor(private readonly data: CreateColumnModificationData, private readonly schema: Schema) {}
14
13
 
15
14
  public createSql(builder: MigrationBuilder): void {
@@ -21,7 +20,7 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
21
20
  const hasSeed = this.data.fillValue !== undefined || this.data.copyValue !== undefined
22
21
  builder.addColumn(entity.tableName, {
23
22
  [column.columnName]: {
24
- type: column.type === Model.ColumnType.Enum ? `"${column.columnType}"` : column.columnType,
23
+ type: getColumnSqlType(column),
25
24
  notNull: !column.nullable && !hasSeed,
26
25
  sequenceGenerated: column.sequence,
27
26
  },
@@ -33,7 +32,7 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
33
32
  } else if (this.data.copyValue !== undefined) {
34
33
  const copyFrom = getColumnName(this.schema.model, entity, this.data.copyValue)
35
34
  builder.sql(`UPDATE ${wrapIdentifier(entity.tableName)}
36
- SET ${wrapIdentifier(column.columnName)} = ${wrapIdentifier(copyFrom)}`)
35
+ SET ${wrapIdentifier(column.columnName)} = ${wrapIdentifier(copyFrom)}::${getColumnSqlType(column)}`)
37
36
  } else {
38
37
  throw new ImplementationException()
39
38
  }
@@ -63,17 +62,28 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
63
62
  : undefined
64
63
  return { message: `Add field ${this.data.entityName}.${this.data.field.name}`, failureWarning }
65
64
  }
65
+ }
66
66
 
67
- static createModification(data: CreateColumnModificationData) {
68
- return { modification: this.id, ...data }
69
- }
67
+ export interface CreateColumnModificationData {
68
+ entityName: string
69
+ field: Model.AnyColumn
70
+ fillValue?: any
71
+ copyValue?: string
72
+ }
70
73
 
71
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
74
+
75
+ export const createColumnModification = createModificationType({
76
+ id: 'createColumn',
77
+ handler: CreateColumnModificationHandler,
78
+ })
79
+
80
+ export class CreateColumnDiffer implements Differ {
81
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
72
82
  return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
73
83
  if (!isColumn(newField)) {
74
84
  return undefined
75
85
  }
76
- return CreateColumnModification.createModification({
86
+ return createColumnModification.createModification({
77
87
  entityName: updatedEntity.name,
78
88
  field: newField,
79
89
  ...(newField.default !== undefined ? { fillValue: newField.default } : {}),
@@ -81,10 +91,3 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
81
91
  })
82
92
  }
83
93
  }
84
-
85
- export interface CreateColumnModificationData {
86
- entityName: string
87
- field: Model.AnyColumn
88
- fillValue?: any
89
- copyValue?: string
90
- }