@supabase/pg-delta 1.0.0-alpha.2 → 1.0.0-alpha.20

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 (930) hide show
  1. package/README.md +48 -3
  2. package/dist/cli/app.js +26 -3
  3. package/dist/cli/bin/cli.js +5 -0
  4. package/dist/cli/commands/catalog-export.d.ts +5 -0
  5. package/dist/cli/commands/catalog-export.js +64 -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 +47 -16
  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 +2 -0
  24. package/dist/cli/utils.js +1 -1
  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 +71 -49
  29. package/dist/core/catalog.model.d.ts +14 -1
  30. package/dist/core/catalog.model.js +103 -1
  31. package/dist/core/catalog.snapshot.d.ts +66 -0
  32. package/dist/core/catalog.snapshot.js +206 -0
  33. package/dist/core/change-utils.d.ts +9 -0
  34. package/dist/core/change-utils.js +71 -0
  35. package/dist/core/change.types.d.ts +22 -0
  36. package/dist/core/change.types.js +37 -1
  37. package/dist/core/connection-url.d.ts +32 -0
  38. package/dist/core/connection-url.js +77 -0
  39. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  40. package/dist/core/declarative-apply/discover-sql.js +86 -0
  41. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  42. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  43. package/dist/core/declarative-apply/index.d.ts +49 -0
  44. package/dist/core/declarative-apply/index.js +134 -0
  45. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  46. package/dist/core/declarative-apply/round-apply.js +378 -0
  47. package/dist/core/depend.js +25 -0
  48. package/dist/core/expand-replace-dependencies.d.ts +8 -2
  49. package/dist/core/expand-replace-dependencies.js +116 -10
  50. package/dist/core/export/file-mapper.d.ts +71 -0
  51. package/dist/core/export/file-mapper.js +474 -0
  52. package/dist/core/export/grouper.d.ts +13 -0
  53. package/dist/core/export/grouper.js +76 -0
  54. package/dist/core/export/index.d.ts +45 -0
  55. package/dist/core/export/index.js +66 -0
  56. package/dist/core/export/types.d.ts +84 -0
  57. package/dist/core/export/types.js +25 -0
  58. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  59. package/dist/core/integrations/filter/dsl.d.ts +82 -41
  60. package/dist/core/integrations/filter/dsl.js +127 -61
  61. package/dist/core/integrations/filter/flatten.d.ts +51 -0
  62. package/dist/core/integrations/filter/flatten.js +116 -0
  63. package/dist/core/integrations/integration-dsl.d.ts +27 -1
  64. package/dist/core/integrations/integration.types.d.ts +26 -1
  65. package/dist/core/integrations/integration.types.js +31 -1
  66. package/dist/core/integrations/merge.d.ts +20 -0
  67. package/dist/core/integrations/merge.js +60 -0
  68. package/dist/core/integrations/serialize/dsl.d.ts +8 -12
  69. package/dist/core/integrations/serialize/dsl.js +2 -2
  70. package/dist/core/integrations/serialize/serialize.types.d.ts +31 -0
  71. package/dist/core/integrations/supabase.d.ts +8 -0
  72. package/dist/core/integrations/supabase.js +69 -8
  73. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  74. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  75. package/dist/core/objects/aggregate/aggregate.model.d.ts +8 -8
  76. package/dist/core/objects/aggregate/aggregate.model.js +1 -1
  77. package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +2 -1
  78. package/dist/core/objects/aggregate/changes/aggregate.alter.js +1 -1
  79. package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +3 -2
  80. package/dist/core/objects/aggregate/changes/aggregate.comment.js +2 -2
  81. package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +2 -1
  82. package/dist/core/objects/aggregate/changes/aggregate.create.js +2 -2
  83. package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +2 -1
  84. package/dist/core/objects/aggregate/changes/aggregate.drop.js +2 -2
  85. package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +4 -3
  86. package/dist/core/objects/aggregate/changes/aggregate.privilege.js +3 -3
  87. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +1 -0
  88. package/dist/core/objects/base.change.d.ts +12 -1
  89. package/dist/core/objects/base.change.js +10 -0
  90. package/dist/core/objects/base.model.d.ts +4 -1
  91. package/dist/core/objects/base.model.js +5 -2
  92. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  93. package/dist/core/objects/base.privilege-diff.js +104 -22
  94. package/dist/core/objects/base.privilege.d.ts +1 -0
  95. package/dist/core/objects/base.privilege.js +9 -2
  96. package/dist/core/objects/collation/changes/collation.alter.d.ts +3 -2
  97. package/dist/core/objects/collation/changes/collation.alter.js +2 -2
  98. package/dist/core/objects/collation/changes/collation.comment.d.ts +3 -2
  99. package/dist/core/objects/collation/changes/collation.comment.js +2 -2
  100. package/dist/core/objects/collation/changes/collation.create.d.ts +2 -1
  101. package/dist/core/objects/collation/changes/collation.create.js +1 -1
  102. package/dist/core/objects/collation/changes/collation.drop.d.ts +2 -1
  103. package/dist/core/objects/collation/changes/collation.drop.js +1 -1
  104. package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
  105. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  106. package/dist/core/objects/diff-context.d.ts +15 -0
  107. package/dist/core/objects/diff-context.js +1 -0
  108. package/dist/core/objects/domain/changes/domain.alter.d.ts +9 -8
  109. package/dist/core/objects/domain/changes/domain.alter.js +8 -8
  110. package/dist/core/objects/domain/changes/domain.comment.d.ts +3 -2
  111. package/dist/core/objects/domain/changes/domain.comment.js +2 -2
  112. package/dist/core/objects/domain/changes/domain.create.d.ts +3 -2
  113. package/dist/core/objects/domain/changes/domain.create.js +12 -4
  114. package/dist/core/objects/domain/changes/domain.drop.d.ts +2 -1
  115. package/dist/core/objects/domain/changes/domain.drop.js +1 -1
  116. package/dist/core/objects/domain/changes/domain.privilege.d.ts +4 -3
  117. package/dist/core/objects/domain/changes/domain.privilege.js +3 -3
  118. package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
  119. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  120. package/dist/core/objects/domain/domain.diff.js +16 -77
  121. package/dist/core/objects/domain/domain.model.js +1 -1
  122. package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +3 -2
  123. package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +2 -2
  124. package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +3 -2
  125. package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +2 -2
  126. package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +2 -1
  127. package/dist/core/objects/event-trigger/changes/event-trigger.create.js +1 -1
  128. package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +2 -1
  129. package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +1 -1
  130. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +1 -0
  131. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  132. package/dist/core/objects/extension/changes/extension.alter.d.ts +3 -2
  133. package/dist/core/objects/extension/changes/extension.alter.js +2 -2
  134. package/dist/core/objects/extension/changes/extension.comment.d.ts +3 -2
  135. package/dist/core/objects/extension/changes/extension.comment.js +2 -2
  136. package/dist/core/objects/extension/changes/extension.create.d.ts +2 -1
  137. package/dist/core/objects/extension/changes/extension.create.js +4 -2
  138. package/dist/core/objects/extension/changes/extension.drop.d.ts +2 -1
  139. package/dist/core/objects/extension/changes/extension.drop.js +1 -1
  140. package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
  141. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +3 -2
  142. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +2 -2
  143. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +3 -2
  144. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +2 -2
  145. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +2 -1
  146. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +1 -1
  147. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +2 -1
  148. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +1 -1
  149. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +4 -3
  150. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +3 -3
  151. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
  152. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  153. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  154. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +2 -2
  155. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
  156. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +10 -9
  157. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +9 -9
  158. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +3 -2
  159. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +2 -2
  160. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +2 -1
  161. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +1 -1
  162. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +2 -1
  163. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +1 -1
  164. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +4 -3
  165. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +3 -3
  166. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
  167. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  168. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  169. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +1 -1
  170. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +4 -3
  171. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +3 -3
  172. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +3 -2
  173. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +2 -2
  174. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +2 -1
  175. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +1 -1
  176. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +2 -1
  177. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +1 -1
  178. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +4 -3
  179. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +3 -3
  180. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
  181. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  182. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  183. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +2 -1
  184. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +1 -1
  185. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +2 -1
  186. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +1 -1
  187. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +2 -1
  188. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +1 -1
  189. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
  190. package/dist/core/objects/index/changes/index.alter.d.ts +4 -3
  191. package/dist/core/objects/index/changes/index.alter.js +3 -3
  192. package/dist/core/objects/index/changes/index.comment.d.ts +3 -2
  193. package/dist/core/objects/index/changes/index.comment.js +2 -2
  194. package/dist/core/objects/index/changes/index.create.d.ts +2 -1
  195. package/dist/core/objects/index/changes/index.create.js +1 -1
  196. package/dist/core/objects/index/changes/index.drop.d.ts +2 -1
  197. package/dist/core/objects/index/changes/index.drop.js +1 -1
  198. package/dist/core/objects/index/changes/index.types.d.ts +1 -0
  199. package/dist/core/objects/index/index.model.js +12 -2
  200. package/dist/core/objects/language/changes/language.alter.d.ts +2 -1
  201. package/dist/core/objects/language/changes/language.alter.js +1 -1
  202. package/dist/core/objects/language/changes/language.comment.d.ts +3 -2
  203. package/dist/core/objects/language/changes/language.comment.js +2 -2
  204. package/dist/core/objects/language/changes/language.create.d.ts +2 -1
  205. package/dist/core/objects/language/changes/language.create.js +1 -1
  206. package/dist/core/objects/language/changes/language.drop.d.ts +2 -1
  207. package/dist/core/objects/language/changes/language.drop.js +1 -1
  208. package/dist/core/objects/language/changes/language.privilege.d.ts +4 -3
  209. package/dist/core/objects/language/changes/language.privilege.js +3 -3
  210. package/dist/core/objects/language/changes/language.types.d.ts +1 -0
  211. package/dist/core/objects/language/language.diff.d.ts +2 -5
  212. package/dist/core/objects/language/language.diff.js +7 -39
  213. package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +3 -2
  214. package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +2 -2
  215. package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +5 -4
  216. package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +4 -4
  217. package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +2 -1
  218. package/dist/core/objects/materialized-view/changes/materialized-view.create.js +1 -1
  219. package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +2 -1
  220. package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +1 -1
  221. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +4 -3
  222. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +3 -3
  223. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +1 -0
  224. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  225. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  226. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +3 -3
  227. package/dist/core/objects/materialized-view/materialized-view.model.js +1 -1
  228. package/dist/core/objects/procedure/changes/procedure.alter.d.ts +8 -7
  229. package/dist/core/objects/procedure/changes/procedure.alter.js +19 -19
  230. package/dist/core/objects/procedure/changes/procedure.comment.d.ts +3 -2
  231. package/dist/core/objects/procedure/changes/procedure.comment.js +2 -2
  232. package/dist/core/objects/procedure/changes/procedure.create.d.ts +2 -1
  233. package/dist/core/objects/procedure/changes/procedure.create.js +1 -1
  234. package/dist/core/objects/procedure/changes/procedure.drop.d.ts +2 -1
  235. package/dist/core/objects/procedure/changes/procedure.drop.js +1 -1
  236. package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +4 -3
  237. package/dist/core/objects/procedure/changes/procedure.privilege.js +3 -3
  238. package/dist/core/objects/procedure/changes/procedure.types.d.ts +1 -0
  239. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  240. package/dist/core/objects/procedure/procedure.diff.js +57 -97
  241. package/dist/core/objects/procedure/procedure.model.d.ts +9 -9
  242. package/dist/core/objects/procedure/procedure.model.js +1 -1
  243. package/dist/core/objects/publication/changes/publication.alter.d.ts +9 -16
  244. package/dist/core/objects/publication/changes/publication.alter.js +12 -21
  245. package/dist/core/objects/publication/changes/publication.comment.d.ts +3 -2
  246. package/dist/core/objects/publication/changes/publication.comment.js +2 -2
  247. package/dist/core/objects/publication/changes/publication.create.d.ts +2 -1
  248. package/dist/core/objects/publication/changes/publication.create.js +1 -1
  249. package/dist/core/objects/publication/changes/publication.drop.d.ts +2 -1
  250. package/dist/core/objects/publication/changes/publication.drop.js +1 -1
  251. package/dist/core/objects/publication/changes/publication.types.d.ts +3 -2
  252. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  253. package/dist/core/objects/publication/publication.diff.js +8 -13
  254. package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +4 -3
  255. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +6 -6
  256. package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +3 -2
  257. package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +2 -2
  258. package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +2 -1
  259. package/dist/core/objects/rls-policy/changes/rls-policy.create.js +24 -1
  260. package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +2 -1
  261. package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +1 -1
  262. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
  263. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +51 -2
  264. package/dist/core/objects/rls-policy/rls-policy.model.js +122 -1
  265. package/dist/core/objects/role/changes/role.alter.d.ts +3 -2
  266. package/dist/core/objects/role/changes/role.alter.js +2 -2
  267. package/dist/core/objects/role/changes/role.comment.d.ts +3 -2
  268. package/dist/core/objects/role/changes/role.comment.js +2 -2
  269. package/dist/core/objects/role/changes/role.create.d.ts +2 -1
  270. package/dist/core/objects/role/changes/role.create.js +1 -1
  271. package/dist/core/objects/role/changes/role.drop.d.ts +2 -1
  272. package/dist/core/objects/role/changes/role.drop.js +1 -1
  273. package/dist/core/objects/role/changes/role.privilege.d.ts +6 -5
  274. package/dist/core/objects/role/changes/role.privilege.js +5 -5
  275. package/dist/core/objects/role/changes/role.types.d.ts +1 -0
  276. package/dist/core/objects/role/role.diff.js +22 -1
  277. package/dist/core/objects/role/role.model.d.ts +4 -3
  278. package/dist/core/objects/role/role.model.js +118 -12
  279. package/dist/core/objects/rule/changes/rule.alter.d.ts +3 -2
  280. package/dist/core/objects/rule/changes/rule.alter.js +2 -2
  281. package/dist/core/objects/rule/changes/rule.comment.d.ts +3 -2
  282. package/dist/core/objects/rule/changes/rule.comment.js +2 -2
  283. package/dist/core/objects/rule/changes/rule.create.d.ts +2 -1
  284. package/dist/core/objects/rule/changes/rule.create.js +1 -1
  285. package/dist/core/objects/rule/changes/rule.drop.d.ts +2 -1
  286. package/dist/core/objects/rule/changes/rule.drop.js +1 -1
  287. package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
  288. package/dist/core/objects/rule/rule.model.d.ts +1 -1
  289. package/dist/core/objects/schema/changes/schema.alter.d.ts +2 -1
  290. package/dist/core/objects/schema/changes/schema.alter.js +1 -1
  291. package/dist/core/objects/schema/changes/schema.comment.d.ts +3 -2
  292. package/dist/core/objects/schema/changes/schema.comment.js +2 -2
  293. package/dist/core/objects/schema/changes/schema.create.d.ts +3 -5
  294. package/dist/core/objects/schema/changes/schema.drop.d.ts +2 -1
  295. package/dist/core/objects/schema/changes/schema.drop.js +1 -1
  296. package/dist/core/objects/schema/changes/schema.privilege.d.ts +4 -3
  297. package/dist/core/objects/schema/changes/schema.privilege.js +3 -3
  298. package/dist/core/objects/schema/changes/schema.types.d.ts +1 -0
  299. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  300. package/dist/core/objects/schema/schema.diff.js +16 -77
  301. package/dist/core/objects/schema/schema.model.js +1 -1
  302. package/dist/core/objects/sequence/changes/sequence.alter.d.ts +3 -2
  303. package/dist/core/objects/sequence/changes/sequence.alter.js +2 -2
  304. package/dist/core/objects/sequence/changes/sequence.comment.d.ts +3 -2
  305. package/dist/core/objects/sequence/changes/sequence.comment.js +2 -2
  306. package/dist/core/objects/sequence/changes/sequence.create.d.ts +2 -1
  307. package/dist/core/objects/sequence/changes/sequence.create.js +1 -1
  308. package/dist/core/objects/sequence/changes/sequence.drop.d.ts +2 -1
  309. package/dist/core/objects/sequence/changes/sequence.drop.js +11 -3
  310. package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +4 -3
  311. package/dist/core/objects/sequence/changes/sequence.privilege.js +3 -3
  312. package/dist/core/objects/sequence/changes/sequence.types.d.ts +1 -0
  313. package/dist/core/objects/sequence/sequence.diff.d.ts +5 -8
  314. package/dist/core/objects/sequence/sequence.diff.js +42 -85
  315. package/dist/core/objects/sequence/sequence.model.js +1 -1
  316. package/dist/core/objects/subscription/changes/subscription.alter.d.ts +7 -6
  317. package/dist/core/objects/subscription/changes/subscription.alter.js +6 -6
  318. package/dist/core/objects/subscription/changes/subscription.comment.d.ts +3 -2
  319. package/dist/core/objects/subscription/changes/subscription.comment.js +2 -2
  320. package/dist/core/objects/subscription/changes/subscription.create.d.ts +2 -1
  321. package/dist/core/objects/subscription/changes/subscription.create.js +1 -1
  322. package/dist/core/objects/subscription/changes/subscription.drop.d.ts +2 -1
  323. package/dist/core/objects/subscription/changes/subscription.drop.js +1 -1
  324. package/dist/core/objects/subscription/changes/subscription.types.d.ts +1 -0
  325. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  326. package/dist/core/objects/table/changes/table.alter.d.ts +65 -22
  327. package/dist/core/objects/table/changes/table.alter.js +111 -23
  328. package/dist/core/objects/table/changes/table.comment.d.ts +7 -6
  329. package/dist/core/objects/table/changes/table.comment.js +6 -6
  330. package/dist/core/objects/table/changes/table.create.d.ts +2 -1
  331. package/dist/core/objects/table/changes/table.create.js +4 -1
  332. package/dist/core/objects/table/changes/table.drop.d.ts +16 -3
  333. package/dist/core/objects/table/changes/table.drop.js +24 -1
  334. package/dist/core/objects/table/changes/table.privilege.d.ts +4 -3
  335. package/dist/core/objects/table/changes/table.privilege.js +3 -3
  336. package/dist/core/objects/table/changes/table.types.d.ts +1 -0
  337. package/dist/core/objects/table/table.diff.d.ts +2 -8
  338. package/dist/core/objects/table/table.diff.js +80 -160
  339. package/dist/core/objects/table/table.model.d.ts +29 -22
  340. package/dist/core/objects/table/table.model.js +6 -1
  341. package/dist/core/objects/trigger/changes/trigger.alter.d.ts +2 -1
  342. package/dist/core/objects/trigger/changes/trigger.alter.js +24 -1
  343. package/dist/core/objects/trigger/changes/trigger.comment.d.ts +3 -2
  344. package/dist/core/objects/trigger/changes/trigger.comment.js +2 -2
  345. package/dist/core/objects/trigger/changes/trigger.create.d.ts +2 -1
  346. package/dist/core/objects/trigger/changes/trigger.create.js +5 -6
  347. package/dist/core/objects/trigger/changes/trigger.drop.d.ts +2 -1
  348. package/dist/core/objects/trigger/changes/trigger.drop.js +1 -1
  349. package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
  350. package/dist/core/objects/trigger/trigger.diff.js +7 -2
  351. package/dist/core/objects/trigger/trigger.model.d.ts +10 -1
  352. package/dist/core/objects/trigger/trigger.model.js +19 -1
  353. package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +5 -4
  354. package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +4 -4
  355. package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +5 -4
  356. package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +4 -4
  357. package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +2 -1
  358. package/dist/core/objects/type/composite-type/changes/composite-type.create.js +1 -1
  359. package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +2 -1
  360. package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +1 -1
  361. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +4 -3
  362. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +3 -3
  363. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +1 -0
  364. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  365. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  366. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +3 -3
  367. package/dist/core/objects/type/composite-type/composite-type.model.js +2 -1
  368. package/dist/core/objects/type/enum/changes/enum.alter.d.ts +3 -2
  369. package/dist/core/objects/type/enum/changes/enum.alter.js +2 -2
  370. package/dist/core/objects/type/enum/changes/enum.comment.d.ts +3 -2
  371. package/dist/core/objects/type/enum/changes/enum.comment.js +2 -2
  372. package/dist/core/objects/type/enum/changes/enum.create.d.ts +2 -1
  373. package/dist/core/objects/type/enum/changes/enum.create.js +1 -1
  374. package/dist/core/objects/type/enum/changes/enum.drop.d.ts +2 -1
  375. package/dist/core/objects/type/enum/changes/enum.drop.js +1 -1
  376. package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +4 -3
  377. package/dist/core/objects/type/enum/changes/enum.privilege.js +3 -3
  378. package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
  379. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  380. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  381. package/dist/core/objects/type/enum/enum.model.js +1 -1
  382. package/dist/core/objects/type/range/changes/range.alter.d.ts +2 -1
  383. package/dist/core/objects/type/range/changes/range.alter.js +1 -1
  384. package/dist/core/objects/type/range/changes/range.comment.d.ts +3 -2
  385. package/dist/core/objects/type/range/changes/range.comment.js +2 -2
  386. package/dist/core/objects/type/range/changes/range.create.d.ts +2 -1
  387. package/dist/core/objects/type/range/changes/range.create.js +7 -4
  388. package/dist/core/objects/type/range/changes/range.drop.d.ts +2 -1
  389. package/dist/core/objects/type/range/changes/range.drop.js +1 -1
  390. package/dist/core/objects/type/range/changes/range.privilege.d.ts +4 -3
  391. package/dist/core/objects/type/range/changes/range.privilege.js +3 -3
  392. package/dist/core/objects/type/range/changes/range.types.d.ts +1 -0
  393. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  394. package/dist/core/objects/type/range/range.diff.js +16 -77
  395. package/dist/core/objects/type/range/range.model.js +1 -1
  396. package/dist/core/objects/type/type.types.d.ts +1 -0
  397. package/dist/core/objects/view/changes/view.alter.d.ts +4 -3
  398. package/dist/core/objects/view/changes/view.alter.js +3 -3
  399. package/dist/core/objects/view/changes/view.comment.d.ts +3 -2
  400. package/dist/core/objects/view/changes/view.comment.js +2 -2
  401. package/dist/core/objects/view/changes/view.create.d.ts +2 -1
  402. package/dist/core/objects/view/changes/view.create.js +1 -1
  403. package/dist/core/objects/view/changes/view.drop.d.ts +2 -1
  404. package/dist/core/objects/view/changes/view.drop.js +1 -1
  405. package/dist/core/objects/view/changes/view.privilege.d.ts +4 -3
  406. package/dist/core/objects/view/changes/view.privilege.js +3 -3
  407. package/dist/core/objects/view/changes/view.types.d.ts +1 -0
  408. package/dist/core/objects/view/view.diff.d.ts +2 -8
  409. package/dist/core/objects/view/view.diff.js +37 -168
  410. package/dist/core/objects/view/view.model.d.ts +18 -4
  411. package/dist/core/objects/view/view.model.js +3 -13
  412. package/dist/core/plan/apply.js +11 -28
  413. package/dist/core/plan/create.d.ts +19 -6
  414. package/dist/core/plan/create.js +154 -171
  415. package/dist/core/plan/serialize.js +16 -4
  416. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  417. package/dist/core/plan/sql-format/constants.js +11 -0
  418. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  419. package/dist/core/plan/sql-format/fixtures.js +2455 -0
  420. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  421. package/dist/core/plan/sql-format/format-utils.js +274 -0
  422. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  423. package/dist/core/plan/sql-format/formatters.js +737 -0
  424. package/dist/core/plan/sql-format/index.d.ts +2 -0
  425. package/dist/core/plan/sql-format/index.js +98 -0
  426. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  427. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  428. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  429. package/dist/core/plan/sql-format/protect.js +269 -0
  430. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  431. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  432. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  433. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  434. package/dist/core/plan/sql-format/types.d.ts +28 -0
  435. package/dist/core/plan/sql-format/types.js +1 -0
  436. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  437. package/dist/core/plan/sql-format/wrap.js +165 -0
  438. package/dist/core/plan/sql-format.d.ts +2 -0
  439. package/dist/core/plan/sql-format.js +1 -0
  440. package/dist/core/plan/ssl-config.d.ts +32 -0
  441. package/dist/core/plan/ssl-config.js +115 -0
  442. package/dist/core/plan/statements.d.ts +2 -1
  443. package/dist/core/plan/statements.js +6 -2
  444. package/dist/core/plan/types.d.ts +9 -6
  445. package/dist/core/post-diff-cycle-breaking.d.ts +29 -0
  446. package/dist/core/post-diff-cycle-breaking.js +209 -0
  447. package/dist/core/postgres-config.d.ts +89 -3
  448. package/dist/core/postgres-config.js +273 -4
  449. package/dist/core/sort/custom-constraints.js +65 -1
  450. package/dist/core/sort/graph-builder.js +10 -0
  451. package/dist/core/sort/logical-sort.js +34 -47
  452. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  453. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  454. package/dist/index.d.ts +9 -0
  455. package/dist/index.js +9 -1
  456. package/package.json +59 -22
  457. package/src/cli/app.ts +52 -0
  458. package/src/cli/bin/cli.ts +15 -0
  459. package/src/cli/commands/apply.ts +101 -0
  460. package/src/cli/commands/catalog-export.ts +78 -0
  461. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  462. package/src/cli/commands/declarative-apply.ts +380 -0
  463. package/src/cli/commands/declarative-export.ts +322 -0
  464. package/src/cli/commands/plan.ts +210 -0
  465. package/src/cli/commands/sync.ts +178 -0
  466. package/src/cli/exit-code.test.ts +19 -0
  467. package/src/cli/exit-code.ts +7 -0
  468. package/src/cli/formatters/index.ts +5 -0
  469. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  470. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  471. package/src/cli/formatters/tree/tree.ts +238 -0
  472. package/src/cli/utils/apply-display.test.ts +348 -0
  473. package/src/cli/utils/apply-display.ts +238 -0
  474. package/src/cli/utils/export-display.test.ts +103 -0
  475. package/src/cli/utils/export-display.ts +275 -0
  476. package/src/cli/utils/integrations.test.ts +251 -0
  477. package/src/cli/utils/integrations.ts +170 -0
  478. package/src/cli/utils/resolve-input.test.ts +38 -0
  479. package/src/cli/utils/resolve-input.ts +17 -0
  480. package/src/cli/utils.ts +231 -0
  481. package/src/core/catalog-export/index.ts +20 -0
  482. package/src/core/catalog.diff.ts +253 -0
  483. package/src/core/catalog.model.test.ts +122 -0
  484. package/src/core/catalog.model.ts +510 -0
  485. package/src/core/catalog.snapshot.test.ts +488 -0
  486. package/src/core/catalog.snapshot.ts +289 -0
  487. package/src/core/change-utils.test.ts +61 -0
  488. package/src/core/change-utils.ts +73 -0
  489. package/src/core/change.types.ts +94 -0
  490. package/src/core/connection-url.test.ts +142 -0
  491. package/src/core/connection-url.ts +82 -0
  492. package/src/core/context.ts +26 -0
  493. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  494. package/src/core/declarative-apply/discover-sql.ts +107 -0
  495. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  496. package/src/core/declarative-apply/index.test.ts +67 -0
  497. package/src/core/declarative-apply/index.ts +205 -0
  498. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  499. package/src/core/declarative-apply/round-apply.ts +562 -0
  500. package/src/core/depend.ts +1895 -0
  501. package/src/core/expand-replace-dependencies.test.ts +552 -0
  502. package/src/core/expand-replace-dependencies.ts +536 -0
  503. package/src/core/export/file-mapper.test.ts +816 -0
  504. package/src/core/export/file-mapper.ts +579 -0
  505. package/src/core/export/grouper.ts +108 -0
  506. package/src/core/export/index.ts +138 -0
  507. package/src/core/export/types.ts +104 -0
  508. package/src/core/fingerprint.ts +204 -0
  509. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  510. package/src/core/integrations/filter/dsl.test.ts +450 -0
  511. package/src/core/integrations/filter/dsl.ts +305 -0
  512. package/src/core/integrations/filter/filter.types.ts +3 -0
  513. package/src/core/integrations/filter/flatten.test.ts +282 -0
  514. package/src/core/integrations/filter/flatten.ts +150 -0
  515. package/src/core/integrations/integration-dsl.ts +50 -0
  516. package/src/core/integrations/integration.types.ts +65 -0
  517. package/src/core/integrations/merge.test.ts +128 -0
  518. package/src/core/integrations/merge.ts +72 -0
  519. package/src/core/integrations/serialize/dsl.test.ts +110 -0
  520. package/src/core/integrations/serialize/dsl.ts +71 -0
  521. package/src/core/integrations/serialize/serialize.types.ts +40 -0
  522. package/src/core/integrations/supabase.ts +180 -0
  523. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  524. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  525. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  526. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  527. package/src/core/objects/aggregate/changes/aggregate.alter.ts +33 -0
  528. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  529. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  530. package/src/core/objects/aggregate/changes/aggregate.comment.ts +63 -0
  531. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  532. package/src/core/objects/aggregate/changes/aggregate.create.ts +330 -0
  533. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  534. package/src/core/objects/aggregate/changes/aggregate.drop.ts +33 -0
  535. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  536. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +147 -0
  537. package/src/core/objects/aggregate/changes/aggregate.types.ts +13 -0
  538. package/src/core/objects/base.change.ts +74 -0
  539. package/src/core/objects/base.default-privileges.ts +204 -0
  540. package/src/core/objects/base.diff.ts +20 -0
  541. package/src/core/objects/base.model.test.ts +43 -0
  542. package/src/core/objects/base.model.ts +85 -0
  543. package/src/core/objects/base.privilege-diff.ts +447 -0
  544. package/src/core/objects/base.privilege.ts +191 -0
  545. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  546. package/src/core/objects/collation/changes/collation.alter.ts +80 -0
  547. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  548. package/src/core/objects/collation/changes/collation.comment.ts +69 -0
  549. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  550. package/src/core/objects/collation/changes/collation.create.ts +107 -0
  551. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  552. package/src/core/objects/collation/changes/collation.drop.ts +38 -0
  553. package/src/core/objects/collation/changes/collation.types.ts +11 -0
  554. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  555. package/src/core/objects/collation/collation.diff.ts +127 -0
  556. package/src/core/objects/collation/collation.model.ts +224 -0
  557. package/src/core/objects/diff-context.ts +16 -0
  558. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  559. package/src/core/objects/domain/changes/domain.alter.ts +287 -0
  560. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  561. package/src/core/objects/domain/changes/domain.comment.ts +60 -0
  562. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  563. package/src/core/objects/domain/changes/domain.create.ts +141 -0
  564. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  565. package/src/core/objects/domain/changes/domain.drop.ts +35 -0
  566. package/src/core/objects/domain/changes/domain.privilege.ts +172 -0
  567. package/src/core/objects/domain/changes/domain.types.ts +13 -0
  568. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  569. package/src/core/objects/domain/domain.diff.ts +295 -0
  570. package/src/core/objects/domain/domain.model.ts +190 -0
  571. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  572. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +83 -0
  573. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  574. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +67 -0
  575. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  576. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +73 -0
  577. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  578. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +35 -0
  579. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +11 -0
  580. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  581. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  582. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  583. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  584. package/src/core/objects/extension/changes/extension.alter.ts +79 -0
  585. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  586. package/src/core/objects/extension/changes/extension.comment.ts +65 -0
  587. package/src/core/objects/extension/changes/extension.create.test.ts +50 -0
  588. package/src/core/objects/extension/changes/extension.create.ts +66 -0
  589. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  590. package/src/core/objects/extension/changes/extension.drop.ts +35 -0
  591. package/src/core/objects/extension/changes/extension.types.ts +11 -0
  592. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  593. package/src/core/objects/extension/extension.diff.ts +90 -0
  594. package/src/core/objects/extension/extension.model.test.ts +98 -0
  595. package/src/core/objects/extension/extension.model.ts +280 -0
  596. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  597. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +102 -0
  598. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  599. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +73 -0
  600. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  601. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +96 -0
  602. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  603. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +37 -0
  604. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +173 -0
  605. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +13 -0
  606. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  607. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  608. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  609. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +11 -0
  610. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  611. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +342 -0
  612. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  613. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +73 -0
  614. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  615. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +82 -0
  616. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  617. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +38 -0
  618. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +182 -0
  619. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +13 -0
  620. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  621. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  622. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  623. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  624. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +127 -0
  625. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  626. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +61 -0
  627. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  628. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +82 -0
  629. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  630. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +35 -0
  631. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +165 -0
  632. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +13 -0
  633. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  634. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  635. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  636. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  637. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +70 -0
  638. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  639. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  640. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +67 -0
  641. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  642. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +41 -0
  643. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +9 -0
  644. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  645. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  646. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  647. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  648. package/src/core/objects/index/changes/index.alter.ts +145 -0
  649. package/src/core/objects/index/changes/index.base.ts +20 -0
  650. package/src/core/objects/index/changes/index.comment.ts +64 -0
  651. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  652. package/src/core/objects/index/changes/index.create.ts +69 -0
  653. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  654. package/src/core/objects/index/changes/index.drop.ts +35 -0
  655. package/src/core/objects/index/changes/index.types.ts +7 -0
  656. package/src/core/objects/index/changes/utils.ts +16 -0
  657. package/src/core/objects/index/index.diff.test.ts +153 -0
  658. package/src/core/objects/index/index.diff.ts +243 -0
  659. package/src/core/objects/index/index.model.test.ts +83 -0
  660. package/src/core/objects/index/index.model.ts +379 -0
  661. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  662. package/src/core/objects/language/changes/language.alter.ts +54 -0
  663. package/src/core/objects/language/changes/language.base.ts +20 -0
  664. package/src/core/objects/language/changes/language.comment.ts +59 -0
  665. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  666. package/src/core/objects/language/changes/language.create.ts +105 -0
  667. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  668. package/src/core/objects/language/changes/language.drop.ts +40 -0
  669. package/src/core/objects/language/changes/language.privilege.ts +173 -0
  670. package/src/core/objects/language/changes/language.types.ts +13 -0
  671. package/src/core/objects/language/language.diff.test.ts +135 -0
  672. package/src/core/objects/language/language.diff.ts +144 -0
  673. package/src/core/objects/language/language.model.ts +150 -0
  674. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  675. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +114 -0
  676. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  677. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +177 -0
  678. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  679. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +94 -0
  680. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  681. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +61 -0
  682. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +213 -0
  683. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +13 -0
  684. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  685. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  686. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  687. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  688. package/src/core/objects/procedure/changes/procedure.alter.ts +291 -0
  689. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  690. package/src/core/objects/procedure/changes/procedure.comment.ts +71 -0
  691. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  692. package/src/core/objects/procedure/changes/procedure.create.ts +93 -0
  693. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  694. package/src/core/objects/procedure/changes/procedure.drop.ts +50 -0
  695. package/src/core/objects/procedure/changes/procedure.privilege.ts +189 -0
  696. package/src/core/objects/procedure/changes/procedure.types.ts +13 -0
  697. package/src/core/objects/procedure/procedure.diff.test.ts +284 -0
  698. package/src/core/objects/procedure/procedure.diff.ts +371 -0
  699. package/src/core/objects/procedure/procedure.model.ts +264 -0
  700. package/src/core/objects/procedure/utils.ts +58 -0
  701. package/src/core/objects/publication/changes/publication.alter.test.ts +221 -0
  702. package/src/core/objects/publication/changes/publication.alter.ts +232 -0
  703. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  704. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  705. package/src/core/objects/publication/changes/publication.comment.ts +65 -0
  706. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  707. package/src/core/objects/publication/changes/publication.create.ts +83 -0
  708. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  709. package/src/core/objects/publication/changes/publication.drop.ts +30 -0
  710. package/src/core/objects/publication/changes/publication.types.ts +25 -0
  711. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  712. package/src/core/objects/publication/publication.diff.ts +247 -0
  713. package/src/core/objects/publication/publication.model.ts +206 -0
  714. package/src/core/objects/publication/utils.ts +55 -0
  715. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +283 -0
  716. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +129 -0
  717. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  718. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +70 -0
  719. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +209 -0
  720. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +128 -0
  721. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +33 -0
  722. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +40 -0
  723. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +11 -0
  724. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +81 -0
  725. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  726. package/src/core/objects/rls-policy/rls-policy.model.ts +273 -0
  727. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  728. package/src/core/objects/role/changes/role.alter.ts +111 -0
  729. package/src/core/objects/role/changes/role.base.ts +24 -0
  730. package/src/core/objects/role/changes/role.comment.ts +56 -0
  731. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  732. package/src/core/objects/role/changes/role.create.ts +103 -0
  733. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  734. package/src/core/objects/role/changes/role.drop.ts +35 -0
  735. package/src/core/objects/role/changes/role.privilege.ts +377 -0
  736. package/src/core/objects/role/changes/role.types.ts +13 -0
  737. package/src/core/objects/role/role.diff.test.ts +279 -0
  738. package/src/core/objects/role/role.diff.ts +499 -0
  739. package/src/core/objects/role/role.model.ts +452 -0
  740. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  741. package/src/core/objects/rule/changes/rule.alter.ts +73 -0
  742. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  743. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  744. package/src/core/objects/rule/changes/rule.comment.ts +63 -0
  745. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  746. package/src/core/objects/rule/changes/rule.create.ts +43 -0
  747. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  748. package/src/core/objects/rule/changes/rule.drop.ts +30 -0
  749. package/src/core/objects/rule/changes/rule.types.ts +13 -0
  750. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  751. package/src/core/objects/rule/rule.diff.ts +79 -0
  752. package/src/core/objects/rule/rule.model.ts +173 -0
  753. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  754. package/src/core/objects/schema/changes/schema.alter.ts +46 -0
  755. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  756. package/src/core/objects/schema/changes/schema.comment.ts +57 -0
  757. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  758. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  759. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  760. package/src/core/objects/schema/changes/schema.drop.ts +35 -0
  761. package/src/core/objects/schema/changes/schema.privilege.ts +176 -0
  762. package/src/core/objects/schema/changes/schema.types.ts +13 -0
  763. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  764. package/src/core/objects/schema/schema.diff.ts +146 -0
  765. package/src/core/objects/schema/schema.model.ts +107 -0
  766. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  767. package/src/core/objects/sequence/changes/sequence.alter.ts +116 -0
  768. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  769. package/src/core/objects/sequence/changes/sequence.comment.ts +61 -0
  770. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  771. package/src/core/objects/sequence/changes/sequence.create.ts +112 -0
  772. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  773. package/src/core/objects/sequence/changes/sequence.drop.ts +50 -0
  774. package/src/core/objects/sequence/changes/sequence.privilege.ts +180 -0
  775. package/src/core/objects/sequence/changes/sequence.types.ts +13 -0
  776. package/src/core/objects/sequence/sequence.diff.test.ts +429 -0
  777. package/src/core/objects/sequence/sequence.diff.ts +326 -0
  778. package/src/core/objects/sequence/sequence.model.ts +185 -0
  779. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  780. package/src/core/objects/subscription/changes/subscription.alter.ts +111 -0
  781. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  782. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  783. package/src/core/objects/subscription/changes/subscription.comment.ts +65 -0
  784. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  785. package/src/core/objects/subscription/changes/subscription.create.ts +70 -0
  786. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  787. package/src/core/objects/subscription/changes/subscription.drop.ts +21 -0
  788. package/src/core/objects/subscription/changes/subscription.types.ts +23 -0
  789. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  790. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  791. package/src/core/objects/subscription/subscription.model.ts +190 -0
  792. package/src/core/objects/subscription/utils.ts +156 -0
  793. package/src/core/objects/table/changes/table.alter.test.ts +899 -0
  794. package/src/core/objects/table/changes/table.alter.ts +910 -0
  795. package/src/core/objects/table/changes/table.base.ts +20 -0
  796. package/src/core/objects/table/changes/table.comment.ts +267 -0
  797. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  798. package/src/core/objects/table/changes/table.create.ts +193 -0
  799. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  800. package/src/core/objects/table/changes/table.drop.ts +87 -0
  801. package/src/core/objects/table/changes/table.privilege.ts +201 -0
  802. package/src/core/objects/table/changes/table.types.ts +13 -0
  803. package/src/core/objects/table/table.diff.test.ts +1146 -0
  804. package/src/core/objects/table/table.diff.ts +889 -0
  805. package/src/core/objects/table/table.model.ts +462 -0
  806. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  807. package/src/core/objects/trigger/changes/trigger.alter.ts +77 -0
  808. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  809. package/src/core/objects/trigger/changes/trigger.comment.ts +65 -0
  810. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  811. package/src/core/objects/trigger/changes/trigger.create.ts +89 -0
  812. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  813. package/src/core/objects/trigger/changes/trigger.drop.ts +40 -0
  814. package/src/core/objects/trigger/changes/trigger.types.ts +11 -0
  815. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  816. package/src/core/objects/trigger/trigger.diff.ts +121 -0
  817. package/src/core/objects/trigger/trigger.model.ts +268 -0
  818. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  819. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +175 -0
  820. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  821. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +146 -0
  822. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  823. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +96 -0
  824. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  825. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +38 -0
  826. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +176 -0
  827. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +13 -0
  828. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  829. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  830. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  831. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  832. package/src/core/objects/type/enum/changes/enum.alter.ts +92 -0
  833. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  834. package/src/core/objects/type/enum/changes/enum.comment.ts +65 -0
  835. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  836. package/src/core/objects/type/enum/changes/enum.create.ts +57 -0
  837. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  838. package/src/core/objects/type/enum/changes/enum.drop.ts +35 -0
  839. package/src/core/objects/type/enum/changes/enum.privilege.ts +176 -0
  840. package/src/core/objects/type/enum/changes/enum.types.ts +13 -0
  841. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  842. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  843. package/src/core/objects/type/enum/enum.model.ts +194 -0
  844. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  845. package/src/core/objects/type/range/changes/range.alter.ts +52 -0
  846. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  847. package/src/core/objects/type/range/changes/range.comment.ts +65 -0
  848. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  849. package/src/core/objects/type/range/changes/range.create.ts +156 -0
  850. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  851. package/src/core/objects/type/range/changes/range.drop.ts +35 -0
  852. package/src/core/objects/type/range/changes/range.privilege.ts +176 -0
  853. package/src/core/objects/type/range/changes/range.types.ts +13 -0
  854. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  855. package/src/core/objects/type/range/range.diff.ts +197 -0
  856. package/src/core/objects/type/range/range.model.ts +187 -0
  857. package/src/core/objects/type/type.types.ts +6 -0
  858. package/src/core/objects/utils.ts +171 -0
  859. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  860. package/src/core/objects/view/changes/view.alter.ts +113 -0
  861. package/src/core/objects/view/changes/view.base.ts +20 -0
  862. package/src/core/objects/view/changes/view.comment.ts +60 -0
  863. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  864. package/src/core/objects/view/changes/view.create.ts +74 -0
  865. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  866. package/src/core/objects/view/changes/view.drop.ts +41 -0
  867. package/src/core/objects/view/changes/view.privilege.ts +201 -0
  868. package/src/core/objects/view/changes/view.types.ts +13 -0
  869. package/src/core/objects/view/view.diff.test.ts +269 -0
  870. package/src/core/objects/view/view.diff.ts +230 -0
  871. package/src/core/objects/view/view.model.ts +262 -0
  872. package/src/core/plan/apply.ts +172 -0
  873. package/src/core/plan/create.ts +368 -0
  874. package/src/core/plan/hierarchy.ts +574 -0
  875. package/src/core/plan/index.ts +29 -0
  876. package/src/core/plan/io.ts +20 -0
  877. package/src/core/plan/risk.ts +48 -0
  878. package/src/core/plan/serialize.test.ts +317 -0
  879. package/src/core/plan/serialize.ts +209 -0
  880. package/src/core/plan/sql-format/constants.ts +13 -0
  881. package/src/core/plan/sql-format/fixtures.ts +2811 -0
  882. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  883. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  884. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  885. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  886. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  887. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  888. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  889. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  890. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  891. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  892. package/src/core/plan/sql-format/format-utils.ts +391 -0
  893. package/src/core/plan/sql-format/formatters.ts +921 -0
  894. package/src/core/plan/sql-format/index.ts +149 -0
  895. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  896. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  897. package/src/core/plan/sql-format/protect.test.ts +127 -0
  898. package/src/core/plan/sql-format/protect.ts +337 -0
  899. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  900. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  901. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  902. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  903. package/src/core/plan/sql-format/types.ts +31 -0
  904. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  905. package/src/core/plan/sql-format/wrap.ts +196 -0
  906. package/src/core/plan/sql-format.ts +2 -0
  907. package/src/core/plan/ssl-config.ts +172 -0
  908. package/src/core/plan/statements.ts +22 -0
  909. package/src/core/plan/types.ts +168 -0
  910. package/src/core/post-diff-cycle-breaking.test.ts +459 -0
  911. package/src/core/post-diff-cycle-breaking.ts +317 -0
  912. package/src/core/postgres-config.test.ts +336 -0
  913. package/src/core/postgres-config.ts +458 -0
  914. package/src/core/sort/custom-constraints.ts +235 -0
  915. package/src/core/sort/debug-visualization.ts +239 -0
  916. package/src/core/sort/dependency-filter.ts +224 -0
  917. package/src/core/sort/graph-builder.ts +235 -0
  918. package/src/core/sort/graph-utils.ts +51 -0
  919. package/src/core/sort/logical-sort.test.ts +371 -0
  920. package/src/core/sort/logical-sort.ts +573 -0
  921. package/src/core/sort/sort-changes.ts +234 -0
  922. package/src/core/sort/topological-sort.test.ts +275 -0
  923. package/src/core/sort/topological-sort.ts +184 -0
  924. package/src/core/sort/types.ts +112 -0
  925. package/src/core/sort/utils.ts +69 -0
  926. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  927. package/src/index.ts +41 -0
  928. package/src/typedoc.ts +253 -0
  929. package/dist/core/integrations/filter/extractors.d.ts +0 -12
  930. package/dist/core/integrations/filter/extractors.js +0 -136
@@ -0,0 +1,43 @@
1
+ /**
2
+ * CLI helpers for declarative export: file tree, diff, and summary formatting.
3
+ */
4
+ import type { FileEntry } from "../../core/export/types.ts";
5
+ /**
6
+ * Ensure a relative file path does not escape the output directory.
7
+ * Uses Node.js path.resolve + startsWith as the canonical traversal check.
8
+ */
9
+ export declare function assertSafePath(filePath: string, outputDir: string): void;
10
+ interface FileDiffResult {
11
+ created: string[];
12
+ updated: string[];
13
+ deleted: string[];
14
+ unchanged: string[];
15
+ }
16
+ interface BuildFileTreeOptions {
17
+ /** When provided, leaf paths are prefixed with + / ~ / - and colorized (created / updated / deleted). */
18
+ diff?: FileDiffResult;
19
+ /** When true, only paths that are created, updated, or deleted are shown; unchanged are omitted. Includes diff.deleted in the tree. */
20
+ diffFocus?: boolean;
21
+ }
22
+ /**
23
+ * Build a directory tree string from file paths.
24
+ * Groups by directory, shows files as leaves with indentation.
25
+ * When options.diff is provided, leaf names are prefixed with + (created), ~ (updated), - (deleted) and colorized.
26
+ * When options.diffFocus is true, only changed paths (and their ancestors) are shown; unchanged files are omitted.
27
+ *
28
+ * @param files - Array of relative file paths (e.g. ["schemas/public/schema.sql", "schemas/public/tables/users.sql"])
29
+ * @param outputDir - Display name for the root (e.g. "declarative-schemas")
30
+ * @param options - Optional diff and diffFocus for symbols and filtering
31
+ */
32
+ export declare function buildFileTree(files: string[], outputDir: string, options?: BuildFileTreeOptions): string;
33
+ /**
34
+ * Compare existing output directory with new file set.
35
+ * Returns created, updated, deleted, and unchanged paths.
36
+ */
37
+ export declare function computeFileDiff(outputDir: string, newFiles: FileEntry[]): Promise<FileDiffResult>;
38
+ /**
39
+ * Format the created/deleted/updated summary with colors.
40
+ * In dry-run mode, uses "would create/delete/update" phrasing.
41
+ */
42
+ export declare function formatExportSummary(diff: FileDiffResult, dryRun: boolean): string;
43
+ export {};
@@ -0,0 +1,202 @@
1
+ /**
2
+ * CLI helpers for declarative export: file tree, diff, and summary formatting.
3
+ */
4
+ import { readdir, readFile } from "node:fs/promises";
5
+ import path from "node:path";
6
+ import chalk from "chalk";
7
+ // ============================================================================
8
+ // Path safety
9
+ // ============================================================================
10
+ /**
11
+ * Ensure a relative file path does not escape the output directory.
12
+ * Uses Node.js path.resolve + startsWith as the canonical traversal check.
13
+ */
14
+ export function assertSafePath(filePath, outputDir) {
15
+ const resolvedOutput = path.resolve(outputDir);
16
+ const resolvedFile = path.resolve(outputDir, filePath);
17
+ if (resolvedFile !== resolvedOutput &&
18
+ !resolvedFile.startsWith(resolvedOutput + path.sep)) {
19
+ throw new Error(`Export path traversal detected: '${filePath}' resolves outside output directory`);
20
+ }
21
+ }
22
+ function getFileStatus(path, diff) {
23
+ if (diff.created.includes(path))
24
+ return "created";
25
+ if (diff.updated.includes(path))
26
+ return "updated";
27
+ if (diff.deleted.includes(path))
28
+ return "deleted";
29
+ return "unchanged";
30
+ }
31
+ function formatLeafSegment(segment, status) {
32
+ switch (status) {
33
+ case "created":
34
+ return chalk.green(`+ ${segment}`);
35
+ case "updated":
36
+ return chalk.yellow(`~ ${segment}`);
37
+ case "deleted":
38
+ return chalk.red(`- ${segment}`);
39
+ default:
40
+ return chalk.dim(segment);
41
+ }
42
+ }
43
+ /**
44
+ * Build a directory tree string from file paths.
45
+ * Groups by directory, shows files as leaves with indentation.
46
+ * When options.diff is provided, leaf names are prefixed with + (created), ~ (updated), - (deleted) and colorized.
47
+ * When options.diffFocus is true, only changed paths (and their ancestors) are shown; unchanged files are omitted.
48
+ *
49
+ * @param files - Array of relative file paths (e.g. ["schemas/public/schema.sql", "schemas/public/tables/users.sql"])
50
+ * @param outputDir - Display name for the root (e.g. "declarative-schemas")
51
+ * @param options - Optional diff and diffFocus for symbols and filtering
52
+ */
53
+ export function buildFileTree(files, outputDir, options) {
54
+ const { diff, diffFocus } = options ?? {};
55
+ let pathsToShow = files;
56
+ if (diffFocus && diff) {
57
+ const changed = new Set([
58
+ ...diff.created,
59
+ ...diff.updated,
60
+ ...diff.deleted,
61
+ ]);
62
+ pathsToShow = [...changed];
63
+ if (pathsToShow.length === 0) {
64
+ return chalk.dim("(no file changes)");
65
+ }
66
+ }
67
+ const tree = new Map();
68
+ for (const filePath of pathsToShow) {
69
+ const segments = filePath.split("/");
70
+ let parent = "";
71
+ for (let i = 0; i < segments.length; i++) {
72
+ const segment = segments[i];
73
+ const fullPath = parent ? `${parent}/${segment}` : segment;
74
+ let children = tree.get(parent);
75
+ if (!children) {
76
+ children = new Set();
77
+ tree.set(parent, children);
78
+ }
79
+ children.add(fullPath);
80
+ parent = fullPath;
81
+ }
82
+ }
83
+ const lines = [];
84
+ function emit(relPath, indent, isLast) {
85
+ const segment = relPath ? path.basename(relPath) : outputDir;
86
+ const prefix = indent === 0 ? "" : " ".repeat(indent) + (isLast ? "└── " : "├── ");
87
+ const isLeaf = !tree.has(relPath);
88
+ const displaySegment = diff && isLeaf
89
+ ? formatLeafSegment(segment, getFileStatus(relPath, diff))
90
+ : segment;
91
+ lines.push(prefix + displaySegment);
92
+ const children = tree.get(relPath);
93
+ if (children) {
94
+ const sorted = [...children].sort((a, b) => path.basename(a).localeCompare(path.basename(b)));
95
+ for (let i = 0; i < sorted.length; i++) {
96
+ emit(sorted[i], indent + 1, i === sorted.length - 1);
97
+ }
98
+ }
99
+ }
100
+ emit("", 0, false);
101
+ return lines.join("\n");
102
+ }
103
+ // ============================================================================
104
+ // File diff
105
+ // ============================================================================
106
+ /**
107
+ * Recursively collect relative paths of managed (.sql) files under a directory.
108
+ * Non-SQL files (README, .gitkeep, etc.) are intentionally excluded so they
109
+ * are never flagged as "deleted" during diff.
110
+ */
111
+ async function collectExistingFiles(dir, base = "") {
112
+ const entries = await readdir(path.join(dir, base), { withFileTypes: true });
113
+ const files = [];
114
+ for (const e of entries) {
115
+ const rel = base ? `${base}/${e.name}` : e.name;
116
+ if (e.isFile() && e.name.endsWith(".sql")) {
117
+ files.push(rel);
118
+ }
119
+ else if (e.isDirectory()) {
120
+ files.push(...(await collectExistingFiles(dir, rel)));
121
+ }
122
+ }
123
+ return files;
124
+ }
125
+ /**
126
+ * Compare existing output directory with new file set.
127
+ * Returns created, updated, deleted, and unchanged paths.
128
+ */
129
+ export async function computeFileDiff(outputDir, newFiles) {
130
+ const newPaths = new Set(newFiles.map((f) => f.path));
131
+ const newByPath = new Map(newFiles.map((f) => [f.path, f]));
132
+ let existingPaths = [];
133
+ try {
134
+ existingPaths = await collectExistingFiles(outputDir);
135
+ }
136
+ catch {
137
+ // Directory doesn't exist or not readable
138
+ return {
139
+ created: [...newPaths],
140
+ updated: [],
141
+ deleted: [],
142
+ unchanged: [],
143
+ };
144
+ }
145
+ const existingSet = new Set(existingPaths);
146
+ const created = [];
147
+ const updated = [];
148
+ const deleted = [];
149
+ const unchanged = [];
150
+ for (const p of newPaths) {
151
+ if (!existingSet.has(p)) {
152
+ created.push(p);
153
+ }
154
+ else {
155
+ const entry = newByPath.get(p);
156
+ if (!entry)
157
+ continue;
158
+ try {
159
+ const existingContent = await readFile(path.join(outputDir, p), "utf-8");
160
+ if (existingContent.trim() !== entry.sql.trim()) {
161
+ updated.push(p);
162
+ }
163
+ else {
164
+ unchanged.push(p);
165
+ }
166
+ }
167
+ catch {
168
+ updated.push(p);
169
+ }
170
+ }
171
+ }
172
+ for (const p of existingPaths) {
173
+ if (!newPaths.has(p)) {
174
+ deleted.push(p);
175
+ }
176
+ }
177
+ return { created, updated, deleted, unchanged };
178
+ }
179
+ // ============================================================================
180
+ // Summary formatting
181
+ // ============================================================================
182
+ /**
183
+ * Format the created/deleted/updated summary with colors.
184
+ * In dry-run mode, uses "would create/delete/update" phrasing.
185
+ */
186
+ export function formatExportSummary(diff, dryRun) {
187
+ const lines = [];
188
+ const verb = dryRun ? "Would" : "";
189
+ if (diff.created.length > 0) {
190
+ lines.push(chalk.green(`${verb ? `${verb} create` : "Created"}: ${diff.created.length} file(s)`));
191
+ }
192
+ if (diff.updated.length > 0) {
193
+ lines.push(chalk.yellow(`${verb ? `${verb} update` : "Updated"}: ${diff.updated.length} file(s)`));
194
+ }
195
+ if (diff.deleted.length > 0) {
196
+ lines.push(chalk.red(`${verb ? `${verb} delete` : "Deleted"}: ${diff.deleted.length} file(s)`));
197
+ }
198
+ if (diff.unchanged.length > 0 && !dryRun) {
199
+ lines.push(chalk.dim(`Unchanged: ${diff.unchanged.length} file(s)`));
200
+ }
201
+ return lines.length > 0 ? lines.join("\n") : "";
202
+ }
@@ -1,14 +1,38 @@
1
1
  /**
2
2
  * Utilities for loading integrations from files.
3
3
  */
4
+ import type { CatalogSnapshot } from "../../core/catalog.snapshot.ts";
5
+ import type { FilterDSL } from "../../core/integrations/filter/dsl.ts";
4
6
  import type { IntegrationDSL } from "../../core/integrations/integration-dsl.ts";
7
+ import type { SerializeDSL } from "../../core/integrations/serialize/dsl.ts";
5
8
  /**
6
- * Load an integration DSL from a file or core integration.
7
- * If the path ends with .json, treats it as a JSON file path directly.
8
- * Otherwise, tries to load from core integrations (TypeScript) first,
9
- * then falls back to treating as a JSON file path.
9
+ * Load an integration DSL, recursively resolving `extends` chains.
10
10
  *
11
- * @param nameOrPath - Integration name (e.g., "supabase") or file path (e.g., "./my-integration.json")
12
- * @returns The loaded IntegrationDSL
11
+ * When an integration has `extends`, the referenced integration(s) are loaded
12
+ * and merged: filters are AND-combined, serialize rules concatenated (base first),
13
+ * and emptyCatalog uses the most-specific value.
14
+ *
15
+ * Circular extends are detected and rejected with a descriptive error.
16
+ *
17
+ * @param nameOrPath - Integration name (e.g., "supabase") or file path
18
+ * @returns The fully resolved IntegrationDSL
13
19
  */
14
20
  export declare function loadIntegrationDSL(nameOrPath: string): Promise<IntegrationDSL>;
21
+ interface ResolvedIntegrationOptions {
22
+ filter?: FilterDSL;
23
+ serialize?: SerializeDSL;
24
+ emptyCatalog?: CatalogSnapshot;
25
+ }
26
+ /**
27
+ * Load an integration (if provided) and merge its filter/serialize with CLI flags.
28
+ *
29
+ * - Filters are AND-combined (integration ∧ CLI flag)
30
+ * - Serialize rules are concatenated (integration first = higher priority)
31
+ * - emptyCatalog is extracted from the integration
32
+ */
33
+ export declare function resolveIntegrationOptions(options: {
34
+ filter?: FilterDSL;
35
+ serialize?: SerializeDSL;
36
+ integration?: string;
37
+ }): Promise<ResolvedIntegrationOptions>;
38
+ export {};
@@ -10,16 +10,14 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
10
10
  return path;
11
11
  };
12
12
  import { readFile } from "node:fs/promises";
13
+ import { mergeIntegrations } from "../../core/integrations/merge.js";
13
14
  /**
14
- * Load an integration DSL from a file or core integration.
15
- * If the path ends with .json, treats it as a JSON file path directly.
16
- * Otherwise, tries to load from core integrations (TypeScript) first,
17
- * then falls back to treating as a JSON file path.
15
+ * Load a raw integration DSL from a file or core integration (without resolving extends).
18
16
  *
19
17
  * @param nameOrPath - Integration name (e.g., "supabase") or file path (e.g., "./my-integration.json")
20
- * @returns The loaded IntegrationDSL
18
+ * @returns The loaded IntegrationDSL (unresolved)
21
19
  */
22
- export async function loadIntegrationDSL(nameOrPath) {
20
+ async function loadRawIntegrationDSL(nameOrPath) {
23
21
  // If path ends with .json, treat it as a JSON file path directly
24
22
  if (nameOrPath.endsWith(".json")) {
25
23
  const content = await readFile(nameOrPath, "utf-8");
@@ -42,3 +40,97 @@ export async function loadIntegrationDSL(nameOrPath) {
42
40
  const content = await readFile(nameOrPath, "utf-8");
43
41
  return JSON.parse(content);
44
42
  }
43
+ /**
44
+ * Load a core integration DSL by name only (no file path fallback).
45
+ *
46
+ * Used for resolving `extends` chains, which only support core integration names
47
+ * (e.g., "supabase"), not file paths.
48
+ *
49
+ * @param name - Core integration name (e.g., "supabase")
50
+ * @returns The loaded IntegrationDSL (unresolved)
51
+ */
52
+ async function loadCoreIntegrationDSL(name) {
53
+ try {
54
+ const module = await import(__rewriteRelativeImportExtension(`../../core/integrations/${name}.ts`));
55
+ if (name in module) {
56
+ return module[name];
57
+ }
58
+ }
59
+ catch {
60
+ // Module not found
61
+ }
62
+ throw new Error(`Unknown core integration: "${name}". extends only supports core integration names (e.g., "supabase").`);
63
+ }
64
+ /**
65
+ * Load an integration DSL, recursively resolving `extends` chains.
66
+ *
67
+ * When an integration has `extends`, the referenced integration(s) are loaded
68
+ * and merged: filters are AND-combined, serialize rules concatenated (base first),
69
+ * and emptyCatalog uses the most-specific value.
70
+ *
71
+ * Circular extends are detected and rejected with a descriptive error.
72
+ *
73
+ * @param nameOrPath - Integration name (e.g., "supabase") or file path
74
+ * @returns The fully resolved IntegrationDSL
75
+ */
76
+ export async function loadIntegrationDSL(nameOrPath) {
77
+ return resolveIntegration(nameOrPath, new Set());
78
+ }
79
+ async function resolveIntegration(nameOrPath, visited, preloadedRaw) {
80
+ if (visited.has(nameOrPath)) {
81
+ throw new Error(`Circular extends detected: ${[...visited, nameOrPath].join(" → ")}`);
82
+ }
83
+ visited.add(nameOrPath);
84
+ const raw = preloadedRaw ?? (await loadRawIntegrationDSL(nameOrPath));
85
+ if (!raw.extends) {
86
+ return raw;
87
+ }
88
+ // Resolve base integrations (extends only supports core integration names)
89
+ const extendsArray = Array.isArray(raw.extends) ? raw.extends : [raw.extends];
90
+ const baseIntegrations = [];
91
+ for (const baseName of extendsArray) {
92
+ const baseRaw = await loadCoreIntegrationDSL(baseName);
93
+ baseIntegrations.push(await resolveIntegration(baseName, new Set(visited), baseRaw));
94
+ }
95
+ // Remove extends from the current integration before merging
96
+ const { extends: _, ...current } = raw;
97
+ // Merge: bases first (higher priority serialize), then current (most-specific)
98
+ return mergeIntegrations([...baseIntegrations, current]);
99
+ }
100
+ /**
101
+ * Load an integration (if provided) and merge its filter/serialize with CLI flags.
102
+ *
103
+ * - Filters are AND-combined (integration ∧ CLI flag)
104
+ * - Serialize rules are concatenated (integration first = higher priority)
105
+ * - emptyCatalog is extracted from the integration
106
+ */
107
+ export async function resolveIntegrationOptions(options) {
108
+ if (!options.integration) {
109
+ return {
110
+ filter: options.filter,
111
+ serialize: options.serialize,
112
+ };
113
+ }
114
+ const integrationDSL = await loadIntegrationDSL(options.integration);
115
+ // AND-combine integration filter with CLI --filter
116
+ let filter;
117
+ if (integrationDSL.filter && options.filter) {
118
+ filter = { and: [integrationDSL.filter, options.filter] };
119
+ }
120
+ else {
121
+ filter = options.filter ?? integrationDSL.filter;
122
+ }
123
+ // Concatenate serialize rules (integration first = higher priority)
124
+ let serialize;
125
+ if (integrationDSL.serialize && options.serialize) {
126
+ serialize = [...integrationDSL.serialize, ...options.serialize];
127
+ }
128
+ else {
129
+ serialize = options.serialize ?? integrationDSL.serialize;
130
+ }
131
+ return {
132
+ filter,
133
+ serialize,
134
+ emptyCatalog: integrationDSL.emptyCatalog,
135
+ };
136
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Shared utilities for resolving CLI --source/--target inputs that
3
+ * can be either a PostgreSQL connection URL or a catalog snapshot file path.
4
+ */
5
+ import type { Catalog } from "../../core/catalog.model.ts";
6
+ export declare function isPostgresUrl(input: string): boolean;
7
+ export declare function loadCatalogFromFile(path: string): Promise<Catalog>;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared utilities for resolving CLI --source/--target inputs that
3
+ * can be either a PostgreSQL connection URL or a catalog snapshot file path.
4
+ */
5
+ import { readFile } from "node:fs/promises";
6
+ import { deserializeCatalog } from "../../core/catalog.snapshot.js";
7
+ export function isPostgresUrl(input) {
8
+ return input.startsWith("postgres://") || input.startsWith("postgresql://");
9
+ }
10
+ export async function loadCatalogFromFile(path) {
11
+ const json = await readFile(path, "utf-8");
12
+ return deserializeCatalog(JSON.parse(json));
13
+ }
@@ -5,6 +5,7 @@ import type { CommandContext } from "@stricli/core";
5
5
  import type { Change } from "../core/change.types.ts";
6
6
  import type { DiffContext } from "../core/context.ts";
7
7
  import { type Plan } from "../core/plan/index.ts";
8
+ import type { SqlFormatOptions } from "../core/plan/sql-format.ts";
8
9
  type ApplyPlanResult = {
9
10
  status: "invalid_plan";
10
11
  message: string;
@@ -31,6 +32,7 @@ type PlanResult = {
31
32
  interface FormatPlanOptions {
32
33
  disableColors?: boolean;
33
34
  showUnsafeFlagSuggestion?: boolean;
35
+ sqlFormatOptions?: SqlFormatOptions;
34
36
  }
35
37
  /**
36
38
  * Formats a plan result for display in various formats.
package/dist/cli/utils.js CHANGED
@@ -19,7 +19,7 @@ export function formatPlanForDisplay(planResult, format, options = {}) {
19
19
  case "sql": {
20
20
  const content = [
21
21
  `-- Risk: ${risk.level === "data_loss" ? `data-loss (${risk.statements.length})` : "safe"}`,
22
- formatSqlScript(plan.statements),
22
+ formatSqlScript(plan.statements, options.sqlFormatOptions),
23
23
  ].join("\n");
24
24
  return { content, label: "Migration script" };
25
25
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Catalog export – programmatic API for extracting a database catalog
3
+ * and serializing it to a JSON snapshot.
4
+ *
5
+ * Use this subpath when you only need catalog export (e.g. Supabase CLI
6
+ * edge-runtime templates) without pulling in the full pg-delta API.
7
+ */
8
+ export { Catalog, createEmptyCatalog, extractCatalog, } from "../catalog.model.ts";
9
+ export type { CatalogSnapshot } from "../catalog.snapshot.ts";
10
+ export { deserializeCatalog, serializeCatalog, stringifyCatalogSnapshot, } from "../catalog.snapshot.ts";
11
+ export { createManagedPool } from "../postgres-config.ts";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Catalog export – programmatic API for extracting a database catalog
3
+ * and serializing it to a JSON snapshot.
4
+ *
5
+ * Use this subpath when you only need catalog export (e.g. Supabase CLI
6
+ * edge-runtime templates) without pulling in the full pg-delta API.
7
+ */
8
+ export { Catalog, createEmptyCatalog, extractCatalog, } from "../catalog.model.js";
9
+ export { deserializeCatalog, serializeCatalog, stringifyCatalogSnapshot, } from "../catalog.snapshot.js";
10
+ export { createManagedPool } from "../postgres-config.js";
@@ -2,4 +2,5 @@ import type { Catalog } from "./catalog.model.ts";
2
2
  import type { Change } from "./change.types.ts";
3
3
  export declare function diffCatalogs(main: Catalog, branch: Catalog, options?: {
4
4
  role?: string;
5
+ skipDefaultPrivilegeSubtraction?: boolean;
5
6
  }): Change[];
@@ -1,5 +1,6 @@
1
1
  import debug from "debug";
2
2
  import { expandReplaceDependencies } from "./expand-replace-dependencies.js";
3
+ import { normalizePostDiffCycles } from "./post-diff-cycle-breaking.js";
3
4
  const debugCatalog = debug("pg-delta:catalog");
4
5
  import { diffAggregates } from "./objects/aggregate/aggregate.diff.js";
5
6
  import { DefaultPrivilegeState } from "./objects/base.default-privileges.js";
@@ -29,6 +30,48 @@ import { diffEnums } from "./objects/type/enum/enum.diff.js";
29
30
  import { diffRanges } from "./objects/type/range/range.diff.js";
30
31
  import { stringifyWithBigInt } from "./objects/utils.js";
31
32
  import { diffViews } from "./objects/view/view.diff.js";
33
+ /**
34
+ * Get the stableId of the target object for a privilege change.
35
+ * Used to filter out redundant REVOKE statements for dropped objects.
36
+ */
37
+ function getPrivilegeTargetStableId(change) {
38
+ switch (change.objectType) {
39
+ case "composite_type":
40
+ return change.compositeType.stableId;
41
+ case "domain":
42
+ return change.domain.stableId;
43
+ case "enum":
44
+ return change.enum.stableId;
45
+ case "language":
46
+ return change.language.stableId;
47
+ case "materialized_view":
48
+ return change.materializedView.stableId;
49
+ case "aggregate":
50
+ return change.aggregate.stableId;
51
+ case "procedure":
52
+ return change.procedure.stableId;
53
+ case "range":
54
+ return change.range.stableId;
55
+ case "schema":
56
+ return change.schema.stableId;
57
+ case "sequence":
58
+ return change.sequence.stableId;
59
+ case "table":
60
+ return change.table.stableId;
61
+ case "view":
62
+ return change.view.stableId;
63
+ case "foreign_data_wrapper":
64
+ return change.foreignDataWrapper.stableId;
65
+ case "server":
66
+ return change.server.stableId;
67
+ case "foreign_table":
68
+ return change.foreignTable.stableId;
69
+ default: {
70
+ const _exhaustive = change;
71
+ return _exhaustive;
72
+ }
73
+ }
74
+ }
32
75
  export function diffCatalogs(main, branch, options) {
33
76
  const changes = [];
34
77
  // Step 1: Diff roles first to get default privilege changes
@@ -38,13 +81,22 @@ export function diffCatalogs(main, branch, options) {
38
81
  // This represents what defaults will be in effect after all ALTER DEFAULT PRIVILEGES
39
82
  // Since ALTER DEFAULT PRIVILEGES runs before CREATE (via constraint spec),
40
83
  // all created objects will use these final defaults.
41
- const defaultPrivilegeState = new DefaultPrivilegeState(main.roles);
42
- for (const change of roleChanges) {
43
- if (change instanceof GrantRoleDefaultPrivileges) {
44
- defaultPrivilegeState.applyGrant(change.role.name, change.objtype, change.inSchema, change.grantee, change.privileges);
45
- }
46
- else if (change instanceof RevokeRoleDefaultPrivileges) {
47
- defaultPrivilegeState.applyRevoke(change.role.name, change.objtype, change.inSchema, change.grantee, change.privileges);
84
+ //
85
+ // When skipDefaultPrivilegeSubtraction is true, we use an empty state so that
86
+ // getEffectiveDefaults always returns [] -- no privileges are subtracted and
87
+ // every GRANT is emitted explicitly. This is needed for declarative export
88
+ // where the output must be self-contained regardless of statement execution order.
89
+ const defaultPrivilegeState = options?.skipDefaultPrivilegeSubtraction
90
+ ? new DefaultPrivilegeState({})
91
+ : new DefaultPrivilegeState(main.roles);
92
+ if (!options?.skipDefaultPrivilegeSubtraction) {
93
+ for (const change of roleChanges) {
94
+ if (change instanceof GrantRoleDefaultPrivileges) {
95
+ defaultPrivilegeState.applyGrant(change.role.name, change.objtype, change.inSchema, change.grantee, change.privileges);
96
+ }
97
+ else if (change instanceof RevokeRoleDefaultPrivileges) {
98
+ defaultPrivilegeState.applyRevoke(change.role.name, change.objtype, change.inSchema, change.grantee, change.privileges);
99
+ }
48
100
  }
49
101
  }
50
102
  // Step 3: Create context with default privileges state for object diffing
@@ -58,25 +110,26 @@ export function diffCatalogs(main, branch, options) {
58
110
  currentUser: effectiveUser,
59
111
  defaultPrivilegeState,
60
112
  mainRoles: main.roles,
113
+ skipDefaultPrivilegeSubtraction: options?.skipDefaultPrivilegeSubtraction,
61
114
  };
62
115
  // Step 4: Diff all other objects with default privileges context
63
116
  changes.push(...diffAggregates(diffContext, main.aggregates, branch.aggregates));
64
- changes.push(...diffCollations({ currentUser: effectiveUser }, main.collations, branch.collations));
117
+ changes.push(...diffCollations(diffContext, main.collations, branch.collations));
65
118
  changes.push(...diffCompositeTypes(diffContext, main.compositeTypes, branch.compositeTypes));
66
119
  changes.push(...diffDomains(diffContext, main.domains, branch.domains));
67
120
  changes.push(...diffEnums(diffContext, main.enums, branch.enums));
68
121
  changes.push(...diffExtensions(main.extensions, branch.extensions));
69
122
  changes.push(...diffIndexes(main.indexes, branch.indexes, branch.indexableObjects));
70
123
  changes.push(...diffMaterializedViews(diffContext, main.materializedViews, branch.materializedViews));
71
- changes.push(...diffSubscriptions({ currentUser: effectiveUser }, main.subscriptions, branch.subscriptions));
72
- changes.push(...diffPublications({ currentUser: effectiveUser }, main.publications, branch.publications));
124
+ changes.push(...diffSubscriptions(diffContext, main.subscriptions, branch.subscriptions));
125
+ changes.push(...diffPublications(diffContext, main.publications, branch.publications));
73
126
  changes.push(...diffProcedures(diffContext, main.procedures, branch.procedures));
74
127
  changes.push(...diffRlsPolicies(main.rlsPolicies, branch.rlsPolicies));
75
128
  changes.push(...diffSchemas(diffContext, main.schemas, branch.schemas));
76
129
  changes.push(...diffSequences(diffContext, main.sequences, branch.sequences, branch.tables));
77
130
  changes.push(...diffTables(diffContext, main.tables, branch.tables));
78
131
  changes.push(...diffTriggers(main.triggers, branch.triggers, branch.indexableObjects));
79
- changes.push(...diffEventTriggers({ currentUser: effectiveUser }, main.eventTriggers, branch.eventTriggers));
132
+ changes.push(...diffEventTriggers(diffContext, main.eventTriggers, branch.eventTriggers));
80
133
  changes.push(...diffRules(main.rules, branch.rules));
81
134
  changes.push(...diffRanges(diffContext, main.ranges, branch.ranges));
82
135
  changes.push(...diffViews(diffContext, main.views, branch.views));
@@ -97,51 +150,20 @@ export function diffCatalogs(main, branch, options) {
97
150
  }
98
151
  let filteredChanges = changes.filter((change) => {
99
152
  if (change.operation === "alter" && change.scope === "privilege") {
100
- switch (change.objectType) {
101
- case "composite_type":
102
- return !droppedObjectStableIds.has(change.compositeType.stableId);
103
- case "domain":
104
- return !droppedObjectStableIds.has(change.domain.stableId);
105
- case "enum":
106
- return !droppedObjectStableIds.has(change.enum.stableId);
107
- case "language":
108
- return !droppedObjectStableIds.has(change.language.stableId);
109
- case "materialized_view":
110
- return !droppedObjectStableIds.has(change.materializedView.stableId);
111
- case "aggregate":
112
- return !droppedObjectStableIds.has(change.aggregate.stableId);
113
- case "procedure":
114
- return !droppedObjectStableIds.has(change.procedure.stableId);
115
- case "range":
116
- return !droppedObjectStableIds.has(change.range.stableId);
117
- case "schema":
118
- return !droppedObjectStableIds.has(change.schema.stableId);
119
- case "sequence":
120
- return !droppedObjectStableIds.has(change.sequence.stableId);
121
- case "table":
122
- return !droppedObjectStableIds.has(change.table.stableId);
123
- case "view":
124
- return !droppedObjectStableIds.has(change.view.stableId);
125
- case "foreign_data_wrapper":
126
- return !droppedObjectStableIds.has(change.foreignDataWrapper.stableId);
127
- case "server":
128
- return !droppedObjectStableIds.has(change.server.stableId);
129
- case "foreign_table":
130
- return !droppedObjectStableIds.has(change.foreignTable.stableId);
131
- default: {
132
- // exhaustiveness check
133
- const _exhaustive = change;
134
- return _exhaustive;
135
- }
136
- }
153
+ return !droppedObjectStableIds.has(getPrivilegeTargetStableId(change));
137
154
  }
138
155
  return true;
139
156
  });
140
- filteredChanges = expandReplaceDependencies({
157
+ const expandedDependencies = expandReplaceDependencies({
141
158
  changes: filteredChanges,
142
159
  mainCatalog: main,
143
160
  branchCatalog: branch,
144
161
  });
162
+ filteredChanges = normalizePostDiffCycles({
163
+ changes: expandedDependencies.changes,
164
+ mainCatalog: main,
165
+ replacedTableIds: expandedDependencies.replacedTableIds,
166
+ });
145
167
  debugCatalog("changes catalog diff: %O", stringifyWithBigInt(filteredChanges, 2));
146
168
  return filteredChanges;
147
169
  }