@contember/schema-migrations 1.2.0-alpha.8 → 1.2.0-beta.1

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 (315) hide show
  1. package/dist/src/Migration.d.ts +2 -0
  2. package/dist/src/Migration.d.ts.map +1 -1
  3. package/dist/src/Migration.js +2 -2
  4. package/dist/src/Migration.js.map +1 -1
  5. package/dist/src/MigrationCreator.d.ts +3 -1
  6. package/dist/src/MigrationCreator.d.ts.map +1 -1
  7. package/dist/src/MigrationCreator.js +2 -2
  8. package/dist/src/MigrationCreator.js.map +1 -1
  9. package/dist/src/MigrationDescriber.d.ts +1 -2
  10. package/dist/src/MigrationDescriber.d.ts.map +1 -1
  11. package/dist/src/MigrationDescriber.js +5 -7
  12. package/dist/src/MigrationDescriber.js.map +1 -1
  13. package/dist/src/MigrationFilesManager.d.ts.map +1 -1
  14. package/dist/src/MigrationFilesManager.js +10 -19
  15. package/dist/src/MigrationFilesManager.js.map +1 -1
  16. package/dist/src/MigrationsResolver.d.ts.map +1 -1
  17. package/dist/src/MigrationsResolver.js +1 -0
  18. package/dist/src/MigrationsResolver.js.map +1 -1
  19. package/dist/src/SchemaDiffer.d.ts +6 -1
  20. package/dist/src/SchemaDiffer.d.ts.map +1 -1
  21. package/dist/src/SchemaDiffer.js +46 -54
  22. package/dist/src/SchemaDiffer.js.map +1 -1
  23. package/dist/src/SchemaMigrator.d.ts +3 -2
  24. package/dist/src/SchemaMigrator.d.ts.map +1 -1
  25. package/dist/src/SchemaMigrator.js.map +1 -1
  26. package/dist/src/index.d.ts +1 -5
  27. package/dist/src/index.d.ts.map +1 -1
  28. package/dist/src/index.js +1 -11
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/src/modifications/ModificationHandler.d.ts +16 -8
  31. package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
  32. package/dist/src/modifications/ModificationHandler.js +9 -1
  33. package/dist/src/modifications/ModificationHandler.js.map +1 -1
  34. package/dist/src/modifications/ModificationHandlerFactory.d.ts +8 -7
  35. package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
  36. package/dist/src/modifications/ModificationHandlerFactory.js +43 -39
  37. package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
  38. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts +13 -2
  39. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
  40. package/dist/src/modifications/acl/PatchAclSchemaModification.js +28 -28
  41. package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
  42. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts +17 -3
  43. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
  44. package/dist/src/modifications/acl/UpdateAclSchemaModification.js +33 -30
  45. package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
  46. package/dist/src/modifications/columns/CreateColumnModification.d.ts +21 -3
  47. package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
  48. package/dist/src/modifications/columns/CreateColumnModification.js +72 -69
  49. package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
  50. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +20 -4
  51. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
  52. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +78 -71
  53. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
  54. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts +18 -2
  55. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
  56. package/dist/src/modifications/columns/UpdateColumnNameModification.js +97 -94
  57. package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
  58. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +21 -3
  59. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
  60. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +72 -66
  61. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
  62. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +18 -2
  63. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
  64. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +45 -42
  65. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
  66. package/dist/src/modifications/differs/ChangeViewNonViewDiffer.js +1 -1
  67. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts +1 -3
  68. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts.map +1 -1
  69. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js +1 -1
  70. package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts +1 -2
  71. package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts.map +1 -1
  72. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +7 -20
  73. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js.map +1 -1
  74. package/dist/src/modifications/entities/CreateEntityModification.d.ts +19 -2
  75. package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
  76. package/dist/src/modifications/entities/CreateEntityModification.js +66 -63
  77. package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
  78. package/dist/src/modifications/entities/CreateViewModification.d.ts +21 -2
  79. package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
  80. package/dist/src/modifications/entities/CreateViewModification.js +59 -56
  81. package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
  82. package/dist/src/modifications/entities/RemoveEntityModification.d.ts +22 -2
  83. package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
  84. package/dist/src/modifications/entities/RemoveEntityModification.js +73 -70
  85. package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
  86. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +19 -2
  87. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
  88. package/dist/src/modifications/entities/ToggleEventLogModification.js +57 -54
  89. package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
  90. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +18 -2
  91. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
  92. package/dist/src/modifications/entities/UpdateEntityNameModification.js +78 -78
  93. package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
  94. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts +18 -2
  95. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts.map +1 -1
  96. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js +40 -34
  97. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
  98. package/dist/src/modifications/entities/UpdateViewModification.d.ts +15 -3
  99. package/dist/src/modifications/entities/UpdateViewModification.d.ts.map +1 -1
  100. package/dist/src/modifications/entities/UpdateViewModification.js +28 -28
  101. package/dist/src/modifications/entities/UpdateViewModification.js.map +1 -1
  102. package/dist/src/modifications/enums/CreateEnumModification.d.ts +18 -2
  103. package/dist/src/modifications/enums/CreateEnumModification.d.ts.map +1 -1
  104. package/dist/src/modifications/enums/CreateEnumModification.js +42 -36
  105. package/dist/src/modifications/enums/CreateEnumModification.js.map +1 -1
  106. package/dist/src/modifications/enums/RemoveEnumModification.d.ts +18 -2
  107. package/dist/src/modifications/enums/RemoveEnumModification.d.ts.map +1 -1
  108. package/dist/src/modifications/enums/RemoveEnumModification.js +36 -33
  109. package/dist/src/modifications/enums/RemoveEnumModification.js.map +1 -1
  110. package/dist/src/modifications/enums/UpdateEnumModification.d.ts +19 -2
  111. package/dist/src/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
  112. package/dist/src/modifications/enums/UpdateEnumModification.js +43 -40
  113. package/dist/src/modifications/enums/UpdateEnumModification.js.map +1 -1
  114. package/dist/src/modifications/fields/RemoveFieldModification.d.ts +20 -2
  115. package/dist/src/modifications/fields/RemoveFieldModification.d.ts.map +1 -1
  116. package/dist/src/modifications/fields/RemoveFieldModification.js +67 -64
  117. package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
  118. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +18 -2
  119. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
  120. package/dist/src/modifications/fields/UpdateFieldNameModification.js +132 -132
  121. package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
  122. package/dist/src/modifications/index.d.ts +14 -0
  123. package/dist/src/modifications/index.d.ts.map +1 -0
  124. package/dist/src/modifications/index.js +32 -0
  125. package/dist/src/modifications/index.js.map +1 -0
  126. package/dist/src/modifications/indexes/CreateIndexModification.d.ts +18 -3
  127. package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
  128. package/dist/src/modifications/indexes/CreateIndexModification.js +68 -65
  129. package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -1
  130. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +18 -2
  131. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
  132. package/dist/src/modifications/indexes/RemoveIndexModification.js +47 -44
  133. package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
  134. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +22 -3
  135. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
  136. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +68 -65
  137. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
  138. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +22 -2
  139. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
  140. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +81 -70
  141. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
  142. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +18 -3
  143. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
  144. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +36 -33
  145. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
  146. package/dist/src/modifications/relations/CreateRelationModification.d.ts +24 -3
  147. package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
  148. package/dist/src/modifications/relations/CreateRelationModification.js +99 -85
  149. package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
  150. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +18 -2
  151. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
  152. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +42 -39
  153. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
  154. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +18 -2
  155. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
  156. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +45 -42
  157. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
  158. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts +19 -2
  159. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
  160. package/dist/src/modifications/relations/MakeRelationNotNullModification.js +55 -52
  161. package/dist/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
  162. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts +18 -2
  163. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
  164. package/dist/src/modifications/relations/MakeRelationNullableModification.js +54 -51
  165. package/dist/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
  166. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +25 -0
  167. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -0
  168. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +84 -0
  169. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -0
  170. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +18 -3
  171. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
  172. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +42 -39
  173. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
  174. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +18 -3
  175. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
  176. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +43 -40
  177. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
  178. package/dist/src/modifications/relations/index.d.ts +1 -1
  179. package/dist/src/modifications/relations/index.d.ts.map +1 -1
  180. package/dist/src/modifications/relations/index.js +1 -1
  181. package/dist/src/modifications/relations/index.js.map +1 -1
  182. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts +28 -0
  183. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -0
  184. package/dist/src/modifications/settings/UpdateSettingsModification.js +64 -0
  185. package/dist/src/modifications/settings/UpdateSettingsModification.js.map +1 -0
  186. package/dist/src/modifications/settings/index.d.ts +2 -0
  187. package/dist/src/modifications/settings/index.d.ts.map +1 -0
  188. package/dist/src/modifications/settings/index.js +18 -0
  189. package/dist/src/modifications/settings/index.js.map +1 -0
  190. package/dist/src/modifications/utils/columnUtils.d.ts +3 -0
  191. package/dist/src/modifications/utils/columnUtils.d.ts.map +1 -0
  192. package/dist/src/modifications/utils/columnUtils.js +9 -0
  193. package/dist/src/modifications/utils/columnUtils.js.map +1 -0
  194. package/dist/src/modifications/utils/createJunctionTable.d.ts +2 -1
  195. package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
  196. package/dist/src/modifications/utils/createJunctionTable.js +7 -5
  197. package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
  198. package/dist/src/modifications/utils/diffUtils.d.ts +14 -12
  199. package/dist/src/modifications/utils/diffUtils.d.ts.map +1 -1
  200. package/dist/src/modifications/utils/diffUtils.js.map +1 -1
  201. package/dist/src/modifications/utils/schemaMeta.d.ts +8 -0
  202. package/dist/src/modifications/utils/schemaMeta.d.ts.map +1 -0
  203. package/dist/src/modifications/utils/schemaMeta.js +13 -0
  204. package/dist/src/modifications/utils/schemaMeta.js.map +1 -0
  205. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +4 -2
  206. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
  207. package/dist/src/modifications/utils/schemaUpdateUtils.js +24 -2
  208. package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
  209. package/dist/src/modifications/utils/viewDependencies.d.ts +4 -2
  210. package/dist/src/modifications/utils/viewDependencies.d.ts.map +1 -1
  211. package/dist/src/modifications/utils/viewDependencies.js +29 -6
  212. package/dist/src/modifications/utils/viewDependencies.js.map +1 -1
  213. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts +13 -2
  214. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
  215. package/dist/src/modifications/validation/PatchValidationSchemaModification.js +28 -28
  216. package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
  217. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +17 -3
  218. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
  219. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +33 -30
  220. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
  221. package/dist/src/tsconfig.tsbuildinfo +1 -1
  222. package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +3 -2
  223. package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js.map +1 -1
  224. package/dist/tests/cases/integration/createColumn.test.js +36 -0
  225. package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
  226. package/dist/tests/cases/integration/createManyHasMany.test.js +3 -2
  227. package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
  228. package/dist/tests/cases/integration/createView.test.js +80 -0
  229. package/dist/tests/cases/integration/createView.test.js.map +1 -1
  230. package/dist/tests/cases/integration/removeField.test.js +72 -0
  231. package/dist/tests/cases/integration/removeField.test.js.map +1 -1
  232. package/dist/tests/cases/integration/takenIndexName.test.d.ts +2 -0
  233. package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +1 -0
  234. package/dist/tests/cases/integration/takenIndexName.test.js +307 -0
  235. package/dist/tests/cases/integration/takenIndexName.test.js.map +1 -0
  236. package/dist/tests/cases/integration/updateColumnDefinition.test.js +160 -0
  237. package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
  238. package/dist/tests/scripts/checkCreateConsistentMigrations.js +5 -4
  239. package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
  240. package/dist/tests/src/tests.d.ts.map +1 -1
  241. package/dist/tests/src/tests.js +15 -5
  242. package/dist/tests/src/tests.js.map +1 -1
  243. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  244. package/package.json +6 -6
  245. package/src/Migration.ts +3 -1
  246. package/src/MigrationCreator.ts +2 -1
  247. package/src/MigrationDescriber.ts +8 -8
  248. package/src/MigrationFilesManager.ts +10 -20
  249. package/src/MigrationsResolver.ts +1 -0
  250. package/src/SchemaDiffer.ts +82 -85
  251. package/src/SchemaMigrator.ts +3 -2
  252. package/src/index.ts +1 -5
  253. package/src/modifications/ModificationHandler.ts +22 -9
  254. package/src/modifications/ModificationHandlerFactory.ts +69 -65
  255. package/src/modifications/acl/PatchAclSchemaModification.ts +7 -8
  256. package/src/modifications/acl/UpdateAclSchemaModification.ts +16 -15
  257. package/src/modifications/columns/CreateColumnModification.ts +21 -18
  258. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +58 -47
  259. package/src/modifications/columns/UpdateColumnNameModification.ts +60 -53
  260. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +23 -17
  261. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +18 -14
  262. package/src/modifications/differs/ChangeViewNonViewDiffer.ts +2 -2
  263. package/src/modifications/differs/RemoveChangedFieldDiffer.ts +2 -2
  264. package/src/modifications/differs/RemoveChangedViewDiffer.ts +9 -22
  265. package/src/modifications/entities/CreateEntityModification.ts +18 -9
  266. package/src/modifications/entities/CreateViewModification.ts +10 -8
  267. package/src/modifications/entities/RemoveEntityModification.ts +24 -16
  268. package/src/modifications/entities/ToggleEventLogModification.ts +20 -13
  269. package/src/modifications/entities/UpdateEntityNameModification.ts +11 -10
  270. package/src/modifications/entities/UpdateEntityTableNameModification.ts +18 -13
  271. package/src/modifications/entities/UpdateViewModification.ts +7 -7
  272. package/src/modifications/enums/CreateEnumModification.ts +18 -13
  273. package/src/modifications/enums/RemoveEnumModification.ts +14 -12
  274. package/src/modifications/enums/UpdateEnumModification.ts +15 -13
  275. package/src/modifications/fields/RemoveFieldModification.ts +20 -17
  276. package/src/modifications/fields/UpdateFieldNameModification.ts +18 -18
  277. package/src/modifications/index.ts +13 -0
  278. package/src/modifications/indexes/CreateIndexModification.ts +13 -12
  279. package/src/modifications/indexes/RemoveIndexModification.ts +12 -8
  280. package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +48 -29
  281. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +50 -27
  282. package/src/modifications/relations/CreateRelationInverseSideModification.ts +15 -13
  283. package/src/modifications/relations/CreateRelationModification.ts +65 -35
  284. package/src/modifications/relations/DisableOrphanRemovalModification.ts +15 -12
  285. package/src/modifications/relations/EnableOrphanRemovalModification.ts +16 -13
  286. package/src/modifications/relations/MakeRelationNotNullModification.ts +16 -14
  287. package/src/modifications/relations/MakeRelationNullableModification.ts +17 -13
  288. package/src/modifications/relations/{ToggleManyHasManyEventLogModification.ts → ToggleJunctionEventLogModification.ts} +21 -14
  289. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +16 -14
  290. package/src/modifications/relations/UpdateRelationOrderByModification.ts +17 -14
  291. package/src/modifications/relations/index.ts +1 -1
  292. package/src/modifications/settings/UpdateSettingsModification.ts +87 -0
  293. package/src/modifications/settings/index.ts +1 -0
  294. package/src/modifications/utils/columnUtils.ts +5 -0
  295. package/src/modifications/utils/createJunctionTable.ts +7 -5
  296. package/src/modifications/utils/diffUtils.ts +12 -12
  297. package/src/modifications/utils/schemaMeta.ts +18 -0
  298. package/src/modifications/utils/schemaUpdateUtils.ts +22 -2
  299. package/src/modifications/utils/viewDependencies.ts +28 -5
  300. package/src/modifications/validation/PatchValidationSchemaModification.ts +7 -7
  301. package/src/modifications/validation/UpdateValidationSchemaModification.ts +17 -14
  302. package/src/tsconfig.json +2 -2
  303. package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +3 -2
  304. package/tests/cases/integration/createColumn.test.ts +33 -0
  305. package/tests/cases/integration/createManyHasMany.test.ts +3 -2
  306. package/tests/cases/integration/createView.test.ts +70 -0
  307. package/tests/cases/integration/removeField.test.ts +58 -0
  308. package/tests/cases/integration/takenIndexName.test.ts +314 -0
  309. package/tests/cases/integration/updateColumnDefinition.test.ts +138 -1
  310. package/tests/scripts/checkCreateConsistentMigrations.ts +3 -2
  311. package/tests/src/tests.ts +21 -11
  312. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts +0 -8
  313. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts.map +0 -1
  314. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js +0 -81
  315. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js.map +0 -1
@@ -1,12 +1,11 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { Migration } from '../../Migration'
6
6
  import { PartialEntity } from '../../utils/PartialEntity.js'
7
7
 
8
- export const CreateViewModification: ModificationHandlerStatic<CreateViewModificationData> = class {
9
- static id = 'createView'
8
+ export class CreateViewModificationHandler implements ModificationHandler<CreateViewModificationData> {
10
9
  constructor(private readonly data: CreateViewModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {
@@ -35,12 +34,15 @@ export const CreateViewModification: ModificationHandlerStatic<CreateViewModific
35
34
  describe() {
36
35
  return { message: `Add view ${this.data.entity.name}` }
37
36
  }
37
+ }
38
38
 
39
- static createModification(data: CreateViewModificationData) {
40
- return { modification: this.id, ...data }
41
- }
39
+ export const createViewModification = createModificationType({
40
+ id: 'createView',
41
+ handler: CreateViewModificationHandler,
42
+ })
42
43
 
43
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
44
+ export class CreateViewDiffer implements Differ {
45
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
44
46
  const newViews = Object.values(updatedSchema.model.entities)
45
47
  .filter(it => !originalSchema.model.entities[it.name])
46
48
  .filter(it => !!it.view)
@@ -54,7 +56,7 @@ export const CreateViewModification: ModificationHandlerStatic<CreateViewModific
54
56
  for (const dependency of entity.view?.dependencies ?? []) {
55
57
  cascadeCreate(updatedSchema.model.entities[dependency])
56
58
  }
57
- modifications.push(CreateViewModification.createModification({
59
+ modifications.push(createViewModification.createModification({
58
60
  entity: entity,
59
61
  }))
60
62
  }
@@ -11,17 +11,21 @@ import {
11
11
  updateModel,
12
12
  updateSchema,
13
13
  } from '../utils/schemaUpdateUtils'
14
- import { ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
14
+ import {
15
+ createModificationType,
16
+ Differ,
17
+ ModificationHandler,
18
+ ModificationHandlerOptions,
19
+ } from '../ModificationHandler'
15
20
  import { VERSION_ACL_PATCH, VERSION_REMOVE_REFERENCING_RELATIONS } from '../ModificationVersions'
16
21
  import { isRelation, PredicateDefinitionProcessor } from '@contember/schema-utils'
17
- import { RemoveFieldModification } from '../fields'
18
-
19
- export const RemoveEntityModification: ModificationHandlerStatic<RemoveEntityModificationData> = class {
20
- static id = 'removeEntity'
22
+ import { removeFieldModification } from '../fields'
23
+ import { SchemaWithMeta } from '../utils/schemaMeta'
21
24
 
25
+ export class RemoveEntityModificationHandler implements ModificationHandler<RemoveEntityModificationData> {
22
26
  constructor(
23
27
  private readonly data: RemoveEntityModificationData,
24
- private readonly schema: Schema,
28
+ private readonly schema: SchemaWithMeta,
25
29
  private readonly options: ModificationHandlerOptions,
26
30
  ) {}
27
31
 
@@ -33,7 +37,7 @@ export const RemoveEntityModification: ModificationHandlerStatic<RemoveEntityMod
33
37
  }
34
38
  if (this.options.formatVersion >= VERSION_REMOVE_REFERENCING_RELATIONS) {
35
39
  this.getFieldsToRemove(this.schema).forEach(([entityName, fieldName]) => {
36
- (new RemoveFieldModification({ entityName, fieldName }, this.schema, this.options)).createSql(builder)
40
+ removeFieldModification.createHandler({ entityName, fieldName }, this.schema, this.options).createSql(builder)
37
41
  })
38
42
  }
39
43
  builder.dropTable(entity.tableName)
@@ -104,17 +108,21 @@ export const RemoveEntityModification: ModificationHandlerStatic<RemoveEntityMod
104
108
  return { message: `Remove entity ${this.data.entityName}`, isDestructive: true }
105
109
  }
106
110
 
107
- static createModification(data: RemoveEntityModificationData) {
108
- return { modification: this.id, ...data }
109
- }
110
-
111
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
112
- return Object.keys(originalSchema.model.entities)
113
- .filter(name => !updatedSchema.model.entities[name])
114
- .map(entityName => RemoveEntityModification.createModification({ entityName }))
115
- }
116
111
  }
117
112
 
118
113
  export interface RemoveEntityModificationData {
119
114
  entityName: string
120
115
  }
116
+
117
+ export const removeEntityModification = createModificationType({
118
+ id: 'removeEntity',
119
+ handler: RemoveEntityModificationHandler,
120
+ })
121
+
122
+ export class RemoveEntityDiffer implements Differ {
123
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
124
+ return Object.keys(originalSchema.model.entities)
125
+ .filter(name => !updatedSchema.model.entities[name])
126
+ .map(entityName => removeEntityModification.createModification({ entityName }))
127
+ }
128
+ }
@@ -1,7 +1,12 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateEntity, 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,
@@ -9,8 +14,7 @@ import {
9
14
  dropEventTrxTrigger,
10
15
  } from '../utils/sqlUpdateUtils'
11
16
 
12
- export const ToggleEventLogModification: ModificationHandlerStatic<ToggleEventLogModificationData> = class {
13
- static id = 'toggleEventLog'
17
+ export class ToggleEventLogModificationHandler implements ModificationHandler<ToggleEventLogModificationData> {
14
18
 
15
19
  constructor(
16
20
  private readonly data: ToggleEventLogModificationData,
@@ -51,12 +55,20 @@ export const ToggleEventLogModification: ModificationHandlerStatic<ToggleEventLo
51
55
  message: `${this.data.enabled ? 'Enable' : 'Disable'} event log for ${this.data.entityName}`,
52
56
  }
53
57
  }
58
+ }
54
59
 
55
- static createModification(data: ToggleEventLogModificationData) {
56
- return { modification: this.id, ...data }
57
- }
60
+ export interface ToggleEventLogModificationData {
61
+ entityName: string
62
+ enabled: boolean
63
+ }
58
64
 
59
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
65
+ export const toggleEventLogModification = createModificationType({
66
+ id: 'toggleEventLog',
67
+ handler: ToggleEventLogModificationHandler,
68
+ })
69
+
70
+ export class ToggleEventLogDiffer implements Differ {
71
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
60
72
  return Object.values(updatedSchema.model.entities)
61
73
  .flatMap(updatedEntity => {
62
74
  const origEntity = originalSchema.model.entities[updatedEntity.name]
@@ -66,7 +78,7 @@ export const ToggleEventLogModification: ModificationHandlerStatic<ToggleEventLo
66
78
  const newValue = updatedEntity.eventLog.enabled
67
79
  const oldValue = origEntity.eventLog.enabled
68
80
  if (newValue !== oldValue) {
69
- return [ToggleEventLogModification.createModification({
81
+ return [toggleEventLogModification.createModification({
70
82
  entityName: updatedEntity.name,
71
83
  enabled: newValue,
72
84
  })]
@@ -76,8 +88,3 @@ export const ToggleEventLogModification: ModificationHandlerStatic<ToggleEventLo
76
88
 
77
89
  }
78
90
  }
79
-
80
- export interface ToggleEventLogModificationData {
81
- entityName: string
82
- enabled: boolean
83
- }
@@ -11,26 +11,26 @@ import {
11
11
  updateModel,
12
12
  updateSchema,
13
13
  } from '../utils/schemaUpdateUtils'
14
- import { ModificationHandler, ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
14
+ import { createModificationType, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'
15
15
  import { isIt } from '../../utils/isIt'
16
16
  import { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_NAME } from '../ModificationVersions'
17
17
  import { NamingHelper } from '@contember/schema-utils'
18
- import { UpdateEntityTableNameModification } from './UpdateEntityTableNameModification'
19
18
  import { NoopModification } from '../NoopModification'
20
19
  import { renameConstraintSchemaUpdater, renameConstraintsSqlBuilder } from '../utils/renameConstraintsHelper'
21
20
  import { changeValue } from '../utils/valueUtils'
21
+ import { updateEntityTableNameModification } from './UpdateEntityTableNameModification'
22
+ import { SchemaWithMeta } from '../utils/schemaMeta'
22
23
 
23
- export const UpdateEntityNameModification: ModificationHandlerStatic<UpdateEntityNameModificationData> = class {
24
- static id = 'updateEntityName'
24
+ export class UpdateEntityNameModificationHandler implements ModificationHandler<UpdateEntityNameModificationData> {
25
25
  private subModification: ModificationHandler<any>
26
26
 
27
27
  constructor(
28
28
  private readonly data: UpdateEntityNameModificationData,
29
- private readonly schema: Schema,
29
+ private readonly schema: SchemaWithMeta,
30
30
  private readonly options: ModificationHandlerOptions,
31
31
  ) {
32
32
  this.subModification = data.tableName
33
- ? new UpdateEntityTableNameModification(
33
+ ? updateEntityTableNameModification.createHandler(
34
34
  { entityName: data.entityName, tableName: data.tableName },
35
35
  schema,
36
36
  this.options,
@@ -124,10 +124,6 @@ export const UpdateEntityNameModification: ModificationHandlerStatic<UpdateEntit
124
124
  describe() {
125
125
  return { message: `Change entity name from ${this.data.entityName} to ${this.data.newEntityName}` }
126
126
  }
127
-
128
- static createModification(data: UpdateEntityNameModificationData) {
129
- return { modification: this.id, ...data }
130
- }
131
127
  }
132
128
 
133
129
  export interface UpdateEntityNameModificationData {
@@ -135,3 +131,8 @@ export interface UpdateEntityNameModificationData {
135
131
  newEntityName: string
136
132
  tableName?: string
137
133
  }
134
+
135
+ export const updateEntityNameModification = createModificationType({
136
+ id: 'updateEntityName',
137
+ handler: UpdateEntityNameModificationHandler,
138
+ })
@@ -1,10 +1,9 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
 
6
- export const UpdateEntityTableNameModification: ModificationHandlerStatic<UpdateEntityTableNameModificationData> = class {
7
- static id = 'updateEntityTableName'
6
+ export class UpdateEntityTableNameModificationHandler implements ModificationHandler<UpdateEntityTableNameModificationData> {
8
7
  constructor(private readonly data: UpdateEntityTableNameModificationData, private readonly schema: Schema) {}
9
8
 
10
9
  public createSql(builder: MigrationBuilder): void {
@@ -28,22 +27,28 @@ export const UpdateEntityTableNameModification: ModificationHandlerStatic<Update
28
27
  describe() {
29
28
  return { message: `Change table name of entity ${this.data.entityName}` }
30
29
  }
30
+ }
31
31
 
32
- static createModification(data: UpdateEntityTableNameModificationData) {
33
- return { modification: this.id, ...data }
34
- }
32
+ export interface UpdateEntityTableNameModificationData {
33
+ entityName: string
34
+ tableName: string
35
+ }
35
36
 
36
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
37
+ export const updateEntityTableNameModification = createModificationType({
38
+ id: 'updateEntityTableName',
39
+ handler: UpdateEntityTableNameModificationHandler,
40
+ })
41
+
42
+ export class UpdateEntityTableNameDiffer implements Differ {
43
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
37
44
  return Object.values(updatedSchema.model.entities)
38
45
  .filter(
39
46
  it =>
40
47
  originalSchema.model.entities[it.name] && originalSchema.model.entities[it.name].tableName !== it.tableName,
41
48
  )
42
- .map(it => UpdateEntityTableNameModification.createModification({ entityName: it.name, tableName: it.tableName }))
49
+ .map(it => updateEntityTableNameModification.createModification({
50
+ entityName: it.name,
51
+ tableName: it.tableName,
52
+ }))
43
53
  }
44
54
  }
45
-
46
- export interface UpdateEntityTableNameModificationData {
47
- entityName: string
48
- tableName: string
49
- }
@@ -1,11 +1,9 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { ModificationHandlerStatic } from '../ModificationHandler'
3
+ import { createModificationType, ModificationHandler } from '../ModificationHandler'
4
4
  import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
5
5
 
6
- export const UpdateViewModification: ModificationHandlerStatic<UpdateViewModificationData> = class {
7
- static id = 'updateView'
8
-
6
+ export class UpdateViewModificationHandler implements ModificationHandler<UpdateViewModificationData> {
9
7
  constructor(private readonly data: UpdateViewModificationData, private readonly schema: Schema) {}
10
8
 
11
9
  public createSql(builder: MigrationBuilder): void {
@@ -32,12 +30,14 @@ export const UpdateViewModification: ModificationHandlerStatic<UpdateViewModific
32
30
  return { message: `Update SQL definition of a view` }
33
31
  }
34
32
 
35
- static createModification(data: UpdateViewModificationData) {
36
- return { modification: this.id, ...data }
37
- }
38
33
  }
39
34
 
40
35
  export interface UpdateViewModificationData {
41
36
  entityName: string
42
37
  view: Model.View
43
38
  }
39
+
40
+ export const updateViewModification = createModificationType({
41
+ id: 'updateView',
42
+ handler: UpdateViewModificationHandler,
43
+ })
@@ -1,11 +1,10 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { createCheck, getConstraintName } from './enumUtils'
6
6
 
7
- export const CreateEnumModification: ModificationHandlerStatic<CreateEnumModificationData> = class {
8
- static id = 'createEnum'
7
+ export class CreateEnumModificationHandler implements ModificationHandler<CreateEnumModificationData> {
9
8
  constructor(private readonly data: CreateEnumModificationData, private readonly schema: Schema) {}
10
9
 
11
10
  public createSql(builder: MigrationBuilder): void {
@@ -28,19 +27,25 @@ export const CreateEnumModification: ModificationHandlerStatic<CreateEnumModific
28
27
  describe() {
29
28
  return { message: `Add enum ${this.data.enumName}` }
30
29
  }
31
-
32
- static createModification(data: CreateEnumModificationData) {
33
- return { modification: this.id, ...data }
34
- }
35
-
36
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
37
- return Object.entries(updatedSchema.model.enums)
38
- .filter(([name]) => !originalSchema.model.enums[name])
39
- .map(([enumName, values]) => CreateEnumModification.createModification({ enumName, values }))
40
- }
41
30
  }
42
31
 
43
32
  export interface CreateEnumModificationData {
44
33
  enumName: string
45
34
  values: readonly string[]
46
35
  }
36
+
37
+ export const createEnumModification = createModificationType({
38
+ id: 'createEnum',
39
+ handler: CreateEnumModificationHandler,
40
+ })
41
+
42
+ export class CreateEnumDiffer implements Differ {
43
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
44
+ return Object.entries(updatedSchema.model.enums)
45
+ .filter(([name]) => !originalSchema.model.enums[name])
46
+ .map(([enumName, values]) => createEnumModification.createModification({
47
+ enumName,
48
+ values,
49
+ }))
50
+ }
51
+ }
@@ -1,10 +1,9 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
 
6
- export const RemoveEnumModification: ModificationHandlerStatic<RemoveEnumModificationData> = class {
7
- static id = 'removeEnum'
6
+ export class RemoveEnumModificationHandler implements ModificationHandler<RemoveEnumModificationData> {
8
7
  constructor(private readonly data: RemoveEnumModificationData, private readonly schema: Schema) {}
9
8
 
10
9
  public createSql(builder: MigrationBuilder): void {
@@ -24,18 +23,21 @@ export const RemoveEnumModification: ModificationHandlerStatic<RemoveEnumModific
24
23
  describe() {
25
24
  return { message: `Remove ${this.data.enumName}` }
26
25
  }
26
+ }
27
27
 
28
- static createModification(data: RemoveEnumModificationData) {
29
- return { modification: this.id, ...data }
30
- }
28
+ export interface RemoveEnumModificationData {
29
+ enumName: string
30
+ }
31
31
 
32
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
32
+ export const removeEnumModification = createModificationType({
33
+ id: 'removeEnum',
34
+ handler: RemoveEnumModificationHandler,
35
+ })
36
+
37
+ export class RemoveEnumDiffer implements Differ {
38
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
33
39
  return Object.entries(originalSchema.model.enums)
34
40
  .filter(([name]) => !updatedSchema.model.enums[name])
35
- .map(([enumName, values]) => RemoveEnumModification.createModification({ enumName }))
41
+ .map(([enumName, values]) => removeEnumModification.createModification({ enumName }))
36
42
  }
37
43
  }
38
-
39
- export interface RemoveEnumModificationData {
40
- enumName: string
41
- }
@@ -1,12 +1,11 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, 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 { createCheck, getConstraintName } from './enumUtils'
7
7
 
8
- export const UpdateEnumModification: ModificationHandlerStatic<UpdateEnumModificationData> = class {
9
- static id = 'updateEnum'
8
+ export class UpdateEnumModificationHandler implements ModificationHandler<UpdateEnumModificationData> {
10
9
  constructor(private readonly data: UpdateEnumModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {
@@ -37,23 +36,26 @@ export const UpdateEnumModification: ModificationHandlerStatic<UpdateEnumModific
37
36
  : undefined
38
37
  return { message: `Update enum ${this.data.enumName}`, failureWarning }
39
38
  }
39
+ }
40
40
 
41
- static createModification(data: UpdateEnumModificationData) {
42
- return { modification: this.id, ...data }
43
- }
41
+ export interface UpdateEnumModificationData {
42
+ enumName: string
43
+ values: readonly string[]
44
+ }
44
45
 
45
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
46
+ export const updateEnumModification = createModificationType({
47
+ id: 'updateEnum',
48
+ handler: UpdateEnumModificationHandler,
49
+ })
50
+
51
+ export class UpdateEnumDiffer implements Differ {
52
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
46
53
  return Object.entries(updatedSchema.model.enums)
47
54
  .filter(
48
55
  ([name]) =>
49
56
  originalSchema.model.enums[name] &&
50
57
  !deepEqual(updatedSchema.model.enums[name], originalSchema.model.enums[name]),
51
58
  )
52
- .map(([enumName, values]) => UpdateEnumModification.createModification({ enumName, values }))
59
+ .map(([enumName, values]) => updateEnumModification.createModification({ enumName, values }))
53
60
  }
54
61
  }
55
-
56
- export interface UpdateEnumModificationData {
57
- enumName: string
58
- values: readonly string[]
59
- }
@@ -2,11 +2,10 @@ import { acceptFieldVisitor, isInverseRelation, isRelation, NamingHelper } from
2
2
  import { MigrationBuilder } from '@contember/database-migrations'
3
3
  import { Schema } from '@contember/schema'
4
4
  import { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils'
5
- import { ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
5
+ import { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'
6
6
  import { isDefined } from '../../utils/isDefined'
7
7
 
8
- export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModificationData> = class {
9
- static id = 'removeField'
8
+ export class RemoveFieldModificationHandler implements ModificationHandler<RemoveFieldModificationData> {
10
9
 
11
10
  constructor(
12
11
  private readonly data: RemoveFieldModificationData,
@@ -20,19 +19,19 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
20
19
  return
21
20
  }
22
21
  acceptFieldVisitor(this.schema.model, this.data.entityName, this.data.fieldName, {
23
- visitColumn: (entity, column) => {
22
+ visitColumn: ({ entity, column }) => {
24
23
  builder.dropColumn(entity.tableName, column.columnName)
25
24
  },
26
- visitManyHasOne: (entity, relation, {}, _) => {
25
+ visitManyHasOne: ({ entity, relation }) => {
27
26
  builder.dropColumn(entity.tableName, relation.joiningColumn.columnName)
28
27
  },
29
28
  visitOneHasMany: () => {},
30
- visitOneHasOneOwning: (entity, relation, {}, _) => {
29
+ visitOneHasOneOwning: ({ entity, relation }) => {
31
30
  builder.dropConstraint(entity.tableName, NamingHelper.createUniqueConstraintName(entity.name, [relation.name]))
32
31
  builder.dropColumn(entity.tableName, relation.joiningColumn.columnName)
33
32
  },
34
33
  visitOneHasOneInverse: () => {},
35
- visitManyHasManyOwning: ({}, relation, {}, _) => {
34
+ visitManyHasManyOwning: ({ relation }) => {
36
35
  builder.dropTable(relation.joiningTable.tableName)
37
36
  },
38
37
  visitManyHasManyInverse: () => {},
@@ -47,11 +46,20 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
47
46
  return { message: `Remove field ${this.data.entityName}.${this.data.fieldName}`, isDestructive: true }
48
47
  }
49
48
 
50
- static createModification(data: RemoveFieldModificationData) {
51
- return { modification: this.id, ...data }
52
- }
49
+ }
50
+
51
+ export interface RemoveFieldModificationData {
52
+ entityName: string
53
+ fieldName: string
54
+ }
53
55
 
54
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
56
+ export const removeFieldModification = createModificationType({
57
+ id: 'removeField',
58
+ handler: RemoveFieldModificationHandler,
59
+ })
60
+
61
+ export class RemoveFieldDiffer implements Differ {
62
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
55
63
  return Object.values(updatedSchema.model.entities)
56
64
  .filter(({ name }) => originalSchema.model.entities[name])
57
65
  .flatMap(entity => {
@@ -66,7 +74,7 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
66
74
  return undefined
67
75
  }
68
76
  }
69
- return RemoveFieldModification.createModification({
77
+ return removeFieldModification.createModification({
70
78
  entityName: entity.name,
71
79
  fieldName: field.name,
72
80
  })
@@ -75,8 +83,3 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
75
83
  })
76
84
  }
77
85
  }
78
-
79
- export interface RemoveFieldModificationData {
80
- entityName: string
81
- fieldName: string
82
- }
@@ -13,26 +13,25 @@ import {
13
13
  updateModel,
14
14
  updateSchema,
15
15
  } from '../utils/schemaUpdateUtils'
16
- import { ModificationHandler, ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
16
+ import { createModificationType, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'
17
17
  import { acceptFieldVisitor, NamingHelper, PredicateDefinitionProcessor } from '@contember/schema-utils'
18
18
  import { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_NAME } from '../ModificationVersions'
19
19
  import { renameConstraintSchemaUpdater, renameConstraintsSqlBuilder } from '../utils/renameConstraintsHelper'
20
20
  import { changeValue } from '../utils/valueUtils'
21
- import { UpdateColumnNameModification } from '../columns'
21
+ import { updateColumnNameModification } from '../columns'
22
22
  import { NoopModification } from '../NoopModification'
23
+ import { SchemaWithMeta } from '../utils/schemaMeta'
23
24
 
24
- export const UpdateFieldNameModification: ModificationHandlerStatic<UpdateFieldNameModificationData> = class {
25
- static id = 'updateFieldName'
26
-
25
+ export class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {
27
26
  private renameColumnSubModification: ModificationHandler<any> = new NoopModification()
28
27
 
29
28
  constructor(
30
29
  private readonly data: UpdateFieldNameModificationData,
31
- private readonly schema: Schema,
30
+ private readonly schema: SchemaWithMeta,
32
31
  private readonly options: ModificationHandlerOptions,
33
32
  ) {
34
33
  if (this.data.columnName) {
35
- this.renameColumnSubModification = new UpdateColumnNameModification({
34
+ this.renameColumnSubModification = updateColumnNameModification.createHandler({
36
35
  entityName: this.data.entityName,
37
36
  columnName: this.data.columnName,
38
37
  fieldName: this.data.fieldName,
@@ -81,33 +80,33 @@ export const UpdateFieldNameModification: ModificationHandlerStatic<UpdateFieldN
81
80
  }
82
81
 
83
82
  return acceptFieldVisitor<Model.AnyField>(this.schema.model, entity, field, {
84
- visitColumn: (entity, field) => field,
85
- visitManyHasOne: (entity, relation, targetEntity, targetRelation) => {
83
+ visitColumn: ({ column }) => column,
84
+ visitManyHasOne: ({ targetEntity, relation, targetRelation }) => {
86
85
  return isUpdatedRelation(targetEntity, targetRelation)
87
86
  ? { ...relation, inversedBy: this.data.newFieldName }
88
87
  : relation
89
88
  },
90
- visitOneHasMany: (entity, relation, targetEntity, targetRelation) => {
89
+ visitOneHasMany: ({ relation, targetEntity, targetRelation }) => {
91
90
  return isUpdatedRelation(targetEntity, targetRelation)
92
91
  ? { ...relation, ownedBy: this.data.newFieldName }
93
92
  : relation
94
93
  },
95
- visitOneHasOneOwning: (entity, relation, targetEntity, targetRelation) => {
94
+ visitOneHasOneOwning: ({ relation, targetEntity, targetRelation }) => {
96
95
  return isUpdatedRelation(targetEntity, targetRelation)
97
96
  ? { ...relation, inversedBy: this.data.newFieldName }
98
97
  : relation
99
98
  },
100
- visitOneHasOneInverse: (entity, relation, targetEntity, targetRelation) => {
99
+ visitOneHasOneInverse: ({ relation, targetEntity, targetRelation }) => {
101
100
  return isUpdatedRelation(targetEntity, targetRelation)
102
101
  ? { ...relation, ownedBy: this.data.newFieldName }
103
102
  : relation
104
103
  },
105
- visitManyHasManyOwning: (entity, relation, targetEntity, targetRelation) => {
104
+ visitManyHasManyOwning: ({ relation, targetEntity, targetRelation }) => {
106
105
  return isUpdatedRelation(targetEntity, targetRelation)
107
106
  ? { ...relation, inversedBy: this.data.newFieldName }
108
107
  : relation
109
108
  },
110
- visitManyHasManyInverse: (entity, relation, targetEntity, targetRelation) => {
109
+ visitManyHasManyInverse: ({ relation, targetEntity, targetRelation }) => {
111
110
  return isUpdatedRelation(targetEntity, targetRelation)
112
111
  ? { ...relation, ownedBy: this.data.newFieldName }
113
112
  : relation
@@ -192,10 +191,6 @@ export const UpdateFieldNameModification: ModificationHandlerStatic<UpdateFieldN
192
191
  describe() {
193
192
  return { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }
194
193
  }
195
-
196
- static createModification(data: UpdateFieldNameModificationData) {
197
- return { modification: this.id, ...data }
198
- }
199
194
  }
200
195
 
201
196
  export interface UpdateFieldNameModificationData {
@@ -204,3 +199,8 @@ export interface UpdateFieldNameModificationData {
204
199
  newFieldName: string
205
200
  columnName?: string
206
201
  }
202
+
203
+ export const updateFieldNameModification = createModificationType({
204
+ id: 'updateFieldName',
205
+ handler: UpdateFieldNameModificationHandler,
206
+ })
@@ -0,0 +1,13 @@
1
+ export * from './acl'
2
+ export * from './columns'
3
+ export * from './constraints'
4
+ export * from './entities'
5
+ export * from './enums'
6
+ export * from './fields'
7
+ export * from './relations'
8
+ export * from './validation'
9
+ export * from './ModificationHandlerFactory'
10
+ export * from './ModificationVersions'
11
+ export * from './ModificationHandler'
12
+ export { SchemaUpdateError } from './exceptions'
13
+ export * from './utils/sqlUpdateUtils'