@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
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Integration merging — combines multiple IntegrationDSL objects.
3
+ *
4
+ * - Filters are AND-combined
5
+ * - Serialize rules are concatenated (earlier integrations first = higher priority)
6
+ * - emptyCatalog: most-specific (last) integration's value wins
7
+ */
8
+ /**
9
+ * Merge an ordered list of integrations into a single IntegrationDSL.
10
+ *
11
+ * Integrations are ordered from base (first) to most-specific (last).
12
+ * - Filters: AND-combined (all must pass)
13
+ * - Serialize: concatenated (base rules first → higher priority, first-match-wins)
14
+ * - emptyCatalog: most-specific non-undefined value wins
15
+ *
16
+ * @param integrations - Ordered list of integrations (base first, most-specific last)
17
+ * @returns A single merged IntegrationDSL
18
+ */
19
+ export function mergeIntegrations(integrations) {
20
+ if (integrations.length === 0)
21
+ return {};
22
+ if (integrations.length === 1)
23
+ return integrations[0];
24
+ // Collect all filters
25
+ const filters = [];
26
+ for (const integration of integrations) {
27
+ if (integration.filter) {
28
+ filters.push(integration.filter);
29
+ }
30
+ }
31
+ // Collect all serialize rules (base first = higher priority)
32
+ const serializeRules = [];
33
+ for (const integration of integrations) {
34
+ if (integration.serialize) {
35
+ serializeRules.push(...integration.serialize);
36
+ }
37
+ }
38
+ // emptyCatalog: most-specific (last) non-undefined wins
39
+ let emptyCatalog;
40
+ for (let i = integrations.length - 1; i >= 0; i--) {
41
+ if (integrations[i].emptyCatalog !== undefined) {
42
+ emptyCatalog = integrations[i].emptyCatalog;
43
+ break;
44
+ }
45
+ }
46
+ const merged = {};
47
+ if (filters.length === 1) {
48
+ merged.filter = filters[0];
49
+ }
50
+ else if (filters.length > 1) {
51
+ merged.filter = { and: filters };
52
+ }
53
+ if (serializeRules.length > 0) {
54
+ merged.serialize = serializeRules;
55
+ }
56
+ if (emptyCatalog !== undefined) {
57
+ merged.emptyCatalog = emptyCatalog;
58
+ }
59
+ return merged;
60
+ }
@@ -4,14 +4,7 @@
4
4
  * Reuses the filter pattern matching logic to determine when to apply serialization options.
5
5
  */
6
6
  import { type FilterPattern } from "../filter/dsl.ts";
7
- import type { ChangeSerializer } from "./serialize.types.ts";
8
- /**
9
- * Serialization options that can be passed to change.serialize().
10
- */
11
- type SerializeOptions = {
12
- skipAuthorization?: boolean;
13
- [key: string]: unknown;
14
- };
7
+ import type { ChangeSerializer, SerializeOptions } from "./serialize.types.ts";
15
8
  /**
16
9
  * A serialization rule that applies options when a pattern matches.
17
10
  */
@@ -27,8 +20,11 @@ type SerializeRule = {
27
20
  options: SerializeOptions;
28
21
  };
29
22
  /**
30
- * Serialization DSL - array of rules evaluated in order.
31
- * First matching rule's options are applied.
23
+ * Array of serialization rules evaluated in order. The first matching rule's
24
+ * options are passed to `change.serialize()`. If no rule matches, default
25
+ * serialization is used.
26
+ *
27
+ * @category Integration
32
28
  */
33
29
  export type SerializeDSL = SerializeRule[];
34
30
  /**
@@ -45,9 +41,9 @@ export type SerializeDSL = SerializeRule[];
45
41
  * const serializer = compileSerializeDSL([
46
42
  * {
47
43
  * when: {
48
- * type: "schema",
44
+ * objectType: "schema",
49
45
  * operation: "create",
50
- * owner: ["service_role"]
46
+ * "schema/owner": ["service_role"]
51
47
  * },
52
48
  * options: { skipAuthorization: true }
53
49
  * }
@@ -18,9 +18,9 @@ import { evaluatePattern } from "../filter/dsl.js";
18
18
  * const serializer = compileSerializeDSL([
19
19
  * {
20
20
  * when: {
21
- * type: "schema",
21
+ * objectType: "schema",
22
22
  * operation: "create",
23
- * owner: ["service_role"]
23
+ * "schema/owner": ["service_role"]
24
24
  * },
25
25
  * options: { skipAuthorization: true }
26
26
  * }
@@ -1,2 +1,33 @@
1
1
  import type { Change } from "../../change.types.ts";
2
+ /**
3
+ * Shared serialization options passed to `change.serialize(options)`.
4
+ *
5
+ * This is the global source of truth for serialize-option flags used by the
6
+ * integration serialization DSL and concrete change serializers.
7
+ *
8
+ * @category Integration
9
+ */
10
+ export type SerializeOptions = {
11
+ /** Skip `AUTHORIZATION` when serializing schema creation. */
12
+ skipAuthorization?: boolean;
13
+ /** Skip `WITH SCHEMA ...` when serializing extension creation. */
14
+ skipSchema?: boolean;
15
+ };
16
+ /**
17
+ * Schema-specific view of {@link SerializeOptions}.
18
+ *
19
+ * @category Integration
20
+ */
21
+ export type SchemaSerializeOptions = Pick<SerializeOptions, "skipAuthorization">;
22
+ /**
23
+ * Extension-specific view of {@link SerializeOptions}.
24
+ *
25
+ * @category Integration
26
+ */
27
+ export type ExtensionSerializeOptions = Pick<SerializeOptions, "skipSchema">;
28
+ /**
29
+ * Compiled serializer function used during plan/declarative export rendering.
30
+ *
31
+ * @category Integration
32
+ */
2
33
  export type ChangeSerializer = (change: Change) => string | undefined;
@@ -65,38 +65,59 @@ export const supabase = {
65
65
  // TODO: emptyCatalog: undefined -- populate by running catalog-export on a clean Supabase container
66
66
  filter: {
67
67
  or: [
68
+ // Include user schema CREATE operations (only schemas not in system list)
68
69
  {
69
70
  and: [
70
71
  {
71
- type: "schema",
72
+ objectType: "schema",
72
73
  operation: "create",
73
74
  scope: "object",
74
75
  },
75
76
  {
76
77
  not: {
77
- schema: [...SUPABASE_SYSTEM_SCHEMAS],
78
+ // Schema objects have name, not schema — use schema/name
79
+ "schema/name": [...SUPABASE_SYSTEM_SCHEMAS],
78
80
  },
79
81
  },
80
82
  ],
81
83
  },
84
+ // Include extension CREATEs
82
85
  {
83
- type: "extension",
86
+ objectType: "extension",
84
87
  operation: "create",
85
88
  scope: "object",
86
89
  },
90
+ // Include extension DROPs used to disable some extensions (eg: pg-net)
91
+ {
92
+ objectType: "extension",
93
+ operation: "drop",
94
+ scope: "object",
95
+ },
96
+ // Exclude system objects
87
97
  {
88
98
  not: {
89
99
  or: [
100
+ // Objects in system schemas (*/schema matches table/schema, view/schema, etc.)
101
+ {
102
+ "*/schema": [...SUPABASE_SYSTEM_SCHEMAS],
103
+ },
104
+ // Schema objects whose own name is a system schema
105
+ {
106
+ "schema/name": [...SUPABASE_SYSTEM_SCHEMAS],
107
+ },
108
+ // Objects owned by system roles (*/owner matches table/owner, schema/owner, etc.)
90
109
  {
91
- schema: [...SUPABASE_SYSTEM_SCHEMAS],
110
+ "*/owner": [...SUPABASE_SYSTEM_ROLES],
92
111
  },
112
+ // Role objects whose own name is a system role
93
113
  {
94
- owner: [...SUPABASE_SYSTEM_ROLES],
114
+ "role/name": [...SUPABASE_SYSTEM_ROLES],
95
115
  },
116
+ // Membership changes for system roles
96
117
  {
97
118
  and: [
98
119
  {
99
- type: "role",
120
+ objectType: "role",
100
121
  scope: "membership",
101
122
  },
102
123
  {
@@ -112,14 +133,27 @@ export const supabase = {
112
133
  serialize: [
113
134
  {
114
135
  when: {
115
- type: "schema",
136
+ objectType: "schema",
116
137
  operation: "create",
117
138
  scope: "object",
118
- owner: [...SUPABASE_SYSTEM_ROLES],
139
+ "schema/owner": [...SUPABASE_SYSTEM_ROLES],
119
140
  },
120
141
  options: {
121
142
  skipAuthorization: true,
122
143
  },
123
144
  },
145
+ // pgmq extensions creates it's own schema on install doing a `CREATE EXTENSION pgmq WITH SCHEMA pgmq;`
146
+ // will cause an error because the schema will create extension and extension refer to unexisting schema
147
+ {
148
+ when: {
149
+ objectType: "extension",
150
+ operation: "create",
151
+ scope: "object",
152
+ "extension/schema": ["pgmq"],
153
+ },
154
+ options: {
155
+ skipSchema: true,
156
+ },
157
+ },
124
158
  ],
125
159
  };
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Aggregate } from "../aggregate.model.ts";
2
3
  import { AlterAggregateChange } from "./aggregate.base.ts";
3
4
  export type AlterAggregate = AlterAggregateChangeOwner;
@@ -15,5 +16,5 @@ export declare class AlterAggregateChangeOwner extends AlterAggregateChange {
15
16
  owner: string;
16
17
  });
17
18
  get requires(): `aggregate:${string}`[];
18
- serialize(): string;
19
+ serialize(_options?: SerializeOptions): string;
19
20
  }
@@ -16,7 +16,7 @@ export class AlterAggregateChangeOwner extends AlterAggregateChange {
16
16
  get requires() {
17
17
  return [this.aggregate.stableId];
18
18
  }
19
- serialize() {
19
+ serialize(_options) {
20
20
  const signature = this.aggregate.identityArguments;
21
21
  const qualifiedName = `${this.aggregate.schema}.${this.aggregate.name}`;
22
22
  const withArgs = signature.length > 0 ? `(${signature})` : "()";
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Aggregate } from "../aggregate.model.ts";
2
3
  import { CreateAggregateChange, DropAggregateChange } from "./aggregate.base.ts";
3
4
  export type CommentAggregate = CreateCommentOnAggregate | DropCommentOnAggregate;
@@ -9,7 +10,7 @@ export declare class CreateCommentOnAggregate extends CreateAggregateChange {
9
10
  });
10
11
  get creates(): `comment:${string}`[];
11
12
  get requires(): `aggregate:${string}`[];
12
- serialize(): string;
13
+ serialize(_options?: SerializeOptions): string;
13
14
  }
14
15
  export declare class DropCommentOnAggregate extends DropAggregateChange {
15
16
  readonly aggregate: Aggregate;
@@ -19,5 +20,5 @@ export declare class DropCommentOnAggregate extends DropAggregateChange {
19
20
  });
20
21
  get drops(): `comment:${string}`[];
21
22
  get requires(): (`comment:${string}` | `aggregate:${string}`)[];
22
- serialize(): string;
23
+ serialize(_options?: SerializeOptions): string;
23
24
  }
@@ -14,7 +14,7 @@ export class CreateCommentOnAggregate extends CreateAggregateChange {
14
14
  get requires() {
15
15
  return [this.aggregate.stableId];
16
16
  }
17
- serialize() {
17
+ serialize(_options) {
18
18
  const signature = this.aggregate.identityArguments;
19
19
  const qualifiedName = `${this.aggregate.schema}.${this.aggregate.name}`;
20
20
  const withArgs = signature.length > 0 ? `(${signature})` : "()";
@@ -35,7 +35,7 @@ export class DropCommentOnAggregate extends DropAggregateChange {
35
35
  get requires() {
36
36
  return [stableId.comment(this.aggregate.stableId), this.aggregate.stableId];
37
37
  }
38
- serialize() {
38
+ serialize(_options) {
39
39
  const signature = this.aggregate.identityArguments;
40
40
  const qualifiedName = `${this.aggregate.schema}.${this.aggregate.name}`;
41
41
  const withArgs = signature.length > 0 ? `(${signature})` : "()";
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Aggregate } from "../aggregate.model.ts";
2
3
  import { CreateAggregateChange } from "./aggregate.base.ts";
3
4
  /**
@@ -15,5 +16,5 @@ export declare class CreateAggregate extends CreateAggregateChange {
15
16
  });
16
17
  get creates(): `aggregate:${string}`[];
17
18
  get requires(): string[];
18
- serialize(): string;
19
+ serialize(_options?: SerializeOptions): string;
19
20
  }
@@ -110,7 +110,7 @@ export class CreateAggregate extends CreateAggregateChange {
110
110
  // may reference types/functions). For now, we rely on pg_depend for these.
111
111
  return Array.from(dependencies);
112
112
  }
113
- serialize() {
113
+ serialize(_options) {
114
114
  const signature = this.aggregate.identityArguments;
115
115
  const qualifiedName = `${this.aggregate.schema}.${this.aggregate.name}`;
116
116
  const head = [
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Aggregate } from "../aggregate.model.ts";
2
3
  import { DropAggregateChange } from "./aggregate.base.ts";
3
4
  /**
@@ -13,5 +14,5 @@ export declare class DropAggregate extends DropAggregateChange {
13
14
  });
14
15
  get drops(): `aggregate:${string}`[];
15
16
  get requires(): `aggregate:${string}`[];
16
- serialize(): string;
17
+ serialize(_options?: SerializeOptions): string;
17
18
  }
@@ -17,7 +17,7 @@ export class DropAggregate extends DropAggregateChange {
17
17
  get requires() {
18
18
  return [this.aggregate.stableId];
19
19
  }
20
- serialize() {
20
+ serialize(_options) {
21
21
  const signature = this.aggregate.identityArguments;
22
22
  const qualifiedName = `${this.aggregate.schema}.${this.aggregate.name}`;
23
23
  const withArgs = signature.length > 0 ? `(${signature})` : "(*)";
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Aggregate } from "../aggregate.model.ts";
2
3
  import { AlterAggregateChange } from "./aggregate.base.ts";
3
4
  export type AggregatePrivilege = GrantAggregatePrivileges | RevokeAggregatePrivileges | RevokeGrantOptionAggregatePrivileges;
@@ -21,7 +22,7 @@ export declare class GrantAggregatePrivileges extends AlterAggregateChange {
21
22
  });
22
23
  get creates(): `acl:${string}::grantee:${string}`[];
23
24
  get requires(): (`role:${string}` | `aggregate:${string}`)[];
24
- serialize(): string;
25
+ serialize(_options?: SerializeOptions): string;
25
26
  }
26
27
  export declare class RevokeAggregatePrivileges extends AlterAggregateChange {
27
28
  readonly aggregate: Aggregate;
@@ -43,7 +44,7 @@ export declare class RevokeAggregatePrivileges extends AlterAggregateChange {
43
44
  });
44
45
  get drops(): `acl:${string}::grantee:${string}`[];
45
46
  get requires(): (`acl:${string}::grantee:${string}` | `role:${string}` | `aggregate:${string}`)[];
46
- serialize(): string;
47
+ serialize(_options?: SerializeOptions): string;
47
48
  }
48
49
  export declare class RevokeGrantOptionAggregatePrivileges extends AlterAggregateChange {
49
50
  readonly aggregate: Aggregate;
@@ -58,5 +59,5 @@ export declare class RevokeGrantOptionAggregatePrivileges extends AlterAggregate
58
59
  version?: number;
59
60
  });
60
61
  get requires(): (`acl:${string}::grantee:${string}` | `role:${string}` | `aggregate:${string}`)[];
61
- serialize(): string;
62
+ serialize(_options?: SerializeOptions): string;
62
63
  }
@@ -20,7 +20,7 @@ export class GrantAggregatePrivileges extends AlterAggregateChange {
20
20
  get requires() {
21
21
  return [this.aggregate.stableId, stableId.role(this.grantee)];
22
22
  }
23
- serialize() {
23
+ serialize(_options) {
24
24
  const hasGrantable = this.privileges.some((p) => p.grantable);
25
25
  const hasBase = this.privileges.some((p) => !p.grantable);
26
26
  if (hasGrantable && hasBase) {
@@ -61,7 +61,7 @@ export class RevokeAggregatePrivileges extends AlterAggregateChange {
61
61
  stableId.role(this.grantee),
62
62
  ];
63
63
  }
64
- serialize() {
64
+ serialize(_options) {
65
65
  const kindPrefix = getObjectKindPrefix("FUNCTION");
66
66
  const list = this.privileges.map((p) => p.privilege);
67
67
  const privSql = formatObjectPrivilegeList("FUNCTION", list, this.version);
@@ -91,7 +91,7 @@ export class RevokeGrantOptionAggregatePrivileges extends AlterAggregateChange {
91
91
  stableId.role(this.grantee),
92
92
  ];
93
93
  }
94
- serialize() {
94
+ serialize(_options) {
95
95
  const kindPrefix = getObjectKindPrefix("FUNCTION");
96
96
  const privSql = formatObjectPrivilegeList("FUNCTION", this.privilegeNames, this.version);
97
97
  const aggregateName = `${this.aggregate.schema}.${this.aggregate.name}`;
@@ -3,4 +3,5 @@ import type { CommentAggregate } from "./aggregate.comment.ts";
3
3
  import type { CreateAggregate } from "./aggregate.create.ts";
4
4
  import type { DropAggregate } from "./aggregate.drop.ts";
5
5
  import type { AggregatePrivilege } from "./aggregate.privilege.ts";
6
+ /** Union of all aggregate-related change variants (`objectType: "aggregate"`). @category Change Types */
6
7
  export type AggregateChange = AlterAggregate | CommentAggregate | CreateAggregate | DropAggregate | AggregatePrivilege;
@@ -1,4 +1,15 @@
1
+ import type { SerializeOptions } from "../integrations/serialize/serialize.types.ts";
1
2
  type ChangeOperation = "create" | "alter" | "drop";
3
+ /**
4
+ * Abstract base class for all change objects.
5
+ *
6
+ * Every concrete change (e.g. `CreateTable`, `AlterView`) extends this class and
7
+ * provides an `operation`, `objectType`, and `scope`. The filter DSL flattens
8
+ * these properties — along with the model sub-object — into path/value pairs
9
+ * for pattern matching.
10
+ *
11
+ * @category Base
12
+ */
2
13
  export declare abstract class BaseChange {
3
14
  /**
4
15
  * The operation of the change.
@@ -37,7 +48,7 @@ export declare abstract class BaseChange {
37
48
  /**
38
49
  * Serialize the change into a single SQL statement.
39
50
  */
40
- abstract serialize(options?: Record<string, unknown>): string;
51
+ abstract serialize(options?: SerializeOptions): string;
41
52
  }
42
53
  /**
43
54
  * Port of string literal quoting: doubles single quotes inside and wraps with single quotes
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Abstract base class for all change objects.
3
+ *
4
+ * Every concrete change (e.g. `CreateTable`, `AlterView`) extends this class and
5
+ * provides an `operation`, `objectType`, and `scope`. The filter DSL flattens
6
+ * these properties — along with the model sub-object — into path/value pairs
7
+ * for pattern matching.
8
+ *
9
+ * @category Base
10
+ */
1
11
  export class BaseChange {
2
12
  /**
3
13
  * A unique identifier for the change.
@@ -60,7 +60,10 @@ export declare abstract class BasePgModel {
60
60
  */
61
61
  abstract get dataFields(): Record<string, unknown>;
62
62
  /**
63
- * Compare this object with another BasePgModel for equality based on stableId and dataFields.
63
+ * Compare this object with another BasePgModel for equality based on the stableId and
64
+ * the data portion of the stable snapshot. By default, the snapshot's `data` comes
65
+ * from {@link dataFields}, but subclasses may override {@link stableSnapshot} to
66
+ * normalize or otherwise transform the data used for equality.
64
67
  */
65
68
  equals(other: BasePgModel): boolean;
66
69
  /**
@@ -28,11 +28,14 @@ export function normalizeColumns(columns) {
28
28
  }
29
29
  export class BasePgModel {
30
30
  /**
31
- * Compare this object with another BasePgModel for equality based on stableId and dataFields.
31
+ * Compare this object with another BasePgModel for equality based on the stableId and
32
+ * the data portion of the stable snapshot. By default, the snapshot's `data` comes
33
+ * from {@link dataFields}, but subclasses may override {@link stableSnapshot} to
34
+ * normalize or otherwise transform the data used for equality.
32
35
  */
33
36
  equals(other) {
34
37
  return (this.stableId === other.stableId &&
35
- deepEqual(this.dataFields, other.dataFields));
38
+ deepEqual(this.stableSnapshot().data, other.stableSnapshot().data));
36
39
  }
37
40
  /**
38
41
  * Stable representation used for equality/fingerprints.
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Collation } from "../collation.model.ts";
2
3
  import { AlterCollationChange } from "./collation.base.ts";
3
4
  /**
@@ -25,7 +26,7 @@ export declare class AlterCollationChangeOwner extends AlterCollationChange {
25
26
  owner: string;
26
27
  });
27
28
  get requires(): `collation:${string}`[];
28
- serialize(): string;
29
+ serialize(_options?: SerializeOptions): string;
29
30
  }
30
31
  /**
31
32
  * ALTER COLLATION ... REFRESH VERSION
@@ -37,7 +38,7 @@ export declare class AlterCollationRefreshVersion extends AlterCollationChange {
37
38
  collation: Collation;
38
39
  });
39
40
  get requires(): `collation:${string}`[];
40
- serialize(): string;
41
+ serialize(_options?: SerializeOptions): string;
41
42
  }
42
43
  /**
43
44
  * Replace a collation by dropping and recreating it.
@@ -14,7 +14,7 @@ export class AlterCollationChangeOwner extends AlterCollationChange {
14
14
  get requires() {
15
15
  return [this.collation.stableId];
16
16
  }
17
- serialize() {
17
+ serialize(_options) {
18
18
  return [
19
19
  "ALTER COLLATION",
20
20
  `${this.collation.schema}.${this.collation.name}`,
@@ -36,7 +36,7 @@ export class AlterCollationRefreshVersion extends AlterCollationChange {
36
36
  get requires() {
37
37
  return [this.collation.stableId];
38
38
  }
39
- serialize() {
39
+ serialize(_options) {
40
40
  return [
41
41
  "ALTER COLLATION",
42
42
  `${this.collation.schema}.${this.collation.name}`,
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Collation } from "../collation.model.ts";
2
3
  import { CreateCollationChange, DropCollationChange } from "./collation.base.ts";
3
4
  export type CommentCollation = CreateCommentOnCollation | DropCommentOnCollation;
@@ -12,7 +13,7 @@ export declare class CreateCommentOnCollation extends CreateCollationChange {
12
13
  });
13
14
  get creates(): `comment:${string}`[];
14
15
  get requires(): `collation:${string}`[];
15
- serialize(): string;
16
+ serialize(_options?: SerializeOptions): string;
16
17
  }
17
18
  export declare class DropCommentOnCollation extends DropCollationChange {
18
19
  readonly collation: Collation;
@@ -22,5 +23,5 @@ export declare class DropCommentOnCollation extends DropCollationChange {
22
23
  });
23
24
  get requires(): (`comment:${string}` | `collation:${string}`)[];
24
25
  get drops(): `comment:${string}`[];
25
- serialize(): string;
26
+ serialize(_options?: SerializeOptions): string;
26
27
  }
@@ -17,7 +17,7 @@ export class CreateCommentOnCollation extends CreateCollationChange {
17
17
  get requires() {
18
18
  return [this.collation.stableId];
19
19
  }
20
- serialize() {
20
+ serialize(_options) {
21
21
  return [
22
22
  "COMMENT ON COLLATION",
23
23
  `${this.collation.schema}.${this.collation.name}`,
@@ -40,7 +40,7 @@ export class DropCommentOnCollation extends DropCollationChange {
40
40
  get drops() {
41
41
  return [stableId.comment(this.collation.stableId)];
42
42
  }
43
- serialize() {
43
+ serialize(_options) {
44
44
  return [
45
45
  "COMMENT ON COLLATION",
46
46
  `${this.collation.schema}.${this.collation.name}`,
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Collation } from "../collation.model.ts";
2
3
  import { CreateCollationChange } from "./collation.base.ts";
3
4
  /**
@@ -28,5 +29,5 @@ export declare class CreateCollation extends CreateCollationChange {
28
29
  });
29
30
  get creates(): `collation:${string}`[];
30
31
  get requires(): string[];
31
- serialize(): string;
32
+ serialize(_options?: SerializeOptions): string;
32
33
  }
@@ -39,7 +39,7 @@ export class CreateCollation extends CreateCollationChange {
39
39
  dependencies.add(stableId.role(this.collation.owner));
40
40
  return Array.from(dependencies);
41
41
  }
42
- serialize() {
42
+ serialize(_options) {
43
43
  const parts = ["CREATE COLLATION"];
44
44
  // Add schema and name (already quoted in model extraction)
45
45
  parts.push(`${this.collation.schema}.${this.collation.name}`);
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Collation } from "../collation.model.ts";
2
3
  import { DropCollationChange } from "./collation.base.ts";
3
4
  /**
@@ -18,5 +19,5 @@ export declare class DropCollation extends DropCollationChange {
18
19
  });
19
20
  get requires(): `collation:${string}`[];
20
21
  get drops(): `collation:${string}`[];
21
- serialize(): string;
22
+ serialize(_options?: SerializeOptions): string;
22
23
  }
@@ -22,7 +22,7 @@ export class DropCollation extends DropCollationChange {
22
22
  get drops() {
23
23
  return [this.collation.stableId];
24
24
  }
25
- serialize() {
25
+ serialize(_options) {
26
26
  return [
27
27
  "DROP COLLATION",
28
28
  `${this.collation.schema}.${this.collation.name}`,
@@ -2,4 +2,5 @@ import type { AlterCollation } from "./collation.alter.ts";
2
2
  import type { CommentCollation } from "./collation.comment.ts";
3
3
  import type { CreateCollation } from "./collation.create.ts";
4
4
  import type { DropCollation } from "./collation.drop.ts";
5
+ /** Union of all collation-related change variants (`objectType: "collation"`). @category Change Types */
5
6
  export type CollationChange = AlterCollation | CommentCollation | CreateCollation | DropCollation;