@contember/engine-system-api 2.0.0-alpha.32 → 2.0.0-alpha.35

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 (266) hide show
  1. package/dist/development/src/SystemContainer.cjs.map +1 -1
  2. package/dist/development/src/SystemContainer.js.map +1 -1
  3. package/dist/development/src/migrations/2020-03-27-130000-project-migrations.cjs.map +1 -1
  4. package/dist/development/src/migrations/2020-03-27-130000-project-migrations.js.map +1 -1
  5. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.cjs.map +1 -1
  6. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -1
  7. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.cjs.map +1 -1
  8. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -1
  9. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.cjs.map +1 -1
  10. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -1
  11. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs.map +1 -1
  12. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -1
  13. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.cjs.map +1 -1
  14. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -1
  15. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.cjs.map +1 -1
  16. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.js.map +1 -1
  17. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.cjs.map +1 -1
  18. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.js.map +1 -1
  19. package/dist/development/src/migrations/2024-06-28-153001-schema-init.cjs.map +1 -1
  20. package/dist/development/src/migrations/2024-06-28-153001-schema-init.js.map +1 -1
  21. package/dist/development/src/migrations/runner.cjs.map +1 -1
  22. package/dist/development/src/migrations/runner.js.map +1 -1
  23. package/dist/development/src/migrations/snapshot-factory.cjs.map +1 -1
  24. package/dist/development/src/migrations/snapshot-factory.js.map +1 -1
  25. package/dist/development/src/migrations/snapshot.cjs.map +1 -1
  26. package/dist/development/src/migrations/snapshot.js.map +1 -1
  27. package/dist/development/src/model/ProjectInitializer.cjs.map +1 -1
  28. package/dist/development/src/model/ProjectInitializer.js.map +1 -1
  29. package/dist/development/src/model/ProjectTruncateExecutor.cjs.map +1 -1
  30. package/dist/development/src/model/ProjectTruncateExecutor.js.map +1 -1
  31. package/dist/development/src/model/authorization/AuthorizationActions.cjs.map +1 -1
  32. package/dist/development/src/model/authorization/AuthorizationActions.js.map +1 -1
  33. package/dist/development/src/model/authorization/Identity.cjs.map +1 -1
  34. package/dist/development/src/model/authorization/Identity.js.map +1 -1
  35. package/dist/development/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  36. package/dist/development/src/model/authorization/PermissionsFactory.js.map +1 -1
  37. package/dist/development/src/model/authorization/StagePermissionsFactory.cjs.map +1 -1
  38. package/dist/development/src/model/authorization/StagePermissionsFactory.js.map +1 -1
  39. package/dist/development/src/model/authorization/StageScope.cjs.map +1 -1
  40. package/dist/development/src/model/authorization/StageScope.js.map +1 -1
  41. package/dist/development/src/model/authorization/SwitchEvaluatorNode.cjs.map +1 -1
  42. package/dist/development/src/model/authorization/SwitchEvaluatorNode.js.map +1 -1
  43. package/dist/development/src/model/commands/CommandBus.cjs.map +1 -1
  44. package/dist/development/src/model/commands/CommandBus.js.map +1 -1
  45. package/dist/development/src/model/commands/events/TruncateEventsCommand.cjs.map +1 -1
  46. package/dist/development/src/model/commands/events/TruncateEventsCommand.js.map +1 -1
  47. package/dist/development/src/model/commands/migrations/DeleteMigrationCommand.cjs.map +1 -1
  48. package/dist/development/src/model/commands/migrations/DeleteMigrationCommand.js.map +1 -1
  49. package/dist/development/src/model/commands/migrations/ModifyMigrationCommand.cjs.map +1 -1
  50. package/dist/development/src/model/commands/migrations/ModifyMigrationCommand.js.map +1 -1
  51. package/dist/development/src/model/commands/migrations/SaveMigrationCommand.cjs.map +1 -1
  52. package/dist/development/src/model/commands/migrations/SaveMigrationCommand.js.map +1 -1
  53. package/dist/development/src/model/commands/schema/SaveSchemaCommand.cjs.map +1 -1
  54. package/dist/development/src/model/commands/schema/SaveSchemaCommand.js.map +1 -1
  55. package/dist/development/src/model/commands/stages/CreateStageCommand.cjs.map +1 -1
  56. package/dist/development/src/model/commands/stages/CreateStageCommand.js.map +1 -1
  57. package/dist/development/src/model/database/DatabaseContext.cjs.map +1 -1
  58. package/dist/development/src/model/database/DatabaseContext.js.map +1 -1
  59. package/dist/development/src/model/dtos/ExecutedMigration.cjs.map +1 -1
  60. package/dist/development/src/model/dtos/ExecutedMigration.js.map +1 -1
  61. package/dist/development/src/model/events/EventResponseBuilder.cjs.map +1 -1
  62. package/dist/development/src/model/events/EventResponseBuilder.js.map +1 -1
  63. package/dist/development/src/model/events/EventResponseHelper.cjs.map +1 -1
  64. package/dist/development/src/model/events/EventResponseHelper.js.map +1 -1
  65. package/dist/development/src/model/events/identityUtils.cjs.map +1 -1
  66. package/dist/development/src/model/events/identityUtils.js.map +1 -1
  67. package/dist/development/src/model/events/types.cjs.map +1 -1
  68. package/dist/development/src/model/events/types.js.map +1 -1
  69. package/dist/development/src/model/helpers/modelHelpers.cjs.map +1 -1
  70. package/dist/development/src/model/helpers/modelHelpers.js.map +1 -1
  71. package/dist/development/src/model/metadata/SchemaDatabaseMetadataResolverStore.cjs.map +1 -1
  72. package/dist/development/src/model/metadata/SchemaDatabaseMetadataResolverStore.js.map +1 -1
  73. package/dist/development/src/model/migrations/ExecutedMigrationsResolver.cjs.map +1 -1
  74. package/dist/development/src/model/migrations/ExecutedMigrationsResolver.js.map +1 -1
  75. package/dist/development/src/model/migrations/MigrationAlterer.cjs.map +1 -1
  76. package/dist/development/src/model/migrations/MigrationAlterer.js.map +1 -1
  77. package/dist/development/src/model/migrations/ProjectMigrator.cjs.map +1 -1
  78. package/dist/development/src/model/migrations/ProjectMigrator.js.map +1 -1
  79. package/dist/development/src/model/migrations/SchemaProvider.cjs.map +1 -1
  80. package/dist/development/src/model/migrations/SchemaProvider.js.map +1 -1
  81. package/dist/development/src/model/queries/events/EventQueryHelpers.cjs.map +1 -1
  82. package/dist/development/src/model/queries/events/EventQueryHelpers.js.map +1 -1
  83. package/dist/development/src/model/queries/events/EventsQuery.cjs.map +1 -1
  84. package/dist/development/src/model/queries/events/EventsQuery.js.map +1 -1
  85. package/dist/development/src/model/queries/events/LatestTransactionIdByStageQuery.cjs.map +1 -1
  86. package/dist/development/src/model/queries/events/LatestTransactionIdByStageQuery.js.map +1 -1
  87. package/dist/development/src/model/queries/events/OldValuesQuery.cjs.map +1 -1
  88. package/dist/development/src/model/queries/events/OldValuesQuery.js.map +1 -1
  89. package/dist/development/src/model/queries/migrations/ExecutedMigrationByVersionQuery.cjs.map +1 -1
  90. package/dist/development/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js.map +1 -1
  91. package/dist/development/src/model/queries/migrations/ExecutedMigrationsQuery.cjs.map +1 -1
  92. package/dist/development/src/model/queries/migrations/ExecutedMigrationsQuery.js.map +1 -1
  93. package/dist/development/src/model/queries/schema/SchemaQuery.cjs.map +1 -1
  94. package/dist/development/src/model/queries/schema/SchemaQuery.js.map +1 -1
  95. package/dist/development/src/model/queries/stages/StageBySlugQuery.cjs.map +1 -1
  96. package/dist/development/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
  97. package/dist/development/src/model/queries/stages/StagesQuery.cjs.map +1 -1
  98. package/dist/development/src/model/queries/stages/StagesQuery.js.map +1 -1
  99. package/dist/development/src/model/stages/StageCreator.cjs.map +1 -1
  100. package/dist/development/src/model/stages/StageCreator.js.map +1 -1
  101. package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
  102. package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
  103. package/dist/development/src/resolvers/SystemResolverContext.cjs.map +1 -1
  104. package/dist/development/src/resolvers/SystemResolverContext.js.map +1 -1
  105. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.cjs.map +1 -1
  106. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  107. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.cjs.map +1 -1
  108. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
  109. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.cjs.map +1 -1
  110. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
  111. package/dist/development/src/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  112. package/dist/development/src/resolvers/query/EventsQueryResolver.js.map +1 -1
  113. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs.map +1 -1
  114. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
  115. package/dist/development/src/resolvers/query/SchemaQueryResolver.cjs.map +1 -1
  116. package/dist/development/src/resolvers/query/SchemaQueryResolver.js.map +1 -1
  117. package/dist/development/src/resolvers/query/StagesQueryResolver.cjs.map +1 -1
  118. package/dist/development/src/resolvers/query/StagesQueryResolver.js.map +1 -1
  119. package/dist/development/src/resolvers/types/EventOldValuesResolver.cjs.map +1 -1
  120. package/dist/development/src/resolvers/types/EventOldValuesResolver.js.map +1 -1
  121. package/dist/development/src/schema/dev.graphql.cjs.map +1 -1
  122. package/dist/development/src/schema/system.graphql.cjs.map +1 -1
  123. package/dist/development/src/utils/MapSet.cjs.map +1 -1
  124. package/dist/development/src/utils/MapSet.js.map +1 -1
  125. package/dist/development/src/utils/Response.cjs.map +1 -1
  126. package/dist/development/src/utils/Response.js.map +1 -1
  127. package/dist/development/src/utils/batchQuery.cjs.map +1 -1
  128. package/dist/development/src/utils/batchQuery.js.map +1 -1
  129. package/dist/production/src/SystemContainer.cjs.map +1 -1
  130. package/dist/production/src/SystemContainer.js.map +1 -1
  131. package/dist/production/src/migrations/2020-03-27-130000-project-migrations.cjs.map +1 -1
  132. package/dist/production/src/migrations/2020-03-27-130000-project-migrations.js.map +1 -1
  133. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.cjs.map +1 -1
  134. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -1
  135. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.cjs.map +1 -1
  136. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -1
  137. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.cjs.map +1 -1
  138. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -1
  139. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs.map +1 -1
  140. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -1
  141. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.cjs.map +1 -1
  142. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -1
  143. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.cjs.map +1 -1
  144. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.js.map +1 -1
  145. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.cjs.map +1 -1
  146. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.js.map +1 -1
  147. package/dist/production/src/migrations/2024-06-28-153001-schema-init.cjs.map +1 -1
  148. package/dist/production/src/migrations/2024-06-28-153001-schema-init.js.map +1 -1
  149. package/dist/production/src/migrations/runner.cjs.map +1 -1
  150. package/dist/production/src/migrations/runner.js.map +1 -1
  151. package/dist/production/src/migrations/snapshot-factory.cjs.map +1 -1
  152. package/dist/production/src/migrations/snapshot-factory.js.map +1 -1
  153. package/dist/production/src/migrations/snapshot.cjs.map +1 -1
  154. package/dist/production/src/migrations/snapshot.js.map +1 -1
  155. package/dist/production/src/model/ProjectInitializer.cjs.map +1 -1
  156. package/dist/production/src/model/ProjectInitializer.js.map +1 -1
  157. package/dist/production/src/model/ProjectTruncateExecutor.cjs.map +1 -1
  158. package/dist/production/src/model/ProjectTruncateExecutor.js.map +1 -1
  159. package/dist/production/src/model/authorization/AuthorizationActions.cjs.map +1 -1
  160. package/dist/production/src/model/authorization/AuthorizationActions.js.map +1 -1
  161. package/dist/production/src/model/authorization/Identity.cjs.map +1 -1
  162. package/dist/production/src/model/authorization/Identity.js.map +1 -1
  163. package/dist/production/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  164. package/dist/production/src/model/authorization/PermissionsFactory.js.map +1 -1
  165. package/dist/production/src/model/authorization/StagePermissionsFactory.cjs.map +1 -1
  166. package/dist/production/src/model/authorization/StagePermissionsFactory.js.map +1 -1
  167. package/dist/production/src/model/authorization/StageScope.cjs.map +1 -1
  168. package/dist/production/src/model/authorization/StageScope.js.map +1 -1
  169. package/dist/production/src/model/authorization/SwitchEvaluatorNode.cjs.map +1 -1
  170. package/dist/production/src/model/authorization/SwitchEvaluatorNode.js.map +1 -1
  171. package/dist/production/src/model/commands/CommandBus.cjs.map +1 -1
  172. package/dist/production/src/model/commands/CommandBus.js.map +1 -1
  173. package/dist/production/src/model/commands/events/TruncateEventsCommand.cjs.map +1 -1
  174. package/dist/production/src/model/commands/events/TruncateEventsCommand.js.map +1 -1
  175. package/dist/production/src/model/commands/migrations/DeleteMigrationCommand.cjs.map +1 -1
  176. package/dist/production/src/model/commands/migrations/DeleteMigrationCommand.js.map +1 -1
  177. package/dist/production/src/model/commands/migrations/ModifyMigrationCommand.cjs.map +1 -1
  178. package/dist/production/src/model/commands/migrations/ModifyMigrationCommand.js.map +1 -1
  179. package/dist/production/src/model/commands/migrations/SaveMigrationCommand.cjs.map +1 -1
  180. package/dist/production/src/model/commands/migrations/SaveMigrationCommand.js.map +1 -1
  181. package/dist/production/src/model/commands/schema/SaveSchemaCommand.cjs.map +1 -1
  182. package/dist/production/src/model/commands/schema/SaveSchemaCommand.js.map +1 -1
  183. package/dist/production/src/model/commands/stages/CreateStageCommand.cjs.map +1 -1
  184. package/dist/production/src/model/commands/stages/CreateStageCommand.js.map +1 -1
  185. package/dist/production/src/model/database/DatabaseContext.cjs.map +1 -1
  186. package/dist/production/src/model/database/DatabaseContext.js.map +1 -1
  187. package/dist/production/src/model/dtos/ExecutedMigration.cjs.map +1 -1
  188. package/dist/production/src/model/dtos/ExecutedMigration.js.map +1 -1
  189. package/dist/production/src/model/events/EventResponseBuilder.cjs.map +1 -1
  190. package/dist/production/src/model/events/EventResponseBuilder.js.map +1 -1
  191. package/dist/production/src/model/events/EventResponseHelper.cjs.map +1 -1
  192. package/dist/production/src/model/events/EventResponseHelper.js.map +1 -1
  193. package/dist/production/src/model/events/identityUtils.cjs.map +1 -1
  194. package/dist/production/src/model/events/identityUtils.js.map +1 -1
  195. package/dist/production/src/model/events/types.cjs.map +1 -1
  196. package/dist/production/src/model/events/types.js.map +1 -1
  197. package/dist/production/src/model/helpers/modelHelpers.cjs.map +1 -1
  198. package/dist/production/src/model/helpers/modelHelpers.js.map +1 -1
  199. package/dist/production/src/model/metadata/SchemaDatabaseMetadataResolverStore.cjs.map +1 -1
  200. package/dist/production/src/model/metadata/SchemaDatabaseMetadataResolverStore.js.map +1 -1
  201. package/dist/production/src/model/migrations/ExecutedMigrationsResolver.cjs.map +1 -1
  202. package/dist/production/src/model/migrations/ExecutedMigrationsResolver.js.map +1 -1
  203. package/dist/production/src/model/migrations/MigrationAlterer.cjs.map +1 -1
  204. package/dist/production/src/model/migrations/MigrationAlterer.js.map +1 -1
  205. package/dist/production/src/model/migrations/ProjectMigrator.cjs.map +1 -1
  206. package/dist/production/src/model/migrations/ProjectMigrator.js.map +1 -1
  207. package/dist/production/src/model/migrations/SchemaProvider.cjs.map +1 -1
  208. package/dist/production/src/model/migrations/SchemaProvider.js.map +1 -1
  209. package/dist/production/src/model/queries/events/EventQueryHelpers.cjs.map +1 -1
  210. package/dist/production/src/model/queries/events/EventQueryHelpers.js.map +1 -1
  211. package/dist/production/src/model/queries/events/EventsQuery.cjs.map +1 -1
  212. package/dist/production/src/model/queries/events/EventsQuery.js.map +1 -1
  213. package/dist/production/src/model/queries/events/LatestTransactionIdByStageQuery.cjs.map +1 -1
  214. package/dist/production/src/model/queries/events/LatestTransactionIdByStageQuery.js.map +1 -1
  215. package/dist/production/src/model/queries/events/OldValuesQuery.cjs.map +1 -1
  216. package/dist/production/src/model/queries/events/OldValuesQuery.js.map +1 -1
  217. package/dist/production/src/model/queries/migrations/ExecutedMigrationByVersionQuery.cjs.map +1 -1
  218. package/dist/production/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js.map +1 -1
  219. package/dist/production/src/model/queries/migrations/ExecutedMigrationsQuery.cjs.map +1 -1
  220. package/dist/production/src/model/queries/migrations/ExecutedMigrationsQuery.js.map +1 -1
  221. package/dist/production/src/model/queries/schema/SchemaQuery.cjs.map +1 -1
  222. package/dist/production/src/model/queries/schema/SchemaQuery.js.map +1 -1
  223. package/dist/production/src/model/queries/stages/StageBySlugQuery.cjs.map +1 -1
  224. package/dist/production/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
  225. package/dist/production/src/model/queries/stages/StagesQuery.cjs.map +1 -1
  226. package/dist/production/src/model/queries/stages/StagesQuery.js.map +1 -1
  227. package/dist/production/src/model/stages/StageCreator.cjs.map +1 -1
  228. package/dist/production/src/model/stages/StageCreator.js.map +1 -1
  229. package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
  230. package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
  231. package/dist/production/src/resolvers/SystemResolverContext.cjs.map +1 -1
  232. package/dist/production/src/resolvers/SystemResolverContext.js.map +1 -1
  233. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.cjs.map +1 -1
  234. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  235. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.cjs.map +1 -1
  236. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
  237. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.cjs.map +1 -1
  238. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
  239. package/dist/production/src/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  240. package/dist/production/src/resolvers/query/EventsQueryResolver.js.map +1 -1
  241. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs.map +1 -1
  242. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
  243. package/dist/production/src/resolvers/query/SchemaQueryResolver.cjs.map +1 -1
  244. package/dist/production/src/resolvers/query/SchemaQueryResolver.js.map +1 -1
  245. package/dist/production/src/resolvers/query/StagesQueryResolver.cjs.map +1 -1
  246. package/dist/production/src/resolvers/query/StagesQueryResolver.js.map +1 -1
  247. package/dist/production/src/resolvers/types/EventOldValuesResolver.cjs.map +1 -1
  248. package/dist/production/src/resolvers/types/EventOldValuesResolver.js.map +1 -1
  249. package/dist/production/src/schema/dev.graphql.cjs.map +1 -1
  250. package/dist/production/src/schema/system.graphql.cjs.map +1 -1
  251. package/dist/production/src/utils/MapSet.cjs.map +1 -1
  252. package/dist/production/src/utils/MapSet.js.map +1 -1
  253. package/dist/production/src/utils/Response.cjs.map +1 -1
  254. package/dist/production/src/utils/Response.js.map +1 -1
  255. package/dist/production/src/utils/batchQuery.cjs.map +1 -1
  256. package/dist/production/src/utils/batchQuery.js.map +1 -1
  257. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  258. package/dist/types/tsconfig.tsbuildinfo +1 -1
  259. package/graphql.codegen.yml +1 -1
  260. package/package.json +13 -13
  261. package/tests/cases/migrations/2020-05-06-150000-composed-primary.test.ts +3 -2
  262. package/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.ts +3 -2
  263. package/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.ts +3 -2
  264. package/tests/cases/migrations/2023-09-11-174000-fix-on-delete.test.ts +5 -4
  265. package/tests/cases/migrations/2023-10-19-173000-fix-unique.test.ts +3 -2
  266. package/tests/cases/unit/eventsQuery.test.ts +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"SystemContainer.cjs","sources":["../../../../packages/engine-system-api/src/SystemContainer.ts"],"sourcesContent":["import { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { Builder, Container } from '@contember/dic'\nimport {\n\tMigrationDescriber,\n\tModificationHandlerFactory,\n\tSchemaDiffer,\n\tSchemaMigrator,\n} from '@contember/schema-migrations'\nimport {\n\tContentQueryExecutor,\n\tEventResponseBuilder,\n\tExecutedMigrationsResolver,\n\tIdentityFetcher,\n\tMigrationAlterer,\n\tMigrationsDatabaseMetadataResolverStoreFactory,\n\tPermissionsFactory,\n\tProjectMigrator,\n\tProjectTruncateExecutor,\n} from './model'\nimport { UuidProvider } from './utils'\nimport {\n\tEventsQueryResolver,\n\tExecutedMigrationsQueryResolver,\n\tMigrateMutationResolver,\n\tMigrationAlterMutationResolver,\n\tResolverFactory,\n\tStagesQueryResolver,\n\tSystemResolverContextFactory,\n\tTruncateMutationResolver,\n} from './resolvers'\nimport { EventOldValuesResolver } from './resolvers/types'\nimport { DatabaseMetadataResolver } from '@contember/database'\nimport { SchemaProvider } from './model'\nimport { SchemaQueryResolver } from './resolvers/query/SchemaQueryResolver'\n\nexport interface SystemContainer {\n\tsystemResolversFactory: ResolverFactory\n\tauthorizator: Authorizator\n\tresolverContextFactory: SystemResolverContextFactory\n\tschemaProvider: SchemaProvider\n}\n\ntype Args = {\n\tidentityFetcher: IdentityFetcher\n}\n\nexport class SystemContainerFactory {\n\tconstructor(\n\t\tprivate readonly providers: UuidProvider,\n\t\tprivate readonly modificationHandlerFactory: ModificationHandlerFactory,\n\t\tprivate readonly contentQueryExecutor: ContentQueryExecutor,\n\t) {\n\t}\n\n\tpublic create(container: Args): Container<SystemContainer> {\n\t\treturn this.createBuilder(container)\n\t\t\t.build()\n\t\t\t.pick(\n\t\t\t\t'systemResolversFactory',\n\t\t\t\t'authorizator',\n\t\t\t\t'resolverContextFactory',\n\t\t\t\t'schemaProvider',\n\t\t\t)\n\t}\n\tpublic createBuilder({ identityFetcher }: Args) {\n\t\treturn new Builder({})\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('modificationHandlerFactory', () =>\n\t\t\t\tthis.modificationHandlerFactory)\n\t\t\t.addService('identityFetcher', () =>\n\t\t\t\tidentityFetcher)\n\t\t\t.addService('schemaMigrator', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew SchemaMigrator(modificationHandlerFactory))\n\t\t\t.addService('executedMigrationsResolver', ({}) =>\n\t\t\t\tnew ExecutedMigrationsResolver())\n\t\t\t.addService('schemaProvider', ({ executedMigrationsResolver, schemaMigrator }) =>\n\t\t\t\tnew SchemaProvider(executedMigrationsResolver, schemaMigrator))\n\t\t\t.addService('accessEvaluator', ({}) =>\n\t\t\t\tnew AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create()))\n\t\t\t.addService('authorizator', ({ accessEvaluator }): Authorizator =>\n\t\t\t\tnew Authorizator.Default(accessEvaluator))\n\t\t\t.addService('schemaDiffer', ({ schemaMigrator }) =>\n\t\t\t\tnew SchemaDiffer(schemaMigrator))\n\t\t\t.addService('migrationDescriber', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew MigrationDescriber(modificationHandlerFactory))\n\t\t\t.addService('databaseMetadataResolver', () =>\n\t\t\t\tnew DatabaseMetadataResolver())\n\t\t\t.addService('migrationsDatabaseMetadataResolverStoreFactory', ({ databaseMetadataResolver }) =>\n\t\t\t\tnew MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver))\n\t\t\t.addService('projectMigrator', ({ migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) =>\n\t\t\t\tnew ProjectMigrator(migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor))\n\t\t\t.addService('projectTruncateExecutor', () =>\n\t\t\t\tnew ProjectTruncateExecutor())\n\t\t\t.addService('migrationAlterer', ({ schemaProvider }) =>\n\t\t\t\tnew MigrationAlterer(schemaProvider))\n\t\t\t.addService('eventResponseBuilder', ({ identityFetcher }) =>\n\t\t\t\tnew EventResponseBuilder(identityFetcher))\n\t\t\t.addService('stagesQueryResolver', () =>\n\t\t\t\tnew StagesQueryResolver())\n\t\t\t.addService('executedMigrationsQueryResolver', () =>\n\t\t\t\tnew ExecutedMigrationsQueryResolver())\n\t\t\t.addService('migrateMutationResolver', ({ projectMigrator }) =>\n\t\t\t\tnew MigrateMutationResolver(projectMigrator))\n\t\t\t.addService('truncateMutationResolver', ({ projectTruncateExecutor }) =>\n\t\t\t\tnew TruncateMutationResolver(projectTruncateExecutor))\n\t\t\t.addService('migrationAlterMutationResolver', ({ migrationAlterer }) =>\n\t\t\t\tnew MigrationAlterMutationResolver(migrationAlterer))\n\t\t\t.addService('eventsQueryResolver', ({ eventResponseBuilder }) =>\n\t\t\t\tnew EventsQueryResolver(eventResponseBuilder))\n\t\t\t.addService('eventOldValuesResolver', () =>\n\t\t\t\tnew EventOldValuesResolver())\n\t\t\t.addService('schemaQueryResolver', () =>\n\t\t\t\tnew SchemaQueryResolver())\n\t\t\t.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver }) =>\n\t\t\t\tnew ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver))\n\t\t\t.addService('resolverContextFactory', ({ authorizator }) =>\n\t\t\t\tnew SystemResolverContextFactory(authorizator))\n\t}\n}\n"],"names":["Builder","SchemaMigrator","ExecutedMigrationsResolver","SchemaProvider","AccessEvaluator","PermissionsFactory","Authorizator","SchemaDiffer","MigrationDescriber","DatabaseMetadataResolver","MigrationsDatabaseMetadataResolverStoreFactory","ProjectMigrator","ProjectTruncateExecutor","MigrationAlterer","identityFetcher","EventResponseBuilder","StagesQueryResolver","ExecutedMigrationsQueryResolver","MigrateMutationResolver","TruncateMutationResolver","MigrationAlterMutationResolver","EventsQueryResolver","EventOldValuesResolver","SchemaQueryResolver","ResolverFactory","SystemResolverContextFactory"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CO,MAAM,uBAAuB;AAAA,EACnC,YACkB,WACA,4BACA,sBAChB;AAHgB,SAAA,YAAA;AACA,SAAA,6BAAA;AACA,SAAA,uBAAA;AAAA,EAElB;AAAA,EAEO,OAAO,WAA6C;AAC1D,WAAO,KAAK,cAAc,SAAS,EACjC,MACA,EAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEH;AAAA,EACO,cAAc,EAAE,mBAAyB;AAC/C,WAAO,IAAIA,IAAA,QAAQ,EAAE,EACnB,WAAW,aAAa,MACxB,KAAK,SAAS,EACd,WAAW,8BAA8B,MACzC,KAAK,0BAA0B,EAC/B,WAAW,mBAAmB,MAC9B,eAAe,EACf,WAAW,kBAAkB,CAAC,EAAE,2BAA2B,MAC3D,IAAIC,iBAAAA,eAAe,0BAA0B,CAAC,EAC9C,WAAW,8BAA8B,CAAC,OAC1C,IAAIC,2BAA2B,2BAAA,CAAC,EAChC,WAAW,kBAAkB,CAAC,EAAE,4BAA4B,eAC5D,MAAA,IAAIC,eAAAA,eAAe,4BAA4B,cAAc,CAAC,EAC9D,WAAW,mBAAmB,CAAC,CAAA,MAC/B,IAAIC,cAAAA,gBAAgB,oBAAoB,IAAIC,wCAAqB,OAAO,CAAC,CAAC,EAC1E,WAAW,gBAAgB,CAAC,EAAE,gBAAgB,MAC9C,IAAIC,cAAA,aAAa,QAAQ,eAAe,CAAC,EACzC,WAAW,gBAAgB,CAAC,EAAE,qBAC9B,IAAIC,8BAAa,cAAc,CAAC,EAChC,WAAW,sBAAsB,CAAC,EAAE,2BACpC,MAAA,IAAIC,iBAAAA,mBAAmB,0BAA0B,CAAC,EAClD,WAAW,4BAA4B,MACvC,IAAIC,SAAA,yBAAA,CAA0B,EAC9B,WAAW,kDAAkD,CAAC,EAAE,yBAAyB,MACzF,IAAIC,oCAAAA,+CAA+C,wBAAwB,CAAC,EAC5E,WAAW,mBAAmB,CAAC,EAAE,oBAAoB,gBAAgB,4BAA4B,+CAA+C,MAChJ,IAAIC,gBAAA,gBAAgB,oBAAoB,gBAAgB,4BAA4B,gDAAgD,KAAK,oBAAoB,CAAC,EAC9J,WAAW,2BAA2B,MACtC,IAAIC,wBAAA,wBAAA,CAAyB,EAC7B,WAAW,oBAAoB,CAAC,EAAE,eAClC,MAAA,IAAIC,iBAAAA,iBAAiB,cAAc,CAAC,EACpC,WAAW,wBAAwB,CAAC,EAAE,iBAAAC,iBAAgB,MACtD,IAAIC,qBAAAA,qBAAqBD,gBAAe,CAAC,EACzC,WAAW,uBAAuB,MAClC,IAAIE,wCAAqB,CAAA,EACzB,WAAW,mCAAmC,MAC9C,IAAIC,gCAAAA,gCAAiC,CAAA,EACrC,WAAW,2BAA2B,CAAC,EAAE,gBAAA,MACzC,IAAIC,wBAAwB,wBAAA,eAAe,CAAC,EAC5C,WAAW,4BAA4B,CAAC,EAAE,wBAC1C,MAAA,IAAIC,yBAAyB,yBAAA,uBAAuB,CAAC,EACrD,WAAW,kCAAkC,CAAC,EAAE,uBAChD,IAAIC,8DAA+B,gBAAgB,CAAC,EACpD,WAAW,uBAAuB,CAAC,EAAE,2BACrC,IAAIC,wCAAoB,oBAAoB,CAAC,EAC7C,WAAW,0BAA0B,MACrC,IAAIC,uBAAAA,wBAAwB,EAC5B,WAAW,uBAAuB,MAClC,IAAIC,oBAAAA,oBAAqB,CAAA,EACzB,WAAW,0BAA0B,CAAC,EAAE,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,0BAC9N,IAAIC,gCAAgB,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,mBAAmB,CAAC,EAC9N,WAAW,0BAA0B,CAAC,EAAE,aAAa,MACrD,IAAIC,mDAA6B,YAAY,CAAC;AAAA,EACjD;AACD;;"}
1
+ {"version":3,"file":"SystemContainer.cjs","sources":["../../../../packages/engine-system-api/src/SystemContainer.ts"],"sourcesContent":["import { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { Builder, Container } from '@contember/dic'\nimport {\n\tMigrationDescriber,\n\tModificationHandlerFactory,\n\tSchemaDiffer,\n\tSchemaMigrator,\n} from '@contember/schema-migrations'\nimport {\n\tContentQueryExecutor,\n\tEventResponseBuilder,\n\tExecutedMigrationsResolver,\n\tIdentityFetcher,\n\tMigrationAlterer,\n\tMigrationsDatabaseMetadataResolverStoreFactory,\n\tPermissionsFactory,\n\tProjectMigrator,\n\tProjectTruncateExecutor,\n} from './model'\nimport { UuidProvider } from './utils'\nimport {\n\tEventsQueryResolver,\n\tExecutedMigrationsQueryResolver,\n\tMigrateMutationResolver,\n\tMigrationAlterMutationResolver,\n\tResolverFactory,\n\tStagesQueryResolver,\n\tSystemResolverContextFactory,\n\tTruncateMutationResolver,\n} from './resolvers'\nimport { EventOldValuesResolver } from './resolvers/types'\nimport { DatabaseMetadataResolver } from '@contember/database'\nimport { SchemaProvider } from './model'\nimport { SchemaQueryResolver } from './resolvers/query/SchemaQueryResolver'\n\nexport interface SystemContainer {\n\tsystemResolversFactory: ResolverFactory\n\tauthorizator: Authorizator\n\tresolverContextFactory: SystemResolverContextFactory\n\tschemaProvider: SchemaProvider\n}\n\ntype Args = {\n\tidentityFetcher: IdentityFetcher\n}\n\nexport class SystemContainerFactory {\n\tconstructor(\n\t\tprivate readonly providers: UuidProvider,\n\t\tprivate readonly modificationHandlerFactory: ModificationHandlerFactory,\n\t\tprivate readonly contentQueryExecutor: ContentQueryExecutor,\n\t) {\n\t}\n\n\tpublic create(container: Args): Container<SystemContainer> {\n\t\treturn this.createBuilder(container)\n\t\t\t.build()\n\t\t\t.pick(\n\t\t\t\t'systemResolversFactory',\n\t\t\t\t'authorizator',\n\t\t\t\t'resolverContextFactory',\n\t\t\t\t'schemaProvider',\n\t\t\t)\n\t}\n\tpublic createBuilder({ identityFetcher }: Args) {\n\t\treturn new Builder({})\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('modificationHandlerFactory', () =>\n\t\t\t\tthis.modificationHandlerFactory)\n\t\t\t.addService('identityFetcher', () =>\n\t\t\t\tidentityFetcher)\n\t\t\t.addService('schemaMigrator', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew SchemaMigrator(modificationHandlerFactory))\n\t\t\t.addService('executedMigrationsResolver', ({}) =>\n\t\t\t\tnew ExecutedMigrationsResolver())\n\t\t\t.addService('schemaProvider', ({ executedMigrationsResolver, schemaMigrator }) =>\n\t\t\t\tnew SchemaProvider(executedMigrationsResolver, schemaMigrator))\n\t\t\t.addService('accessEvaluator', ({}) =>\n\t\t\t\tnew AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create()))\n\t\t\t.addService('authorizator', ({ accessEvaluator }): Authorizator =>\n\t\t\t\tnew Authorizator.Default(accessEvaluator))\n\t\t\t.addService('schemaDiffer', ({ schemaMigrator }) =>\n\t\t\t\tnew SchemaDiffer(schemaMigrator))\n\t\t\t.addService('migrationDescriber', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew MigrationDescriber(modificationHandlerFactory))\n\t\t\t.addService('databaseMetadataResolver', () =>\n\t\t\t\tnew DatabaseMetadataResolver())\n\t\t\t.addService('migrationsDatabaseMetadataResolverStoreFactory', ({ databaseMetadataResolver }) =>\n\t\t\t\tnew MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver))\n\t\t\t.addService('projectMigrator', ({ migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) =>\n\t\t\t\tnew ProjectMigrator(migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor))\n\t\t\t.addService('projectTruncateExecutor', () =>\n\t\t\t\tnew ProjectTruncateExecutor())\n\t\t\t.addService('migrationAlterer', ({ schemaProvider }) =>\n\t\t\t\tnew MigrationAlterer(schemaProvider))\n\t\t\t.addService('eventResponseBuilder', ({ identityFetcher }) =>\n\t\t\t\tnew EventResponseBuilder(identityFetcher))\n\t\t\t.addService('stagesQueryResolver', () =>\n\t\t\t\tnew StagesQueryResolver())\n\t\t\t.addService('executedMigrationsQueryResolver', () =>\n\t\t\t\tnew ExecutedMigrationsQueryResolver())\n\t\t\t.addService('migrateMutationResolver', ({ projectMigrator }) =>\n\t\t\t\tnew MigrateMutationResolver(projectMigrator))\n\t\t\t.addService('truncateMutationResolver', ({ projectTruncateExecutor }) =>\n\t\t\t\tnew TruncateMutationResolver(projectTruncateExecutor))\n\t\t\t.addService('migrationAlterMutationResolver', ({ migrationAlterer }) =>\n\t\t\t\tnew MigrationAlterMutationResolver(migrationAlterer))\n\t\t\t.addService('eventsQueryResolver', ({ eventResponseBuilder }) =>\n\t\t\t\tnew EventsQueryResolver(eventResponseBuilder))\n\t\t\t.addService('eventOldValuesResolver', () =>\n\t\t\t\tnew EventOldValuesResolver())\n\t\t\t.addService('schemaQueryResolver', () =>\n\t\t\t\tnew SchemaQueryResolver())\n\t\t\t.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver }) =>\n\t\t\t\tnew ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver))\n\t\t\t.addService('resolverContextFactory', ({ authorizator }) =>\n\t\t\t\tnew SystemResolverContextFactory(authorizator))\n\t}\n}\n"],"names":["Builder","SchemaMigrator","ExecutedMigrationsResolver","SchemaProvider","AccessEvaluator","PermissionsFactory","Authorizator","SchemaDiffer","MigrationDescriber","DatabaseMetadataResolver","MigrationsDatabaseMetadataResolverStoreFactory","ProjectMigrator","ProjectTruncateExecutor","MigrationAlterer","identityFetcher","EventResponseBuilder","StagesQueryResolver","ExecutedMigrationsQueryResolver","MigrateMutationResolver","TruncateMutationResolver","MigrationAlterMutationResolver","EventsQueryResolver","EventOldValuesResolver","SchemaQueryResolver","ResolverFactory","SystemResolverContextFactory"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SystemContainer.js","sources":["../../../../packages/engine-system-api/src/SystemContainer.ts"],"sourcesContent":["import { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { Builder, Container } from '@contember/dic'\nimport {\n\tMigrationDescriber,\n\tModificationHandlerFactory,\n\tSchemaDiffer,\n\tSchemaMigrator,\n} from '@contember/schema-migrations'\nimport {\n\tContentQueryExecutor,\n\tEventResponseBuilder,\n\tExecutedMigrationsResolver,\n\tIdentityFetcher,\n\tMigrationAlterer,\n\tMigrationsDatabaseMetadataResolverStoreFactory,\n\tPermissionsFactory,\n\tProjectMigrator,\n\tProjectTruncateExecutor,\n} from './model'\nimport { UuidProvider } from './utils'\nimport {\n\tEventsQueryResolver,\n\tExecutedMigrationsQueryResolver,\n\tMigrateMutationResolver,\n\tMigrationAlterMutationResolver,\n\tResolverFactory,\n\tStagesQueryResolver,\n\tSystemResolverContextFactory,\n\tTruncateMutationResolver,\n} from './resolvers'\nimport { EventOldValuesResolver } from './resolvers/types'\nimport { DatabaseMetadataResolver } from '@contember/database'\nimport { SchemaProvider } from './model'\nimport { SchemaQueryResolver } from './resolvers/query/SchemaQueryResolver'\n\nexport interface SystemContainer {\n\tsystemResolversFactory: ResolverFactory\n\tauthorizator: Authorizator\n\tresolverContextFactory: SystemResolverContextFactory\n\tschemaProvider: SchemaProvider\n}\n\ntype Args = {\n\tidentityFetcher: IdentityFetcher\n}\n\nexport class SystemContainerFactory {\n\tconstructor(\n\t\tprivate readonly providers: UuidProvider,\n\t\tprivate readonly modificationHandlerFactory: ModificationHandlerFactory,\n\t\tprivate readonly contentQueryExecutor: ContentQueryExecutor,\n\t) {\n\t}\n\n\tpublic create(container: Args): Container<SystemContainer> {\n\t\treturn this.createBuilder(container)\n\t\t\t.build()\n\t\t\t.pick(\n\t\t\t\t'systemResolversFactory',\n\t\t\t\t'authorizator',\n\t\t\t\t'resolverContextFactory',\n\t\t\t\t'schemaProvider',\n\t\t\t)\n\t}\n\tpublic createBuilder({ identityFetcher }: Args) {\n\t\treturn new Builder({})\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('modificationHandlerFactory', () =>\n\t\t\t\tthis.modificationHandlerFactory)\n\t\t\t.addService('identityFetcher', () =>\n\t\t\t\tidentityFetcher)\n\t\t\t.addService('schemaMigrator', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew SchemaMigrator(modificationHandlerFactory))\n\t\t\t.addService('executedMigrationsResolver', ({}) =>\n\t\t\t\tnew ExecutedMigrationsResolver())\n\t\t\t.addService('schemaProvider', ({ executedMigrationsResolver, schemaMigrator }) =>\n\t\t\t\tnew SchemaProvider(executedMigrationsResolver, schemaMigrator))\n\t\t\t.addService('accessEvaluator', ({}) =>\n\t\t\t\tnew AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create()))\n\t\t\t.addService('authorizator', ({ accessEvaluator }): Authorizator =>\n\t\t\t\tnew Authorizator.Default(accessEvaluator))\n\t\t\t.addService('schemaDiffer', ({ schemaMigrator }) =>\n\t\t\t\tnew SchemaDiffer(schemaMigrator))\n\t\t\t.addService('migrationDescriber', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew MigrationDescriber(modificationHandlerFactory))\n\t\t\t.addService('databaseMetadataResolver', () =>\n\t\t\t\tnew DatabaseMetadataResolver())\n\t\t\t.addService('migrationsDatabaseMetadataResolverStoreFactory', ({ databaseMetadataResolver }) =>\n\t\t\t\tnew MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver))\n\t\t\t.addService('projectMigrator', ({ migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) =>\n\t\t\t\tnew ProjectMigrator(migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor))\n\t\t\t.addService('projectTruncateExecutor', () =>\n\t\t\t\tnew ProjectTruncateExecutor())\n\t\t\t.addService('migrationAlterer', ({ schemaProvider }) =>\n\t\t\t\tnew MigrationAlterer(schemaProvider))\n\t\t\t.addService('eventResponseBuilder', ({ identityFetcher }) =>\n\t\t\t\tnew EventResponseBuilder(identityFetcher))\n\t\t\t.addService('stagesQueryResolver', () =>\n\t\t\t\tnew StagesQueryResolver())\n\t\t\t.addService('executedMigrationsQueryResolver', () =>\n\t\t\t\tnew ExecutedMigrationsQueryResolver())\n\t\t\t.addService('migrateMutationResolver', ({ projectMigrator }) =>\n\t\t\t\tnew MigrateMutationResolver(projectMigrator))\n\t\t\t.addService('truncateMutationResolver', ({ projectTruncateExecutor }) =>\n\t\t\t\tnew TruncateMutationResolver(projectTruncateExecutor))\n\t\t\t.addService('migrationAlterMutationResolver', ({ migrationAlterer }) =>\n\t\t\t\tnew MigrationAlterMutationResolver(migrationAlterer))\n\t\t\t.addService('eventsQueryResolver', ({ eventResponseBuilder }) =>\n\t\t\t\tnew EventsQueryResolver(eventResponseBuilder))\n\t\t\t.addService('eventOldValuesResolver', () =>\n\t\t\t\tnew EventOldValuesResolver())\n\t\t\t.addService('schemaQueryResolver', () =>\n\t\t\t\tnew SchemaQueryResolver())\n\t\t\t.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver }) =>\n\t\t\t\tnew ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver))\n\t\t\t.addService('resolverContextFactory', ({ authorizator }) =>\n\t\t\t\tnew SystemResolverContextFactory(authorizator))\n\t}\n}\n"],"names":["identityFetcher"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CO,MAAM,uBAAuB;AAAA,EACnC,YACkB,WACA,4BACA,sBAChB;AAHgB,SAAA,YAAA;AACA,SAAA,6BAAA;AACA,SAAA,uBAAA;AAAA,EAElB;AAAA,EAEO,OAAO,WAA6C;AAC1D,WAAO,KAAK,cAAc,SAAS,EACjC,MACA,EAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEH;AAAA,EACO,cAAc,EAAE,mBAAyB;AAC/C,WAAO,IAAI,QAAQ,EAAE,EACnB,WAAW,aAAa,MACxB,KAAK,SAAS,EACd,WAAW,8BAA8B,MACzC,KAAK,0BAA0B,EAC/B,WAAW,mBAAmB,MAC9B,eAAe,EACf,WAAW,kBAAkB,CAAC,EAAE,2BAA2B,MAC3D,IAAI,eAAe,0BAA0B,CAAC,EAC9C,WAAW,8BAA8B,CAAC,OAC1C,IAAI,2BAA2B,CAAC,EAChC,WAAW,kBAAkB,CAAC,EAAE,4BAA4B,eAC5D,MAAA,IAAI,eAAe,4BAA4B,cAAc,CAAC,EAC9D,WAAW,mBAAmB,CAAC,CAAA,MAC/B,IAAI,gBAAgB,oBAAoB,IAAI,qBAAqB,OAAO,CAAC,CAAC,EAC1E,WAAW,gBAAgB,CAAC,EAAE,gBAAgB,MAC9C,IAAI,aAAa,QAAQ,eAAe,CAAC,EACzC,WAAW,gBAAgB,CAAC,EAAE,qBAC9B,IAAI,aAAa,cAAc,CAAC,EAChC,WAAW,sBAAsB,CAAC,EAAE,2BACpC,MAAA,IAAI,mBAAmB,0BAA0B,CAAC,EAClD,WAAW,4BAA4B,MACvC,IAAI,yBAAA,CAA0B,EAC9B,WAAW,kDAAkD,CAAC,EAAE,yBAAyB,MACzF,IAAI,+CAA+C,wBAAwB,CAAC,EAC5E,WAAW,mBAAmB,CAAC,EAAE,oBAAoB,gBAAgB,4BAA4B,+CAA+C,MAChJ,IAAI,gBAAgB,oBAAoB,gBAAgB,4BAA4B,gDAAgD,KAAK,oBAAoB,CAAC,EAC9J,WAAW,2BAA2B,MACtC,IAAI,wBAAA,CAAyB,EAC7B,WAAW,oBAAoB,CAAC,EAAE,eAClC,MAAA,IAAI,iBAAiB,cAAc,CAAC,EACpC,WAAW,wBAAwB,CAAC,EAAE,iBAAAA,iBAAgB,MACtD,IAAI,qBAAqBA,gBAAe,CAAC,EACzC,WAAW,uBAAuB,MAClC,IAAI,oBAAqB,CAAA,EACzB,WAAW,mCAAmC,MAC9C,IAAI,gCAAiC,CAAA,EACrC,WAAW,2BAA2B,CAAC,EAAE,gBAAA,MACzC,IAAI,wBAAwB,eAAe,CAAC,EAC5C,WAAW,4BAA4B,CAAC,EAAE,wBAC1C,MAAA,IAAI,yBAAyB,uBAAuB,CAAC,EACrD,WAAW,kCAAkC,CAAC,EAAE,uBAChD,IAAI,+BAA+B,gBAAgB,CAAC,EACpD,WAAW,uBAAuB,CAAC,EAAE,2BACrC,IAAI,oBAAoB,oBAAoB,CAAC,EAC7C,WAAW,0BAA0B,MACrC,IAAI,wBAAwB,EAC5B,WAAW,uBAAuB,MAClC,IAAI,oBAAqB,CAAA,EACzB,WAAW,0BAA0B,CAAC,EAAE,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,0BAC9N,IAAI,gBAAgB,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,mBAAmB,CAAC,EAC9N,WAAW,0BAA0B,CAAC,EAAE,aAAa,MACrD,IAAI,6BAA6B,YAAY,CAAC;AAAA,EACjD;AACD;"}
1
+ {"version":3,"file":"SystemContainer.js","sources":["../../../../packages/engine-system-api/src/SystemContainer.ts"],"sourcesContent":["import { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { Builder, Container } from '@contember/dic'\nimport {\n\tMigrationDescriber,\n\tModificationHandlerFactory,\n\tSchemaDiffer,\n\tSchemaMigrator,\n} from '@contember/schema-migrations'\nimport {\n\tContentQueryExecutor,\n\tEventResponseBuilder,\n\tExecutedMigrationsResolver,\n\tIdentityFetcher,\n\tMigrationAlterer,\n\tMigrationsDatabaseMetadataResolverStoreFactory,\n\tPermissionsFactory,\n\tProjectMigrator,\n\tProjectTruncateExecutor,\n} from './model'\nimport { UuidProvider } from './utils'\nimport {\n\tEventsQueryResolver,\n\tExecutedMigrationsQueryResolver,\n\tMigrateMutationResolver,\n\tMigrationAlterMutationResolver,\n\tResolverFactory,\n\tStagesQueryResolver,\n\tSystemResolverContextFactory,\n\tTruncateMutationResolver,\n} from './resolvers'\nimport { EventOldValuesResolver } from './resolvers/types'\nimport { DatabaseMetadataResolver } from '@contember/database'\nimport { SchemaProvider } from './model'\nimport { SchemaQueryResolver } from './resolvers/query/SchemaQueryResolver'\n\nexport interface SystemContainer {\n\tsystemResolversFactory: ResolverFactory\n\tauthorizator: Authorizator\n\tresolverContextFactory: SystemResolverContextFactory\n\tschemaProvider: SchemaProvider\n}\n\ntype Args = {\n\tidentityFetcher: IdentityFetcher\n}\n\nexport class SystemContainerFactory {\n\tconstructor(\n\t\tprivate readonly providers: UuidProvider,\n\t\tprivate readonly modificationHandlerFactory: ModificationHandlerFactory,\n\t\tprivate readonly contentQueryExecutor: ContentQueryExecutor,\n\t) {\n\t}\n\n\tpublic create(container: Args): Container<SystemContainer> {\n\t\treturn this.createBuilder(container)\n\t\t\t.build()\n\t\t\t.pick(\n\t\t\t\t'systemResolversFactory',\n\t\t\t\t'authorizator',\n\t\t\t\t'resolverContextFactory',\n\t\t\t\t'schemaProvider',\n\t\t\t)\n\t}\n\tpublic createBuilder({ identityFetcher }: Args) {\n\t\treturn new Builder({})\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('modificationHandlerFactory', () =>\n\t\t\t\tthis.modificationHandlerFactory)\n\t\t\t.addService('identityFetcher', () =>\n\t\t\t\tidentityFetcher)\n\t\t\t.addService('schemaMigrator', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew SchemaMigrator(modificationHandlerFactory))\n\t\t\t.addService('executedMigrationsResolver', ({}) =>\n\t\t\t\tnew ExecutedMigrationsResolver())\n\t\t\t.addService('schemaProvider', ({ executedMigrationsResolver, schemaMigrator }) =>\n\t\t\t\tnew SchemaProvider(executedMigrationsResolver, schemaMigrator))\n\t\t\t.addService('accessEvaluator', ({}) =>\n\t\t\t\tnew AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create()))\n\t\t\t.addService('authorizator', ({ accessEvaluator }): Authorizator =>\n\t\t\t\tnew Authorizator.Default(accessEvaluator))\n\t\t\t.addService('schemaDiffer', ({ schemaMigrator }) =>\n\t\t\t\tnew SchemaDiffer(schemaMigrator))\n\t\t\t.addService('migrationDescriber', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew MigrationDescriber(modificationHandlerFactory))\n\t\t\t.addService('databaseMetadataResolver', () =>\n\t\t\t\tnew DatabaseMetadataResolver())\n\t\t\t.addService('migrationsDatabaseMetadataResolverStoreFactory', ({ databaseMetadataResolver }) =>\n\t\t\t\tnew MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver))\n\t\t\t.addService('projectMigrator', ({ migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) =>\n\t\t\t\tnew ProjectMigrator(migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor))\n\t\t\t.addService('projectTruncateExecutor', () =>\n\t\t\t\tnew ProjectTruncateExecutor())\n\t\t\t.addService('migrationAlterer', ({ schemaProvider }) =>\n\t\t\t\tnew MigrationAlterer(schemaProvider))\n\t\t\t.addService('eventResponseBuilder', ({ identityFetcher }) =>\n\t\t\t\tnew EventResponseBuilder(identityFetcher))\n\t\t\t.addService('stagesQueryResolver', () =>\n\t\t\t\tnew StagesQueryResolver())\n\t\t\t.addService('executedMigrationsQueryResolver', () =>\n\t\t\t\tnew ExecutedMigrationsQueryResolver())\n\t\t\t.addService('migrateMutationResolver', ({ projectMigrator }) =>\n\t\t\t\tnew MigrateMutationResolver(projectMigrator))\n\t\t\t.addService('truncateMutationResolver', ({ projectTruncateExecutor }) =>\n\t\t\t\tnew TruncateMutationResolver(projectTruncateExecutor))\n\t\t\t.addService('migrationAlterMutationResolver', ({ migrationAlterer }) =>\n\t\t\t\tnew MigrationAlterMutationResolver(migrationAlterer))\n\t\t\t.addService('eventsQueryResolver', ({ eventResponseBuilder }) =>\n\t\t\t\tnew EventsQueryResolver(eventResponseBuilder))\n\t\t\t.addService('eventOldValuesResolver', () =>\n\t\t\t\tnew EventOldValuesResolver())\n\t\t\t.addService('schemaQueryResolver', () =>\n\t\t\t\tnew SchemaQueryResolver())\n\t\t\t.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver }) =>\n\t\t\t\tnew ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver))\n\t\t\t.addService('resolverContextFactory', ({ authorizator }) =>\n\t\t\t\tnew SystemResolverContextFactory(authorizator))\n\t}\n}\n"],"names":["identityFetcher"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CO,MAAM,uBAAuB;AAAA,EACnC,YACkB,WACA,4BACA,sBAChB;AAHgB,SAAA,YAAA;AACA,SAAA,6BAAA;AACA,SAAA,uBAAA;AAAA,EAAA;AAAA,EAIX,OAAO,WAA6C;AAC1D,WAAO,KAAK,cAAc,SAAS,EACjC,MACA,EAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EAAA;AAAA,EAEK,cAAc,EAAE,mBAAyB;AAC/C,WAAO,IAAI,QAAQ,EAAE,EACnB,WAAW,aAAa,MACxB,KAAK,SAAS,EACd,WAAW,8BAA8B,MACzC,KAAK,0BAA0B,EAC/B,WAAW,mBAAmB,MAC9B,eAAe,EACf,WAAW,kBAAkB,CAAC,EAAE,2BAA2B,MAC3D,IAAI,eAAe,0BAA0B,CAAC,EAC9C,WAAW,8BAA8B,CAAC,OAC1C,IAAI,2BAA2B,CAAC,EAChC,WAAW,kBAAkB,CAAC,EAAE,4BAA4B,eAC5D,MAAA,IAAI,eAAe,4BAA4B,cAAc,CAAC,EAC9D,WAAW,mBAAmB,CAAC,CAAA,MAC/B,IAAI,gBAAgB,oBAAoB,IAAI,qBAAqB,OAAO,CAAC,CAAC,EAC1E,WAAW,gBAAgB,CAAC,EAAE,gBAAgB,MAC9C,IAAI,aAAa,QAAQ,eAAe,CAAC,EACzC,WAAW,gBAAgB,CAAC,EAAE,qBAC9B,IAAI,aAAa,cAAc,CAAC,EAChC,WAAW,sBAAsB,CAAC,EAAE,2BACpC,MAAA,IAAI,mBAAmB,0BAA0B,CAAC,EAClD,WAAW,4BAA4B,MACvC,IAAI,yBAAA,CAA0B,EAC9B,WAAW,kDAAkD,CAAC,EAAE,yBAAyB,MACzF,IAAI,+CAA+C,wBAAwB,CAAC,EAC5E,WAAW,mBAAmB,CAAC,EAAE,oBAAoB,gBAAgB,4BAA4B,+CAA+C,MAChJ,IAAI,gBAAgB,oBAAoB,gBAAgB,4BAA4B,gDAAgD,KAAK,oBAAoB,CAAC,EAC9J,WAAW,2BAA2B,MACtC,IAAI,wBAAA,CAAyB,EAC7B,WAAW,oBAAoB,CAAC,EAAE,eAClC,MAAA,IAAI,iBAAiB,cAAc,CAAC,EACpC,WAAW,wBAAwB,CAAC,EAAE,iBAAAA,iBAAgB,MACtD,IAAI,qBAAqBA,gBAAe,CAAC,EACzC,WAAW,uBAAuB,MAClC,IAAI,oBAAoB,CAAC,EACzB,WAAW,mCAAmC,MAC9C,IAAI,gCAAA,CAAiC,EACrC,WAAW,2BAA2B,CAAC,EAAE,gBACzC,MAAA,IAAI,wBAAwB,eAAe,CAAC,EAC5C,WAAW,4BAA4B,CAAC,EAAE,wBAAA,MAC1C,IAAI,yBAAyB,uBAAuB,CAAC,EACrD,WAAW,kCAAkC,CAAC,EAAE,iBAChD,MAAA,IAAI,+BAA+B,gBAAgB,CAAC,EACpD,WAAW,uBAAuB,CAAC,EAAE,qBACrC,MAAA,IAAI,oBAAoB,oBAAoB,CAAC,EAC7C,WAAW,0BAA0B,MACrC,IAAI,uBAAwB,CAAA,EAC5B,WAAW,uBAAuB,MAClC,IAAI,qBAAqB,EACzB,WAAW,0BAA0B,CAAC,EAAE,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,oBAAoB,MAClP,IAAI,gBAAgB,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,mBAAmB,CAAC,EAC9N,WAAW,0BAA0B,CAAC,EAAE,aAAa,MACrD,IAAI,6BAA6B,YAAY,CAAC;AAAA,EAAA;AAElD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-03-27-130000-project-migrations.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":";AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IACnE;AAAA,EAAA;AAED,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;;"}
1
+ {"version":3,"file":"2020-03-27-130000-project-migrations.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":";AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IAAA;AAAA,EAEpE;AACA,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-03-27-130000-project-migrations.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":"AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IACnE;AAAA,EAAA;AAED,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;"}
1
+ {"version":3,"file":"2020-03-27-130000-project-migrations.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":"AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IAAA;AAAA,EAEpE;AACA,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-05-06-150000-composed-primary.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\n\t)\n}\n"],"names":["escapeValue","getJunctionTables","schema"],"mappings":";;;;;;;;;;;;AAKA,MAAM,qBAAqB,CAAC,SAA2B,WAAiB,mBAA6B;AAC5F,UAAA,cAAc,WAAW,aAAa;AAAA,IAC7C,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,IACA,gBAAgB;AAAA,EAAA,CAChB;AACF;AAEA,MAAM,gBAAgB,CAAC,SAA2B,WAAmB,gBAAkC;AACtG,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAkB6BA,+BAAY,YAAY,CAAC,CAAC,CAAC;AAAA,0CAC3BA,+BAAY,YAAY,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iFAQYA,mBAAAA,YAAY,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAUtG;AACD;AAEA,eAAA,+BAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,kBAAkBC,aAAAA,kBAAkB,OAAO,KAAK;AAChD,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,aAAW,SAAS,iBAAiB;AACpC,UAAM,iBAAmC,CAAC,MAAM,cAAc,YAAY,MAAM,qBAAqB,UAAU;AAC/G,eAAWC,WAAU,SAAS;AACrB,cAAA,WAAW,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,IAAI;AAClD,cAAA;AAAA,QACP,EAAE,MAAM,MAAM,WAAW,QAAAA,QAAO;AAAA,QAChC,MAAM,YAAY,WAAW,MAAM,cAAc,aAAa,MAAM,MAAM,qBAAqB;AAAA,MAAA;AAExF,cAAA,cAAc,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,MAAM;AAAA,QAC9D,YAAY,CAAC,MAAM,cAAc,YAAY,MAAM,qBAAqB,UAAU;AAAA,MAAA,CAClF;AACO,cAAA,YAAY,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,WAAW;AAC/C,yBAAA,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,cAAc;AAAA,IAC9E;AACc,kBAAA,SAAS,MAAM,WAAW,cAAc;AAAA,EACvD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AACrB,cAAA,YAAY,EAAE,MAAM,OAAO,WAAW,QAAAA,WAAU,WAAW;AAChD,yBAAA,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,WAAU,CAAC,OAAO,aAAa,CAAC;AAAA,IACvF;AAAA,EACD;AACA,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA,EAIX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAgFZ;AACQ,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,EAAE,MAAM,OAAO,MAAM,QAAQ;AAAA,MAC7B,EAAE,MAAM,OAAO,MAAM,QAAQ;AAAA,IAC9B;AAAA,EAAA;AAEF;;"}
1
+ {"version":3,"file":"2020-05-06-150000-composed-primary.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\n\t)\n}\n"],"names":["escapeValue","getJunctionTables","schema"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-05-06-150000-composed-primary.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\n\t)\n}\n"],"names":["schema"],"mappings":"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"}
1
+ {"version":3,"file":"2020-05-06-150000-composed-primary.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\n\t)\n}\n"],"names":["schema"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-06-01-103000-event-trigger-perf.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-06-01-103000-event-trigger-perf.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_statement', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'STATEMENT',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'statement_trigger_event',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS $$\nDECLARE\n DECLARE new_event_type TEXT;\n DECLARE previous_id UUID;\n DECLARE new_event_data JSONB;\n DECLARE update_diff JSONB;\n DECLARE primary_values JSONB;\n DECLARE old_row JSONB;\n DECLARE new_row JSONB;\nBEGIN\n old_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n primary_values := (\n SELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n FROM jsonb_each(COALESCE(old_row, new_row))\n WHERE key = ANY (TG_ARGV)\n );\n\n\n CASE TG_OP\n WHEN 'INSERT' THEN BEGIN\n new_event_type := 'create';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', COALESCE((\n SELECT jsonb_object_agg(key, value)\n FROM jsonb_each(new_row)\n WHERE NOT (key = ANY (TG_ARGV))\n ), '{}'::JSONB)\n );\n END;\n WHEN 'UPDATE' THEN BEGIN\n update_diff := (\n SELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n FROM jsonb_each(old_row) o\n FULL OUTER JOIN\n jsonb_each(new_row) n ON n.key = o.key\n WHERE n.value IS DISTINCT FROM o.value\n );\n IF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n RETURN NULL;\n END IF;\n new_event_type := 'update';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', update_diff\n );\n END;\n WHEN 'DELETE' THEN BEGIN\n new_event_type := 'delete';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values\n );\n END;\n ELSE RAISE\n EXCEPTION 'Unknown TG_OP value %', TG_OP;\n END CASE;\n CASE WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NULL THEN\n PERFORM set_config('system.current_stage_id' || TG_TABLE_SCHEMA, \"id\"::TEXT, TRUE), set_config('system.current_stage_event' || TG_TABLE_SCHEMA, \"event_id\"::TEXT, TRUE)\n FROM \"stage\"\n WHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n FOR NO KEY UPDATE;\n ELSE\n -- do nothing\n END CASE;\n previous_id := current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID;\n INSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n VALUES (set_config('system.current_stage_event' || TG_TABLE_SCHEMA, system.uuid_generate_v4()::TEXT, TRUE)::UUID, new_event_type, new_event_data, previous_id);\n\n RETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"statement_trigger_event\"() RETURNS TRIGGER AS\n$$\nBEGIN\n CASE\n WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NOT NULL THEN\n UPDATE stage SET event_id = current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID WHERE id = current_setting('system.current_stage_id' || TG_TABLE_SCHEMA)::UUID;\n ELSE\n -- do nothing\n END CASE;\n RETURN NULL;\nEND;\n$$\n LANGUAGE plpgsql`)\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["getJunctionTables","schema"],"mappings":";;;;;;;;;;;AAKA,MAAM,8BAA8B,CAAC,SAA2B,cAAoB;AAC3E,UAAA,cAAc,WAAW,uBAAuB;AAAA,IACvD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,gCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiBA,aAAAA,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA2EO;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAYQ;AACpB,aAAW,SAAS,gBAAgB;AACnC,eAAWC,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IACvE;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IACxE;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"2020-06-01-103000-event-trigger-perf.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-06-01-103000-event-trigger-perf.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_statement', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'STATEMENT',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'statement_trigger_event',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS $$\nDECLARE\n DECLARE new_event_type TEXT;\n DECLARE previous_id UUID;\n DECLARE new_event_data JSONB;\n DECLARE update_diff JSONB;\n DECLARE primary_values JSONB;\n DECLARE old_row JSONB;\n DECLARE new_row JSONB;\nBEGIN\n old_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n primary_values := (\n SELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n FROM jsonb_each(COALESCE(old_row, new_row))\n WHERE key = ANY (TG_ARGV)\n );\n\n\n CASE TG_OP\n WHEN 'INSERT' THEN BEGIN\n new_event_type := 'create';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', COALESCE((\n SELECT jsonb_object_agg(key, value)\n FROM jsonb_each(new_row)\n WHERE NOT (key = ANY (TG_ARGV))\n ), '{}'::JSONB)\n );\n END;\n WHEN 'UPDATE' THEN BEGIN\n update_diff := (\n SELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n FROM jsonb_each(old_row) o\n FULL OUTER JOIN\n jsonb_each(new_row) n ON n.key = o.key\n WHERE n.value IS DISTINCT FROM o.value\n );\n IF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n RETURN NULL;\n END IF;\n new_event_type := 'update';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', update_diff\n );\n END;\n WHEN 'DELETE' THEN BEGIN\n new_event_type := 'delete';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values\n );\n END;\n ELSE RAISE\n EXCEPTION 'Unknown TG_OP value %', TG_OP;\n END CASE;\n CASE WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NULL THEN\n PERFORM set_config('system.current_stage_id' || TG_TABLE_SCHEMA, \"id\"::TEXT, TRUE), set_config('system.current_stage_event' || TG_TABLE_SCHEMA, \"event_id\"::TEXT, TRUE)\n FROM \"stage\"\n WHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n FOR NO KEY UPDATE;\n ELSE\n -- do nothing\n END CASE;\n previous_id := current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID;\n INSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n VALUES (set_config('system.current_stage_event' || TG_TABLE_SCHEMA, system.uuid_generate_v4()::TEXT, TRUE)::UUID, new_event_type, new_event_data, previous_id);\n\n RETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"statement_trigger_event\"() RETURNS TRIGGER AS\n$$\nBEGIN\n CASE\n WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NOT NULL THEN\n UPDATE stage SET event_id = current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID WHERE id = current_setting('system.current_stage_id' || TG_TABLE_SCHEMA)::UUID;\n ELSE\n -- do nothing\n END CASE;\n RETURN NULL;\nEND;\n$$\n LANGUAGE plpgsql`)\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["getJunctionTables","schema"],"mappings":";;;;;;;;;;;AAKA,MAAM,8BAA8B,CAAC,SAA2B,cAAoB;AAC3E,UAAA,cAAc,WAAW,uBAAuB;AAAA,IACvD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EACP,CACA;AACF;AAEA,eAAA,gCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiBA,aAAAA,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA2EO;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAYQ;AACpB,aAAW,SAAS,gBAAgB;AACnC,eAAWC,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EACvE;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EACxE;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-06-01-103000-event-trigger-perf.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-06-01-103000-event-trigger-perf.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_statement', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'STATEMENT',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'statement_trigger_event',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS $$\nDECLARE\n DECLARE new_event_type TEXT;\n DECLARE previous_id UUID;\n DECLARE new_event_data JSONB;\n DECLARE update_diff JSONB;\n DECLARE primary_values JSONB;\n DECLARE old_row JSONB;\n DECLARE new_row JSONB;\nBEGIN\n old_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n primary_values := (\n SELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n FROM jsonb_each(COALESCE(old_row, new_row))\n WHERE key = ANY (TG_ARGV)\n );\n\n\n CASE TG_OP\n WHEN 'INSERT' THEN BEGIN\n new_event_type := 'create';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', COALESCE((\n SELECT jsonb_object_agg(key, value)\n FROM jsonb_each(new_row)\n WHERE NOT (key = ANY (TG_ARGV))\n ), '{}'::JSONB)\n );\n END;\n WHEN 'UPDATE' THEN BEGIN\n update_diff := (\n SELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n FROM jsonb_each(old_row) o\n FULL OUTER JOIN\n jsonb_each(new_row) n ON n.key = o.key\n WHERE n.value IS DISTINCT FROM o.value\n );\n IF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n RETURN NULL;\n END IF;\n new_event_type := 'update';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', update_diff\n );\n END;\n WHEN 'DELETE' THEN BEGIN\n new_event_type := 'delete';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values\n );\n END;\n ELSE RAISE\n EXCEPTION 'Unknown TG_OP value %', TG_OP;\n END CASE;\n CASE WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NULL THEN\n PERFORM set_config('system.current_stage_id' || TG_TABLE_SCHEMA, \"id\"::TEXT, TRUE), set_config('system.current_stage_event' || TG_TABLE_SCHEMA, \"event_id\"::TEXT, TRUE)\n FROM \"stage\"\n WHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n FOR NO KEY UPDATE;\n ELSE\n -- do nothing\n END CASE;\n previous_id := current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID;\n INSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n VALUES (set_config('system.current_stage_event' || TG_TABLE_SCHEMA, system.uuid_generate_v4()::TEXT, TRUE)::UUID, new_event_type, new_event_data, previous_id);\n\n RETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"statement_trigger_event\"() RETURNS TRIGGER AS\n$$\nBEGIN\n CASE\n WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NOT NULL THEN\n UPDATE stage SET event_id = current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID WHERE id = current_setting('system.current_stage_id' || TG_TABLE_SCHEMA)::UUID;\n ELSE\n -- do nothing\n END CASE;\n RETURN NULL;\nEND;\n$$\n LANGUAGE plpgsql`)\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;AAKA,MAAM,8BAA8B,CAAC,SAA2B,cAAoB;AAC3E,UAAA,cAAc,WAAW,uBAAuB;AAAA,IACvD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,gCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA2EO;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAYQ;AACpB,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IACvE;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IACxE;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2020-06-01-103000-event-trigger-perf.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-06-01-103000-event-trigger-perf.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_statement', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'STATEMENT',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'statement_trigger_event',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS $$\nDECLARE\n DECLARE new_event_type TEXT;\n DECLARE previous_id UUID;\n DECLARE new_event_data JSONB;\n DECLARE update_diff JSONB;\n DECLARE primary_values JSONB;\n DECLARE old_row JSONB;\n DECLARE new_row JSONB;\nBEGIN\n old_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n primary_values := (\n SELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n FROM jsonb_each(COALESCE(old_row, new_row))\n WHERE key = ANY (TG_ARGV)\n );\n\n\n CASE TG_OP\n WHEN 'INSERT' THEN BEGIN\n new_event_type := 'create';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', COALESCE((\n SELECT jsonb_object_agg(key, value)\n FROM jsonb_each(new_row)\n WHERE NOT (key = ANY (TG_ARGV))\n ), '{}'::JSONB)\n );\n END;\n WHEN 'UPDATE' THEN BEGIN\n update_diff := (\n SELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n FROM jsonb_each(old_row) o\n FULL OUTER JOIN\n jsonb_each(new_row) n ON n.key = o.key\n WHERE n.value IS DISTINCT FROM o.value\n );\n IF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n RETURN NULL;\n END IF;\n new_event_type := 'update';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', update_diff\n );\n END;\n WHEN 'DELETE' THEN BEGIN\n new_event_type := 'delete';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values\n );\n END;\n ELSE RAISE\n EXCEPTION 'Unknown TG_OP value %', TG_OP;\n END CASE;\n CASE WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NULL THEN\n PERFORM set_config('system.current_stage_id' || TG_TABLE_SCHEMA, \"id\"::TEXT, TRUE), set_config('system.current_stage_event' || TG_TABLE_SCHEMA, \"event_id\"::TEXT, TRUE)\n FROM \"stage\"\n WHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n FOR NO KEY UPDATE;\n ELSE\n -- do nothing\n END CASE;\n previous_id := current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID;\n INSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n VALUES (set_config('system.current_stage_event' || TG_TABLE_SCHEMA, system.uuid_generate_v4()::TEXT, TRUE)::UUID, new_event_type, new_event_data, previous_id);\n\n RETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"statement_trigger_event\"() RETURNS TRIGGER AS\n$$\nBEGIN\n CASE\n WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NOT NULL THEN\n UPDATE stage SET event_id = current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID WHERE id = current_setting('system.current_stage_id' || TG_TABLE_SCHEMA)::UUID;\n ELSE\n -- do nothing\n END CASE;\n RETURN NULL;\nEND;\n$$\n LANGUAGE plpgsql`)\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;AAKA,MAAM,8BAA8B,CAAC,SAA2B,cAAoB;AAC3E,UAAA,cAAc,WAAW,uBAAuB;AAAA,IACvD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EACP,CACA;AACF;AAEA,eAAA,gCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA2EO;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAYQ;AACpB,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EACvE;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EACxE;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-07-155800-event-log-rework.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["getJunctionTables","schema"],"mappings":"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"}
1
+ {"version":3,"file":"2021-05-07-155800-event-log-rework.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["getJunctionTables","schema"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-07-155800-event-log-rework.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;AAKA,MAAM,iBAAiB,CAAC,SAA2B,cAAoB;AAC9D,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,8BAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDV;AACF,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyEX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BX;AAED,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AACrB,cAAA,YAAY,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,qBAAqB;AAC5E,qBAAe,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC1D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AACrB,cAAA,YAAY,EAAE,MAAM,OAAO,WAAW,QAAAA,WAAU,qBAAqB;AAC7E,qBAAe,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACF;"}
1
+ {"version":3,"file":"2021-05-07-155800-event-log-rework.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["schema"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["getJunctionTables","schema"],"mappings":";;;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiBA,aAAAA,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWC,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC5D;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["getJunctionTables","schema"],"mappings":";;;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EACP,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiBA,aAAAA,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWC,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EAC3D;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EAC5D;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC5D;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,EACP,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EAC3D;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EAC5D;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2022-10-03-110000-table-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,YAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,UAAI,SAAS,cAAc,aAAaC,OAAAA,MAAM,SAAS,UAAU;AAChE;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAeC,SAAe,eAAA,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,OAAO,SAAS,CAAC,oBAAoBA,SAAe,eAAA,IAAI,CAAC,EAAE;AAAA,QACtI;AAEA,cAAM,WAAY;AAAA,UACjB,CAACD,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"2022-10-03-110000-table-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,YAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAC;AAE3D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MAAA;AAEK,YAAA,EAAE,cAAc,SAAA,IAAa;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MAAA;AAED,UAAI,SAAS,cAAc,aAAaC,OAAAA,MAAM,SAAS,UAAU;AAChE;AAAA,MAAA;AAED,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QACvB,CAAA,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAeC,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAAA,eAAe,IAAI,CAAC,EAAE;AAAA,QAAA;AAGtI,cAAM,WAAY;AAAA,UACjB,CAACD,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeC,wBAAe,MAAM,MAAM,CAAC,IAAIA,wBAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MAAA;AAAA,IACF;AAAA,EACD;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2022-10-03-110000-table-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,UAAI,SAAS,cAAc,aAAa,MAAM,SAAS,UAAU;AAChE;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,IAAI,CAAC,EAAE;AAAA,QACtI;AAEA,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2022-10-03-110000-table-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAC;AAE3D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MAAA;AAEK,YAAA,EAAE,cAAc,SAAA,IAAa;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MAAA;AAED,UAAI,SAAS,cAAc,aAAa,MAAM,SAAS,UAAU;AAChE;AAAA,MAAA;AAED,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QACvB,CAAA,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,IAAI,CAAC,EAAE;AAAA,QAAA;AAGtI,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MAAA;AAAA,IACF;AAAA,EACD;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2023-09-11-174000-fix-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","ForeignKeyDeleteAction","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,YAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAACC,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,QAAQ,GAAGC,SAAuB,uBAAA;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QACD;AAEA,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAAA,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QACnJ;AAEA,cAAM,WAAY;AAAA,UACjB,CAACF,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeE,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"2023-09-11-174000-fix-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","ForeignKeyDeleteAction","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,YAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAC;AAE3D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MAAA;AAEK,YAAA,EAAE,cAAc,SAAA,IAAa;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MAAA;AAED,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QACvB,CAAA,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAACC,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,QAAQ,GAAGC,gCAAuB;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QAAA;AAGD,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAA,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QAAA;AAGnJ,cAAM,WAAY;AAAA,UACjB,CAACF,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeE,wBAAe,MAAM,MAAM,CAAC,IAAIA,wBAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MAAA;AAAA,IACF;AAAA,EACD;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2023-09-11-174000-fix-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,QAAQ,GAAG,uBAAuB;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QACD;AAEA,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QACnJ;AAEA,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2023-09-11-174000-fix-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAC;AAE3D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE,cAAa;AAAA,QACzC;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MAAA;AAEK,YAAA,EAAE,cAAc,SAAA,IAAa;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MAAA;AAED,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QACvB,CAAA,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,QAAQ,GAAG,uBAAuB;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QAAA;AAGD,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QAAA;AAGnJ,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MAAA;AAAA,IACF;AAAA,EACD;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2023-10-19-173000-fix-unique.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-10-19-173000-fix-unique.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { getUniqueConstraintColumns } from '@contember/schema-migrations'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tif (entity.view) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst expectedUnique: string[][] = []\n\n\t\tfor (const uniq of entity.unique) {\n\t\t\tconst columns = getUniqueConstraintColumns({\n\t\t\t\tentity,\n\t\t\t\tfields: uniq.fields,\n\t\t\t\tmodel: schema.model,\n\t\t\t})\n\t\t\texpectedUnique.push(columns)\n\t\t}\n\n\n\t\tfor (const stage of stages) {\n\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\tconst existingUniqueConstraints = databaseMetadata.uniqueConstraints.filter({ tableName: entity.tableName }).toArray()\n\t\t\tfor (const constraint of existingUniqueConstraints) {\n\t\t\t\tif (constraint.columnNames.length === 1 || expectedUnique.some(it => stringArrayEquals(it, constraint.columnNames))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(constraint.constraintName)}`)\n\t\t\t}\n\t\t}\n\t}\n}\nconst stringArrayEquals = (colA: string[], colB: string[]) => {\n\tif (colA.length !== colB.length) {\n\t\treturn false\n\t}\n\tconst a = [...colA].sort()\n\tconst b = [...colB].sort()\n\treturn a.every((it, index) => it === b[index])\n}\n"],"names":["getUniqueConstraintColumns","wrapIdentifier"],"mappings":";;;AAKA,eAAA,yBAA+B,SAA2B,MAA0C;AALpG,MAAA;AAMC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AAEA,UAAM,iBAA6B,CAAA;AAExB,eAAA,QAAQ,OAAO,QAAQ;AACjC,YAAM,UAAUA,iBAAAA,2BAA2B;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OAAO,OAAO;AAAA,MAAA,CACd;AACD,qBAAe,KAAK,OAAO;AAAA,IAC5B;AAGA,eAAW,SAAS,QAAQ;AACrB,YAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,YAAA,4BAA4B,iBAAiB,kBAAkB,OAAO,EAAE,WAAW,OAAO,UAAA,CAAW,EAAE;AAC7G,iBAAW,cAAc,2BAA2B;AACnD,YAAI,WAAW,YAAY,WAAW,KAAK,eAAe,KAAK,CAAM,OAAA,kBAAkB,IAAI,WAAW,WAAW,CAAC,GAAG;AACpH;AAAA,QACD;AACA,gBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAAA,eAAe,WAAW,cAAc,CAAC,EAAE;AAAA,MAC3J;AAAA,IACD;AAAA,EACD;AACD;AACA,MAAM,oBAAoB,CAAC,MAAgB,SAAmB;AACzD,MAAA,KAAK,WAAW,KAAK,QAAQ;AACzB,WAAA;AAAA,EACR;AACA,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AACzB,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AAClB,SAAA,EAAE,MAAM,CAAC,IAAI,UAAU,OAAO,EAAE,KAAK,CAAC;AAC9C;;"}
1
+ {"version":3,"file":"2023-10-19-173000-fix-unique.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-10-19-173000-fix-unique.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { getUniqueConstraintColumns } from '@contember/schema-migrations'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tif (entity.view) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst expectedUnique: string[][] = []\n\n\t\tfor (const uniq of entity.unique) {\n\t\t\tconst columns = getUniqueConstraintColumns({\n\t\t\t\tentity,\n\t\t\t\tfields: uniq.fields,\n\t\t\t\tmodel: schema.model,\n\t\t\t})\n\t\t\texpectedUnique.push(columns)\n\t\t}\n\n\n\t\tfor (const stage of stages) {\n\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\tconst existingUniqueConstraints = databaseMetadata.uniqueConstraints.filter({ tableName: entity.tableName }).toArray()\n\t\t\tfor (const constraint of existingUniqueConstraints) {\n\t\t\t\tif (constraint.columnNames.length === 1 || expectedUnique.some(it => stringArrayEquals(it, constraint.columnNames))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(constraint.constraintName)}`)\n\t\t\t}\n\t\t}\n\t}\n}\nconst stringArrayEquals = (colA: string[], colB: string[]) => {\n\tif (colA.length !== colB.length) {\n\t\treturn false\n\t}\n\tconst a = [...colA].sort()\n\tconst b = [...colB].sort()\n\treturn a.every((it, index) => it === b[index])\n}\n"],"names":["getUniqueConstraintColumns","wrapIdentifier"],"mappings":";;;AAKA,eAAA,yBAA+B,SAA2B,MAA0C;AALpG,MAAA;AAMC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAC;AAE3D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,QAAI,OAAO,MAAM;AAChB;AAAA,IAAA;AAGD,UAAM,iBAA6B,CAAC;AAEzB,eAAA,QAAQ,OAAO,QAAQ;AACjC,YAAM,UAAUA,iBAAAA,2BAA2B;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OAAO,OAAO;AAAA,MAAA,CACd;AACD,qBAAe,KAAK,OAAO;AAAA,IAAA;AAI5B,eAAW,SAAS,QAAQ;AACrB,YAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,YAAA,4BAA4B,iBAAiB,kBAAkB,OAAO,EAAE,WAAW,OAAO,WAAW,EAAE,QAAQ;AACrH,iBAAW,cAAc,2BAA2B;AACnD,YAAI,WAAW,YAAY,WAAW,KAAK,eAAe,KAAK,CAAM,OAAA,kBAAkB,IAAI,WAAW,WAAW,CAAC,GAAG;AACpH;AAAA,QAAA;AAED,gBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAA,eAAe,WAAW,cAAc,CAAC,EAAE;AAAA,MAAA;AAAA,IAC3J;AAAA,EACD;AAEF;AACA,MAAM,oBAAoB,CAAC,MAAgB,SAAmB;AACzD,MAAA,KAAK,WAAW,KAAK,QAAQ;AACzB,WAAA;AAAA,EAAA;AAER,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AACzB,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AAClB,SAAA,EAAE,MAAM,CAAC,IAAI,UAAU,OAAO,EAAE,KAAK,CAAC;AAC9C;;"}