@supabase/pg-delta 1.0.0-alpha.10 → 1.0.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/dist/cli/commands/declarative-export.js +12 -17
  2. package/dist/cli/commands/plan.js +10 -13
  3. package/dist/cli/commands/sync.js +8 -12
  4. package/dist/cli/utils/integrations.d.ts +30 -6
  5. package/dist/cli/utils/integrations.js +98 -6
  6. package/dist/core/change-utils.d.ts +9 -0
  7. package/dist/core/change-utils.js +71 -0
  8. package/dist/core/change.types.d.ts +22 -0
  9. package/dist/core/change.types.js +37 -1
  10. package/dist/core/depend.js +25 -0
  11. package/dist/core/expand-replace-dependencies.js +23 -0
  12. package/dist/core/export/file-mapper.d.ts +2 -2
  13. package/dist/core/integrations/filter/dsl.d.ts +78 -74
  14. package/dist/core/integrations/filter/dsl.js +127 -79
  15. package/dist/core/integrations/filter/flatten.d.ts +51 -0
  16. package/dist/core/integrations/filter/flatten.js +116 -0
  17. package/dist/core/integrations/integration-dsl.d.ts +17 -1
  18. package/dist/core/integrations/merge.d.ts +20 -0
  19. package/dist/core/integrations/merge.js +60 -0
  20. package/dist/core/integrations/serialize/dsl.d.ts +8 -12
  21. package/dist/core/integrations/serialize/dsl.js +2 -2
  22. package/dist/core/integrations/serialize/serialize.types.d.ts +31 -0
  23. package/dist/core/integrations/supabase.js +42 -8
  24. package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +2 -1
  25. package/dist/core/objects/aggregate/changes/aggregate.alter.js +1 -1
  26. package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +3 -2
  27. package/dist/core/objects/aggregate/changes/aggregate.comment.js +2 -2
  28. package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +2 -1
  29. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  30. package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +2 -1
  31. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  32. package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +4 -3
  33. package/dist/core/objects/aggregate/changes/aggregate.privilege.js +3 -3
  34. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +1 -0
  35. package/dist/core/objects/base.change.d.ts +12 -1
  36. package/dist/core/objects/base.change.js +10 -0
  37. package/dist/core/objects/base.model.d.ts +4 -1
  38. package/dist/core/objects/base.model.js +5 -2
  39. package/dist/core/objects/collation/changes/collation.alter.d.ts +3 -2
  40. package/dist/core/objects/collation/changes/collation.alter.js +2 -2
  41. package/dist/core/objects/collation/changes/collation.comment.d.ts +3 -2
  42. package/dist/core/objects/collation/changes/collation.comment.js +2 -2
  43. package/dist/core/objects/collation/changes/collation.create.d.ts +2 -1
  44. package/dist/core/objects/collation/changes/collation.create.js +1 -1
  45. package/dist/core/objects/collation/changes/collation.drop.d.ts +2 -1
  46. package/dist/core/objects/collation/changes/collation.drop.js +1 -1
  47. package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
  48. package/dist/core/objects/domain/changes/domain.alter.d.ts +9 -8
  49. package/dist/core/objects/domain/changes/domain.alter.js +8 -8
  50. package/dist/core/objects/domain/changes/domain.comment.d.ts +3 -2
  51. package/dist/core/objects/domain/changes/domain.comment.js +2 -2
  52. package/dist/core/objects/domain/changes/domain.create.d.ts +3 -2
  53. package/dist/core/objects/domain/changes/domain.create.js +8 -2
  54. package/dist/core/objects/domain/changes/domain.drop.d.ts +2 -1
  55. package/dist/core/objects/domain/changes/domain.drop.js +1 -1
  56. package/dist/core/objects/domain/changes/domain.privilege.d.ts +4 -3
  57. package/dist/core/objects/domain/changes/domain.privilege.js +3 -3
  58. package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
  59. package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +3 -2
  60. package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +2 -2
  61. package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +3 -2
  62. package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +2 -2
  63. package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +2 -1
  64. package/dist/core/objects/event-trigger/changes/event-trigger.create.js +1 -1
  65. package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +2 -1
  66. package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +1 -1
  67. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +1 -0
  68. package/dist/core/objects/extension/changes/extension.alter.d.ts +3 -2
  69. package/dist/core/objects/extension/changes/extension.alter.js +2 -2
  70. package/dist/core/objects/extension/changes/extension.comment.d.ts +3 -2
  71. package/dist/core/objects/extension/changes/extension.comment.js +2 -2
  72. package/dist/core/objects/extension/changes/extension.create.d.ts +2 -1
  73. package/dist/core/objects/extension/changes/extension.create.js +4 -2
  74. package/dist/core/objects/extension/changes/extension.drop.d.ts +2 -1
  75. package/dist/core/objects/extension/changes/extension.drop.js +1 -1
  76. package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
  77. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +3 -2
  78. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +2 -2
  79. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +3 -2
  80. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +2 -2
  81. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +2 -1
  82. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +1 -1
  83. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +2 -1
  84. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +1 -1
  85. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +4 -3
  86. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +3 -3
  87. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
  88. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
  89. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +10 -9
  90. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +9 -9
  91. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +3 -2
  92. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +2 -2
  93. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +2 -1
  94. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +1 -1
  95. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +2 -1
  96. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +1 -1
  97. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +4 -3
  98. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +3 -3
  99. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
  100. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +4 -3
  101. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +3 -3
  102. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +3 -2
  103. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +2 -2
  104. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +2 -1
  105. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +1 -1
  106. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +2 -1
  107. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +1 -1
  108. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +4 -3
  109. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +3 -3
  110. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
  111. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +2 -1
  112. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +1 -1
  113. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +2 -1
  114. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +1 -1
  115. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +2 -1
  116. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +1 -1
  117. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
  118. package/dist/core/objects/index/changes/index.alter.d.ts +4 -3
  119. package/dist/core/objects/index/changes/index.alter.js +3 -3
  120. package/dist/core/objects/index/changes/index.comment.d.ts +3 -2
  121. package/dist/core/objects/index/changes/index.comment.js +2 -2
  122. package/dist/core/objects/index/changes/index.create.d.ts +2 -1
  123. package/dist/core/objects/index/changes/index.create.js +1 -1
  124. package/dist/core/objects/index/changes/index.drop.d.ts +2 -1
  125. package/dist/core/objects/index/changes/index.drop.js +1 -1
  126. package/dist/core/objects/index/changes/index.types.d.ts +1 -0
  127. package/dist/core/objects/language/changes/language.alter.d.ts +2 -1
  128. package/dist/core/objects/language/changes/language.alter.js +1 -1
  129. package/dist/core/objects/language/changes/language.comment.d.ts +3 -2
  130. package/dist/core/objects/language/changes/language.comment.js +2 -2
  131. package/dist/core/objects/language/changes/language.create.d.ts +2 -1
  132. package/dist/core/objects/language/changes/language.create.js +1 -1
  133. package/dist/core/objects/language/changes/language.drop.d.ts +2 -1
  134. package/dist/core/objects/language/changes/language.drop.js +1 -1
  135. package/dist/core/objects/language/changes/language.privilege.d.ts +4 -3
  136. package/dist/core/objects/language/changes/language.privilege.js +3 -3
  137. package/dist/core/objects/language/changes/language.types.d.ts +1 -0
  138. package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +3 -2
  139. package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +2 -2
  140. package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +5 -4
  141. package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +4 -4
  142. package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +2 -1
  143. package/dist/core/objects/materialized-view/changes/materialized-view.create.js +1 -1
  144. package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +2 -1
  145. package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +1 -1
  146. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +4 -3
  147. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +3 -3
  148. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +1 -0
  149. package/dist/core/objects/procedure/changes/procedure.alter.d.ts +8 -7
  150. package/dist/core/objects/procedure/changes/procedure.alter.js +7 -7
  151. package/dist/core/objects/procedure/changes/procedure.comment.d.ts +3 -2
  152. package/dist/core/objects/procedure/changes/procedure.comment.js +2 -2
  153. package/dist/core/objects/procedure/changes/procedure.create.d.ts +2 -1
  154. package/dist/core/objects/procedure/changes/procedure.create.js +1 -1
  155. package/dist/core/objects/procedure/changes/procedure.drop.d.ts +2 -1
  156. package/dist/core/objects/procedure/changes/procedure.drop.js +1 -1
  157. package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +4 -3
  158. package/dist/core/objects/procedure/changes/procedure.privilege.js +3 -3
  159. package/dist/core/objects/procedure/changes/procedure.types.d.ts +1 -0
  160. package/dist/core/objects/publication/changes/publication.alter.d.ts +9 -7
  161. package/dist/core/objects/publication/changes/publication.alter.js +12 -7
  162. package/dist/core/objects/publication/changes/publication.comment.d.ts +3 -2
  163. package/dist/core/objects/publication/changes/publication.comment.js +2 -2
  164. package/dist/core/objects/publication/changes/publication.create.d.ts +2 -1
  165. package/dist/core/objects/publication/changes/publication.create.js +1 -1
  166. package/dist/core/objects/publication/changes/publication.drop.d.ts +2 -1
  167. package/dist/core/objects/publication/changes/publication.drop.js +1 -1
  168. package/dist/core/objects/publication/changes/publication.types.d.ts +1 -0
  169. package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +4 -3
  170. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  171. package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +3 -2
  172. package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +2 -2
  173. package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +2 -1
  174. package/dist/core/objects/rls-policy/changes/rls-policy.create.js +1 -1
  175. package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +2 -1
  176. package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +1 -1
  177. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
  178. package/dist/core/objects/role/changes/role.alter.d.ts +3 -2
  179. package/dist/core/objects/role/changes/role.alter.js +2 -2
  180. package/dist/core/objects/role/changes/role.comment.d.ts +3 -2
  181. package/dist/core/objects/role/changes/role.comment.js +2 -2
  182. package/dist/core/objects/role/changes/role.create.d.ts +2 -1
  183. package/dist/core/objects/role/changes/role.create.js +1 -1
  184. package/dist/core/objects/role/changes/role.drop.d.ts +2 -1
  185. package/dist/core/objects/role/changes/role.drop.js +1 -1
  186. package/dist/core/objects/role/changes/role.privilege.d.ts +6 -5
  187. package/dist/core/objects/role/changes/role.privilege.js +5 -5
  188. package/dist/core/objects/role/changes/role.types.d.ts +1 -0
  189. package/dist/core/objects/rule/changes/rule.alter.d.ts +3 -2
  190. package/dist/core/objects/rule/changes/rule.alter.js +2 -2
  191. package/dist/core/objects/rule/changes/rule.comment.d.ts +3 -2
  192. package/dist/core/objects/rule/changes/rule.comment.js +2 -2
  193. package/dist/core/objects/rule/changes/rule.create.d.ts +2 -1
  194. package/dist/core/objects/rule/changes/rule.create.js +1 -1
  195. package/dist/core/objects/rule/changes/rule.drop.d.ts +2 -1
  196. package/dist/core/objects/rule/changes/rule.drop.js +1 -1
  197. package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
  198. package/dist/core/objects/schema/changes/schema.alter.d.ts +2 -1
  199. package/dist/core/objects/schema/changes/schema.alter.js +1 -1
  200. package/dist/core/objects/schema/changes/schema.comment.d.ts +3 -2
  201. package/dist/core/objects/schema/changes/schema.comment.js +2 -2
  202. package/dist/core/objects/schema/changes/schema.create.d.ts +3 -5
  203. package/dist/core/objects/schema/changes/schema.drop.d.ts +2 -1
  204. package/dist/core/objects/schema/changes/schema.drop.js +1 -1
  205. package/dist/core/objects/schema/changes/schema.privilege.d.ts +4 -3
  206. package/dist/core/objects/schema/changes/schema.privilege.js +3 -3
  207. package/dist/core/objects/schema/changes/schema.types.d.ts +1 -0
  208. package/dist/core/objects/sequence/changes/sequence.alter.d.ts +3 -2
  209. package/dist/core/objects/sequence/changes/sequence.alter.js +2 -2
  210. package/dist/core/objects/sequence/changes/sequence.comment.d.ts +3 -2
  211. package/dist/core/objects/sequence/changes/sequence.comment.js +2 -2
  212. package/dist/core/objects/sequence/changes/sequence.create.d.ts +2 -1
  213. package/dist/core/objects/sequence/changes/sequence.create.js +1 -1
  214. package/dist/core/objects/sequence/changes/sequence.drop.d.ts +2 -1
  215. package/dist/core/objects/sequence/changes/sequence.drop.js +11 -3
  216. package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +4 -3
  217. package/dist/core/objects/sequence/changes/sequence.privilege.js +3 -3
  218. package/dist/core/objects/sequence/changes/sequence.types.d.ts +1 -0
  219. package/dist/core/objects/sequence/sequence.diff.d.ts +4 -1
  220. package/dist/core/objects/sequence/sequence.diff.js +12 -0
  221. package/dist/core/objects/subscription/changes/subscription.alter.d.ts +7 -6
  222. package/dist/core/objects/subscription/changes/subscription.alter.js +6 -6
  223. package/dist/core/objects/subscription/changes/subscription.comment.d.ts +3 -2
  224. package/dist/core/objects/subscription/changes/subscription.comment.js +2 -2
  225. package/dist/core/objects/subscription/changes/subscription.create.d.ts +2 -1
  226. package/dist/core/objects/subscription/changes/subscription.create.js +1 -1
  227. package/dist/core/objects/subscription/changes/subscription.drop.d.ts +2 -1
  228. package/dist/core/objects/subscription/changes/subscription.drop.js +1 -1
  229. package/dist/core/objects/subscription/changes/subscription.types.d.ts +1 -0
  230. package/dist/core/objects/table/changes/table.alter.d.ts +65 -22
  231. package/dist/core/objects/table/changes/table.alter.js +107 -22
  232. package/dist/core/objects/table/changes/table.comment.d.ts +7 -6
  233. package/dist/core/objects/table/changes/table.comment.js +6 -6
  234. package/dist/core/objects/table/changes/table.create.d.ts +2 -1
  235. package/dist/core/objects/table/changes/table.create.js +1 -1
  236. package/dist/core/objects/table/changes/table.drop.d.ts +4 -3
  237. package/dist/core/objects/table/changes/table.drop.js +7 -1
  238. package/dist/core/objects/table/changes/table.privilege.d.ts +4 -3
  239. package/dist/core/objects/table/changes/table.privilege.js +3 -3
  240. package/dist/core/objects/table/changes/table.types.d.ts +1 -0
  241. package/dist/core/objects/table/table.diff.js +46 -1
  242. package/dist/core/objects/trigger/changes/trigger.alter.d.ts +2 -1
  243. package/dist/core/objects/trigger/changes/trigger.alter.js +1 -1
  244. package/dist/core/objects/trigger/changes/trigger.comment.d.ts +3 -2
  245. package/dist/core/objects/trigger/changes/trigger.comment.js +2 -2
  246. package/dist/core/objects/trigger/changes/trigger.create.d.ts +2 -1
  247. package/dist/core/objects/trigger/changes/trigger.create.js +1 -1
  248. package/dist/core/objects/trigger/changes/trigger.drop.d.ts +2 -1
  249. package/dist/core/objects/trigger/changes/trigger.drop.js +1 -1
  250. package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
  251. package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +5 -4
  252. package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +4 -4
  253. package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +5 -4
  254. package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +4 -4
  255. package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +2 -1
  256. package/dist/core/objects/type/composite-type/changes/composite-type.create.js +1 -1
  257. package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +2 -1
  258. package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +1 -1
  259. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +4 -3
  260. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +3 -3
  261. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +1 -0
  262. package/dist/core/objects/type/enum/changes/enum.alter.d.ts +3 -2
  263. package/dist/core/objects/type/enum/changes/enum.alter.js +2 -2
  264. package/dist/core/objects/type/enum/changes/enum.comment.d.ts +3 -2
  265. package/dist/core/objects/type/enum/changes/enum.comment.js +2 -2
  266. package/dist/core/objects/type/enum/changes/enum.create.d.ts +2 -1
  267. package/dist/core/objects/type/enum/changes/enum.create.js +1 -1
  268. package/dist/core/objects/type/enum/changes/enum.drop.d.ts +2 -1
  269. package/dist/core/objects/type/enum/changes/enum.drop.js +1 -1
  270. package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +4 -3
  271. package/dist/core/objects/type/enum/changes/enum.privilege.js +3 -3
  272. package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
  273. package/dist/core/objects/type/range/changes/range.alter.d.ts +2 -1
  274. package/dist/core/objects/type/range/changes/range.alter.js +1 -1
  275. package/dist/core/objects/type/range/changes/range.comment.d.ts +3 -2
  276. package/dist/core/objects/type/range/changes/range.comment.js +2 -2
  277. package/dist/core/objects/type/range/changes/range.create.d.ts +2 -1
  278. package/dist/core/objects/type/range/changes/range.create.js +1 -1
  279. package/dist/core/objects/type/range/changes/range.drop.d.ts +2 -1
  280. package/dist/core/objects/type/range/changes/range.drop.js +1 -1
  281. package/dist/core/objects/type/range/changes/range.privilege.d.ts +4 -3
  282. package/dist/core/objects/type/range/changes/range.privilege.js +3 -3
  283. package/dist/core/objects/type/range/changes/range.types.d.ts +1 -0
  284. package/dist/core/objects/type/type.types.d.ts +1 -0
  285. package/dist/core/objects/view/changes/view.alter.d.ts +4 -3
  286. package/dist/core/objects/view/changes/view.alter.js +3 -3
  287. package/dist/core/objects/view/changes/view.comment.d.ts +3 -2
  288. package/dist/core/objects/view/changes/view.comment.js +2 -2
  289. package/dist/core/objects/view/changes/view.create.d.ts +2 -1
  290. package/dist/core/objects/view/changes/view.create.js +1 -1
  291. package/dist/core/objects/view/changes/view.drop.d.ts +2 -1
  292. package/dist/core/objects/view/changes/view.drop.js +1 -1
  293. package/dist/core/objects/view/changes/view.privilege.d.ts +4 -3
  294. package/dist/core/objects/view/changes/view.privilege.js +3 -3
  295. package/dist/core/objects/view/changes/view.types.d.ts +1 -0
  296. package/dist/core/objects/view/view.diff.js +24 -13
  297. package/dist/core/postgres-config.d.ts +2 -2
  298. package/dist/core/sort/custom-constraints.js +65 -1
  299. package/dist/core/sort/logical-sort.js +3 -24
  300. package/package.json +5 -1
  301. package/src/cli/commands/declarative-export.ts +19 -27
  302. package/src/cli/commands/plan.ts +14 -20
  303. package/src/cli/commands/sync.ts +8 -15
  304. package/src/cli/utils/integrations.test.ts +210 -3
  305. package/src/cli/utils/integrations.ts +134 -6
  306. package/src/core/catalog.snapshot.test.ts +11 -2
  307. package/src/core/change-utils.test.ts +61 -0
  308. package/src/core/change-utils.ts +73 -0
  309. package/src/core/change.types.ts +50 -0
  310. package/src/core/depend.ts +25 -0
  311. package/src/core/expand-replace-dependencies.test.ts +126 -1
  312. package/src/core/expand-replace-dependencies.ts +50 -0
  313. package/src/core/export/file-mapper.ts +7 -2
  314. package/src/core/integrations/filter/dsl.test.ts +299 -60
  315. package/src/core/integrations/filter/dsl.ts +208 -169
  316. package/src/core/integrations/filter/flatten.test.ts +282 -0
  317. package/src/core/integrations/filter/flatten.ts +150 -0
  318. package/src/core/integrations/integration-dsl.ts +17 -1
  319. package/src/core/integrations/merge.test.ts +128 -0
  320. package/src/core/integrations/merge.ts +72 -0
  321. package/src/core/integrations/serialize/dsl.test.ts +26 -7
  322. package/src/core/integrations/serialize/dsl.ts +8 -14
  323. package/src/core/integrations/serialize/serialize.types.ts +37 -0
  324. package/src/core/integrations/supabase.ts +42 -8
  325. package/src/core/objects/aggregate/changes/aggregate.alter.ts +2 -1
  326. package/src/core/objects/aggregate/changes/aggregate.comment.ts +3 -2
  327. package/src/core/objects/aggregate/changes/aggregate.create.ts +2 -1
  328. package/src/core/objects/aggregate/changes/aggregate.drop.ts +2 -1
  329. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +4 -3
  330. package/src/core/objects/aggregate/changes/aggregate.types.ts +1 -0
  331. package/src/core/objects/base.change.ts +13 -1
  332. package/src/core/objects/base.model.test.ts +43 -0
  333. package/src/core/objects/base.model.ts +5 -2
  334. package/src/core/objects/collation/changes/collation.alter.ts +3 -2
  335. package/src/core/objects/collation/changes/collation.comment.ts +3 -2
  336. package/src/core/objects/collation/changes/collation.create.ts +2 -1
  337. package/src/core/objects/collation/changes/collation.drop.ts +2 -1
  338. package/src/core/objects/collation/changes/collation.types.ts +1 -0
  339. package/src/core/objects/domain/changes/domain.alter.ts +9 -8
  340. package/src/core/objects/domain/changes/domain.comment.ts +3 -2
  341. package/src/core/objects/domain/changes/domain.create.ts +19 -2
  342. package/src/core/objects/domain/changes/domain.drop.ts +2 -1
  343. package/src/core/objects/domain/changes/domain.privilege.ts +4 -3
  344. package/src/core/objects/domain/changes/domain.types.ts +1 -0
  345. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +3 -2
  346. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +3 -2
  347. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +2 -1
  348. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +2 -1
  349. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +1 -0
  350. package/src/core/objects/extension/changes/extension.alter.ts +3 -2
  351. package/src/core/objects/extension/changes/extension.comment.ts +3 -2
  352. package/src/core/objects/extension/changes/extension.create.test.ts +22 -0
  353. package/src/core/objects/extension/changes/extension.create.ts +5 -2
  354. package/src/core/objects/extension/changes/extension.drop.ts +2 -1
  355. package/src/core/objects/extension/changes/extension.types.ts +1 -0
  356. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +3 -2
  357. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +3 -2
  358. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +2 -1
  359. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +2 -1
  360. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +4 -3
  361. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +1 -0
  362. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +1 -0
  363. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +10 -9
  364. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +3 -2
  365. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +2 -1
  366. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +2 -1
  367. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +4 -3
  368. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +1 -0
  369. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +4 -3
  370. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +3 -2
  371. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +2 -1
  372. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +2 -1
  373. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +4 -3
  374. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +1 -0
  375. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +2 -1
  376. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +2 -1
  377. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +2 -1
  378. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +1 -0
  379. package/src/core/objects/index/changes/index.alter.ts +4 -3
  380. package/src/core/objects/index/changes/index.comment.ts +3 -2
  381. package/src/core/objects/index/changes/index.create.ts +2 -1
  382. package/src/core/objects/index/changes/index.drop.ts +2 -1
  383. package/src/core/objects/index/changes/index.types.ts +1 -0
  384. package/src/core/objects/language/changes/language.alter.ts +2 -1
  385. package/src/core/objects/language/changes/language.comment.ts +3 -2
  386. package/src/core/objects/language/changes/language.create.ts +2 -1
  387. package/src/core/objects/language/changes/language.drop.ts +2 -1
  388. package/src/core/objects/language/changes/language.privilege.ts +4 -3
  389. package/src/core/objects/language/changes/language.types.ts +1 -0
  390. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +3 -2
  391. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +5 -4
  392. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +2 -1
  393. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +2 -1
  394. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +4 -3
  395. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +1 -0
  396. package/src/core/objects/procedure/changes/procedure.alter.ts +8 -7
  397. package/src/core/objects/procedure/changes/procedure.comment.ts +3 -2
  398. package/src/core/objects/procedure/changes/procedure.create.ts +2 -1
  399. package/src/core/objects/procedure/changes/procedure.drop.ts +2 -1
  400. package/src/core/objects/procedure/changes/procedure.privilege.ts +4 -3
  401. package/src/core/objects/procedure/changes/procedure.types.ts +1 -0
  402. package/src/core/objects/publication/changes/publication.alter.test.ts +4 -0
  403. package/src/core/objects/publication/changes/publication.alter.ts +14 -7
  404. package/src/core/objects/publication/changes/publication.comment.ts +3 -2
  405. package/src/core/objects/publication/changes/publication.create.ts +2 -1
  406. package/src/core/objects/publication/changes/publication.drop.ts +2 -1
  407. package/src/core/objects/publication/changes/publication.types.ts +1 -0
  408. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +4 -3
  409. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +3 -2
  410. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +2 -1
  411. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +2 -1
  412. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +1 -0
  413. package/src/core/objects/role/changes/role.alter.ts +3 -2
  414. package/src/core/objects/role/changes/role.comment.ts +3 -2
  415. package/src/core/objects/role/changes/role.create.ts +2 -1
  416. package/src/core/objects/role/changes/role.drop.ts +2 -1
  417. package/src/core/objects/role/changes/role.privilege.ts +6 -5
  418. package/src/core/objects/role/changes/role.types.ts +1 -0
  419. package/src/core/objects/rule/changes/rule.alter.ts +3 -2
  420. package/src/core/objects/rule/changes/rule.comment.ts +3 -2
  421. package/src/core/objects/rule/changes/rule.create.ts +2 -1
  422. package/src/core/objects/rule/changes/rule.drop.ts +2 -1
  423. package/src/core/objects/rule/changes/rule.types.ts +1 -0
  424. package/src/core/objects/schema/changes/schema.alter.ts +2 -1
  425. package/src/core/objects/schema/changes/schema.comment.ts +3 -2
  426. package/src/core/objects/schema/changes/schema.create.ts +3 -3
  427. package/src/core/objects/schema/changes/schema.drop.ts +2 -1
  428. package/src/core/objects/schema/changes/schema.privilege.ts +4 -3
  429. package/src/core/objects/schema/changes/schema.types.ts +1 -0
  430. package/src/core/objects/sequence/changes/sequence.alter.ts +3 -2
  431. package/src/core/objects/sequence/changes/sequence.comment.ts +3 -2
  432. package/src/core/objects/sequence/changes/sequence.create.ts +2 -1
  433. package/src/core/objects/sequence/changes/sequence.drop.ts +16 -3
  434. package/src/core/objects/sequence/changes/sequence.privilege.ts +4 -3
  435. package/src/core/objects/sequence/changes/sequence.types.ts +1 -0
  436. package/src/core/objects/sequence/sequence.diff.test.ts +73 -1
  437. package/src/core/objects/sequence/sequence.diff.ts +24 -2
  438. package/src/core/objects/subscription/changes/subscription.alter.ts +7 -6
  439. package/src/core/objects/subscription/changes/subscription.comment.ts +3 -2
  440. package/src/core/objects/subscription/changes/subscription.create.ts +2 -1
  441. package/src/core/objects/subscription/changes/subscription.drop.ts +2 -1
  442. package/src/core/objects/subscription/changes/subscription.types.ts +1 -0
  443. package/src/core/objects/table/changes/table.alter.test.ts +38 -0
  444. package/src/core/objects/table/changes/table.alter.ts +123 -22
  445. package/src/core/objects/table/changes/table.comment.ts +7 -6
  446. package/src/core/objects/table/changes/table.create.ts +2 -1
  447. package/src/core/objects/table/changes/table.drop.ts +20 -1
  448. package/src/core/objects/table/changes/table.privilege.ts +4 -3
  449. package/src/core/objects/table/changes/table.types.ts +1 -0
  450. package/src/core/objects/table/table.diff.test.ts +121 -0
  451. package/src/core/objects/table/table.diff.ts +64 -1
  452. package/src/core/objects/trigger/changes/trigger.alter.ts +2 -1
  453. package/src/core/objects/trigger/changes/trigger.comment.ts +3 -2
  454. package/src/core/objects/trigger/changes/trigger.create.ts +2 -1
  455. package/src/core/objects/trigger/changes/trigger.drop.ts +2 -1
  456. package/src/core/objects/trigger/changes/trigger.types.ts +1 -0
  457. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +5 -4
  458. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +5 -4
  459. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +2 -1
  460. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +2 -1
  461. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +4 -3
  462. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +1 -0
  463. package/src/core/objects/type/enum/changes/enum.alter.ts +3 -2
  464. package/src/core/objects/type/enum/changes/enum.comment.ts +3 -2
  465. package/src/core/objects/type/enum/changes/enum.create.ts +2 -1
  466. package/src/core/objects/type/enum/changes/enum.drop.ts +2 -1
  467. package/src/core/objects/type/enum/changes/enum.privilege.ts +4 -3
  468. package/src/core/objects/type/enum/changes/enum.types.ts +1 -0
  469. package/src/core/objects/type/range/changes/range.alter.ts +2 -1
  470. package/src/core/objects/type/range/changes/range.comment.ts +3 -2
  471. package/src/core/objects/type/range/changes/range.create.ts +2 -1
  472. package/src/core/objects/type/range/changes/range.drop.ts +2 -1
  473. package/src/core/objects/type/range/changes/range.privilege.ts +4 -3
  474. package/src/core/objects/type/range/changes/range.types.ts +1 -0
  475. package/src/core/objects/type/type.types.ts +1 -0
  476. package/src/core/objects/view/changes/view.alter.ts +4 -3
  477. package/src/core/objects/view/changes/view.comment.ts +3 -2
  478. package/src/core/objects/view/changes/view.create.ts +2 -1
  479. package/src/core/objects/view/changes/view.drop.ts +2 -1
  480. package/src/core/objects/view/changes/view.privilege.ts +4 -3
  481. package/src/core/objects/view/changes/view.types.ts +1 -0
  482. package/src/core/objects/view/view.diff.test.ts +96 -0
  483. package/src/core/objects/view/view.diff.ts +30 -15
  484. package/src/core/plan/sql-format/format-off.test.ts +1 -1
  485. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1 -1
  486. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1 -1
  487. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1 -1
  488. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1 -1
  489. package/src/core/postgres-config.ts +2 -2
  490. package/src/core/sort/custom-constraints.ts +75 -1
  491. package/src/core/sort/logical-sort.ts +3 -27
  492. package/src/typedoc.ts +253 -0
  493. package/dist/core/integrations/filter/extractors.d.ts +0 -12
  494. package/dist/core/integrations/filter/extractors.js +0 -178
  495. package/src/core/integrations/filter/extractors.test.ts +0 -244
  496. package/src/core/integrations/filter/extractors.ts +0 -187
@@ -33,7 +33,7 @@ export class GrantRangePrivileges extends AlterRangeChange {
33
33
  get requires() {
34
34
  return [this.range.stableId, stableId.role(this.grantee)];
35
35
  }
36
- serialize() {
36
+ serialize(_options) {
37
37
  const hasGrantable = this.privileges.some((p) => p.grantable);
38
38
  const hasBase = this.privileges.some((p) => !p.grantable);
39
39
  if (hasGrantable && hasBase) {
@@ -87,7 +87,7 @@ export class RevokeRangePrivileges extends AlterRangeChange {
87
87
  stableId.role(this.grantee),
88
88
  ];
89
89
  }
90
- serialize() {
90
+ serialize(_options) {
91
91
  const kindPrefix = getObjectKindPrefix("TYPE");
92
92
  const list = this.privileges.map((p) => p.privilege);
93
93
  const privSql = formatObjectPrivilegeList("TYPE", list, this.version);
@@ -122,7 +122,7 @@ export class RevokeGrantOptionRangePrivileges extends AlterRangeChange {
122
122
  stableId.role(this.grantee),
123
123
  ];
124
124
  }
125
- serialize() {
125
+ serialize(_options) {
126
126
  const kindPrefix = getObjectKindPrefix("TYPE");
127
127
  const privSql = formatObjectPrivilegeList("TYPE", this.privilegeNames, this.version);
128
128
  const typeName = `${this.range.schema}.${this.range.name}`;
@@ -3,4 +3,5 @@ import type { CommentRange } from "./range.comment.ts";
3
3
  import type { CreateRange } from "./range.create.ts";
4
4
  import type { DropRange } from "./range.drop.ts";
5
5
  import type { RangePrivilege } from "./range.privilege.ts";
6
+ /** Union of all range-related change variants (`objectType: "range"`). @category Change Types */
6
7
  export type RangeChange = AlterRange | CommentRange | CreateRange | DropRange | RangePrivilege;
@@ -1,4 +1,5 @@
1
1
  import type { CompositeTypeChange } from "./composite-type/changes/composite-type.types.ts";
2
2
  import type { EnumChange } from "./enum/changes/enum.types.ts";
3
3
  import type { RangeChange } from "./range/changes/range.types.ts";
4
+ /** Union of all type-related change variants (`objectType: "composite_type" | "enum" | "range"`). @category Change Types */
4
5
  export type TypeChange = CompositeTypeChange | EnumChange | RangeChange;
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { View } from "../view.model.ts";
2
3
  import { AlterViewChange } from "./view.base.ts";
3
4
  /**
@@ -30,7 +31,7 @@ export declare class AlterViewChangeOwner extends AlterViewChange {
30
31
  owner: string;
31
32
  });
32
33
  get requires(): `view:${string}`[];
33
- serialize(): string;
34
+ serialize(_options?: SerializeOptions): string;
34
35
  }
35
36
  /**
36
37
  * ALTER VIEW ... SET ( ... )
@@ -44,7 +45,7 @@ export declare class AlterViewSetOptions extends AlterViewChange {
44
45
  options: string[];
45
46
  });
46
47
  get requires(): `view:${string}`[];
47
- serialize(): string;
48
+ serialize(_options?: SerializeOptions): string;
48
49
  }
49
50
  /**
50
51
  * ALTER VIEW ... RESET ( ... )
@@ -58,5 +59,5 @@ export declare class AlterViewResetOptions extends AlterViewChange {
58
59
  params: string[];
59
60
  });
60
61
  get requires(): `view:${string}`[];
61
- serialize(): string;
62
+ serialize(_options?: SerializeOptions): string;
62
63
  }
@@ -14,7 +14,7 @@ export class AlterViewChangeOwner extends AlterViewChange {
14
14
  get requires() {
15
15
  return [this.view.stableId];
16
16
  }
17
- serialize() {
17
+ serialize(_options) {
18
18
  return [
19
19
  "ALTER VIEW",
20
20
  `${this.view.schema}.${this.view.name}`,
@@ -39,7 +39,7 @@ export class AlterViewSetOptions extends AlterViewChange {
39
39
  get requires() {
40
40
  return [this.view.stableId];
41
41
  }
42
- serialize() {
42
+ serialize(_options) {
43
43
  const opts = this.options.join(", ");
44
44
  return [
45
45
  "ALTER VIEW",
@@ -64,7 +64,7 @@ export class AlterViewResetOptions extends AlterViewChange {
64
64
  get requires() {
65
65
  return [this.view.stableId];
66
66
  }
67
- serialize() {
67
+ serialize(_options) {
68
68
  return [
69
69
  "ALTER VIEW",
70
70
  `${this.view.schema}.${this.view.name}`,
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { View } from "../view.model.ts";
2
3
  import { CreateViewChange, DropViewChange } from "./view.base.ts";
3
4
  export type CommentView = CreateCommentOnView | DropCommentOnView;
@@ -9,7 +10,7 @@ export declare class CreateCommentOnView extends CreateViewChange {
9
10
  });
10
11
  get creates(): `comment:${string}`[];
11
12
  get requires(): `view:${string}`[];
12
- serialize(): string;
13
+ serialize(_options?: SerializeOptions): string;
13
14
  }
14
15
  export declare class DropCommentOnView extends DropViewChange {
15
16
  readonly view: View;
@@ -19,5 +20,5 @@ export declare class DropCommentOnView extends DropViewChange {
19
20
  });
20
21
  get drops(): `comment:${string}`[];
21
22
  get requires(): (`comment:${string}` | `view:${string}`)[];
22
- serialize(): string;
23
+ serialize(_options?: SerializeOptions): string;
23
24
  }
@@ -14,7 +14,7 @@ export class CreateCommentOnView extends CreateViewChange {
14
14
  get requires() {
15
15
  return [this.view.stableId];
16
16
  }
17
- serialize() {
17
+ serialize(_options) {
18
18
  return [
19
19
  "COMMENT ON VIEW",
20
20
  `${this.view.schema}.${this.view.name}`,
@@ -36,7 +36,7 @@ export class DropCommentOnView extends DropViewChange {
36
36
  get requires() {
37
37
  return [stableId.comment(this.view.stableId), this.view.stableId];
38
38
  }
39
- serialize() {
39
+ serialize(_options) {
40
40
  return [
41
41
  "COMMENT ON VIEW",
42
42
  `${this.view.schema}.${this.view.name}`,
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { View } from "../view.model.ts";
2
3
  import { CreateViewChange } from "./view.base.ts";
3
4
  /**
@@ -23,5 +24,5 @@ export declare class CreateView extends CreateViewChange {
23
24
  });
24
25
  get creates(): (`column:${string}.${string}.${string}` | `view:${string}`)[];
25
26
  get requires(): string[];
26
- serialize(): string;
27
+ serialize(_options?: SerializeOptions): string;
27
28
  }
@@ -40,7 +40,7 @@ export class CreateView extends CreateViewChange {
40
40
  // for those dependencies.
41
41
  return Array.from(dependencies);
42
42
  }
43
- serialize() {
43
+ serialize(_options) {
44
44
  const parts = [
45
45
  `CREATE${this.orReplace ? " OR REPLACE" : ""} VIEW`,
46
46
  ];
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { View } from "../view.model.ts";
2
3
  import { DropViewChange } from "./view.base.ts";
3
4
  /**
@@ -13,5 +14,5 @@ export declare class DropView extends DropViewChange {
13
14
  });
14
15
  get drops(): (`column:${string}.${string}.${string}` | `view:${string}`)[];
15
16
  get requires(): (`column:${string}.${string}.${string}` | `view:${string}`)[];
16
- serialize(): string;
17
+ serialize(_options?: SerializeOptions): string;
17
18
  }
@@ -24,7 +24,7 @@ export class DropView extends DropViewChange {
24
24
  ...this.view.columns.map((column) => stableId.column(this.view.schema, this.view.name, column.name)),
25
25
  ];
26
26
  }
27
- serialize() {
27
+ serialize(_options) {
28
28
  return ["DROP VIEW", `${this.view.schema}.${this.view.name}`].join(" ");
29
29
  }
30
30
  }
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { View } from "../view.model.ts";
2
3
  import { AlterViewChange } from "./view.base.ts";
3
4
  export type ViewPrivilege = GrantViewPrivileges | RevokeViewPrivileges | RevokeGrantOptionViewPrivileges;
@@ -38,7 +39,7 @@ export declare class GrantViewPrivileges extends AlterViewChange {
38
39
  });
39
40
  get creates(): `acl:${string}::grantee:${string}`[];
40
41
  get requires(): (`role:${string}` | `view:${string}`)[];
41
- serialize(): string;
42
+ serialize(_options?: SerializeOptions): string;
42
43
  }
43
44
  /**
44
45
  * Revoke privileges on a view.
@@ -79,7 +80,7 @@ export declare class RevokeViewPrivileges extends AlterViewChange {
79
80
  });
80
81
  get drops(): `acl:${string}::grantee:${string}`[];
81
82
  get requires(): (`acl:${string}::grantee:${string}` | `role:${string}` | `view:${string}`)[];
82
- serialize(): string;
83
+ serialize(_options?: SerializeOptions): string;
83
84
  }
84
85
  /**
85
86
  * Revoke grant option for privileges on a view.
@@ -103,5 +104,5 @@ export declare class RevokeGrantOptionViewPrivileges extends AlterViewChange {
103
104
  version?: number;
104
105
  });
105
106
  get requires(): (`acl:${string}::grantee:${string}` | `role:${string}` | `view:${string}`)[];
106
- serialize(): string;
107
+ serialize(_options?: SerializeOptions): string;
107
108
  }
@@ -37,7 +37,7 @@ export class GrantViewPrivileges extends AlterViewChange {
37
37
  get requires() {
38
38
  return [this.view.stableId, stableId.role(this.grantee)];
39
39
  }
40
- serialize() {
40
+ serialize(_options) {
41
41
  const hasGrantable = this.privileges.some((p) => p.grantable);
42
42
  const hasBase = this.privileges.some((p) => !p.grantable);
43
43
  if (hasGrantable && hasBase) {
@@ -98,7 +98,7 @@ export class RevokeViewPrivileges extends AlterViewChange {
98
98
  stableId.role(this.grantee),
99
99
  ];
100
100
  }
101
- serialize() {
101
+ serialize(_options) {
102
102
  const kindPrefix = getObjectKindPrefix("VIEW");
103
103
  const list = this.privileges.map((p) => p.privilege);
104
104
  const privSql = formatObjectPrivilegeList("VIEW", list, this.version);
@@ -138,7 +138,7 @@ export class RevokeGrantOptionViewPrivileges extends AlterViewChange {
138
138
  stableId.role(this.grantee),
139
139
  ];
140
140
  }
141
- serialize() {
141
+ serialize(_options) {
142
142
  const kindPrefix = getObjectKindPrefix("VIEW");
143
143
  const privSql = formatObjectPrivilegeList("VIEW", this.privilegeNames, this.version);
144
144
  const viewName = `${this.view.schema}.${this.view.name}`;
@@ -3,4 +3,5 @@ import type { CommentView } from "./view.comment.ts";
3
3
  import type { CreateView } from "./view.create.ts";
4
4
  import type { DropView } from "./view.drop.ts";
5
5
  import type { ViewPrivilege } from "./view.privilege.ts";
6
+ /** Union of all view-related change variants (`objectType: "view"`). @category Change Types */
6
7
  export type ViewChange = AlterView | CommentView | CreateView | DropView | ViewPrivilege;
@@ -1,4 +1,5 @@
1
1
  import { diffObjects } from "../base.diff.js";
2
+ import { normalizeColumns } from "../base.model.js";
2
3
  import { diffPrivileges, emitColumnPrivilegeChanges, } from "../base.privilege-diff.js";
3
4
  import { deepEqual, hasNonAlterableChanges } from "../utils.js";
4
5
  import { AlterViewChangeOwner, AlterViewResetOptions, AlterViewSetOptions, } from "./changes/view.alter.js";
@@ -17,35 +18,37 @@ import { GrantViewPrivileges, RevokeGrantOptionViewPrivileges, RevokeViewPrivile
17
18
  export function diffViews(ctx, main, branch) {
18
19
  const { created, dropped, altered } = diffObjects(main, branch);
19
20
  const changes = [];
20
- for (const viewId of created) {
21
- const v = branch[viewId];
22
- changes.push(new CreateView({ view: v }));
21
+ const appendCreateViewChanges = (view) => {
22
+ changes.push(new CreateView({ view }));
23
23
  // OWNER: If the view should be owned by someone other than the current user,
24
24
  // emit ALTER VIEW ... OWNER TO after creation
25
- if (v.owner !== ctx.currentUser) {
26
- changes.push(new AlterViewChangeOwner({ view: v, owner: v.owner }));
25
+ if (view.owner !== ctx.currentUser) {
26
+ changes.push(new AlterViewChangeOwner({ view, owner: view.owner }));
27
27
  }
28
- if (v.comment !== null) {
29
- changes.push(new CreateCommentOnView({ view: v }));
28
+ if (view.comment !== null) {
29
+ changes.push(new CreateCommentOnView({ view }));
30
30
  }
31
31
  // PRIVILEGES: For created objects, compare against default privileges state
32
32
  // The migration script will run ALTER DEFAULT PRIVILEGES before CREATE (via constraint spec),
33
33
  // so objects are created with the default privileges state in effect.
34
34
  // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
35
35
  // needed to reach the final desired state.
36
- const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "view", v.schema ?? "");
37
- const creatorFilteredDefaults = v.owner !== ctx.currentUser
36
+ const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "view", view.schema ?? "");
37
+ const creatorFilteredDefaults = view.owner !== ctx.currentUser
38
38
  ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
39
39
  : effectiveDefaults;
40
- const desiredPrivileges = v.privileges;
40
+ const desiredPrivileges = view.privileges;
41
41
  // Filter out owner privileges - owner always has ALL privileges implicitly
42
42
  // and shouldn't be compared. Use the view owner as the reference.
43
- const privilegeResults = diffPrivileges(creatorFilteredDefaults, desiredPrivileges, v.owner);
44
- changes.push(...emitColumnPrivilegeChanges(privilegeResults, v, v, "view", {
43
+ const privilegeResults = diffPrivileges(creatorFilteredDefaults, desiredPrivileges, view.owner);
44
+ changes.push(...emitColumnPrivilegeChanges(privilegeResults, view, view, "view", {
45
45
  Grant: GrantViewPrivileges,
46
46
  Revoke: RevokeViewPrivileges,
47
47
  RevokeGrantOption: RevokeGrantOptionViewPrivileges,
48
48
  }, effectiveDefaults, ctx.version));
49
+ };
50
+ for (const viewId of created) {
51
+ appendCreateViewChanges(branch[viewId]);
49
52
  }
50
53
  for (const viewId of dropped) {
51
54
  changes.push(new DropView({ view: main[viewId] }));
@@ -69,7 +72,15 @@ export function diffViews(ctx, main, branch) {
69
72
  "partition_bound",
70
73
  ];
71
74
  const nonAlterablePropsChanged = hasNonAlterableChanges(mainView, branchView, NON_ALTERABLE_FIELDS, { options: deepEqual });
72
- if (nonAlterablePropsChanged) {
75
+ // Normalize columns (strip position, sort by name) to match stableSnapshot().
76
+ // Position-only differences are safe to ignore here because column order in a
77
+ // view is determined by its definition, which is already checked above via
78
+ // NON_ALTERABLE_FIELDS - a position change always implies a definition change.
79
+ if (!deepEqual(normalizeColumns(mainView.columns), normalizeColumns(branchView.columns))) {
80
+ changes.push(new DropView({ view: mainView }));
81
+ appendCreateViewChanges(branchView);
82
+ }
83
+ else if (nonAlterablePropsChanged) {
73
84
  // Replace the entire view using CREATE OR REPLACE to avoid drop when possible
74
85
  changes.push(new CreateView({ view: branchView, orReplace: true }));
75
86
  }
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * PostgreSQL connection configuration with custom type handlers.
3
3
  */
4
- import type { PoolClient, PoolConfig } from "pg";
4
+ import type { ClientBase, PoolClient, PoolConfig } from "pg";
5
5
  import { Pool } from "pg";
6
6
  /**
7
7
  * Options for creating a Pool with event listeners.
8
8
  */
9
9
  interface CreatePoolOptions extends Partial<PoolConfig> {
10
10
  /** Called when a new client connects to the pool */
11
- onConnect?: (client: PoolClient) => void | Promise<void>;
11
+ onConnect?: (client: ClientBase) => void | Promise<void>;
12
12
  /** Called when an idle client emits an error */
13
13
  onError?: (err: Error, client: PoolClient) => void;
14
14
  /** Called when a client is acquired from the pool */
@@ -1,5 +1,6 @@
1
- import { getSchema } from "../integrations/filter/extractors.js";
1
+ import { getSchema } from "../change-utils.js";
2
2
  import { GrantRoleDefaultPrivileges, RevokeRoleDefaultPrivileges, } from "../objects/role/changes/role.privilege.js";
3
+ import { AlterTableAlterColumnAddIdentity, AlterTableAlterColumnDropDefault, AlterTableAlterColumnDropIdentity, AlterTableAlterColumnSetDefault, } from "../objects/table/changes/table.alter.js";
3
4
  /**
4
5
  * Maps object type names to PostgreSQL default privilege objtype codes.
5
6
  * This mirrors the mapping in base.default-privileges.ts.
@@ -116,11 +117,74 @@ function generateDefaultPrivilegeConstraints(changes) {
116
117
  }
117
118
  return constraints;
118
119
  }
120
+ function generateIdentityTransitionConstraints(changes) {
121
+ const constraints = [];
122
+ const dropDefaultByColumn = new Map();
123
+ const dropIdentityByColumn = new Map();
124
+ const addIdentityByColumn = new Map();
125
+ const setDefaultByColumn = new Map();
126
+ for (let i = 0; i < changes.length; i++) {
127
+ const change = changes[i];
128
+ const columnKey = "table" in change && "column" in change
129
+ ? `${change.table.schema}.${change.table.name}.${change.column.name}`
130
+ : null;
131
+ if (!columnKey)
132
+ continue;
133
+ if (change instanceof AlterTableAlterColumnDropDefault) {
134
+ const entries = dropDefaultByColumn.get(columnKey) ?? [];
135
+ entries.push(i);
136
+ dropDefaultByColumn.set(columnKey, entries);
137
+ }
138
+ else if (change instanceof AlterTableAlterColumnAddIdentity) {
139
+ const entries = addIdentityByColumn.get(columnKey) ?? [];
140
+ entries.push(i);
141
+ addIdentityByColumn.set(columnKey, entries);
142
+ }
143
+ else if (change instanceof AlterTableAlterColumnDropIdentity) {
144
+ const entries = dropIdentityByColumn.get(columnKey) ?? [];
145
+ entries.push(i);
146
+ dropIdentityByColumn.set(columnKey, entries);
147
+ }
148
+ else if (change instanceof AlterTableAlterColumnSetDefault) {
149
+ const entries = setDefaultByColumn.get(columnKey) ?? [];
150
+ entries.push(i);
151
+ setDefaultByColumn.set(columnKey, entries);
152
+ }
153
+ }
154
+ // These rules only order same-column ALTERs inside the create/alter phase.
155
+ // Sequence drops are handled separately in the earlier drop phase.
156
+ for (const [columnKey, dropDefaultIndexes] of dropDefaultByColumn) {
157
+ const addIdentityIndexes = addIdentityByColumn.get(columnKey) ?? [];
158
+ for (const sourceIndex of dropDefaultIndexes) {
159
+ for (const targetIndex of addIdentityIndexes) {
160
+ constraints.push({
161
+ sourceChangeIndex: sourceIndex,
162
+ targetChangeIndex: targetIndex,
163
+ source: "custom",
164
+ });
165
+ }
166
+ }
167
+ }
168
+ for (const [columnKey, dropIdentityIndexes] of dropIdentityByColumn) {
169
+ const setDefaultIndexes = setDefaultByColumn.get(columnKey) ?? [];
170
+ for (const sourceIndex of dropIdentityIndexes) {
171
+ for (const targetIndex of setDefaultIndexes) {
172
+ constraints.push({
173
+ sourceChangeIndex: sourceIndex,
174
+ targetChangeIndex: targetIndex,
175
+ source: "custom",
176
+ });
177
+ }
178
+ }
179
+ }
180
+ return constraints;
181
+ }
119
182
  /**
120
183
  * All custom constraint generators.
121
184
  */
122
185
  const customConstraintGenerators = [
123
186
  generateDefaultPrivilegeConstraints,
187
+ generateIdentityTransitionConstraints,
124
188
  ];
125
189
  /**
126
190
  * Generate Constraints from custom constraint generators.
@@ -8,7 +8,7 @@
8
8
  * It groups related changes together while preserving the ability for the dependency
9
9
  * resolver to reorder within groups when necessary.
10
10
  */
11
- import { getSchema } from "../integrations/filter/extractors.js";
11
+ import { getSchema } from "../change-utils.js";
12
12
  import { getExecutionPhase, isMetadataStableId } from "./utils.js";
13
13
  /**
14
14
  * Object type ordering for logical grouping.
@@ -287,27 +287,6 @@ function getParentStableId(change) {
287
287
  // Fallback: return first requires if available
288
288
  return requires.length > 0 ? requires[0] : null;
289
289
  }
290
- /**
291
- * Extract schema name from a change.
292
- * Returns the schema name if present, or null for non-schema objects.
293
- *
294
- * Uses the getSchema helper which directly accesses schema properties from change objects.
295
- * For default_privilege changes, accesses the inSchema property directly.
296
- * For event_trigger changes, groups by their function's schema.
297
- */
298
- function extractSchemaFromChange(change) {
299
- // Handle default_privilege changes specially (they have inSchema property)
300
- if (change.scope === "default_privilege") {
301
- // TypeScript doesn't know about inSchema, but we know it exists for default_privilege changes
302
- return change.inSchema ?? null;
303
- }
304
- // Handle event_trigger changes specially - group by their function's schema
305
- if (change.objectType === "event_trigger") {
306
- return change.eventTrigger.function_schema;
307
- }
308
- // Use the getSchema helper for all other changes
309
- return getSchema(change);
310
- }
311
290
  /**
312
291
  * Get the effective object type for sorting purposes.
313
292
  * For sub-entities, returns the parent's object type (table/view/materialized_view).
@@ -399,8 +378,8 @@ function sortPhase(changes, phase) {
399
378
  const changeA = a.change;
400
379
  const changeB = b.change;
401
380
  // 1. Compare schemas (group objects by schema)
402
- const schemaA = extractSchemaFromChange(changeA);
403
- const schemaB = extractSchemaFromChange(changeB);
381
+ const schemaA = getSchema(changeA);
382
+ const schemaB = getSchema(changeB);
404
383
  // Non-schema objects (roles, languages, extensions, etc.) sort first
405
384
  // Use a special prefix to ensure they come before schema objects
406
385
  const schemaKeyA = schemaA === null ? "::" : schemaA;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supabase/pg-delta",
3
- "version": "1.0.0-alpha.10",
3
+ "version": "1.0.0-alpha.12",
4
4
  "description": "PostgreSQL migrations made easy",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -68,6 +68,7 @@
68
68
  "scripts": {
69
69
  "build": "tsc --project tsconfig.build.json",
70
70
  "check-types": "tsc --noEmit",
71
+ "docs": "typedoc",
71
72
  "format-and-lint": "biome check . --error-on-warnings",
72
73
  "knip": "knip",
73
74
  "pgdelta": "bun src/cli/bin/cli.ts",
@@ -84,6 +85,7 @@
84
85
  "chalk": "^5.6.2",
85
86
  "debug": "^4.3.7",
86
87
  "pg": "^8.17.2",
88
+ "picomatch": "^4.0.3",
87
89
  "zod": "^4.2.1"
88
90
  },
89
91
  "devDependencies": {
@@ -94,9 +96,11 @@
94
96
  "@types/debug": "^4.1.12",
95
97
  "@types/node": "^24.10.4",
96
98
  "@types/pg": "^8.11.10",
99
+ "@types/picomatch": "^4.0.2",
97
100
  "dedent": "^1.7.1",
98
101
  "knip": "^5.75.2",
99
102
  "testcontainers": "^11.10.0",
103
+ "typedoc": "^0.28.17",
100
104
  "typescript": "^5.9.3"
101
105
  }
102
106
  }
@@ -6,13 +6,14 @@ import { mkdir, rm, writeFile } from "node:fs/promises";
6
6
  import path from "node:path";
7
7
  import { buildCommand, type CommandContext } from "@stricli/core";
8
8
  import chalk from "chalk";
9
- import type { CatalogSnapshot } from "../../core/catalog.snapshot.ts";
9
+ import { deserializeCatalog } from "../../core/catalog.snapshot.ts";
10
10
  import { exportDeclarativeSchema } from "../../core/export/index.ts";
11
11
  import type { Grouping, GroupingPattern } from "../../core/export/types.ts";
12
12
  import type { FilterDSL } from "../../core/integrations/filter/dsl.ts";
13
- import type { ChangeFilter } from "../../core/integrations/filter/filter.types.ts";
14
- import type { SerializeDSL } from "../../core/integrations/serialize/dsl.ts";
15
- import type { ChangeSerializer } from "../../core/integrations/serialize/serialize.types.ts";
13
+ import {
14
+ compileSerializeDSL,
15
+ type SerializeDSL,
16
+ } from "../../core/integrations/serialize/dsl.ts";
16
17
  import { createPlan } from "../../core/plan/index.ts";
17
18
  import type { SqlFormatOptions } from "../../core/plan/sql-format.ts";
18
19
  import {
@@ -21,7 +22,7 @@ import {
21
22
  computeFileDiff,
22
23
  formatExportSummary,
23
24
  } from "../utils/export-display.ts";
24
- import { loadIntegrationDSL } from "../utils/integrations.ts";
25
+ import { resolveIntegrationOptions } from "../utils/integrations.ts";
25
26
  import { isPostgresUrl, loadCatalogFromFile } from "../utils/resolve-input.ts";
26
27
 
27
28
  function parseJsonFlag<T>(label: string, value: string): T {
@@ -185,29 +186,22 @@ After export, a tip is printed with the command to apply the schema to an empty
185
186
  verbose?: boolean;
186
187
  },
187
188
  ) {
188
- const { compileSerializeDSL } = await import(
189
- "../../core/integrations/serialize/dsl.ts"
190
- );
191
-
192
- let filterOption: FilterDSL | ChangeFilter | undefined = flags.filter;
193
- let serializeOption: SerializeDSL | ChangeSerializer | undefined =
194
- flags.serialize;
195
- let integrationEmptyCatalog: CatalogSnapshot | undefined;
196
- if (flags.integration) {
197
- const integrationDSL = await loadIntegrationDSL(flags.integration);
198
- filterOption = filterOption ?? integrationDSL.filter;
199
- serializeOption = serializeOption ?? integrationDSL.serialize;
200
- integrationEmptyCatalog = integrationDSL.emptyCatalog;
201
- }
189
+ const {
190
+ filter,
191
+ serialize,
192
+ emptyCatalog: integrationEmptyCatalog,
193
+ } = await resolveIntegrationOptions({
194
+ filter: flags.filter,
195
+ serialize: flags.serialize,
196
+ integration: flags.integration,
197
+ });
202
198
 
203
199
  const resolvedSource = flags.source
204
200
  ? isPostgresUrl(flags.source)
205
201
  ? flags.source
206
202
  : await loadCatalogFromFile(flags.source)
207
203
  : integrationEmptyCatalog
208
- ? (await import("../../core/catalog.snapshot.ts")).deserializeCatalog(
209
- integrationEmptyCatalog,
210
- )
204
+ ? deserializeCatalog(integrationEmptyCatalog)
211
205
  : null;
212
206
 
213
207
  const resolvedTarget = isPostgresUrl(flags.target)
@@ -221,8 +215,8 @@ After export, a tip is printed with the command to apply the schema to an empty
221
215
  // changes that depend on filtered objects (e.g. RLS policies that
222
216
  // reference auth.uid() when the auth schema is filtered out).
223
217
  const planResult = await createPlan(resolvedSource, resolvedTarget, {
224
- filter: filterOption,
225
- serialize: serializeOption,
218
+ filter,
219
+ serialize,
226
220
  skipDefaultPrivilegeSubtraction: true,
227
221
  });
228
222
 
@@ -254,9 +248,7 @@ After export, a tip is printed with the command to apply the schema to an empty
254
248
  }
255
249
 
256
250
  const serializeFn =
257
- serializeOption !== undefined
258
- ? compileSerializeDSL(serializeOption)
259
- : undefined;
251
+ serialize !== undefined ? compileSerializeDSL(serialize) : undefined;
260
252
 
261
253
  const output = exportDeclarativeSchema(planResult, {
262
254
  integration: