@supabase/pg-delta 1.0.0-alpha.3 → 1.0.0-alpha.30

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 (1082) hide show
  1. package/README.md +48 -3
  2. package/dist/cli/app.js +26 -3
  3. package/dist/cli/bin/cli.js +13 -1
  4. package/dist/cli/commands/catalog-export.d.ts +5 -0
  5. package/dist/cli/commands/catalog-export.js +85 -0
  6. package/dist/cli/commands/declarative-apply.d.ts +6 -0
  7. package/dist/cli/commands/declarative-apply.js +288 -0
  8. package/dist/cli/commands/declarative-export.d.ts +5 -0
  9. package/dist/cli/commands/declarative-export.js +240 -0
  10. package/dist/cli/commands/plan.js +80 -17
  11. package/dist/cli/commands/sync.js +8 -12
  12. package/dist/cli/exit-code.d.ts +2 -0
  13. package/dist/cli/exit-code.js +7 -0
  14. package/dist/cli/formatters/tree/tree.js +3 -2
  15. package/dist/cli/utils/apply-display.d.ts +52 -0
  16. package/dist/cli/utils/apply-display.js +183 -0
  17. package/dist/cli/utils/export-display.d.ts +43 -0
  18. package/dist/cli/utils/export-display.js +202 -0
  19. package/dist/cli/utils/integrations.d.ts +30 -6
  20. package/dist/cli/utils/integrations.js +98 -6
  21. package/dist/cli/utils/resolve-input.d.ts +7 -0
  22. package/dist/cli/utils/resolve-input.js +13 -0
  23. package/dist/cli/utils.d.ts +5 -0
  24. package/dist/cli/utils.js +6 -3
  25. package/dist/core/catalog-export/index.d.ts +11 -0
  26. package/dist/core/catalog-export/index.js +10 -0
  27. package/dist/core/catalog.diff.d.ts +1 -0
  28. package/dist/core/catalog.diff.js +92 -51
  29. package/dist/core/catalog.filter.d.ts +17 -0
  30. package/dist/core/catalog.filter.js +75 -0
  31. package/dist/core/catalog.model.d.ts +24 -4
  32. package/dist/core/catalog.model.js +147 -30
  33. package/dist/core/catalog.snapshot.d.ts +66 -0
  34. package/dist/core/catalog.snapshot.js +206 -0
  35. package/dist/core/change-utils.d.ts +9 -0
  36. package/dist/core/change-utils.js +71 -0
  37. package/dist/core/change.types.d.ts +22 -0
  38. package/dist/core/change.types.js +37 -1
  39. package/dist/core/connection-url.d.ts +32 -0
  40. package/dist/core/connection-url.js +77 -0
  41. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  42. package/dist/core/declarative-apply/discover-sql.js +86 -0
  43. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  44. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  45. package/dist/core/declarative-apply/index.d.ts +49 -0
  46. package/dist/core/declarative-apply/index.js +134 -0
  47. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  48. package/dist/core/declarative-apply/round-apply.js +378 -0
  49. package/dist/core/depend.js +25 -0
  50. package/dist/core/expand-replace-dependencies.d.ts +11 -3
  51. package/dist/core/expand-replace-dependencies.js +255 -22
  52. package/dist/core/export/file-mapper.d.ts +71 -0
  53. package/dist/core/export/file-mapper.js +474 -0
  54. package/dist/core/export/grouper.d.ts +13 -0
  55. package/dist/core/export/grouper.js +76 -0
  56. package/dist/core/export/index.d.ts +45 -0
  57. package/dist/core/export/index.js +66 -0
  58. package/dist/core/export/types.d.ts +84 -0
  59. package/dist/core/export/types.js +25 -0
  60. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  61. package/dist/core/integrations/filter/dsl.d.ts +82 -41
  62. package/dist/core/integrations/filter/dsl.js +127 -61
  63. package/dist/core/integrations/filter/flatten.d.ts +51 -0
  64. package/dist/core/integrations/filter/flatten.js +129 -0
  65. package/dist/core/integrations/integration-dsl.d.ts +27 -1
  66. package/dist/core/integrations/integration.types.d.ts +26 -1
  67. package/dist/core/integrations/integration.types.js +31 -1
  68. package/dist/core/integrations/merge.d.ts +20 -0
  69. package/dist/core/integrations/merge.js +60 -0
  70. package/dist/core/integrations/serialize/dsl.d.ts +8 -12
  71. package/dist/core/integrations/serialize/dsl.js +2 -2
  72. package/dist/core/integrations/serialize/serialize.types.d.ts +31 -0
  73. package/dist/core/integrations/supabase.d.ts +8 -0
  74. package/dist/core/integrations/supabase.js +242 -8
  75. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  76. package/dist/core/objects/aggregate/aggregate.diff.js +32 -70
  77. package/dist/core/objects/aggregate/aggregate.model.d.ts +18 -8
  78. package/dist/core/objects/aggregate/aggregate.model.js +20 -2
  79. package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +2 -1
  80. package/dist/core/objects/aggregate/changes/aggregate.alter.js +1 -1
  81. package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +1 -1
  82. package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +3 -2
  83. package/dist/core/objects/aggregate/changes/aggregate.comment.js +2 -2
  84. package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +2 -1
  85. package/dist/core/objects/aggregate/changes/aggregate.create.js +2 -2
  86. package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +2 -1
  87. package/dist/core/objects/aggregate/changes/aggregate.drop.js +2 -2
  88. package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +4 -3
  89. package/dist/core/objects/aggregate/changes/aggregate.privilege.js +24 -12
  90. package/dist/core/objects/aggregate/changes/aggregate.security-label.d.ts +28 -0
  91. package/dist/core/objects/aggregate/changes/aggregate.security-label.js +64 -0
  92. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +3 -1
  93. package/dist/core/objects/base.change.d.ts +63 -3
  94. package/dist/core/objects/base.change.js +56 -3
  95. package/dist/core/objects/base.model.d.ts +12 -1
  96. package/dist/core/objects/base.model.js +7 -2
  97. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  98. package/dist/core/objects/base.privilege-diff.js +104 -22
  99. package/dist/core/objects/base.privilege.d.ts +1 -0
  100. package/dist/core/objects/base.privilege.js +9 -2
  101. package/dist/core/objects/collation/changes/collation.alter.d.ts +3 -2
  102. package/dist/core/objects/collation/changes/collation.alter.js +2 -2
  103. package/dist/core/objects/collation/changes/collation.comment.d.ts +3 -2
  104. package/dist/core/objects/collation/changes/collation.comment.js +2 -2
  105. package/dist/core/objects/collation/changes/collation.create.d.ts +2 -1
  106. package/dist/core/objects/collation/changes/collation.create.js +1 -1
  107. package/dist/core/objects/collation/changes/collation.drop.d.ts +2 -1
  108. package/dist/core/objects/collation/changes/collation.drop.js +1 -1
  109. package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
  110. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  111. package/dist/core/objects/diff-context.d.ts +15 -0
  112. package/dist/core/objects/diff-context.js +1 -0
  113. package/dist/core/objects/domain/changes/domain.alter.d.ts +9 -8
  114. package/dist/core/objects/domain/changes/domain.alter.js +8 -8
  115. package/dist/core/objects/domain/changes/domain.base.d.ts +1 -1
  116. package/dist/core/objects/domain/changes/domain.comment.d.ts +3 -2
  117. package/dist/core/objects/domain/changes/domain.comment.js +2 -2
  118. package/dist/core/objects/domain/changes/domain.create.d.ts +3 -2
  119. package/dist/core/objects/domain/changes/domain.create.js +12 -4
  120. package/dist/core/objects/domain/changes/domain.drop.d.ts +2 -1
  121. package/dist/core/objects/domain/changes/domain.drop.js +1 -1
  122. package/dist/core/objects/domain/changes/domain.privilege.d.ts +4 -3
  123. package/dist/core/objects/domain/changes/domain.privilege.js +3 -3
  124. package/dist/core/objects/domain/changes/domain.security-label.d.ts +28 -0
  125. package/dist/core/objects/domain/changes/domain.security-label.js +61 -0
  126. package/dist/core/objects/domain/changes/domain.types.d.ts +3 -1
  127. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  128. package/dist/core/objects/domain/domain.diff.js +32 -77
  129. package/dist/core/objects/domain/domain.model.d.ts +10 -0
  130. package/dist/core/objects/domain/domain.model.js +20 -2
  131. package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +3 -2
  132. package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +2 -2
  133. package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +1 -1
  134. package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +3 -2
  135. package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +2 -2
  136. package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +2 -1
  137. package/dist/core/objects/event-trigger/changes/event-trigger.create.js +1 -1
  138. package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +2 -1
  139. package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +1 -1
  140. package/dist/core/objects/event-trigger/changes/event-trigger.security-label.d.ts +28 -0
  141. package/dist/core/objects/event-trigger/changes/event-trigger.security-label.js +61 -0
  142. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +3 -1
  143. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  144. package/dist/core/objects/event-trigger/event-trigger.diff.js +16 -0
  145. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +10 -0
  146. package/dist/core/objects/event-trigger/event-trigger.model.js +19 -1
  147. package/dist/core/objects/extension/changes/extension.alter.d.ts +3 -2
  148. package/dist/core/objects/extension/changes/extension.alter.js +2 -2
  149. package/dist/core/objects/extension/changes/extension.comment.d.ts +3 -2
  150. package/dist/core/objects/extension/changes/extension.comment.js +2 -2
  151. package/dist/core/objects/extension/changes/extension.create.d.ts +2 -1
  152. package/dist/core/objects/extension/changes/extension.create.js +4 -2
  153. package/dist/core/objects/extension/changes/extension.drop.d.ts +2 -1
  154. package/dist/core/objects/extension/changes/extension.drop.js +1 -1
  155. package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
  156. package/dist/core/objects/extract-with-retry.d.ts +36 -0
  157. package/dist/core/objects/extract-with-retry.js +51 -0
  158. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +3 -2
  159. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +6 -3
  160. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +3 -2
  161. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +2 -2
  162. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +2 -1
  163. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +7 -4
  164. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +2 -1
  165. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +1 -1
  166. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +4 -3
  167. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +3 -3
  168. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
  169. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  170. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  171. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +11 -0
  172. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +13 -2
  173. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
  174. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +10 -9
  175. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +13 -10
  176. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +1 -1
  177. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +3 -2
  178. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +2 -2
  179. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +2 -1
  180. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +7 -4
  181. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +2 -1
  182. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +1 -1
  183. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +4 -3
  184. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +3 -3
  185. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.d.ts +28 -0
  186. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.js +61 -0
  187. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +3 -1
  188. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  189. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +32 -77
  190. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +37 -0
  191. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +60 -4
  192. package/dist/core/objects/foreign-data-wrapper/sensitive-options.d.ts +32 -0
  193. package/dist/core/objects/foreign-data-wrapper/sensitive-options.js +129 -0
  194. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +4 -3
  195. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +7 -4
  196. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +3 -2
  197. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +2 -2
  198. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +2 -1
  199. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +7 -4
  200. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +2 -1
  201. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +1 -1
  202. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +4 -3
  203. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +3 -3
  204. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
  205. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  206. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  207. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +14 -0
  208. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +28 -1
  209. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +2 -1
  210. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +5 -2
  211. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +2 -1
  212. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +7 -4
  213. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +2 -1
  214. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +1 -1
  215. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
  216. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +14 -0
  217. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +28 -1
  218. package/dist/core/objects/index/changes/index.alter.d.ts +4 -3
  219. package/dist/core/objects/index/changes/index.alter.js +3 -3
  220. package/dist/core/objects/index/changes/index.comment.d.ts +3 -2
  221. package/dist/core/objects/index/changes/index.comment.js +2 -2
  222. package/dist/core/objects/index/changes/index.create.d.ts +2 -1
  223. package/dist/core/objects/index/changes/index.create.js +1 -1
  224. package/dist/core/objects/index/changes/index.drop.d.ts +2 -1
  225. package/dist/core/objects/index/changes/index.drop.js +1 -1
  226. package/dist/core/objects/index/changes/index.types.d.ts +1 -0
  227. package/dist/core/objects/index/index.diff.js +0 -1
  228. package/dist/core/objects/index/index.model.d.ts +2 -3
  229. package/dist/core/objects/index/index.model.js +26 -5
  230. package/dist/core/objects/language/changes/language.alter.d.ts +2 -1
  231. package/dist/core/objects/language/changes/language.alter.js +1 -1
  232. package/dist/core/objects/language/changes/language.comment.d.ts +3 -2
  233. package/dist/core/objects/language/changes/language.comment.js +2 -2
  234. package/dist/core/objects/language/changes/language.create.d.ts +2 -1
  235. package/dist/core/objects/language/changes/language.create.js +1 -1
  236. package/dist/core/objects/language/changes/language.drop.d.ts +2 -1
  237. package/dist/core/objects/language/changes/language.drop.js +1 -1
  238. package/dist/core/objects/language/changes/language.privilege.d.ts +4 -3
  239. package/dist/core/objects/language/changes/language.privilege.js +3 -3
  240. package/dist/core/objects/language/changes/language.types.d.ts +1 -0
  241. package/dist/core/objects/language/language.diff.d.ts +2 -5
  242. package/dist/core/objects/language/language.diff.js +7 -39
  243. package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +3 -2
  244. package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +2 -2
  245. package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +1 -1
  246. package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +5 -4
  247. package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +4 -4
  248. package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +2 -1
  249. package/dist/core/objects/materialized-view/changes/materialized-view.create.js +1 -1
  250. package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +2 -1
  251. package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +1 -1
  252. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +4 -3
  253. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +3 -3
  254. package/dist/core/objects/materialized-view/changes/materialized-view.security-label.d.ts +28 -0
  255. package/dist/core/objects/materialized-view/changes/materialized-view.security-label.js +61 -0
  256. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +3 -1
  257. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +3 -8
  258. package/dist/core/objects/materialized-view/materialized-view.diff.js +76 -200
  259. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +27 -4
  260. package/dist/core/objects/materialized-view/materialized-view.model.js +41 -6
  261. package/dist/core/objects/procedure/changes/procedure.alter.d.ts +8 -7
  262. package/dist/core/objects/procedure/changes/procedure.alter.js +19 -19
  263. package/dist/core/objects/procedure/changes/procedure.base.d.ts +1 -1
  264. package/dist/core/objects/procedure/changes/procedure.comment.d.ts +3 -2
  265. package/dist/core/objects/procedure/changes/procedure.comment.js +2 -2
  266. package/dist/core/objects/procedure/changes/procedure.create.d.ts +2 -1
  267. package/dist/core/objects/procedure/changes/procedure.create.js +1 -1
  268. package/dist/core/objects/procedure/changes/procedure.drop.d.ts +2 -1
  269. package/dist/core/objects/procedure/changes/procedure.drop.js +1 -1
  270. package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +4 -3
  271. package/dist/core/objects/procedure/changes/procedure.privilege.js +3 -3
  272. package/dist/core/objects/procedure/changes/procedure.security-label.d.ts +28 -0
  273. package/dist/core/objects/procedure/changes/procedure.security-label.js +69 -0
  274. package/dist/core/objects/procedure/changes/procedure.types.d.ts +3 -1
  275. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  276. package/dist/core/objects/procedure/procedure.diff.js +73 -97
  277. package/dist/core/objects/procedure/procedure.model.d.ts +21 -10
  278. package/dist/core/objects/procedure/procedure.model.js +40 -6
  279. package/dist/core/objects/publication/changes/publication.alter.d.ts +10 -17
  280. package/dist/core/objects/publication/changes/publication.alter.js +12 -21
  281. package/dist/core/objects/publication/changes/publication.base.d.ts +1 -1
  282. package/dist/core/objects/publication/changes/publication.comment.d.ts +3 -2
  283. package/dist/core/objects/publication/changes/publication.comment.js +2 -2
  284. package/dist/core/objects/publication/changes/publication.create.d.ts +2 -1
  285. package/dist/core/objects/publication/changes/publication.create.js +1 -1
  286. package/dist/core/objects/publication/changes/publication.drop.d.ts +2 -1
  287. package/dist/core/objects/publication/changes/publication.drop.js +1 -1
  288. package/dist/core/objects/publication/changes/publication.security-label.d.ts +28 -0
  289. package/dist/core/objects/publication/changes/publication.security-label.js +61 -0
  290. package/dist/core/objects/publication/changes/publication.types.d.ts +4 -2
  291. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  292. package/dist/core/objects/publication/publication.diff.js +24 -13
  293. package/dist/core/objects/publication/publication.model.d.ts +14 -0
  294. package/dist/core/objects/publication/publication.model.js +20 -1
  295. package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +4 -3
  296. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +6 -6
  297. package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +3 -2
  298. package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +2 -2
  299. package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +2 -1
  300. package/dist/core/objects/rls-policy/changes/rls-policy.create.js +24 -1
  301. package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +2 -1
  302. package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +1 -1
  303. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
  304. package/dist/core/objects/rls-policy/rls-policy.diff.js +13 -1
  305. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +51 -2
  306. package/dist/core/objects/rls-policy/rls-policy.model.js +122 -1
  307. package/dist/core/objects/role/changes/role.alter.d.ts +3 -2
  308. package/dist/core/objects/role/changes/role.alter.js +2 -2
  309. package/dist/core/objects/role/changes/role.base.d.ts +1 -1
  310. package/dist/core/objects/role/changes/role.comment.d.ts +3 -2
  311. package/dist/core/objects/role/changes/role.comment.js +2 -2
  312. package/dist/core/objects/role/changes/role.create.d.ts +2 -1
  313. package/dist/core/objects/role/changes/role.create.js +1 -1
  314. package/dist/core/objects/role/changes/role.drop.d.ts +2 -1
  315. package/dist/core/objects/role/changes/role.drop.js +1 -1
  316. package/dist/core/objects/role/changes/role.privilege.d.ts +6 -5
  317. package/dist/core/objects/role/changes/role.privilege.js +5 -5
  318. package/dist/core/objects/role/changes/role.security-label.d.ts +28 -0
  319. package/dist/core/objects/role/changes/role.security-label.js +61 -0
  320. package/dist/core/objects/role/changes/role.types.d.ts +3 -1
  321. package/dist/core/objects/role/role.diff.js +38 -1
  322. package/dist/core/objects/role/role.model.d.ts +14 -3
  323. package/dist/core/objects/role/role.model.js +147 -12
  324. package/dist/core/objects/rule/changes/rule.alter.d.ts +3 -2
  325. package/dist/core/objects/rule/changes/rule.alter.js +2 -2
  326. package/dist/core/objects/rule/changes/rule.comment.d.ts +3 -2
  327. package/dist/core/objects/rule/changes/rule.comment.js +2 -2
  328. package/dist/core/objects/rule/changes/rule.create.d.ts +2 -1
  329. package/dist/core/objects/rule/changes/rule.create.js +1 -1
  330. package/dist/core/objects/rule/changes/rule.drop.d.ts +2 -1
  331. package/dist/core/objects/rule/changes/rule.drop.js +1 -1
  332. package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
  333. package/dist/core/objects/rule/rule.model.d.ts +3 -2
  334. package/dist/core/objects/rule/rule.model.js +20 -3
  335. package/dist/core/objects/schema/changes/schema.alter.d.ts +2 -1
  336. package/dist/core/objects/schema/changes/schema.alter.js +1 -1
  337. package/dist/core/objects/schema/changes/schema.base.d.ts +1 -1
  338. package/dist/core/objects/schema/changes/schema.comment.d.ts +3 -2
  339. package/dist/core/objects/schema/changes/schema.comment.js +2 -2
  340. package/dist/core/objects/schema/changes/schema.create.d.ts +3 -5
  341. package/dist/core/objects/schema/changes/schema.drop.d.ts +2 -1
  342. package/dist/core/objects/schema/changes/schema.drop.js +1 -1
  343. package/dist/core/objects/schema/changes/schema.privilege.d.ts +4 -3
  344. package/dist/core/objects/schema/changes/schema.privilege.js +3 -3
  345. package/dist/core/objects/schema/changes/schema.security-label.d.ts +28 -0
  346. package/dist/core/objects/schema/changes/schema.security-label.js +61 -0
  347. package/dist/core/objects/schema/changes/schema.types.d.ts +3 -1
  348. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  349. package/dist/core/objects/schema/schema.diff.js +40 -78
  350. package/dist/core/objects/schema/schema.model.d.ts +10 -0
  351. package/dist/core/objects/schema/schema.model.js +19 -2
  352. package/dist/core/objects/security-label.types.d.ts +20 -0
  353. package/dist/core/objects/security-label.types.js +46 -0
  354. package/dist/core/objects/sequence/changes/sequence.alter.d.ts +3 -2
  355. package/dist/core/objects/sequence/changes/sequence.alter.js +2 -2
  356. package/dist/core/objects/sequence/changes/sequence.base.d.ts +1 -1
  357. package/dist/core/objects/sequence/changes/sequence.comment.d.ts +3 -2
  358. package/dist/core/objects/sequence/changes/sequence.comment.js +2 -2
  359. package/dist/core/objects/sequence/changes/sequence.create.d.ts +2 -1
  360. package/dist/core/objects/sequence/changes/sequence.create.js +1 -1
  361. package/dist/core/objects/sequence/changes/sequence.drop.d.ts +2 -1
  362. package/dist/core/objects/sequence/changes/sequence.drop.js +11 -3
  363. package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +4 -3
  364. package/dist/core/objects/sequence/changes/sequence.privilege.js +3 -3
  365. package/dist/core/objects/sequence/changes/sequence.security-label.d.ts +28 -0
  366. package/dist/core/objects/sequence/changes/sequence.security-label.js +61 -0
  367. package/dist/core/objects/sequence/changes/sequence.types.d.ts +3 -1
  368. package/dist/core/objects/sequence/sequence.diff.d.ts +6 -8
  369. package/dist/core/objects/sequence/sequence.diff.js +99 -94
  370. package/dist/core/objects/sequence/sequence.model.d.ts +10 -0
  371. package/dist/core/objects/sequence/sequence.model.js +20 -2
  372. package/dist/core/objects/subscription/changes/subscription.alter.d.ts +8 -6
  373. package/dist/core/objects/subscription/changes/subscription.alter.js +11 -6
  374. package/dist/core/objects/subscription/changes/subscription.base.d.ts +1 -1
  375. package/dist/core/objects/subscription/changes/subscription.comment.d.ts +3 -2
  376. package/dist/core/objects/subscription/changes/subscription.comment.js +2 -2
  377. package/dist/core/objects/subscription/changes/subscription.create.d.ts +2 -1
  378. package/dist/core/objects/subscription/changes/subscription.create.js +11 -2
  379. package/dist/core/objects/subscription/changes/subscription.drop.d.ts +3 -1
  380. package/dist/core/objects/subscription/changes/subscription.drop.js +6 -1
  381. package/dist/core/objects/subscription/changes/subscription.security-label.d.ts +28 -0
  382. package/dist/core/objects/subscription/changes/subscription.security-label.js +61 -0
  383. package/dist/core/objects/subscription/changes/subscription.types.d.ts +3 -1
  384. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  385. package/dist/core/objects/subscription/subscription.diff.js +16 -0
  386. package/dist/core/objects/subscription/subscription.model.d.ts +10 -0
  387. package/dist/core/objects/subscription/subscription.model.js +19 -1
  388. package/dist/core/objects/table/changes/table.alter.d.ts +82 -23
  389. package/dist/core/objects/table/changes/table.alter.js +158 -29
  390. package/dist/core/objects/table/changes/table.base.d.ts +1 -1
  391. package/dist/core/objects/table/changes/table.comment.d.ts +7 -6
  392. package/dist/core/objects/table/changes/table.comment.js +6 -6
  393. package/dist/core/objects/table/changes/table.create.d.ts +2 -1
  394. package/dist/core/objects/table/changes/table.create.js +4 -1
  395. package/dist/core/objects/table/changes/table.drop.d.ts +16 -3
  396. package/dist/core/objects/table/changes/table.drop.js +24 -1
  397. package/dist/core/objects/table/changes/table.privilege.d.ts +4 -3
  398. package/dist/core/objects/table/changes/table.privilege.js +3 -3
  399. package/dist/core/objects/table/changes/table.security-label.d.ts +63 -0
  400. package/dist/core/objects/table/changes/table.security-label.js +134 -0
  401. package/dist/core/objects/table/changes/table.types.d.ts +3 -1
  402. package/dist/core/objects/table/table.diff.d.ts +2 -8
  403. package/dist/core/objects/table/table.diff.js +213 -198
  404. package/dist/core/objects/table/table.model.d.ts +65 -23
  405. package/dist/core/objects/table/table.model.js +97 -17
  406. package/dist/core/objects/trigger/changes/trigger.alter.d.ts +2 -1
  407. package/dist/core/objects/trigger/changes/trigger.alter.js +24 -1
  408. package/dist/core/objects/trigger/changes/trigger.comment.d.ts +3 -2
  409. package/dist/core/objects/trigger/changes/trigger.comment.js +2 -2
  410. package/dist/core/objects/trigger/changes/trigger.create.d.ts +2 -1
  411. package/dist/core/objects/trigger/changes/trigger.create.js +5 -6
  412. package/dist/core/objects/trigger/changes/trigger.drop.d.ts +2 -1
  413. package/dist/core/objects/trigger/changes/trigger.drop.js +1 -1
  414. package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
  415. package/dist/core/objects/trigger/trigger.diff.js +7 -2
  416. package/dist/core/objects/trigger/trigger.model.d.ts +12 -2
  417. package/dist/core/objects/trigger/trigger.model.js +39 -5
  418. package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +5 -4
  419. package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +4 -4
  420. package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +1 -1
  421. package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +5 -4
  422. package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +4 -4
  423. package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +2 -1
  424. package/dist/core/objects/type/composite-type/changes/composite-type.create.js +1 -1
  425. package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +2 -1
  426. package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +1 -1
  427. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +4 -3
  428. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +3 -3
  429. package/dist/core/objects/type/composite-type/changes/composite-type.security-label.d.ts +28 -0
  430. package/dist/core/objects/type/composite-type/changes/composite-type.security-label.js +61 -0
  431. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +3 -1
  432. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  433. package/dist/core/objects/type/composite-type/composite-type.diff.js +32 -77
  434. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +25 -3
  435. package/dist/core/objects/type/composite-type/composite-type.model.js +24 -3
  436. package/dist/core/objects/type/enum/changes/enum.alter.d.ts +4 -2
  437. package/dist/core/objects/type/enum/changes/enum.alter.js +6 -2
  438. package/dist/core/objects/type/enum/changes/enum.base.d.ts +1 -1
  439. package/dist/core/objects/type/enum/changes/enum.comment.d.ts +3 -2
  440. package/dist/core/objects/type/enum/changes/enum.comment.js +2 -2
  441. package/dist/core/objects/type/enum/changes/enum.create.d.ts +2 -1
  442. package/dist/core/objects/type/enum/changes/enum.create.js +1 -1
  443. package/dist/core/objects/type/enum/changes/enum.drop.d.ts +2 -1
  444. package/dist/core/objects/type/enum/changes/enum.drop.js +1 -1
  445. package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +4 -3
  446. package/dist/core/objects/type/enum/changes/enum.privilege.js +3 -3
  447. package/dist/core/objects/type/enum/changes/enum.security-label.d.ts +28 -0
  448. package/dist/core/objects/type/enum/changes/enum.security-label.js +61 -0
  449. package/dist/core/objects/type/enum/changes/enum.types.d.ts +3 -1
  450. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  451. package/dist/core/objects/type/enum/enum.diff.js +41 -112
  452. package/dist/core/objects/type/enum/enum.model.d.ts +10 -0
  453. package/dist/core/objects/type/enum/enum.model.js +21 -2
  454. package/dist/core/objects/type/range/changes/range.alter.d.ts +2 -1
  455. package/dist/core/objects/type/range/changes/range.alter.js +1 -1
  456. package/dist/core/objects/type/range/changes/range.base.d.ts +1 -1
  457. package/dist/core/objects/type/range/changes/range.comment.d.ts +3 -2
  458. package/dist/core/objects/type/range/changes/range.comment.js +2 -2
  459. package/dist/core/objects/type/range/changes/range.create.d.ts +2 -1
  460. package/dist/core/objects/type/range/changes/range.create.js +7 -4
  461. package/dist/core/objects/type/range/changes/range.drop.d.ts +2 -1
  462. package/dist/core/objects/type/range/changes/range.drop.js +1 -1
  463. package/dist/core/objects/type/range/changes/range.privilege.d.ts +4 -3
  464. package/dist/core/objects/type/range/changes/range.privilege.js +3 -3
  465. package/dist/core/objects/type/range/changes/range.security-label.d.ts +28 -0
  466. package/dist/core/objects/type/range/changes/range.security-label.js +61 -0
  467. package/dist/core/objects/type/range/changes/range.types.d.ts +3 -1
  468. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  469. package/dist/core/objects/type/range/range.diff.js +32 -77
  470. package/dist/core/objects/type/range/range.model.d.ts +10 -0
  471. package/dist/core/objects/type/range/range.model.js +20 -2
  472. package/dist/core/objects/type/type.types.d.ts +1 -0
  473. package/dist/core/objects/utils.d.ts +2 -0
  474. package/dist/core/objects/utils.js +6 -0
  475. package/dist/core/objects/view/changes/view.alter.d.ts +4 -3
  476. package/dist/core/objects/view/changes/view.alter.js +3 -3
  477. package/dist/core/objects/view/changes/view.base.d.ts +1 -1
  478. package/dist/core/objects/view/changes/view.comment.d.ts +3 -2
  479. package/dist/core/objects/view/changes/view.comment.js +2 -2
  480. package/dist/core/objects/view/changes/view.create.d.ts +2 -1
  481. package/dist/core/objects/view/changes/view.create.js +1 -1
  482. package/dist/core/objects/view/changes/view.drop.d.ts +2 -1
  483. package/dist/core/objects/view/changes/view.drop.js +1 -1
  484. package/dist/core/objects/view/changes/view.privilege.d.ts +4 -3
  485. package/dist/core/objects/view/changes/view.privilege.js +3 -3
  486. package/dist/core/objects/view/changes/view.security-label.d.ts +28 -0
  487. package/dist/core/objects/view/changes/view.security-label.js +61 -0
  488. package/dist/core/objects/view/changes/view.types.d.ts +3 -1
  489. package/dist/core/objects/view/view.diff.d.ts +3 -8
  490. package/dist/core/objects/view/view.diff.js +61 -178
  491. package/dist/core/objects/view/view.model.d.ts +46 -5
  492. package/dist/core/objects/view/view.model.js +43 -18
  493. package/dist/core/plan/apply.d.ts +10 -1
  494. package/dist/core/plan/apply.js +73 -55
  495. package/dist/core/plan/create.d.ts +19 -6
  496. package/dist/core/plan/create.js +160 -201
  497. package/dist/core/plan/execution.d.ts +21 -0
  498. package/dist/core/plan/execution.js +76 -0
  499. package/dist/core/plan/hierarchy.js +4 -4
  500. package/dist/core/plan/index.d.ts +1 -1
  501. package/dist/core/plan/index.js +1 -1
  502. package/dist/core/plan/io.d.ts +2 -1
  503. package/dist/core/plan/io.js +4 -2
  504. package/dist/core/plan/normalize.d.ts +11 -0
  505. package/dist/core/plan/normalize.js +33 -0
  506. package/dist/core/plan/render.d.ts +32 -0
  507. package/dist/core/plan/render.js +104 -0
  508. package/dist/core/plan/serialize.js +16 -4
  509. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  510. package/dist/core/plan/sql-format/constants.js +11 -0
  511. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  512. package/dist/core/plan/sql-format/fixtures.js +2456 -0
  513. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  514. package/dist/core/plan/sql-format/format-utils.js +274 -0
  515. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  516. package/dist/core/plan/sql-format/formatters.js +737 -0
  517. package/dist/core/plan/sql-format/index.d.ts +2 -0
  518. package/dist/core/plan/sql-format/index.js +98 -0
  519. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  520. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  521. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  522. package/dist/core/plan/sql-format/protect.js +269 -0
  523. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  524. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  525. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  526. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  527. package/dist/core/plan/sql-format/types.d.ts +28 -0
  528. package/dist/core/plan/sql-format/types.js +1 -0
  529. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  530. package/dist/core/plan/sql-format/wrap.js +165 -0
  531. package/dist/core/plan/sql-format.d.ts +2 -0
  532. package/dist/core/plan/sql-format.js +1 -0
  533. package/dist/core/plan/ssl-config.d.ts +32 -0
  534. package/dist/core/plan/ssl-config.js +115 -0
  535. package/dist/core/plan/statements.d.ts +2 -1
  536. package/dist/core/plan/statements.js +6 -2
  537. package/dist/core/plan/types.d.ts +64 -9
  538. package/dist/core/plan/types.js +18 -1
  539. package/dist/core/post-diff-normalization.d.ts +43 -0
  540. package/dist/core/post-diff-normalization.js +231 -0
  541. package/dist/core/postgres-config.d.ts +96 -3
  542. package/dist/core/postgres-config.js +287 -4
  543. package/dist/core/sort/custom-constraints.js +65 -1
  544. package/dist/core/sort/cycle-breakers.d.ts +15 -0
  545. package/dist/core/sort/cycle-breakers.js +396 -0
  546. package/dist/core/sort/debug-visualization.js +1 -1
  547. package/dist/core/sort/graph-builder.js +16 -0
  548. package/dist/core/sort/logical-sort.js +34 -47
  549. package/dist/core/sort/sort-changes.js +99 -44
  550. package/dist/core/sort/topological-sort.js +2 -2
  551. package/dist/core/sort/unorderable-cycle-error.d.ts +18 -0
  552. package/dist/core/sort/unorderable-cycle-error.js +20 -0
  553. package/dist/core/sort/utils.d.ts +10 -0
  554. package/dist/core/sort/utils.js +28 -0
  555. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  556. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  557. package/dist/index.d.ts +14 -1
  558. package/dist/index.js +10 -1
  559. package/package.json +76 -38
  560. package/src/cli/app.ts +52 -0
  561. package/src/cli/bin/cli.ts +23 -0
  562. package/src/cli/commands/apply.ts +101 -0
  563. package/src/cli/commands/catalog-export.ts +103 -0
  564. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  565. package/src/cli/commands/declarative-apply.ts +380 -0
  566. package/src/cli/commands/declarative-export.ts +322 -0
  567. package/src/cli/commands/plan.ts +256 -0
  568. package/src/cli/commands/sync.ts +178 -0
  569. package/src/cli/exit-code.test.ts +19 -0
  570. package/src/cli/exit-code.ts +7 -0
  571. package/src/cli/formatters/index.ts +5 -0
  572. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  573. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  574. package/src/cli/formatters/tree/tree.ts +238 -0
  575. package/src/cli/utils/apply-display.test.ts +348 -0
  576. package/src/cli/utils/apply-display.ts +238 -0
  577. package/src/cli/utils/export-display.test.ts +103 -0
  578. package/src/cli/utils/export-display.ts +275 -0
  579. package/src/cli/utils/integrations.test.ts +251 -0
  580. package/src/cli/utils/integrations.ts +170 -0
  581. package/src/cli/utils/resolve-input.test.ts +38 -0
  582. package/src/cli/utils/resolve-input.ts +17 -0
  583. package/src/cli/utils.ts +247 -0
  584. package/src/core/catalog-export/index.ts +20 -0
  585. package/src/core/catalog.diff.test.ts +173 -0
  586. package/src/core/catalog.diff.ts +275 -0
  587. package/src/core/catalog.filter.ts +96 -0
  588. package/src/core/catalog.model.test.ts +122 -0
  589. package/src/core/catalog.model.ts +548 -0
  590. package/src/core/catalog.snapshot.test.ts +490 -0
  591. package/src/core/catalog.snapshot.ts +289 -0
  592. package/src/core/change-utils.test.ts +61 -0
  593. package/src/core/change-utils.ts +73 -0
  594. package/src/core/change.types.ts +94 -0
  595. package/src/core/connection-url.test.ts +142 -0
  596. package/src/core/connection-url.ts +82 -0
  597. package/src/core/context.ts +26 -0
  598. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  599. package/src/core/declarative-apply/discover-sql.ts +107 -0
  600. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  601. package/src/core/declarative-apply/index.test.ts +67 -0
  602. package/src/core/declarative-apply/index.ts +205 -0
  603. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  604. package/src/core/declarative-apply/round-apply.ts +562 -0
  605. package/src/core/depend.ts +1895 -0
  606. package/src/core/expand-replace-dependencies.test.ts +980 -0
  607. package/src/core/expand-replace-dependencies.ts +707 -0
  608. package/src/core/export/file-mapper.test.ts +816 -0
  609. package/src/core/export/file-mapper.ts +579 -0
  610. package/src/core/export/grouper.ts +108 -0
  611. package/src/core/export/index.ts +138 -0
  612. package/src/core/export/types.ts +104 -0
  613. package/src/core/fingerprint.ts +204 -0
  614. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  615. package/src/core/integrations/filter/dsl.test.ts +477 -0
  616. package/src/core/integrations/filter/dsl.ts +305 -0
  617. package/src/core/integrations/filter/filter.types.ts +3 -0
  618. package/src/core/integrations/filter/flatten.test.ts +282 -0
  619. package/src/core/integrations/filter/flatten.ts +166 -0
  620. package/src/core/integrations/integration-dsl.ts +50 -0
  621. package/src/core/integrations/integration.types.ts +65 -0
  622. package/src/core/integrations/merge.test.ts +128 -0
  623. package/src/core/integrations/merge.ts +72 -0
  624. package/src/core/integrations/serialize/dsl.test.ts +110 -0
  625. package/src/core/integrations/serialize/dsl.ts +71 -0
  626. package/src/core/integrations/serialize/serialize.types.ts +40 -0
  627. package/src/core/integrations/supabase.test.ts +533 -0
  628. package/src/core/integrations/supabase.ts +355 -0
  629. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  630. package/src/core/objects/aggregate/aggregate.diff.ts +255 -0
  631. package/src/core/objects/aggregate/aggregate.model.ts +338 -0
  632. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  633. package/src/core/objects/aggregate/changes/aggregate.alter.ts +33 -0
  634. package/src/core/objects/aggregate/changes/aggregate.base.ts +24 -0
  635. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  636. package/src/core/objects/aggregate/changes/aggregate.comment.ts +63 -0
  637. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  638. package/src/core/objects/aggregate/changes/aggregate.create.ts +330 -0
  639. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  640. package/src/core/objects/aggregate/changes/aggregate.drop.ts +33 -0
  641. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +215 -0
  642. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +160 -0
  643. package/src/core/objects/aggregate/changes/aggregate.security-label.ts +99 -0
  644. package/src/core/objects/aggregate/changes/aggregate.types.ts +15 -0
  645. package/src/core/objects/base.change.ts +130 -0
  646. package/src/core/objects/base.default-privileges.ts +204 -0
  647. package/src/core/objects/base.diff.ts +20 -0
  648. package/src/core/objects/base.model.test.ts +43 -0
  649. package/src/core/objects/base.model.ts +87 -0
  650. package/src/core/objects/base.privilege-diff.ts +447 -0
  651. package/src/core/objects/base.privilege.ts +191 -0
  652. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  653. package/src/core/objects/collation/changes/collation.alter.ts +80 -0
  654. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  655. package/src/core/objects/collation/changes/collation.comment.ts +69 -0
  656. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  657. package/src/core/objects/collation/changes/collation.create.ts +107 -0
  658. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  659. package/src/core/objects/collation/changes/collation.drop.ts +38 -0
  660. package/src/core/objects/collation/changes/collation.types.ts +11 -0
  661. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  662. package/src/core/objects/collation/collation.diff.ts +127 -0
  663. package/src/core/objects/collation/collation.model.ts +224 -0
  664. package/src/core/objects/diff-context.ts +16 -0
  665. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  666. package/src/core/objects/domain/changes/domain.alter.ts +287 -0
  667. package/src/core/objects/domain/changes/domain.base.ts +24 -0
  668. package/src/core/objects/domain/changes/domain.comment.ts +60 -0
  669. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  670. package/src/core/objects/domain/changes/domain.create.ts +141 -0
  671. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  672. package/src/core/objects/domain/changes/domain.drop.ts +35 -0
  673. package/src/core/objects/domain/changes/domain.privilege.ts +172 -0
  674. package/src/core/objects/domain/changes/domain.security-label.test.ts +56 -0
  675. package/src/core/objects/domain/changes/domain.security-label.ts +77 -0
  676. package/src/core/objects/domain/changes/domain.types.ts +15 -0
  677. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  678. package/src/core/objects/domain/domain.diff.ts +328 -0
  679. package/src/core/objects/domain/domain.model.ts +211 -0
  680. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  681. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +83 -0
  682. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  683. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +67 -0
  684. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  685. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +73 -0
  686. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  687. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +35 -0
  688. package/src/core/objects/event-trigger/changes/event-trigger.security-label.ts +95 -0
  689. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +13 -0
  690. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  691. package/src/core/objects/event-trigger/event-trigger.diff.ts +160 -0
  692. package/src/core/objects/event-trigger/event-trigger.model.ts +127 -0
  693. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  694. package/src/core/objects/extension/changes/extension.alter.ts +79 -0
  695. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  696. package/src/core/objects/extension/changes/extension.comment.ts +65 -0
  697. package/src/core/objects/extension/changes/extension.create.test.ts +50 -0
  698. package/src/core/objects/extension/changes/extension.create.ts +66 -0
  699. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  700. package/src/core/objects/extension/changes/extension.drop.ts +35 -0
  701. package/src/core/objects/extension/changes/extension.types.ts +11 -0
  702. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  703. package/src/core/objects/extension/extension.diff.ts +90 -0
  704. package/src/core/objects/extension/extension.model.test.ts +98 -0
  705. package/src/core/objects/extension/extension.model.ts +280 -0
  706. package/src/core/objects/extract-with-retry.test.ts +143 -0
  707. package/src/core/objects/extract-with-retry.ts +87 -0
  708. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +166 -0
  709. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +106 -0
  710. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  711. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +73 -0
  712. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +194 -0
  713. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +98 -0
  714. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  715. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +37 -0
  716. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +173 -0
  717. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +13 -0
  718. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  719. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  720. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +160 -0
  721. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +11 -0
  722. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +361 -0
  723. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +346 -0
  724. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +24 -0
  725. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +73 -0
  726. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +264 -0
  727. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +84 -0
  728. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  729. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +38 -0
  730. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +182 -0
  731. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.ts +95 -0
  732. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +15 -0
  733. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  734. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +376 -0
  735. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +302 -0
  736. package/src/core/objects/foreign-data-wrapper/sensitive-options.test.ts +98 -0
  737. package/src/core/objects/foreign-data-wrapper/sensitive-options.ts +133 -0
  738. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +218 -0
  739. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +131 -0
  740. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  741. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +61 -0
  742. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +180 -0
  743. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +84 -0
  744. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  745. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +35 -0
  746. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +165 -0
  747. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +13 -0
  748. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  749. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  750. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +160 -0
  751. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +124 -0
  752. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +74 -0
  753. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  754. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +132 -0
  755. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +69 -0
  756. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  757. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +41 -0
  758. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +9 -0
  759. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  760. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  761. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +123 -0
  762. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  763. package/src/core/objects/index/changes/index.alter.ts +145 -0
  764. package/src/core/objects/index/changes/index.base.ts +20 -0
  765. package/src/core/objects/index/changes/index.comment.ts +64 -0
  766. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  767. package/src/core/objects/index/changes/index.create.ts +69 -0
  768. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  769. package/src/core/objects/index/changes/index.drop.ts +35 -0
  770. package/src/core/objects/index/changes/index.types.ts +7 -0
  771. package/src/core/objects/index/changes/utils.ts +16 -0
  772. package/src/core/objects/index/index.diff.test.ts +153 -0
  773. package/src/core/objects/index/index.diff.ts +242 -0
  774. package/src/core/objects/index/index.model.test.ts +119 -0
  775. package/src/core/objects/index/index.model.ts +398 -0
  776. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  777. package/src/core/objects/language/changes/language.alter.ts +54 -0
  778. package/src/core/objects/language/changes/language.base.ts +20 -0
  779. package/src/core/objects/language/changes/language.comment.ts +59 -0
  780. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  781. package/src/core/objects/language/changes/language.create.ts +105 -0
  782. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  783. package/src/core/objects/language/changes/language.drop.ts +40 -0
  784. package/src/core/objects/language/changes/language.privilege.ts +173 -0
  785. package/src/core/objects/language/changes/language.types.ts +13 -0
  786. package/src/core/objects/language/language.diff.test.ts +135 -0
  787. package/src/core/objects/language/language.diff.ts +144 -0
  788. package/src/core/objects/language/language.model.ts +150 -0
  789. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  790. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +114 -0
  791. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +24 -0
  792. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +177 -0
  793. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  794. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +94 -0
  795. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  796. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +61 -0
  797. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +213 -0
  798. package/src/core/objects/materialized-view/changes/materialized-view.security-label.test.ts +63 -0
  799. package/src/core/objects/materialized-view/changes/materialized-view.security-label.ts +95 -0
  800. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +15 -0
  801. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +265 -0
  802. package/src/core/objects/materialized-view/materialized-view.diff.ts +345 -0
  803. package/src/core/objects/materialized-view/materialized-view.model.test.ts +93 -0
  804. package/src/core/objects/materialized-view/materialized-view.model.ts +302 -0
  805. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  806. package/src/core/objects/procedure/changes/procedure.alter.ts +291 -0
  807. package/src/core/objects/procedure/changes/procedure.base.ts +24 -0
  808. package/src/core/objects/procedure/changes/procedure.comment.ts +71 -0
  809. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  810. package/src/core/objects/procedure/changes/procedure.create.ts +93 -0
  811. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  812. package/src/core/objects/procedure/changes/procedure.drop.ts +50 -0
  813. package/src/core/objects/procedure/changes/procedure.privilege.ts +189 -0
  814. package/src/core/objects/procedure/changes/procedure.security-label.ts +105 -0
  815. package/src/core/objects/procedure/changes/procedure.types.ts +15 -0
  816. package/src/core/objects/procedure/procedure.diff.test.ts +284 -0
  817. package/src/core/objects/procedure/procedure.diff.ts +404 -0
  818. package/src/core/objects/procedure/procedure.model.test.ts +117 -0
  819. package/src/core/objects/procedure/procedure.model.ts +308 -0
  820. package/src/core/objects/procedure/utils.ts +58 -0
  821. package/src/core/objects/publication/changes/publication.alter.test.ts +221 -0
  822. package/src/core/objects/publication/changes/publication.alter.ts +232 -0
  823. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  824. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  825. package/src/core/objects/publication/changes/publication.comment.ts +65 -0
  826. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  827. package/src/core/objects/publication/changes/publication.create.ts +83 -0
  828. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  829. package/src/core/objects/publication/changes/publication.drop.ts +30 -0
  830. package/src/core/objects/publication/changes/publication.security-label.ts +95 -0
  831. package/src/core/objects/publication/changes/publication.types.ts +27 -0
  832. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  833. package/src/core/objects/publication/publication.diff.ts +280 -0
  834. package/src/core/objects/publication/publication.model.ts +229 -0
  835. package/src/core/objects/publication/utils.ts +55 -0
  836. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +283 -0
  837. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +129 -0
  838. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  839. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +70 -0
  840. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +209 -0
  841. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +128 -0
  842. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +33 -0
  843. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +40 -0
  844. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +11 -0
  845. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +81 -0
  846. package/src/core/objects/rls-policy/rls-policy.diff.ts +139 -0
  847. package/src/core/objects/rls-policy/rls-policy.model.ts +273 -0
  848. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  849. package/src/core/objects/role/changes/role.alter.ts +111 -0
  850. package/src/core/objects/role/changes/role.base.ts +25 -0
  851. package/src/core/objects/role/changes/role.comment.ts +56 -0
  852. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  853. package/src/core/objects/role/changes/role.create.ts +103 -0
  854. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  855. package/src/core/objects/role/changes/role.drop.ts +35 -0
  856. package/src/core/objects/role/changes/role.privilege.ts +377 -0
  857. package/src/core/objects/role/changes/role.security-label.ts +77 -0
  858. package/src/core/objects/role/changes/role.types.ts +15 -0
  859. package/src/core/objects/role/role.diff.test.ts +279 -0
  860. package/src/core/objects/role/role.diff.ts +532 -0
  861. package/src/core/objects/role/role.model.ts +484 -0
  862. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  863. package/src/core/objects/rule/changes/rule.alter.ts +73 -0
  864. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  865. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  866. package/src/core/objects/rule/changes/rule.comment.ts +63 -0
  867. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  868. package/src/core/objects/rule/changes/rule.create.ts +43 -0
  869. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  870. package/src/core/objects/rule/changes/rule.drop.ts +30 -0
  871. package/src/core/objects/rule/changes/rule.types.ts +13 -0
  872. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  873. package/src/core/objects/rule/rule.diff.ts +79 -0
  874. package/src/core/objects/rule/rule.model.test.ts +99 -0
  875. package/src/core/objects/rule/rule.model.ts +197 -0
  876. package/src/core/objects/schema/changes/schema.alter.test.ts +32 -0
  877. package/src/core/objects/schema/changes/schema.alter.ts +46 -0
  878. package/src/core/objects/schema/changes/schema.base.ts +24 -0
  879. package/src/core/objects/schema/changes/schema.comment.ts +57 -0
  880. package/src/core/objects/schema/changes/schema.create.test.ts +26 -0
  881. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  882. package/src/core/objects/schema/changes/schema.drop.test.ts +24 -0
  883. package/src/core/objects/schema/changes/schema.drop.ts +35 -0
  884. package/src/core/objects/schema/changes/schema.privilege.ts +176 -0
  885. package/src/core/objects/schema/changes/schema.security-label.test.ts +76 -0
  886. package/src/core/objects/schema/changes/schema.security-label.ts +77 -0
  887. package/src/core/objects/schema/changes/schema.types.ts +15 -0
  888. package/src/core/objects/schema/schema.diff.test.ts +43 -0
  889. package/src/core/objects/schema/schema.diff.ts +188 -0
  890. package/src/core/objects/schema/schema.model.ts +127 -0
  891. package/src/core/objects/security-label.types.test.ts +106 -0
  892. package/src/core/objects/security-label.types.ts +61 -0
  893. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  894. package/src/core/objects/sequence/changes/sequence.alter.ts +116 -0
  895. package/src/core/objects/sequence/changes/sequence.base.ts +24 -0
  896. package/src/core/objects/sequence/changes/sequence.comment.ts +61 -0
  897. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  898. package/src/core/objects/sequence/changes/sequence.create.ts +112 -0
  899. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  900. package/src/core/objects/sequence/changes/sequence.drop.ts +50 -0
  901. package/src/core/objects/sequence/changes/sequence.privilege.ts +180 -0
  902. package/src/core/objects/sequence/changes/sequence.security-label.test.ts +58 -0
  903. package/src/core/objects/sequence/changes/sequence.security-label.ts +92 -0
  904. package/src/core/objects/sequence/changes/sequence.types.ts +15 -0
  905. package/src/core/objects/sequence/sequence.diff.test.ts +521 -0
  906. package/src/core/objects/sequence/sequence.diff.ts +392 -0
  907. package/src/core/objects/sequence/sequence.model.ts +206 -0
  908. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  909. package/src/core/objects/subscription/changes/subscription.alter.ts +117 -0
  910. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  911. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  912. package/src/core/objects/subscription/changes/subscription.comment.ts +65 -0
  913. package/src/core/objects/subscription/changes/subscription.create.test.ts +83 -0
  914. package/src/core/objects/subscription/changes/subscription.create.ts +79 -0
  915. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  916. package/src/core/objects/subscription/changes/subscription.drop.ts +27 -0
  917. package/src/core/objects/subscription/changes/subscription.security-label.ts +95 -0
  918. package/src/core/objects/subscription/changes/subscription.traits.test.ts +83 -0
  919. package/src/core/objects/subscription/changes/subscription.types.ts +25 -0
  920. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  921. package/src/core/objects/subscription/subscription.diff.ts +275 -0
  922. package/src/core/objects/subscription/subscription.model.ts +211 -0
  923. package/src/core/objects/subscription/utils.ts +156 -0
  924. package/src/core/objects/table/changes/table.alter.test.ts +902 -0
  925. package/src/core/objects/table/changes/table.alter.ts +975 -0
  926. package/src/core/objects/table/changes/table.base.ts +24 -0
  927. package/src/core/objects/table/changes/table.comment.ts +261 -0
  928. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  929. package/src/core/objects/table/changes/table.create.ts +193 -0
  930. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  931. package/src/core/objects/table/changes/table.drop.ts +87 -0
  932. package/src/core/objects/table/changes/table.privilege.ts +201 -0
  933. package/src/core/objects/table/changes/table.security-label.test.ts +140 -0
  934. package/src/core/objects/table/changes/table.security-label.ts +183 -0
  935. package/src/core/objects/table/changes/table.types.ts +15 -0
  936. package/src/core/objects/table/table.diff.test.ts +1382 -0
  937. package/src/core/objects/table/table.diff.ts +1034 -0
  938. package/src/core/objects/table/table.model.test.ts +209 -0
  939. package/src/core/objects/table/table.model.ts +555 -0
  940. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  941. package/src/core/objects/trigger/changes/trigger.alter.ts +74 -0
  942. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  943. package/src/core/objects/trigger/changes/trigger.comment.ts +65 -0
  944. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  945. package/src/core/objects/trigger/changes/trigger.create.ts +89 -0
  946. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  947. package/src/core/objects/trigger/changes/trigger.drop.ts +40 -0
  948. package/src/core/objects/trigger/changes/trigger.types.ts +11 -0
  949. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  950. package/src/core/objects/trigger/trigger.diff.ts +121 -0
  951. package/src/core/objects/trigger/trigger.model.test.ts +113 -0
  952. package/src/core/objects/trigger/trigger.model.ts +291 -0
  953. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  954. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +175 -0
  955. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +24 -0
  956. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +146 -0
  957. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  958. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +96 -0
  959. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  960. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +38 -0
  961. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +176 -0
  962. package/src/core/objects/type/composite-type/changes/composite-type.security-label.ts +95 -0
  963. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +15 -0
  964. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  965. package/src/core/objects/type/composite-type/composite-type.diff.ts +343 -0
  966. package/src/core/objects/type/composite-type/composite-type.model.ts +277 -0
  967. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  968. package/src/core/objects/type/enum/changes/enum.alter.ts +97 -0
  969. package/src/core/objects/type/enum/changes/enum.base.ts +24 -0
  970. package/src/core/objects/type/enum/changes/enum.comment.ts +65 -0
  971. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  972. package/src/core/objects/type/enum/changes/enum.create.ts +57 -0
  973. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  974. package/src/core/objects/type/enum/changes/enum.drop.ts +35 -0
  975. package/src/core/objects/type/enum/changes/enum.privilege.ts +176 -0
  976. package/src/core/objects/type/enum/changes/enum.security-label.ts +77 -0
  977. package/src/core/objects/type/enum/changes/enum.types.ts +15 -0
  978. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  979. package/src/core/objects/type/enum/enum.diff.ts +341 -0
  980. package/src/core/objects/type/enum/enum.model.ts +218 -0
  981. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  982. package/src/core/objects/type/range/changes/range.alter.ts +52 -0
  983. package/src/core/objects/type/range/changes/range.base.ts +24 -0
  984. package/src/core/objects/type/range/changes/range.comment.ts +65 -0
  985. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  986. package/src/core/objects/type/range/changes/range.create.ts +156 -0
  987. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  988. package/src/core/objects/type/range/changes/range.drop.ts +35 -0
  989. package/src/core/objects/type/range/changes/range.privilege.ts +176 -0
  990. package/src/core/objects/type/range/changes/range.security-label.ts +77 -0
  991. package/src/core/objects/type/range/changes/range.types.ts +15 -0
  992. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  993. package/src/core/objects/type/range/range.diff.ts +230 -0
  994. package/src/core/objects/type/range/range.model.ts +208 -0
  995. package/src/core/objects/type/type.types.ts +6 -0
  996. package/src/core/objects/utils.ts +177 -0
  997. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  998. package/src/core/objects/view/changes/view.alter.ts +113 -0
  999. package/src/core/objects/view/changes/view.base.ts +24 -0
  1000. package/src/core/objects/view/changes/view.comment.ts +60 -0
  1001. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  1002. package/src/core/objects/view/changes/view.create.ts +74 -0
  1003. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  1004. package/src/core/objects/view/changes/view.drop.ts +41 -0
  1005. package/src/core/objects/view/changes/view.privilege.ts +201 -0
  1006. package/src/core/objects/view/changes/view.security-label.test.ts +64 -0
  1007. package/src/core/objects/view/changes/view.security-label.ts +77 -0
  1008. package/src/core/objects/view/changes/view.types.ts +15 -0
  1009. package/src/core/objects/view/view.diff.test.ts +269 -0
  1010. package/src/core/objects/view/view.diff.ts +268 -0
  1011. package/src/core/objects/view/view.model.test.ts +90 -0
  1012. package/src/core/objects/view/view.model.ts +308 -0
  1013. package/src/core/plan/apply.ts +217 -0
  1014. package/src/core/plan/create.ts +329 -0
  1015. package/src/core/plan/execution.test.ts +231 -0
  1016. package/src/core/plan/execution.ts +115 -0
  1017. package/src/core/plan/hierarchy.ts +574 -0
  1018. package/src/core/plan/index.ts +29 -0
  1019. package/src/core/plan/io.ts +22 -0
  1020. package/src/core/plan/normalize.test.ts +69 -0
  1021. package/src/core/plan/normalize.ts +40 -0
  1022. package/src/core/plan/render.test.ts +134 -0
  1023. package/src/core/plan/render.ts +153 -0
  1024. package/src/core/plan/risk.ts +48 -0
  1025. package/src/core/plan/serialize.test.ts +317 -0
  1026. package/src/core/plan/serialize.ts +209 -0
  1027. package/src/core/plan/sql-format/constants.ts +13 -0
  1028. package/src/core/plan/sql-format/fixtures.ts +2812 -0
  1029. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  1030. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  1031. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  1032. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  1033. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1062 -0
  1034. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1281 -0
  1035. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1058 -0
  1036. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1049 -0
  1037. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  1038. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  1039. package/src/core/plan/sql-format/format-utils.ts +391 -0
  1040. package/src/core/plan/sql-format/formatters.ts +921 -0
  1041. package/src/core/plan/sql-format/index.ts +149 -0
  1042. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  1043. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  1044. package/src/core/plan/sql-format/protect.test.ts +127 -0
  1045. package/src/core/plan/sql-format/protect.ts +337 -0
  1046. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  1047. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  1048. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  1049. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  1050. package/src/core/plan/sql-format/types.ts +31 -0
  1051. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  1052. package/src/core/plan/sql-format/wrap.ts +196 -0
  1053. package/src/core/plan/sql-format.ts +2 -0
  1054. package/src/core/plan/ssl-config.ts +172 -0
  1055. package/src/core/plan/statements.ts +22 -0
  1056. package/src/core/plan/types.ts +236 -0
  1057. package/src/core/post-diff-normalization.test.ts +590 -0
  1058. package/src/core/post-diff-normalization.ts +296 -0
  1059. package/src/core/postgres-config.test.ts +374 -0
  1060. package/src/core/postgres-config.ts +474 -0
  1061. package/src/core/sort/custom-constraints.ts +235 -0
  1062. package/src/core/sort/cycle-breakers.test.ts +836 -0
  1063. package/src/core/sort/cycle-breakers.ts +481 -0
  1064. package/src/core/sort/debug-visualization.ts +239 -0
  1065. package/src/core/sort/dependency-filter.ts +224 -0
  1066. package/src/core/sort/graph-builder.ts +241 -0
  1067. package/src/core/sort/graph-utils.ts +51 -0
  1068. package/src/core/sort/logical-sort.test.ts +371 -0
  1069. package/src/core/sort/logical-sort.ts +573 -0
  1070. package/src/core/sort/sort-changes.test.ts +390 -0
  1071. package/src/core/sort/sort-changes.ts +324 -0
  1072. package/src/core/sort/topological-sort.test.ts +275 -0
  1073. package/src/core/sort/topological-sort.ts +184 -0
  1074. package/src/core/sort/types.ts +112 -0
  1075. package/src/core/sort/unorderable-cycle-error.test.ts +60 -0
  1076. package/src/core/sort/unorderable-cycle-error.ts +23 -0
  1077. package/src/core/sort/utils.ts +107 -0
  1078. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  1079. package/src/index.ts +58 -0
  1080. package/src/typedoc.ts +253 -0
  1081. package/dist/core/integrations/filter/extractors.d.ts +0 -12
  1082. package/dist/core/integrations/filter/extractors.js +0 -136
@@ -1,5 +1,6 @@
1
- import { getSchema } from "../integrations/filter/extractors.js";
1
+ import { getSchema } from "../change-utils.js";
2
2
  import { GrantRoleDefaultPrivileges, RevokeRoleDefaultPrivileges, } from "../objects/role/changes/role.privilege.js";
3
+ import { AlterTableAlterColumnAddIdentity, AlterTableAlterColumnDropDefault, AlterTableAlterColumnDropIdentity, AlterTableAlterColumnSetDefault, } from "../objects/table/changes/table.alter.js";
3
4
  /**
4
5
  * Maps object type names to PostgreSQL default privilege objtype codes.
5
6
  * This mirrors the mapping in base.default-privileges.ts.
@@ -116,11 +117,74 @@ function generateDefaultPrivilegeConstraints(changes) {
116
117
  }
117
118
  return constraints;
118
119
  }
120
+ function generateIdentityTransitionConstraints(changes) {
121
+ const constraints = [];
122
+ const dropDefaultByColumn = new Map();
123
+ const dropIdentityByColumn = new Map();
124
+ const addIdentityByColumn = new Map();
125
+ const setDefaultByColumn = new Map();
126
+ for (let i = 0; i < changes.length; i++) {
127
+ const change = changes[i];
128
+ const columnKey = "table" in change && "column" in change
129
+ ? `${change.table.schema}.${change.table.name}.${change.column.name}`
130
+ : null;
131
+ if (!columnKey)
132
+ continue;
133
+ if (change instanceof AlterTableAlterColumnDropDefault) {
134
+ const entries = dropDefaultByColumn.get(columnKey) ?? [];
135
+ entries.push(i);
136
+ dropDefaultByColumn.set(columnKey, entries);
137
+ }
138
+ else if (change instanceof AlterTableAlterColumnAddIdentity) {
139
+ const entries = addIdentityByColumn.get(columnKey) ?? [];
140
+ entries.push(i);
141
+ addIdentityByColumn.set(columnKey, entries);
142
+ }
143
+ else if (change instanceof AlterTableAlterColumnDropIdentity) {
144
+ const entries = dropIdentityByColumn.get(columnKey) ?? [];
145
+ entries.push(i);
146
+ dropIdentityByColumn.set(columnKey, entries);
147
+ }
148
+ else if (change instanceof AlterTableAlterColumnSetDefault) {
149
+ const entries = setDefaultByColumn.get(columnKey) ?? [];
150
+ entries.push(i);
151
+ setDefaultByColumn.set(columnKey, entries);
152
+ }
153
+ }
154
+ // These rules only order same-column ALTERs inside the create/alter phase.
155
+ // Sequence drops are handled separately in the earlier drop phase.
156
+ for (const [columnKey, dropDefaultIndexes] of dropDefaultByColumn) {
157
+ const addIdentityIndexes = addIdentityByColumn.get(columnKey) ?? [];
158
+ for (const sourceIndex of dropDefaultIndexes) {
159
+ for (const targetIndex of addIdentityIndexes) {
160
+ constraints.push({
161
+ sourceChangeIndex: sourceIndex,
162
+ targetChangeIndex: targetIndex,
163
+ source: "custom",
164
+ });
165
+ }
166
+ }
167
+ }
168
+ for (const [columnKey, dropIdentityIndexes] of dropIdentityByColumn) {
169
+ const setDefaultIndexes = setDefaultByColumn.get(columnKey) ?? [];
170
+ for (const sourceIndex of dropIdentityIndexes) {
171
+ for (const targetIndex of setDefaultIndexes) {
172
+ constraints.push({
173
+ sourceChangeIndex: sourceIndex,
174
+ targetChangeIndex: targetIndex,
175
+ source: "custom",
176
+ });
177
+ }
178
+ }
179
+ }
180
+ return constraints;
181
+ }
119
182
  /**
120
183
  * All custom constraint generators.
121
184
  */
122
185
  const customConstraintGenerators = [
123
186
  generateDefaultPrivilegeConstraints,
187
+ generateIdentityTransitionConstraints,
124
188
  ];
125
189
  /**
126
190
  * Generate Constraints from custom constraint generators.
@@ -0,0 +1,15 @@
1
+ import type { Change } from "../change.types.ts";
2
+ /**
3
+ * Try to break an unbreakable cycle by INJECTING NEW CHANGES or REWRITING
4
+ * existing ones (rather than removing graph edges).
5
+ *
6
+ * Called by `sortPhaseChanges` when its edge-removal cycle handler has seen
7
+ * the same cycle twice — i.e. weak-edge filtering exhausted itself but the
8
+ * cycle is still there. At that point we know the cycle is composed of
9
+ * "hard" edges (explicit `requires` or pg_depend rows) that can only be
10
+ * broken by changing the change list itself.
11
+ *
12
+ * Returns a rewritten `phaseChanges` array, or `null` if no breaker matches
13
+ * (in which case the caller throws the existing CycleError).
14
+ */
15
+ export declare function tryBreakCycleByChangeInjection(cycleNodeIndexes: readonly number[], phaseChanges: readonly Change[]): Change[] | null;
@@ -0,0 +1,396 @@
1
+ import { AlterPublicationDropTables } from "../objects/publication/changes/publication.alter.js";
2
+ import { AlterTableDropColumn, AlterTableDropConstraint, } from "../objects/table/changes/table.alter.js";
3
+ import { DropTable } from "../objects/table/changes/table.drop.js";
4
+ import { stableId } from "../objects/utils.js";
5
+ /**
6
+ * Try to break an unbreakable cycle by INJECTING NEW CHANGES or REWRITING
7
+ * existing ones (rather than removing graph edges).
8
+ *
9
+ * Called by `sortPhaseChanges` when its edge-removal cycle handler has seen
10
+ * the same cycle twice — i.e. weak-edge filtering exhausted itself but the
11
+ * cycle is still there. At that point we know the cycle is composed of
12
+ * "hard" edges (explicit `requires` or pg_depend rows) that can only be
13
+ * broken by changing the change list itself.
14
+ *
15
+ * Returns a rewritten `phaseChanges` array, or `null` if no breaker matches
16
+ * (in which case the caller throws the existing CycleError).
17
+ */
18
+ export function tryBreakCycleByChangeInjection(cycleNodeIndexes, phaseChanges) {
19
+ // ─── Branch A: FK cycle among DropTable changes ──────────────────────
20
+ // Triggered when N≥2 dropped tables reference each other via foreign
21
+ // keys. With no surviving table on either side, every FK constraint
22
+ // stable-id ends up tied back to a DropTable node, and every
23
+ // pg_depend row produces a hard explicit edge between two DropTables.
24
+ // Edge filtering can't break it — the edges are not weak.
25
+ //
26
+ // Example (3-cycle):
27
+ // DROP TABLE a; DROP TABLE b; DROP TABLE c;
28
+ // where a.b_id REFERENCES b, b.c_id REFERENCES c, c.a_id REFERENCES a
29
+ //
30
+ // Fix: inject a dedicated `ALTER TABLE ... DROP CONSTRAINT fk` ahead of
31
+ // each DropTable in the cycle, and mark the constraint name on
32
+ // `DropTable.externallyDroppedConstraints` so the table drop won't try
33
+ // to re-claim the same constraint stable-id. The injected drops have
34
+ // their own stable-id ownership and run before any DropTable, breaking
35
+ // the cycle.
36
+ //
37
+ // This naturally handles any N (2-cycle, 3-cycle, …) because
38
+ // `findCycle` already gave us the full member list — no separate SCC
39
+ // enumeration needed.
40
+ const fkBroken = tryBreakFkCycle(cycleNodeIndexes, phaseChanges);
41
+ if (fkBroken)
42
+ return fkBroken;
43
+ // ─── Branch B: Publication ↔ Column on a surviving table ─────────────
44
+ // Triggered when a publication has an explicit column list and one of
45
+ // those columns is dropped on a table that itself is NOT being dropped
46
+ // (the table just loses one column).
47
+ //
48
+ // Example:
49
+ // CREATE PUBLICATION p FOR TABLE lab_results (id, flash_summary);
50
+ // ALTER TABLE lab_results DROP COLUMN flash_summary;
51
+ //
52
+ // Diff emits two drop-phase changes:
53
+ // AlterPublicationDropTables(p, [lab_results])
54
+ // AlterTableDropColumn(lab_results.flash_summary)
55
+ //
56
+ // The cycle:
57
+ // pub:p → col:lab_results.flash_summary (catalog, pg_depend)
58
+ // col:lab_results.flash_summary → table:lab_results
59
+ // (explicit, AlterTableDropColumn.requires)
60
+ //
61
+ // Fix: rebuild the AlterTableDropColumn with `omitTableRequirement=true`
62
+ // so it no longer requires `table:lab_results`. Safe because
63
+ // `lab_results` survives the migration; its lifetime trivially covers
64
+ // the column drop. The catalog edge `pub → col` correctly orders the
65
+ // publication drop before the column drop.
66
+ const pubColBroken = tryBreakPublicationColumnCycle(cycleNodeIndexes, phaseChanges);
67
+ if (pubColBroken)
68
+ return pubColBroken;
69
+ // ─── Branch C: Publication ↔ dropped FK chain ↔ constraint drop ──────
70
+ // Triggered when publication membership is being removed for tables in
71
+ // the same drop phase as a FK chain, and the chain ends at a separately
72
+ // emitted `AlterTableDropConstraint` on a table that is also being
73
+ // removed from the publication.
74
+ //
75
+ // Example (4-change cycle):
76
+ // AlterPublicationDropTables(p, [labs, posts, post_attachments])
77
+ // DropTable(post_attachments)
78
+ // DropTable(posts)
79
+ // AlterTableDropConstraint(labs.unique_lab_id)
80
+ //
81
+ // Cycle:
82
+ // publication:p → table:post_attachments
83
+ // post_attachments.post_id_fkey → column:posts.id
84
+ // posts.lab_id_fkey → constraint:labs.unique_lab_id
85
+ // constraint:labs.unique_lab_id → table:labs
86
+ //
87
+ // Fix: inject explicit FK drops for the FK constraints claimed by the
88
+ // DropTables in the cycle, including FKs that point at the terminal
89
+ // dropped constraint. The publication and terminal constraint changes
90
+ // stay unchanged; only the intermediate FK ownership is reassigned from
91
+ // DropTable to dedicated AlterTableDropConstraint changes.
92
+ const pubFkConstraintBroken = tryBreakPublicationFkConstraintDropCycle(cycleNodeIndexes, phaseChanges);
93
+ if (pubFkConstraintBroken)
94
+ return pubFkConstraintBroken;
95
+ // No known pattern. Returning null lets sortPhaseChanges throw the
96
+ // formatted CycleError with full diagnostic — better a clear bug
97
+ // report than silently shipping a broken plan.
98
+ return null;
99
+ }
100
+ /**
101
+ * Branch A worker — inject `AlterTableDropConstraint` for every FK linking
102
+ * two DropTables in the cycle.
103
+ *
104
+ * Returns the rewritten changes array, or `null` if the cycle does not
105
+ * match (e.g. mixed types, or no cross-cycle FK exists).
106
+ */
107
+ function tryBreakFkCycle(cycleNodeIndexes, phaseChanges) {
108
+ // Guard: every member of the cycle must be a DropTable. Mixed cycles
109
+ // (e.g. DropTable + DropView, or DropTable + DropMaterializedView) are
110
+ // out of scope — they need a different breaker.
111
+ const cycleDropTables = [];
112
+ for (const nodeIndex of cycleNodeIndexes) {
113
+ const change = phaseChanges[nodeIndex];
114
+ if (!(change instanceof DropTable))
115
+ return null;
116
+ cycleDropTables.push(change);
117
+ }
118
+ const cycleTableIds = new Set(cycleDropTables.map((change) => change.table.stableId));
119
+ return injectFkConstraintDropsForDropTables({
120
+ phaseChanges,
121
+ dropTables: cycleDropTables,
122
+ shouldInject: (fk, tableId) => isCrossCycleFkConstraint(fk, tableId, cycleTableIds),
123
+ });
124
+ }
125
+ /**
126
+ * Shared FK-drop injection used by Branch A and Branch C. The caller owns
127
+ * the cycle-specific matcher; this helper only handles the mechanical
128
+ * rewrite: add dedicated `AlterTableDropConstraint` changes and rebuild
129
+ * affected `DropTable`s with updated `externallyDroppedConstraints`.
130
+ */
131
+ function injectFkConstraintDropsForDropTables({ phaseChanges, dropTables, shouldInject, }) {
132
+ // For each DropTable in the cycle, find every FK whose referenced table
133
+ // is also in the cycle. Each such FK becomes one injected
134
+ // `AlterTableDropConstraint` and one entry on the source table's
135
+ // `externallyDroppedConstraints`.
136
+ //
137
+ // 2-cycle example: { A→B, B→A } — two FKs, two injected drops.
138
+ // 3-cycle example: { A→B, B→C, C→A } — three FKs, three injected drops.
139
+ const injectedDropsByTableId = new Map();
140
+ const updatedExternalsByTableId = new Map();
141
+ let didMutate = false;
142
+ for (const dropTable of dropTables) {
143
+ const tableId = dropTable.table.stableId;
144
+ const existingExternals = new Set(dropTable.externallyDroppedConstraints);
145
+ let tableMutated = false;
146
+ for (const fk of iterFkConstraints(dropTable.table.constraints)) {
147
+ if (!shouldInject(fk, tableId))
148
+ continue;
149
+ // Skip if a same-table `AlterTableDropConstraint` is already in the
150
+ // change list — could happen if a previous breaker iteration
151
+ // injected one, or the diff layer emitted one explicitly.
152
+ if (existingExternals.has(fk.name))
153
+ continue;
154
+ if (alreadyHasExplicitDrop(phaseChanges, tableId, fk.name))
155
+ continue;
156
+ const injected = new AlterTableDropConstraint({
157
+ table: dropTable.table,
158
+ constraint: fk,
159
+ });
160
+ const list = injectedDropsByTableId.get(tableId) ?? [];
161
+ list.push(injected);
162
+ injectedDropsByTableId.set(tableId, list);
163
+ existingExternals.add(fk.name);
164
+ tableMutated = true;
165
+ didMutate = true;
166
+ }
167
+ if (tableMutated) {
168
+ updatedExternalsByTableId.set(tableId, existingExternals);
169
+ }
170
+ }
171
+ if (!didMutate)
172
+ return null;
173
+ // Rebuild phaseChanges: keep all non-DropTable changes in place. For
174
+ // each DropTable in the cycle that gained injected drops, emit the
175
+ // injected drops first, then a fresh DropTable carrying the updated
176
+ // `externallyDroppedConstraints` so it stops claiming the FK
177
+ // stable-ids.
178
+ const rewritten = [];
179
+ for (const change of phaseChanges) {
180
+ if (!(change instanceof DropTable)) {
181
+ rewritten.push(change);
182
+ continue;
183
+ }
184
+ const tableId = change.table.stableId;
185
+ const injected = injectedDropsByTableId.get(tableId);
186
+ if (injected) {
187
+ rewritten.push(...injected);
188
+ }
189
+ const updatedExternals = updatedExternalsByTableId.get(tableId);
190
+ if (updatedExternals) {
191
+ rewritten.push(new DropTable({
192
+ table: change.table,
193
+ externallyDroppedConstraints: updatedExternals,
194
+ }));
195
+ }
196
+ else {
197
+ rewritten.push(change);
198
+ }
199
+ }
200
+ return rewritten;
201
+ }
202
+ /**
203
+ * Yield FK constraints on `constraints`.
204
+ *
205
+ * Partition clones are skipped because PostgreSQL drops them when the
206
+ * parent constraint is dropped.
207
+ */
208
+ function* iterFkConstraints(constraints) {
209
+ for (const constraint of constraints) {
210
+ if (constraint.constraint_type !== "f")
211
+ continue;
212
+ if (constraint.is_partition_clone)
213
+ continue;
214
+ yield constraint;
215
+ }
216
+ }
217
+ /**
218
+ * True when `constraint` references another DropTable in the cycle.
219
+ *
220
+ * Self-referencing FKs are skipped — they create a self-loop in the
221
+ * dependency graph which the existing sort-phase handler resolves on its
222
+ * own; injecting an `AlterTableDropConstraint` for a self-FK would just
223
+ * add noise.
224
+ */
225
+ function isCrossCycleFkConstraint(constraint, ownTableId, cycleTableIds) {
226
+ if (!constraint.foreign_key_schema || !constraint.foreign_key_table) {
227
+ return false;
228
+ }
229
+ const referencedId = stableId.table(constraint.foreign_key_schema, constraint.foreign_key_table);
230
+ if (referencedId === ownTableId)
231
+ return false;
232
+ return cycleTableIds.has(referencedId);
233
+ }
234
+ /**
235
+ * True iff `phaseChanges` already contains an explicit
236
+ * `AlterTableDropConstraint(table, constraint)` for the given pair —
237
+ * either emitted by the diff layer or by a previous breaker iteration.
238
+ * Avoids duplicate constraint drops.
239
+ */
240
+ function alreadyHasExplicitDrop(phaseChanges, tableId, constraintName) {
241
+ for (const change of phaseChanges) {
242
+ if (!(change instanceof AlterTableDropConstraint))
243
+ continue;
244
+ if (change.table.stableId !== tableId)
245
+ continue;
246
+ if (change.constraint.name === constraintName)
247
+ return true;
248
+ }
249
+ return false;
250
+ }
251
+ /**
252
+ * Branch B worker — break the publication↔column cycle by rebuilding the
253
+ * `AlterTableDropColumn` change with `omitTableRequirement=true`.
254
+ *
255
+ * Returns the rewritten changes array, or `null` if the cycle does not
256
+ * match (e.g. table is also being dropped, or no `AlterPublicationDropTables`
257
+ * references the table).
258
+ */
259
+ function tryBreakPublicationColumnCycle(cycleNodeIndexes, phaseChanges) {
260
+ // Find an `AlterTableDropColumn` and an `AlterPublicationDropTables` in
261
+ // the cycle that reference the same table. Both must be present —
262
+ // otherwise this is a different cycle shape.
263
+ let dropColumnIndex = -1;
264
+ let dropColumnChange = null;
265
+ let pubMatchesTable = false;
266
+ let pubChange = null;
267
+ for (const nodeIndex of cycleNodeIndexes) {
268
+ const change = phaseChanges[nodeIndex];
269
+ if (change instanceof AlterTableDropColumn &&
270
+ !change.omitTableRequirement) {
271
+ dropColumnIndex = nodeIndex;
272
+ dropColumnChange = change;
273
+ }
274
+ else if (change instanceof AlterPublicationDropTables) {
275
+ pubChange = change;
276
+ }
277
+ }
278
+ if (dropColumnChange === null || pubChange === null)
279
+ return null;
280
+ // Verify the publication is actually dropping membership for the same
281
+ // table whose column is being dropped. Without this check we'd risk
282
+ // rewriting an unrelated AlterTableDropColumn that happens to share a
283
+ // cycle with some other publication change.
284
+ const targetTableId = dropColumnChange.table.stableId;
285
+ for (const t of pubChange.tables) {
286
+ if (stableId.table(t.schema, t.name) === targetTableId) {
287
+ pubMatchesTable = true;
288
+ break;
289
+ }
290
+ }
291
+ if (!pubMatchesTable)
292
+ return null;
293
+ // Verify the table is NOT itself being dropped. If `DropTable(T)` is in
294
+ // the same phase, the existing structural rewrites in
295
+ // `post-diff-normalization.ts` (replace-expansion superseded filter)
296
+ // already prune the redundant `AlterTableDropColumn`, so we should not
297
+ // see this combination here. Be defensive and bail anyway — flipping
298
+ // `omitTableRequirement` when T is being dropped would let the column
299
+ // drop reorder against the table drop, which is unsafe.
300
+ for (const change of phaseChanges) {
301
+ if (change instanceof DropTable &&
302
+ change.table.stableId === targetTableId) {
303
+ return null;
304
+ }
305
+ }
306
+ // Replace the AlterTableDropColumn with a fresh instance carrying
307
+ // `omitTableRequirement=true`. All other changes pass through
308
+ // unchanged.
309
+ const rewritten = phaseChanges.slice();
310
+ rewritten[dropColumnIndex] = new AlterTableDropColumn({
311
+ table: dropColumnChange.table,
312
+ column: dropColumnChange.column,
313
+ omitTableRequirement: true,
314
+ });
315
+ return rewritten;
316
+ }
317
+ /**
318
+ * Branch C worker — break a publication membership removal cycle where
319
+ * dropped tables form a FK chain ending at a separately dropped referenced
320
+ * constraint.
321
+ */
322
+ function tryBreakPublicationFkConstraintDropCycle(cycleNodeIndexes, phaseChanges) {
323
+ let pubChange = null;
324
+ let terminalConstraintDrop = null;
325
+ const dropTables = [];
326
+ for (const nodeIndex of cycleNodeIndexes) {
327
+ const change = phaseChanges[nodeIndex];
328
+ if (change instanceof AlterPublicationDropTables) {
329
+ if (pubChange !== null)
330
+ return null;
331
+ pubChange = change;
332
+ }
333
+ else if (change instanceof AlterTableDropConstraint) {
334
+ if (terminalConstraintDrop !== null)
335
+ return null;
336
+ terminalConstraintDrop = change;
337
+ }
338
+ else if (change instanceof DropTable) {
339
+ dropTables.push(change);
340
+ }
341
+ else {
342
+ return null;
343
+ }
344
+ }
345
+ if (pubChange === null ||
346
+ terminalConstraintDrop === null ||
347
+ dropTables.length === 0) {
348
+ return null;
349
+ }
350
+ const publicationTableIds = new Set(pubChange.tables.map((table) => stableId.table(table.schema, table.name)));
351
+ if (!publicationTableIds.has(terminalConstraintDrop.table.stableId)) {
352
+ return null;
353
+ }
354
+ // At least one dropped table must be a publication member — that's the
355
+ // publication → DropTable edge that pulls the publication change into the
356
+ // cycle (the back-edge is the terminal constraint's table, checked above).
357
+ // Don't require ALL of them: publications like supabase_realtime commonly
358
+ // contain only a subset of tables, so intermediate FK-chain tables may not
359
+ // be members (Sentry SUPABASE-API-7RS / CLI-1605).
360
+ if (!dropTables.some((dropTable) => publicationTableIds.has(dropTable.table.stableId))) {
361
+ return null;
362
+ }
363
+ const cycleDropTableIds = new Set(dropTables.map((change) => change.table.stableId));
364
+ let hasFkToTerminalConstraint = false;
365
+ for (const dropTable of dropTables) {
366
+ for (const fk of iterFkConstraints(dropTable.table.constraints)) {
367
+ if (fkReferencesConstraint(fk, terminalConstraintDrop)) {
368
+ hasFkToTerminalConstraint = true;
369
+ break;
370
+ }
371
+ }
372
+ if (hasFkToTerminalConstraint)
373
+ break;
374
+ }
375
+ if (!hasFkToTerminalConstraint)
376
+ return null;
377
+ return injectFkConstraintDropsForDropTables({
378
+ phaseChanges,
379
+ dropTables,
380
+ shouldInject: (fk, tableId) => isCrossCycleFkConstraint(fk, tableId, cycleDropTableIds) ||
381
+ fkReferencesConstraint(fk, terminalConstraintDrop),
382
+ });
383
+ }
384
+ function fkReferencesConstraint(fk, constraintDrop) {
385
+ if (fk.foreign_key_schema !== constraintDrop.table.schema ||
386
+ fk.foreign_key_table !== constraintDrop.table.name ||
387
+ fk.foreign_key_columns === null) {
388
+ return false;
389
+ }
390
+ return sameOrderedStrings(fk.foreign_key_columns, constraintDrop.constraint.key_columns);
391
+ }
392
+ function sameOrderedStrings(left, right) {
393
+ if (left.length !== right.length)
394
+ return false;
395
+ return left.every((value, index) => value === right[index]);
396
+ }
@@ -139,7 +139,7 @@ export function printDebugGraph(phaseChanges, graphData, edges, dependencyRows,
139
139
  const mermaidDiagram = generateMermaidDiagram(phaseChanges, graphData, edges, requirementSets, dependenciesByReferencedId);
140
140
  debugGraph("\n==== Mermaid (cycle detected) ====\n%s\n==== end ====", mermaidDiagram);
141
141
  }
142
- catch (_error) {
142
+ catch {
143
143
  // ignore debug printing errors
144
144
  }
145
145
  }
@@ -56,7 +56,17 @@ export function convertExplicitRequirementsToConstraints(phaseChanges, graphData
56
56
  const requiredIds = graphData.explicitRequirementSets[consumerIndex];
57
57
  if (requiredIds.size === 0)
58
58
  continue;
59
+ // Collect dropped IDs for this change so we can skip requirements
60
+ // for stableIds that this change also drops. A change that drops a
61
+ // stableId should not depend on another change that creates the same
62
+ // stableId, because the entity already exists in the source database.
63
+ // This prevents false ordering constraints such as Grant → Revoke
64
+ // when both operate on the same ACL stableId.
65
+ const droppedIds = new Set(phaseChanges[consumerIndex].drops);
59
66
  for (const requiredId of requiredIds) {
67
+ if (droppedIds.has(requiredId)) {
68
+ continue;
69
+ }
60
70
  const producerIndexes = graphData.changeIndexesByCreatedId.get(requiredId);
61
71
  if (!producerIndexes || producerIndexes.size === 0)
62
72
  continue;
@@ -109,6 +119,12 @@ export function buildGraphData(phaseChanges, options) {
109
119
  for (const droppedId of changeItem.drops ?? []) {
110
120
  createdIds.add(droppedId);
111
121
  }
122
+ // In-place mutations keep the object identity but invalidate
123
+ // dependents, so for drop-phase ordering they behave like producers of
124
+ // the invalidated ids without changing Change.drops.
125
+ for (const invalidatedId of changeItem.invalidates) {
126
+ createdIds.add(invalidatedId);
127
+ }
112
128
  }
113
129
  return createdIds;
114
130
  });
@@ -8,7 +8,7 @@
8
8
  * It groups related changes together while preserving the ability for the dependency
9
9
  * resolver to reorder within groups when necessary.
10
10
  */
11
- import { getSchema } from "../integrations/filter/extractors.js";
11
+ import { getSchema } from "../change-utils.js";
12
12
  import { getExecutionPhase, isMetadataStableId } from "./utils.js";
13
13
  /**
14
14
  * Object type ordering for logical grouping.
@@ -145,6 +145,25 @@ function getMainStableId(change) {
145
145
  }
146
146
  return null;
147
147
  }
148
+ // For default_privilege operations: group by role + schema combination (before CREATE so we group and use tiebreaker)
149
+ if (change.scope === "default_privilege") {
150
+ if (change.requires.length > 0) {
151
+ let grantingRole = null;
152
+ let schemaId = null;
153
+ for (const id of change.requires) {
154
+ if (id.startsWith("role:")) {
155
+ grantingRole = id;
156
+ }
157
+ else if (id.startsWith("schema:")) {
158
+ schemaId = id;
159
+ }
160
+ }
161
+ if (schemaId && grantingRole) {
162
+ return `${grantingRole}:${schemaId}`;
163
+ }
164
+ return grantingRole ?? null;
165
+ }
166
+ }
148
167
  // For CREATE operations: check if creating a constraint (sub-entity of table)
149
168
  if (change.operation === "create" && change.creates.length > 0) {
150
169
  // Iterate through creates to find the first non-metadata stable ID
@@ -182,29 +201,6 @@ function getMainStableId(change) {
182
201
  // Fallback: if all drops are metadata, use first
183
202
  return change.drops[0] ?? null;
184
203
  }
185
- // For default_privilege operations: group by role + schema combination
186
- // This groups all "FOR ROLE X IN SCHEMA Y" statements together
187
- if (change.scope === "default_privilege") {
188
- if (change.requires.length > 0) {
189
- // Iterate through requires to find role and schema
190
- let grantingRole = null;
191
- let schemaId = null;
192
- for (const id of change.requires) {
193
- if (id.startsWith("role:")) {
194
- grantingRole = id;
195
- }
196
- else if (id.startsWith("schema:")) {
197
- schemaId = id;
198
- }
199
- }
200
- if (schemaId && grantingRole) {
201
- // Create composite key: "role:postgres:schema:public"
202
- return `${grantingRole}:${schemaId}`;
203
- }
204
- // If no schema, just group by role
205
- return grantingRole ?? null;
206
- }
207
- }
208
204
  // For ALTER operations: check if creating/dropping a constraint
209
205
  // Skip this for privilege/comment/default_privilege scopes (handled above)
210
206
  if (change.operation === "alter") {
@@ -291,27 +287,6 @@ function getParentStableId(change) {
291
287
  // Fallback: return first requires if available
292
288
  return requires.length > 0 ? requires[0] : null;
293
289
  }
294
- /**
295
- * Extract schema name from a change.
296
- * Returns the schema name if present, or null for non-schema objects.
297
- *
298
- * Uses the getSchema helper which directly accesses schema properties from change objects.
299
- * For default_privilege changes, accesses the inSchema property directly.
300
- * For event_trigger changes, groups by their function's schema.
301
- */
302
- function extractSchemaFromChange(change) {
303
- // Handle default_privilege changes specially (they have inSchema property)
304
- if (change.scope === "default_privilege") {
305
- // TypeScript doesn't know about inSchema, but we know it exists for default_privilege changes
306
- return change.inSchema ?? null;
307
- }
308
- // Handle event_trigger changes specially - group by their function's schema
309
- if (change.objectType === "event_trigger") {
310
- return change.eventTrigger.function_schema;
311
- }
312
- // Use the getSchema helper for all other changes
313
- return getSchema(change);
314
- }
315
290
  /**
316
291
  * Get the effective object type for sorting purposes.
317
292
  * For sub-entities, returns the parent's object type (table/view/materialized_view).
@@ -403,8 +378,8 @@ function sortPhase(changes, phase) {
403
378
  const changeA = a.change;
404
379
  const changeB = b.change;
405
380
  // 1. Compare schemas (group objects by schema)
406
- const schemaA = extractSchemaFromChange(changeA);
407
- const schemaB = extractSchemaFromChange(changeB);
381
+ const schemaA = getSchema(changeA);
382
+ const schemaB = getSchema(changeB);
408
383
  // Non-schema objects (roles, languages, extensions, etc.) sort first
409
384
  // Use a special prefix to ensure they come before schema objects
410
385
  const schemaKeyA = schemaA === null ? "::" : schemaA;
@@ -525,6 +500,18 @@ function sortPhase(changes, phase) {
525
500
  if (operationOrderA !== operationOrderB) {
526
501
  return operationOrderA - operationOrderB;
527
502
  }
503
+ // 6b. For default_privilege: deterministic tiebreaker by objtype then grantee (canonical order for objtype)
504
+ if (scopeA === "default_privilege" && scopeB === "default_privilege") {
505
+ const defPrivA = changeA;
506
+ const defPrivB = changeB;
507
+ const objtypeOrder = (code) => ({ n: 0, r: 1, S: 2, f: 3, T: 4 })[code] ?? 99;
508
+ const objtypeCompare = objtypeOrder(defPrivA.objtype) - objtypeOrder(defPrivB.objtype);
509
+ if (objtypeCompare !== 0)
510
+ return objtypeCompare;
511
+ const granteeCompare = defPrivA.grantee.localeCompare(defPrivB.grantee);
512
+ if (granteeCompare !== 0)
513
+ return granteeCompare;
514
+ }
528
515
  // 7. Preserve original order (stability)
529
516
  return a.originalIndex - b.originalIndex;
530
517
  });