@supabase/pg-delta 0.0.0 → 1.0.0-alpha.0

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 (567) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/cli/app.d.ts +1 -0
  4. package/dist/cli/app.js +26 -0
  5. package/dist/cli/bin/cli.d.ts +2 -0
  6. package/dist/cli/bin/cli.js +7 -0
  7. package/dist/cli/commands/apply.d.ts +5 -0
  8. package/dist/cli/commands/apply.js +85 -0
  9. package/dist/cli/commands/plan.d.ts +5 -0
  10. package/dist/cli/commands/plan.js +137 -0
  11. package/dist/cli/commands/sync.d.ts +5 -0
  12. package/dist/cli/commands/sync.js +141 -0
  13. package/dist/cli/formatters/index.d.ts +4 -0
  14. package/dist/cli/formatters/index.js +4 -0
  15. package/dist/cli/formatters/tree/tree-builder.d.ts +10 -0
  16. package/dist/cli/formatters/tree/tree-builder.js +333 -0
  17. package/dist/cli/formatters/tree/tree-renderer.d.ts +45 -0
  18. package/dist/cli/formatters/tree/tree-renderer.js +303 -0
  19. package/dist/cli/formatters/tree/tree.d.ts +8 -0
  20. package/dist/cli/formatters/tree/tree.js +161 -0
  21. package/dist/cli/utils/integrations.d.ts +13 -0
  22. package/dist/cli/utils/integrations.js +35 -0
  23. package/dist/cli/utils.d.ts +64 -0
  24. package/dist/cli/utils.js +160 -0
  25. package/dist/core/catalog.diff.d.ts +5 -0
  26. package/dist/core/catalog.diff.js +147 -0
  27. package/dist/core/catalog.model.d.ts +93 -0
  28. package/dist/core/catalog.model.js +254 -0
  29. package/dist/core/change.types.d.ts +22 -0
  30. package/dist/core/change.types.js +1 -0
  31. package/dist/core/context.d.ts +11 -0
  32. package/dist/core/context.js +12 -0
  33. package/dist/core/depend.d.ts +31 -0
  34. package/dist/core/depend.js +1833 -0
  35. package/dist/core/expand-replace-dependencies.d.ts +14 -0
  36. package/dist/core/expand-replace-dependencies.js +280 -0
  37. package/dist/core/fingerprint.d.ts +23 -0
  38. package/dist/core/fingerprint.js +174 -0
  39. package/dist/core/index.d.ts +15 -0
  40. package/dist/core/index.js +14 -0
  41. package/dist/core/integrations/filter/dsl.d.ts +97 -0
  42. package/dist/core/integrations/filter/dsl.js +107 -0
  43. package/dist/core/integrations/filter/extractors.d.ts +12 -0
  44. package/dist/core/integrations/filter/extractors.js +136 -0
  45. package/dist/core/integrations/integration-dsl.d.ts +22 -0
  46. package/dist/core/integrations/integration-dsl.js +6 -0
  47. package/dist/core/integrations/integration.types.d.ts +5 -0
  48. package/dist/core/integrations/integration.types.js +1 -0
  49. package/dist/core/integrations/serialize/dsl.d.ts +58 -0
  50. package/dist/core/integrations/serialize/dsl.js +42 -0
  51. package/dist/core/main.d.ts +5 -0
  52. package/dist/core/main.js +44 -0
  53. package/dist/core/objects/aggregate/aggregate.diff.d.ts +10 -0
  54. package/dist/core/objects/aggregate/aggregate.diff.js +186 -0
  55. package/dist/core/objects/aggregate/aggregate.model.d.ts +174 -0
  56. package/dist/core/objects/aggregate/aggregate.model.js +297 -0
  57. package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +19 -0
  58. package/dist/core/objects/aggregate/changes/aggregate.alter.js +25 -0
  59. package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +17 -0
  60. package/dist/core/objects/aggregate/changes/aggregate.base.js +13 -0
  61. package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +23 -0
  62. package/dist/core/objects/aggregate/changes/aggregate.comment.js +44 -0
  63. package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +19 -0
  64. package/dist/core/objects/aggregate/changes/aggregate.create.js +228 -0
  65. package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +17 -0
  66. package/dist/core/objects/aggregate/changes/aggregate.drop.js +26 -0
  67. package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +62 -0
  68. package/dist/core/objects/aggregate/changes/aggregate.privilege.js +102 -0
  69. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +6 -0
  70. package/dist/core/objects/aggregate/changes/aggregate.types.js +1 -0
  71. package/dist/core/objects/base.change.d.ts +46 -0
  72. package/dist/core/objects/base.change.js +38 -0
  73. package/dist/core/objects/base.default-privileges.d.ts +29 -0
  74. package/dist/core/objects/base.default-privileges.js +167 -0
  75. package/dist/core/objects/base.diff.d.ts +6 -0
  76. package/dist/core/objects/base.diff.js +12 -0
  77. package/dist/core/objects/base.model.d.ts +74 -0
  78. package/dist/core/objects/base.model.js +47 -0
  79. package/dist/core/objects/base.privilege-diff.d.ts +54 -0
  80. package/dist/core/objects/base.privilege-diff.js +216 -0
  81. package/dist/core/objects/base.privilege.d.ts +27 -0
  82. package/dist/core/objects/base.privilege.js +169 -0
  83. package/dist/core/objects/collation/changes/collation.alter.d.ts +45 -0
  84. package/dist/core/objects/collation/changes/collation.alter.js +52 -0
  85. package/dist/core/objects/collation/changes/collation.base.d.ts +17 -0
  86. package/dist/core/objects/collation/changes/collation.base.js +13 -0
  87. package/dist/core/objects/collation/changes/collation.comment.d.ts +26 -0
  88. package/dist/core/objects/collation/changes/collation.comment.js +50 -0
  89. package/dist/core/objects/collation/changes/collation.create.d.ts +32 -0
  90. package/dist/core/objects/collation/changes/collation.create.js +86 -0
  91. package/dist/core/objects/collation/changes/collation.drop.d.ts +22 -0
  92. package/dist/core/objects/collation/changes/collation.drop.js +31 -0
  93. package/dist/core/objects/collation/changes/collation.types.d.ts +5 -0
  94. package/dist/core/objects/collation/changes/collation.types.js +1 -0
  95. package/dist/core/objects/collation/collation.diff.d.ts +13 -0
  96. package/dist/core/objects/collation/collation.diff.js +85 -0
  97. package/dist/core/objects/collation/collation.model.d.ts +67 -0
  98. package/dist/core/objects/collation/collation.model.js +207 -0
  99. package/dist/core/objects/domain/changes/domain.alter.d.ts +143 -0
  100. package/dist/core/objects/domain/changes/domain.alter.js +191 -0
  101. package/dist/core/objects/domain/changes/domain.base.d.ts +17 -0
  102. package/dist/core/objects/domain/changes/domain.base.js +13 -0
  103. package/dist/core/objects/domain/changes/domain.comment.d.ts +25 -0
  104. package/dist/core/objects/domain/changes/domain.comment.js +47 -0
  105. package/dist/core/objects/domain/changes/domain.create.d.ts +30 -0
  106. package/dist/core/objects/domain/changes/domain.create.js +92 -0
  107. package/dist/core/objects/domain/changes/domain.drop.d.ts +22 -0
  108. package/dist/core/objects/domain/changes/domain.drop.js +28 -0
  109. package/dist/core/objects/domain/changes/domain.privilege.d.ts +97 -0
  110. package/dist/core/objects/domain/changes/domain.privilege.js +127 -0
  111. package/dist/core/objects/domain/changes/domain.types.d.ts +6 -0
  112. package/dist/core/objects/domain/changes/domain.types.js +1 -0
  113. package/dist/core/objects/domain/domain.diff.d.ts +18 -0
  114. package/dist/core/objects/domain/domain.diff.js +244 -0
  115. package/dist/core/objects/domain/domain.model.d.ts +103 -0
  116. package/dist/core/objects/domain/domain.model.js +172 -0
  117. package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +44 -0
  118. package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +51 -0
  119. package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +17 -0
  120. package/dist/core/objects/event-trigger/changes/event-trigger.base.js +13 -0
  121. package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +23 -0
  122. package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +46 -0
  123. package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +25 -0
  124. package/dist/core/objects/event-trigger/changes/event-trigger.create.js +55 -0
  125. package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +22 -0
  126. package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +28 -0
  127. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +5 -0
  128. package/dist/core/objects/event-trigger/changes/event-trigger.types.js +1 -0
  129. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +13 -0
  130. package/dist/core/objects/event-trigger/event-trigger.diff.js +81 -0
  131. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +45 -0
  132. package/dist/core/objects/event-trigger/event-trigger.model.js +89 -0
  133. package/dist/core/objects/extension/changes/extension.alter.d.ts +44 -0
  134. package/dist/core/objects/extension/changes/extension.alter.js +51 -0
  135. package/dist/core/objects/extension/changes/extension.base.d.ts +17 -0
  136. package/dist/core/objects/extension/changes/extension.base.js +13 -0
  137. package/dist/core/objects/extension/changes/extension.comment.d.ts +26 -0
  138. package/dist/core/objects/extension/changes/extension.comment.js +46 -0
  139. package/dist/core/objects/extension/changes/extension.create.d.ts +25 -0
  140. package/dist/core/objects/extension/changes/extension.create.js +49 -0
  141. package/dist/core/objects/extension/changes/extension.drop.d.ts +22 -0
  142. package/dist/core/objects/extension/changes/extension.drop.js +28 -0
  143. package/dist/core/objects/extension/changes/extension.types.d.ts +5 -0
  144. package/dist/core/objects/extension/changes/extension.types.js +1 -0
  145. package/dist/core/objects/extension/extension.diff.d.ts +10 -0
  146. package/dist/core/objects/extension/extension.diff.js +65 -0
  147. package/dist/core/objects/extension/extension.model.d.ts +52 -0
  148. package/dist/core/objects/extension/extension.model.js +268 -0
  149. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +51 -0
  150. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +61 -0
  151. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.d.ts +17 -0
  152. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.js +13 -0
  153. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +26 -0
  154. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +50 -0
  155. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +25 -0
  156. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +78 -0
  157. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +22 -0
  158. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +28 -0
  159. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +97 -0
  160. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +123 -0
  161. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +6 -0
  162. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.js +1 -0
  163. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +18 -0
  164. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +221 -0
  165. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +59 -0
  166. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +128 -0
  167. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +5 -0
  168. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.js +1 -0
  169. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +163 -0
  170. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +248 -0
  171. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +17 -0
  172. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.js +13 -0
  173. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +26 -0
  174. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +50 -0
  175. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +25 -0
  176. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +64 -0
  177. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +22 -0
  178. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +31 -0
  179. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +97 -0
  180. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +129 -0
  181. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +6 -0
  182. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.js +1 -0
  183. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +18 -0
  184. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +268 -0
  185. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +117 -0
  186. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +215 -0
  187. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +65 -0
  188. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +84 -0
  189. package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.d.ts +17 -0
  190. package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.js +13 -0
  191. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +26 -0
  192. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +43 -0
  193. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +24 -0
  194. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +62 -0
  195. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +22 -0
  196. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +28 -0
  197. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +97 -0
  198. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +123 -0
  199. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +6 -0
  200. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.js +1 -0
  201. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +18 -0
  202. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +209 -0
  203. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +62 -0
  204. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +118 -0
  205. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +37 -0
  206. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +38 -0
  207. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.d.ts +17 -0
  208. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.js +13 -0
  209. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +24 -0
  210. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +52 -0
  211. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +23 -0
  212. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +34 -0
  213. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +4 -0
  214. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.js +1 -0
  215. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.d.ts +10 -0
  216. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.js +77 -0
  217. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +36 -0
  218. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +85 -0
  219. package/dist/core/objects/index/changes/index.alter.d.ts +76 -0
  220. package/dist/core/objects/index/changes/index.alter.js +94 -0
  221. package/dist/core/objects/index/changes/index.base.d.ts +17 -0
  222. package/dist/core/objects/index/changes/index.base.js +13 -0
  223. package/dist/core/objects/index/changes/index.comment.d.ts +26 -0
  224. package/dist/core/objects/index/changes/index.comment.js +50 -0
  225. package/dist/core/objects/index/changes/index.create.d.ts +30 -0
  226. package/dist/core/objects/index/changes/index.create.js +53 -0
  227. package/dist/core/objects/index/changes/index.drop.d.ts +22 -0
  228. package/dist/core/objects/index/changes/index.drop.js +28 -0
  229. package/dist/core/objects/index/changes/index.types.d.ts +5 -0
  230. package/dist/core/objects/index/changes/index.types.js +1 -0
  231. package/dist/core/objects/index/changes/utils.d.ts +3 -0
  232. package/dist/core/objects/index/changes/utils.js +6 -0
  233. package/dist/core/objects/index/index.diff.d.ts +12 -0
  234. package/dist/core/objects/index/index.diff.js +182 -0
  235. package/dist/core/objects/index/index.model.d.ts +150 -0
  236. package/dist/core/objects/index/index.model.js +340 -0
  237. package/dist/core/objects/language/changes/language.alter.d.ts +32 -0
  238. package/dist/core/objects/language/changes/language.alter.js +30 -0
  239. package/dist/core/objects/language/changes/language.base.d.ts +17 -0
  240. package/dist/core/objects/language/changes/language.base.js +13 -0
  241. package/dist/core/objects/language/changes/language.comment.d.ts +26 -0
  242. package/dist/core/objects/language/changes/language.comment.js +45 -0
  243. package/dist/core/objects/language/changes/language.create.d.ts +25 -0
  244. package/dist/core/objects/language/changes/language.create.js +76 -0
  245. package/dist/core/objects/language/changes/language.drop.d.ts +22 -0
  246. package/dist/core/objects/language/changes/language.drop.js +31 -0
  247. package/dist/core/objects/language/changes/language.privilege.d.ts +97 -0
  248. package/dist/core/objects/language/changes/language.privilege.js +128 -0
  249. package/dist/core/objects/language/changes/language.types.d.ts +6 -0
  250. package/dist/core/objects/language/changes/language.types.js +1 -0
  251. package/dist/core/objects/language/language.diff.d.ts +15 -0
  252. package/dist/core/objects/language/language.diff.js +117 -0
  253. package/dist/core/objects/language/language.model.d.ts +62 -0
  254. package/dist/core/objects/language/language.model.js +128 -0
  255. package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +67 -0
  256. package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +63 -0
  257. package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +17 -0
  258. package/dist/core/objects/materialized-view/changes/materialized-view.base.js +13 -0
  259. package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +53 -0
  260. package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +112 -0
  261. package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +35 -0
  262. package/dist/core/objects/materialized-view/changes/materialized-view.create.js +71 -0
  263. package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +26 -0
  264. package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +42 -0
  265. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +105 -0
  266. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +151 -0
  267. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +6 -0
  268. package/dist/core/objects/materialized-view/changes/materialized-view.types.js +1 -0
  269. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +18 -0
  270. package/dist/core/objects/materialized-view/materialized-view.diff.js +335 -0
  271. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +152 -0
  272. package/dist/core/objects/materialized-view/materialized-view.model.js +228 -0
  273. package/dist/core/objects/procedure/changes/procedure.alter.d.ts +143 -0
  274. package/dist/core/objects/procedure/changes/procedure.alter.js +207 -0
  275. package/dist/core/objects/procedure/changes/procedure.base.d.ts +17 -0
  276. package/dist/core/objects/procedure/changes/procedure.base.js +13 -0
  277. package/dist/core/objects/procedure/changes/procedure.comment.d.ts +26 -0
  278. package/dist/core/objects/procedure/changes/procedure.comment.js +52 -0
  279. package/dist/core/objects/procedure/changes/procedure.create.d.ts +42 -0
  280. package/dist/core/objects/procedure/changes/procedure.create.js +77 -0
  281. package/dist/core/objects/procedure/changes/procedure.drop.d.ts +23 -0
  282. package/dist/core/objects/procedure/changes/procedure.drop.js +37 -0
  283. package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +98 -0
  284. package/dist/core/objects/procedure/changes/procedure.privilege.js +144 -0
  285. package/dist/core/objects/procedure/changes/procedure.types.d.ts +6 -0
  286. package/dist/core/objects/procedure/changes/procedure.types.js +1 -0
  287. package/dist/core/objects/procedure/procedure.diff.d.ts +18 -0
  288. package/dist/core/objects/procedure/procedure.diff.js +282 -0
  289. package/dist/core/objects/procedure/procedure.model.d.ts +132 -0
  290. package/dist/core/objects/procedure/procedure.model.js +244 -0
  291. package/dist/core/objects/procedure/utils.d.ts +14 -0
  292. package/dist/core/objects/procedure/utils.js +55 -0
  293. package/dist/core/objects/publication/changes/publication.alter.d.ts +88 -0
  294. package/dist/core/objects/publication/changes/publication.alter.js +176 -0
  295. package/dist/core/objects/publication/changes/publication.base.d.ts +17 -0
  296. package/dist/core/objects/publication/changes/publication.base.js +13 -0
  297. package/dist/core/objects/publication/changes/publication.comment.d.ts +23 -0
  298. package/dist/core/objects/publication/changes/publication.comment.js +46 -0
  299. package/dist/core/objects/publication/changes/publication.create.d.ts +17 -0
  300. package/dist/core/objects/publication/changes/publication.create.js +61 -0
  301. package/dist/core/objects/publication/changes/publication.drop.d.ts +17 -0
  302. package/dist/core/objects/publication/changes/publication.drop.js +23 -0
  303. package/dist/core/objects/publication/changes/publication.types.d.ts +5 -0
  304. package/dist/core/objects/publication/changes/publication.types.js +1 -0
  305. package/dist/core/objects/publication/publication.diff.d.ts +5 -0
  306. package/dist/core/objects/publication/publication.diff.js +161 -0
  307. package/dist/core/objects/publication/publication.model.d.ts +96 -0
  308. package/dist/core/objects/publication/publication.model.js +186 -0
  309. package/dist/core/objects/publication/utils.d.ts +5 -0
  310. package/dist/core/objects/publication/utils.js +45 -0
  311. package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +62 -0
  312. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +90 -0
  313. package/dist/core/objects/rls-policy/changes/rls-policy.base.d.ts +17 -0
  314. package/dist/core/objects/rls-policy/changes/rls-policy.base.js +13 -0
  315. package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +23 -0
  316. package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +51 -0
  317. package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +27 -0
  318. package/dist/core/objects/rls-policy/changes/rls-policy.create.js +79 -0
  319. package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +22 -0
  320. package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +33 -0
  321. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +5 -0
  322. package/dist/core/objects/rls-policy/changes/rls-policy.types.js +1 -0
  323. package/dist/core/objects/rls-policy/rls-policy.diff.d.ts +10 -0
  324. package/dist/core/objects/rls-policy/rls-policy.diff.js +80 -0
  325. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +52 -0
  326. package/dist/core/objects/rls-policy/rls-policy.model.js +127 -0
  327. package/dist/core/objects/role/changes/role.alter.d.ts +78 -0
  328. package/dist/core/objects/role/changes/role.alter.js +55 -0
  329. package/dist/core/objects/role/changes/role.base.d.ts +17 -0
  330. package/dist/core/objects/role/changes/role.base.js +13 -0
  331. package/dist/core/objects/role/changes/role.comment.d.ts +23 -0
  332. package/dist/core/objects/role/changes/role.comment.js +42 -0
  333. package/dist/core/objects/role/changes/role.create.d.ts +38 -0
  334. package/dist/core/objects/role/changes/role.create.js +83 -0
  335. package/dist/core/objects/role/changes/role.drop.d.ts +22 -0
  336. package/dist/core/objects/role/changes/role.drop.js +28 -0
  337. package/dist/core/objects/role/changes/role.privilege.d.ts +148 -0
  338. package/dist/core/objects/role/changes/role.privilege.js +283 -0
  339. package/dist/core/objects/role/changes/role.types.d.ts +6 -0
  340. package/dist/core/objects/role/changes/role.types.js +1 -0
  341. package/dist/core/objects/role/role.diff.d.ts +13 -0
  342. package/dist/core/objects/role/role.diff.js +386 -0
  343. package/dist/core/objects/role/role.model.d.ts +89 -0
  344. package/dist/core/objects/role/role.model.js +312 -0
  345. package/dist/core/objects/rule/changes/rule.alter.d.ts +22 -0
  346. package/dist/core/objects/rule/changes/rule.alter.js +58 -0
  347. package/dist/core/objects/rule/changes/rule.base.d.ts +17 -0
  348. package/dist/core/objects/rule/changes/rule.base.js +13 -0
  349. package/dist/core/objects/rule/changes/rule.comment.d.ts +22 -0
  350. package/dist/core/objects/rule/changes/rule.comment.js +51 -0
  351. package/dist/core/objects/rule/changes/rule.create.d.ts +14 -0
  352. package/dist/core/objects/rule/changes/rule.create.js +28 -0
  353. package/dist/core/objects/rule/changes/rule.drop.d.ts +12 -0
  354. package/dist/core/objects/rule/changes/rule.drop.js +23 -0
  355. package/dist/core/objects/rule/changes/rule.types.d.ts +5 -0
  356. package/dist/core/objects/rule/changes/rule.types.js +1 -0
  357. package/dist/core/objects/rule/rule.diff.d.ts +3 -0
  358. package/dist/core/objects/rule/rule.diff.js +53 -0
  359. package/dist/core/objects/rule/rule.model.d.ts +72 -0
  360. package/dist/core/objects/rule/rule.model.js +156 -0
  361. package/dist/core/objects/schema/changes/schema.alter.d.ts +32 -0
  362. package/dist/core/objects/schema/changes/schema.alter.js +25 -0
  363. package/dist/core/objects/schema/changes/schema.base.d.ts +17 -0
  364. package/dist/core/objects/schema/changes/schema.base.js +13 -0
  365. package/dist/core/objects/schema/changes/schema.comment.d.ts +23 -0
  366. package/dist/core/objects/schema/changes/schema.comment.js +43 -0
  367. package/dist/core/objects/schema/changes/schema.create.d.ts +27 -0
  368. package/dist/core/objects/schema/changes/schema.create.js +38 -0
  369. package/dist/core/objects/schema/changes/schema.drop.d.ts +22 -0
  370. package/dist/core/objects/schema/changes/schema.drop.js +28 -0
  371. package/dist/core/objects/schema/changes/schema.privilege.d.ts +97 -0
  372. package/dist/core/objects/schema/changes/schema.privilege.js +131 -0
  373. package/dist/core/objects/schema/changes/schema.types.d.ts +6 -0
  374. package/dist/core/objects/schema/changes/schema.types.js +1 -0
  375. package/dist/core/objects/schema/schema.diff.d.ts +18 -0
  376. package/dist/core/objects/schema/schema.diff.js +142 -0
  377. package/dist/core/objects/schema/schema.model.d.ts +47 -0
  378. package/dist/core/objects/schema/schema.model.js +91 -0
  379. package/dist/core/objects/sequence/changes/sequence.alter.d.ts +59 -0
  380. package/dist/core/objects/sequence/changes/sequence.alter.js +75 -0
  381. package/dist/core/objects/sequence/changes/sequence.base.d.ts +17 -0
  382. package/dist/core/objects/sequence/changes/sequence.base.js +13 -0
  383. package/dist/core/objects/sequence/changes/sequence.comment.d.ts +23 -0
  384. package/dist/core/objects/sequence/changes/sequence.comment.js +47 -0
  385. package/dist/core/objects/sequence/changes/sequence.create.d.ts +25 -0
  386. package/dist/core/objects/sequence/changes/sequence.create.js +78 -0
  387. package/dist/core/objects/sequence/changes/sequence.drop.d.ts +22 -0
  388. package/dist/core/objects/sequence/changes/sequence.drop.js +31 -0
  389. package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +101 -0
  390. package/dist/core/objects/sequence/changes/sequence.privilege.js +135 -0
  391. package/dist/core/objects/sequence/changes/sequence.types.d.ts +6 -0
  392. package/dist/core/objects/sequence/changes/sequence.types.js +1 -0
  393. package/dist/core/objects/sequence/sequence.diff.d.ts +20 -0
  394. package/dist/core/objects/sequence/sequence.diff.js +258 -0
  395. package/dist/core/objects/sequence/sequence.model.d.ts +76 -0
  396. package/dist/core/objects/sequence/sequence.model.js +169 -0
  397. package/dist/core/objects/subscription/changes/subscription.alter.d.ts +56 -0
  398. package/dist/core/objects/subscription/changes/subscription.alter.js +82 -0
  399. package/dist/core/objects/subscription/changes/subscription.base.d.ts +17 -0
  400. package/dist/core/objects/subscription/changes/subscription.base.js +13 -0
  401. package/dist/core/objects/subscription/changes/subscription.comment.d.ts +23 -0
  402. package/dist/core/objects/subscription/changes/subscription.comment.js +46 -0
  403. package/dist/core/objects/subscription/changes/subscription.create.d.ts +12 -0
  404. package/dist/core/objects/subscription/changes/subscription.create.js +52 -0
  405. package/dist/core/objects/subscription/changes/subscription.drop.d.ts +11 -0
  406. package/dist/core/objects/subscription/changes/subscription.drop.js +15 -0
  407. package/dist/core/objects/subscription/changes/subscription.types.d.ts +5 -0
  408. package/dist/core/objects/subscription/changes/subscription.types.js +1 -0
  409. package/dist/core/objects/subscription/subscription.diff.d.ts +5 -0
  410. package/dist/core/objects/subscription/subscription.diff.js +167 -0
  411. package/dist/core/objects/subscription/subscription.model.d.ts +80 -0
  412. package/dist/core/objects/subscription/subscription.model.js +166 -0
  413. package/dist/core/objects/subscription/utils.d.ts +37 -0
  414. package/dist/core/objects/subscription/utils.js +112 -0
  415. package/dist/core/objects/table/changes/table.alter.d.ts +357 -0
  416. package/dist/core/objects/table/changes/table.alter.js +607 -0
  417. package/dist/core/objects/table/changes/table.base.d.ts +17 -0
  418. package/dist/core/objects/table/changes/table.base.js +13 -0
  419. package/dist/core/objects/table/changes/table.comment.d.ts +106 -0
  420. package/dist/core/objects/table/changes/table.comment.js +175 -0
  421. package/dist/core/objects/table/changes/table.create.d.ts +33 -0
  422. package/dist/core/objects/table/changes/table.create.js +145 -0
  423. package/dist/core/objects/table/changes/table.drop.d.ts +22 -0
  424. package/dist/core/objects/table/changes/table.drop.js +35 -0
  425. package/dist/core/objects/table/changes/table.privilege.d.ts +107 -0
  426. package/dist/core/objects/table/changes/table.privilege.js +150 -0
  427. package/dist/core/objects/table/changes/table.types.d.ts +6 -0
  428. package/dist/core/objects/table/changes/table.types.js +1 -0
  429. package/dist/core/objects/table/table.diff.d.ts +18 -0
  430. package/dist/core/objects/table/table.diff.js +668 -0
  431. package/dist/core/objects/table/table.model.d.ts +341 -0
  432. package/dist/core/objects/table/table.model.js +426 -0
  433. package/dist/core/objects/trigger/changes/trigger.alter.d.ts +29 -0
  434. package/dist/core/objects/trigger/changes/trigger.alter.js +27 -0
  435. package/dist/core/objects/trigger/changes/trigger.base.d.ts +17 -0
  436. package/dist/core/objects/trigger/changes/trigger.base.js +13 -0
  437. package/dist/core/objects/trigger/changes/trigger.comment.d.ts +23 -0
  438. package/dist/core/objects/trigger/changes/trigger.comment.js +51 -0
  439. package/dist/core/objects/trigger/changes/trigger.create.d.ts +41 -0
  440. package/dist/core/objects/trigger/changes/trigger.create.js +61 -0
  441. package/dist/core/objects/trigger/changes/trigger.drop.d.ts +22 -0
  442. package/dist/core/objects/trigger/changes/trigger.drop.js +33 -0
  443. package/dist/core/objects/trigger/changes/trigger.types.d.ts +5 -0
  444. package/dist/core/objects/trigger/changes/trigger.types.js +1 -0
  445. package/dist/core/objects/trigger/trigger.diff.d.ts +11 -0
  446. package/dist/core/objects/trigger/trigger.diff.js +84 -0
  447. package/dist/core/objects/trigger/trigger.model.d.ts +92 -0
  448. package/dist/core/objects/trigger/trigger.model.js +235 -0
  449. package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +81 -0
  450. package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +123 -0
  451. package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +17 -0
  452. package/dist/core/objects/type/composite-type/changes/composite-type.base.js +13 -0
  453. package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +53 -0
  454. package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +108 -0
  455. package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +23 -0
  456. package/dist/core/objects/type/composite-type/changes/composite-type.create.js +72 -0
  457. package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +22 -0
  458. package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +31 -0
  459. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +97 -0
  460. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +131 -0
  461. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +6 -0
  462. package/dist/core/objects/type/composite-type/changes/composite-type.types.js +1 -0
  463. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +18 -0
  464. package/dist/core/objects/type/composite-type/composite-type.diff.js +250 -0
  465. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +148 -0
  466. package/dist/core/objects/type/composite-type/composite-type.model.js +223 -0
  467. package/dist/core/objects/type/enum/changes/enum.alter.d.ts +52 -0
  468. package/dist/core/objects/type/enum/changes/enum.alter.js +60 -0
  469. package/dist/core/objects/type/enum/changes/enum.base.d.ts +17 -0
  470. package/dist/core/objects/type/enum/changes/enum.base.js +13 -0
  471. package/dist/core/objects/type/enum/changes/enum.comment.d.ts +26 -0
  472. package/dist/core/objects/type/enum/changes/enum.comment.js +47 -0
  473. package/dist/core/objects/type/enum/changes/enum.create.d.ts +22 -0
  474. package/dist/core/objects/type/enum/changes/enum.create.js +43 -0
  475. package/dist/core/objects/type/enum/changes/enum.drop.d.ts +22 -0
  476. package/dist/core/objects/type/enum/changes/enum.drop.js +28 -0
  477. package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +97 -0
  478. package/dist/core/objects/type/enum/changes/enum.privilege.js +131 -0
  479. package/dist/core/objects/type/enum/changes/enum.types.d.ts +6 -0
  480. package/dist/core/objects/type/enum/changes/enum.types.js +1 -0
  481. package/dist/core/objects/type/enum/enum.diff.d.ts +18 -0
  482. package/dist/core/objects/type/enum/enum.diff.js +268 -0
  483. package/dist/core/objects/type/enum/enum.model.d.ts +66 -0
  484. package/dist/core/objects/type/enum/enum.model.js +154 -0
  485. package/dist/core/objects/type/range/changes/range.alter.d.ts +33 -0
  486. package/dist/core/objects/type/range/changes/range.alter.js +30 -0
  487. package/dist/core/objects/type/range/changes/range.base.d.ts +17 -0
  488. package/dist/core/objects/type/range/changes/range.base.js +13 -0
  489. package/dist/core/objects/type/range/changes/range.comment.d.ts +26 -0
  490. package/dist/core/objects/type/range/changes/range.comment.js +47 -0
  491. package/dist/core/objects/type/range/changes/range.create.d.ts +31 -0
  492. package/dist/core/objects/type/range/changes/range.create.js +113 -0
  493. package/dist/core/objects/type/range/changes/range.drop.d.ts +22 -0
  494. package/dist/core/objects/type/range/changes/range.drop.js +28 -0
  495. package/dist/core/objects/type/range/changes/range.privilege.d.ts +97 -0
  496. package/dist/core/objects/type/range/changes/range.privilege.js +131 -0
  497. package/dist/core/objects/type/range/changes/range.types.d.ts +6 -0
  498. package/dist/core/objects/type/range/changes/range.types.js +1 -0
  499. package/dist/core/objects/type/range/range.diff.d.ts +18 -0
  500. package/dist/core/objects/type/range/range.diff.js +172 -0
  501. package/dist/core/objects/type/range/range.model.d.ts +81 -0
  502. package/dist/core/objects/type/range/range.model.js +165 -0
  503. package/dist/core/objects/type/type.types.d.ts +4 -0
  504. package/dist/core/objects/type/type.types.js +1 -0
  505. package/dist/core/objects/utils.d.ts +57 -0
  506. package/dist/core/objects/utils.js +137 -0
  507. package/dist/core/objects/view/changes/view.alter.d.ts +62 -0
  508. package/dist/core/objects/view/changes/view.alter.js +75 -0
  509. package/dist/core/objects/view/changes/view.base.d.ts +17 -0
  510. package/dist/core/objects/view/changes/view.base.js +13 -0
  511. package/dist/core/objects/view/changes/view.comment.d.ts +23 -0
  512. package/dist/core/objects/view/changes/view.comment.js +46 -0
  513. package/dist/core/objects/view/changes/view.create.d.ts +27 -0
  514. package/dist/core/objects/view/changes/view.create.js +57 -0
  515. package/dist/core/objects/view/changes/view.drop.d.ts +17 -0
  516. package/dist/core/objects/view/changes/view.drop.js +30 -0
  517. package/dist/core/objects/view/changes/view.privilege.d.ts +107 -0
  518. package/dist/core/objects/view/changes/view.privilege.js +150 -0
  519. package/dist/core/objects/view/changes/view.types.d.ts +6 -0
  520. package/dist/core/objects/view/changes/view.types.js +1 -0
  521. package/dist/core/objects/view/view.diff.d.ts +18 -0
  522. package/dist/core/objects/view/view.diff.js +270 -0
  523. package/dist/core/objects/view/view.model.d.ts +152 -0
  524. package/dist/core/objects/view/view.model.js +250 -0
  525. package/dist/core/plan/apply.d.ts +33 -0
  526. package/dist/core/plan/apply.js +112 -0
  527. package/dist/core/plan/create.d.ts +22 -0
  528. package/dist/core/plan/create.js +228 -0
  529. package/dist/core/plan/hierarchy.d.ts +19 -0
  530. package/dist/core/plan/hierarchy.js +488 -0
  531. package/dist/core/plan/index.d.ts +19 -0
  532. package/dist/core/plan/index.js +21 -0
  533. package/dist/core/plan/io.d.ts +12 -0
  534. package/dist/core/plan/io.js +17 -0
  535. package/dist/core/plan/risk.d.ts +10 -0
  536. package/dist/core/plan/risk.js +38 -0
  537. package/dist/core/plan/serialize.d.ts +26 -0
  538. package/dist/core/plan/serialize.js +176 -0
  539. package/dist/core/plan/statements.d.ts +8 -0
  540. package/dist/core/plan/statements.js +13 -0
  541. package/dist/core/plan/types.d.ts +153 -0
  542. package/dist/core/plan/types.js +32 -0
  543. package/dist/core/postgres-config.d.ts +8 -0
  544. package/dist/core/postgres-config.js +46 -0
  545. package/dist/core/sort/custom-constraints.d.ts +9 -0
  546. package/dist/core/sort/custom-constraints.js +133 -0
  547. package/dist/core/sort/debug-visualization.d.ts +8 -0
  548. package/dist/core/sort/debug-visualization.js +145 -0
  549. package/dist/core/sort/dependency-filter.d.ts +19 -0
  550. package/dist/core/sort/dependency-filter.js +152 -0
  551. package/dist/core/sort/graph-builder.d.ts +37 -0
  552. package/dist/core/sort/graph-builder.js +172 -0
  553. package/dist/core/sort/graph-utils.d.ts +14 -0
  554. package/dist/core/sort/graph-utils.js +41 -0
  555. package/dist/core/sort/logical-sort.d.ts +26 -0
  556. package/dist/core/sort/logical-sort.js +532 -0
  557. package/dist/core/sort/sort-changes.d.ts +28 -0
  558. package/dist/core/sort/sort-changes.js +147 -0
  559. package/dist/core/sort/topological-sort.d.ts +20 -0
  560. package/dist/core/sort/topological-sort.js +138 -0
  561. package/dist/core/sort/types.d.ts +102 -0
  562. package/dist/core/sort/types.js +1 -0
  563. package/dist/core/sort/utils.d.ts +23 -0
  564. package/dist/core/sort/utils.js +51 -0
  565. package/dist/index.d.ts +1 -0
  566. package/dist/index.js +1 -0
  567. package/package.json +58 -12
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Phased dependency-graph sort for ordered schema changes.
3
+ *
4
+ * Changes are split into two execution phases:
5
+ * - `drop`: Destructive operations (executed first, in reverse dependency order)
6
+ * - `create_alter_object`: All remaining changes (executed second, in forward dependency order)
7
+ *
8
+ * Within each phase, changes are sorted using Constraints derived from:
9
+ * - Catalog dependencies (from pg_depend)
10
+ * - Explicit requirements (from Change.requires)
11
+ * - Custom constraints (change-to-change ordering rules)
12
+ */
13
+ import debug from "debug";
14
+ import { generateCustomConstraints } from "./custom-constraints.js";
15
+ import { printDebugGraph } from "./debug-visualization.js";
16
+ const debugGraph = debug("pg-delta:graph");
17
+ import { filterEdgesForCycleBreaking, getEdgesInCycle, } from "./dependency-filter.js";
18
+ import { buildGraphData, convertCatalogDependenciesToConstraints, convertConstraintsToEdges, convertExplicitRequirementsToConstraints, edgesToPairs, } from "./graph-builder.js";
19
+ import { dedupeEdges } from "./graph-utils.js";
20
+ import { logicalSort } from "./logical-sort.js";
21
+ import { findCycle, formatCycleError, performStableTopologicalSort, } from "./topological-sort.js";
22
+ import { getExecutionPhase } from "./utils.js";
23
+ /**
24
+ * Sort changes using dependency information from catalogs and custom constraints.
25
+ *
26
+ * First applies logical pre-sorting to group related changes together,
27
+ * then applies dependency-based topological sorting to ensure correct execution order.
28
+ *
29
+ * @param catalogs - Main and branch catalogs containing dependency information
30
+ * @param changes - List of Change objects to order
31
+ * @returns Ordered list of Change objects
32
+ */
33
+ export function sortChanges(catalogs, changes) {
34
+ // Step 1: Apply logical pre-sorting to group changes by object type, stable ID, and scope
35
+ const logicallySorted = logicalSort(changes);
36
+ // Step 2: Apply dependency-based topological sorting
37
+ return sortChangesByPhasedGraph({
38
+ mainCatalog: { depends: catalogs.mainCatalog.depends },
39
+ branchCatalog: { depends: catalogs.branchCatalog.depends },
40
+ }, logicallySorted);
41
+ }
42
+ /**
43
+ * Sort changes by phases, using dependency information in each phase.
44
+ *
45
+ * @param catalogContext - pg_depend rows from the main and branch catalogs
46
+ * @param changeList - list of Change objects to order
47
+ * @returns ordered list of Change objects
48
+ */
49
+ function sortChangesByPhasedGraph(catalogContext, changeList) {
50
+ const changesByPhase = {
51
+ drop: [],
52
+ create_alter_object: [],
53
+ };
54
+ // Partition changes into execution phases
55
+ for (const changeItem of changeList) {
56
+ const phase = getExecutionPhase(changeItem);
57
+ changesByPhase[phase].push(changeItem);
58
+ }
59
+ // Sort DROP phase: reverse dependency order using main catalog dependencies
60
+ const sortedDropPhase = sortPhaseChanges(changesByPhase.drop, catalogContext.mainCatalog.depends, { invert: true });
61
+ // Sort CREATE/ALTER phase: forward dependency order using branch catalog dependencies
62
+ const sortedCreateAlterPhase = sortPhaseChanges(changesByPhase.create_alter_object, catalogContext.branchCatalog.depends, {});
63
+ return [...sortedDropPhase, ...sortedCreateAlterPhase];
64
+ }
65
+ /**
66
+ * Sort changes within a phase using Constraints derived from all dependency sources.
67
+ *
68
+ * Algorithm:
69
+ * 1. Build graph data (change sets and reverse indexes)
70
+ * 2. Convert all sources to Constraints (catalog, explicit, custom constraints)
71
+ * 3. Convert Constraints to edges
72
+ * 4. Iteratively detect and break cycles (deduplicate edges, detect cycles, filter problematic edges)
73
+ * 5. Perform stable topological sort on the acyclic graph
74
+ *
75
+ * In DROP phase, edges are inverted so drops run in reverse dependency order.
76
+ */
77
+ function sortPhaseChanges(phaseChanges, dependencyRows, options = {}) {
78
+ if (phaseChanges.length <= 1)
79
+ return phaseChanges;
80
+ // Step 1: Build graph data structures
81
+ const graphData = buildGraphData(phaseChanges, options);
82
+ // Step 2: Convert all sources to Constraints
83
+ const catalogConstraints = convertCatalogDependenciesToConstraints(dependencyRows, graphData);
84
+ const explicitConstraints = convertExplicitRequirementsToConstraints(phaseChanges, graphData);
85
+ const customConstraintObjects = generateCustomConstraints(phaseChanges);
86
+ const allConstraints = [
87
+ ...catalogConstraints,
88
+ ...explicitConstraints,
89
+ ...customConstraintObjects,
90
+ ];
91
+ // Step 3: Convert constraints to edges and deduplicate immediately
92
+ let edges = dedupeEdges(convertConstraintsToEdges(allConstraints, options));
93
+ // Step 4: Iteratively detect and break cycles
94
+ // Track cycles we've seen to detect when filtering fails to break a cycle.
95
+ // The only way we loop indefinitely is if we encounter a cycle we've already seen,
96
+ // which means filtering didn't break it. Otherwise, we continue until all cycles are broken.
97
+ const seenCycles = new Set();
98
+ /**
99
+ * Normalize a cycle by rotating it to start with the smallest node index.
100
+ * This allows us to compare cycles regardless of where they start.
101
+ */
102
+ function normalizeCycle(cycleNodeIndexes) {
103
+ if (cycleNodeIndexes.length === 0)
104
+ return "";
105
+ const minIndex = Math.min(...cycleNodeIndexes);
106
+ const minIndexPos = cycleNodeIndexes.indexOf(minIndex);
107
+ const rotated = [
108
+ ...cycleNodeIndexes.slice(minIndexPos),
109
+ ...cycleNodeIndexes.slice(0, minIndexPos),
110
+ ];
111
+ return rotated.join(",");
112
+ }
113
+ while (true) {
114
+ // Edge deduplication moved outside loop
115
+ const edgePairs = edgesToPairs(edges);
116
+ // Detect cycles
117
+ const cycleNodeIndexes = findCycle(phaseChanges.length, edgePairs);
118
+ if (!cycleNodeIndexes) {
119
+ // No cycles found, we're done
120
+ break;
121
+ }
122
+ // Normalize cycle to check if we've seen it before
123
+ const cycleSignature = normalizeCycle(cycleNodeIndexes);
124
+ if (seenCycles.has(cycleSignature)) {
125
+ // We've seen this cycle before - filtering didn't break it
126
+ // Get edges involved in the cycle for detailed error message
127
+ const cycleEdges = getEdgesInCycle(cycleNodeIndexes, edges);
128
+ throw new Error(formatCycleError(cycleNodeIndexes, phaseChanges, cycleEdges));
129
+ }
130
+ // Track this cycle
131
+ seenCycles.add(cycleSignature);
132
+ // Filter only edges involved in the cycle to break it
133
+ edges = filterEdgesForCycleBreaking(edges, cycleNodeIndexes, phaseChanges, graphData);
134
+ }
135
+ const finalEdgePairs = edgesToPairs(edges);
136
+ // Debug visualization
137
+ if (debugGraph.enabled) {
138
+ printDebugGraph(phaseChanges, graphData, finalEdgePairs, dependencyRows, allConstraints);
139
+ }
140
+ // Step 5: Perform stable topological sort (no cycles, so this will succeed)
141
+ const topologicalOrder = performStableTopologicalSort(phaseChanges.length, finalEdgePairs);
142
+ if (!topologicalOrder || topologicalOrder.length !== phaseChanges.length) {
143
+ // This should never happen if findCycle returned null, but guard anyway
144
+ throw new Error("CycleError: dependency graph contains a cycle");
145
+ }
146
+ return topologicalOrder.map((changeIndex) => phaseChanges[changeIndex]);
147
+ }
@@ -0,0 +1,20 @@
1
+ import type { Change } from "../change.types.ts";
2
+ import type { Constraint } from "./types.ts";
3
+ /**
4
+ * Stable topological sort. If multiple zero-indegree nodes exist, picks the
5
+ * smallest original index first to preserve input order among unconstrained items.
6
+ * Returns null on cycles.
7
+ */
8
+ export declare function performStableTopologicalSort(nodeCount: number, edges: Array<[number, number]>): number[] | null;
9
+ /**
10
+ * Find one cycle (if any) and return its node indices in order.
11
+ */
12
+ export declare function findCycle(nodeCount: number, edges: Array<[number, number]>): number[] | null;
13
+ /**
14
+ * Format a cycle error message with details about the changes involved and the edges forming the cycle.
15
+ */
16
+ export declare function formatCycleError(cycleNodeIndexes: number[], phaseChanges: Change[], cycleEdges?: Array<{
17
+ sourceIndex: number;
18
+ targetIndex: number;
19
+ constraint: Constraint;
20
+ }>): string;
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Stable topological sort. If multiple zero-indegree nodes exist, picks the
3
+ * smallest original index first to preserve input order among unconstrained items.
4
+ * Returns null on cycles.
5
+ */
6
+ export function performStableTopologicalSort(nodeCount, edges) {
7
+ const adjacencyList = Array.from({ length: nodeCount }, () => new Set());
8
+ const inDegreeCounts = new Array(nodeCount).fill(0);
9
+ for (const [sourceIndex, targetIndex] of edges) {
10
+ if (!adjacencyList[sourceIndex].has(targetIndex)) {
11
+ adjacencyList[sourceIndex].add(targetIndex);
12
+ inDegreeCounts[targetIndex]++;
13
+ }
14
+ }
15
+ const candidateQueue = [];
16
+ for (let nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++) {
17
+ if (inDegreeCounts[nodeIndex] === 0)
18
+ candidateQueue.push(nodeIndex);
19
+ }
20
+ candidateQueue.sort((left, right) => left - right);
21
+ const orderedNodeIndexes = [];
22
+ while (candidateQueue.length > 0) {
23
+ const nodeIndex = candidateQueue.shift();
24
+ orderedNodeIndexes.push(nodeIndex);
25
+ for (const neighborIndex of adjacencyList[nodeIndex]) {
26
+ inDegreeCounts[neighborIndex]--;
27
+ if (inDegreeCounts[neighborIndex] === 0) {
28
+ let inserted = false;
29
+ for (let queuePosition = 0; queuePosition < candidateQueue.length; queuePosition++) {
30
+ if (neighborIndex < candidateQueue[queuePosition]) {
31
+ candidateQueue.splice(queuePosition, 0, neighborIndex);
32
+ inserted = true;
33
+ break;
34
+ }
35
+ }
36
+ if (!inserted)
37
+ candidateQueue.push(neighborIndex);
38
+ }
39
+ }
40
+ }
41
+ if (orderedNodeIndexes.length !== nodeCount)
42
+ return null; // cycle detected
43
+ return orderedNodeIndexes;
44
+ }
45
+ /**
46
+ * Find one cycle (if any) and return its node indices in order.
47
+ */
48
+ export function findCycle(nodeCount, edges) {
49
+ const adjacencyList = Array.from({ length: nodeCount }, () => []);
50
+ for (const [sourceIndex, targetIndex] of edges) {
51
+ adjacencyList[sourceIndex].push(targetIndex);
52
+ }
53
+ // 0 = unvisited, 1 = visiting, 2 = completed
54
+ const visitState = new Array(nodeCount).fill(0);
55
+ const pathStack = [];
56
+ let cycleNodeIndexes = null;
57
+ const depthFirstSearch = (nodeIndex) => {
58
+ if (cycleNodeIndexes)
59
+ return;
60
+ visitState[nodeIndex] = 1;
61
+ pathStack.push(nodeIndex);
62
+ for (const neighborIndex of adjacencyList[nodeIndex]) {
63
+ if (visitState[neighborIndex] === 0) {
64
+ depthFirstSearch(neighborIndex);
65
+ }
66
+ else if (visitState[neighborIndex] === 1) {
67
+ const cycleStartIndex = pathStack.lastIndexOf(neighborIndex);
68
+ if (cycleStartIndex !== -1) {
69
+ cycleNodeIndexes = pathStack.slice(cycleStartIndex);
70
+ }
71
+ return;
72
+ }
73
+ if (cycleNodeIndexes)
74
+ return;
75
+ }
76
+ pathStack.pop();
77
+ visitState[nodeIndex] = 2;
78
+ };
79
+ for (let nodeIndex = 0; nodeIndex < nodeCount && !cycleNodeIndexes; nodeIndex++) {
80
+ if (visitState[nodeIndex] === 0)
81
+ depthFirstSearch(nodeIndex);
82
+ }
83
+ return cycleNodeIndexes;
84
+ }
85
+ /**
86
+ * Format a cycle error message with details about the changes involved and the edges forming the cycle.
87
+ */
88
+ export function formatCycleError(cycleNodeIndexes, phaseChanges, cycleEdges) {
89
+ const cycleChanges = cycleNodeIndexes.map((idx) => phaseChanges[idx]);
90
+ const changeDescriptions = cycleChanges.map((change, i) => {
91
+ const className = change?.constructor?.name ?? "Change";
92
+ const creates = change.creates.slice(0, 2).join(", ");
93
+ return ` ${i + 1}. [${cycleNodeIndexes[i]}] ${className}${creates ? ` (creates: ${creates}${change.creates.length > 2 ? "..." : ""})` : ""}`;
94
+ });
95
+ let message = `CycleError: dependency graph contains a cycle involving ${cycleNodeIndexes.length} changes:\n${changeDescriptions.join("\n")}`;
96
+ // Add cycle path information if edges are provided
97
+ if (cycleEdges && cycleEdges.length > 0) {
98
+ message += `\n\nCycle path (edges forming the cycle):`;
99
+ for (let i = 0; i < cycleNodeIndexes.length; i++) {
100
+ const sourceIndex = cycleNodeIndexes[i];
101
+ const targetIndex = cycleNodeIndexes[(i + 1) % cycleNodeIndexes.length];
102
+ const edge = cycleEdges.find((e) => e.sourceIndex === sourceIndex && e.targetIndex === targetIndex);
103
+ if (edge) {
104
+ const constraint = edge.constraint;
105
+ let edgeInfo = `\n [${sourceIndex}] → [${targetIndex}] (source: ${constraint.source})`;
106
+ if (constraint.source === "catalog" ||
107
+ constraint.source === "explicit") {
108
+ if (constraint.reason.dependentStableId) {
109
+ edgeInfo += `\n Dependency: ${constraint.reason.dependentStableId} → ${constraint.reason.referencedStableId}`;
110
+ }
111
+ else {
112
+ edgeInfo += `\n Requires: ${constraint.reason.referencedStableId}`;
113
+ }
114
+ }
115
+ // Add why it wasn't filtered
116
+ if (constraint.source === "custom") {
117
+ edgeInfo += `\n Reason: Custom constraint (never filtered)`;
118
+ }
119
+ else if (constraint.source === "explicit" &&
120
+ !constraint.reason.dependentStableId) {
121
+ edgeInfo += `\n Reason: Explicit requirement without created IDs (not filtered)`;
122
+ }
123
+ else {
124
+ edgeInfo += `\n Reason: Cycle-breaking filter did not match (edge preserved)`;
125
+ }
126
+ message += edgeInfo;
127
+ }
128
+ else {
129
+ message += `\n [${sourceIndex}] → [${targetIndex}] (edge not found)`;
130
+ }
131
+ }
132
+ }
133
+ message += `\n\nThis usually indicates a circular dependency in the schema changes that cannot be resolved.`;
134
+ if (cycleEdges && cycleEdges.length > 0) {
135
+ message += `\nThe cycle-breaking filters were unable to break this cycle.`;
136
+ }
137
+ return message;
138
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * pg_depend rows that matter for ordering.
3
+ *
4
+ * These represent dependency relationships extracted from PostgreSQL's pg_depend catalog.
5
+ */
6
+ export type PgDependRow = {
7
+ /** Object that depends on `referenced_stable_id`. */
8
+ dependent_stable_id: string;
9
+ /** Object being depended upon. */
10
+ referenced_stable_id: string;
11
+ /**
12
+ * Dependency type as defined in PostgreSQL's pg_depend.deptype.
13
+ *
14
+ * - "n" (normal): Ordinary dependency — if the referenced object is dropped, the dependent object is also dropped automatically.
15
+ * - "a" (auto): Automatically created dependency — the dependent object was created as a result of creating the referenced object,
16
+ * and should be dropped automatically when the referenced object is dropped, but not otherwise treated as a strong link.
17
+ * - "i" (internal): Internal dependency — the dependent object is a low-level part of the referenced object.
18
+ */
19
+ deptype: "n" | "a" | "i";
20
+ };
21
+ /**
22
+ * Constraint representing that one change must come before another.
23
+ *
24
+ * Unified abstraction for all ordering requirements:
25
+ * - Catalog dependencies (from pg_depend) → Constraints
26
+ * - Explicit requirements (from Change.requires) → Constraints
27
+ * - Custom constraints (change-to-change rules) → Constraints
28
+ */
29
+ export type Constraint = CatalogConstraint | ExplicitConstraint | CustomConstraint;
30
+ /**
31
+ * Base constraint properties shared by all constraint types.
32
+ */
33
+ interface BaseConstraint {
34
+ /** Index of the change that must come first */
35
+ sourceChangeIndex: number;
36
+ /** Index of the change that must come after */
37
+ targetChangeIndex: number;
38
+ }
39
+ /**
40
+ * Constraint from catalog dependencies (pg_depend).
41
+ * Always has both dependent and referenced stable IDs.
42
+ */
43
+ interface CatalogConstraint extends BaseConstraint {
44
+ source: "catalog";
45
+ /** The stable ID dependency that led to this constraint */
46
+ reason: {
47
+ /** The stable ID that depends on referencedStableId */
48
+ dependentStableId: string;
49
+ /** The stable ID being depended upon */
50
+ referencedStableId: string;
51
+ };
52
+ }
53
+ /**
54
+ * Constraint from explicit requirements (Change.requires).
55
+ * Always has referencedStableId, but dependentStableId is optional
56
+ * if the change doesn't create anything.
57
+ */
58
+ interface ExplicitConstraint extends BaseConstraint {
59
+ source: "explicit";
60
+ /** The stable ID dependency that led to this constraint */
61
+ reason: {
62
+ /** The stable ID that depends on referencedStableId (undefined if change doesn't create anything) */
63
+ dependentStableId?: string;
64
+ /** The stable ID being depended upon */
65
+ referencedStableId: string;
66
+ };
67
+ }
68
+ /**
69
+ * Constraint from custom constraint functions.
70
+ * No reason field since these are direct change-to-change ordering rules.
71
+ */
72
+ interface CustomConstraint extends BaseConstraint {
73
+ source: "custom";
74
+ /** Optional description for debugging */
75
+ description?: string;
76
+ }
77
+ export interface PhaseSortOptions {
78
+ /** If true, invert edges so drops run in reverse dependency order. */
79
+ invert?: boolean;
80
+ }
81
+ /**
82
+ * Edge with its originating constraint for filtering purposes.
83
+ */
84
+ export interface Edge {
85
+ sourceIndex: number;
86
+ targetIndex: number;
87
+ constraint: Constraint;
88
+ }
89
+ /**
90
+ * Graph data structures for converting dependencies to Constraints.
91
+ */
92
+ export interface GraphData {
93
+ /** Maps each change index to the set of stable IDs it creates. */
94
+ createdStableIdSets: Array<Set<string>>;
95
+ /** Maps each change index to the set of stable IDs it explicitly requires. */
96
+ explicitRequirementSets: Array<Set<string>>;
97
+ /** Maps a stable ID to the set of change indices that create it. */
98
+ changeIndexesByCreatedId: Map<string, Set<number>>;
99
+ /** Maps a stable ID to the set of change indices that explicitly require it. */
100
+ changeIndexesByExplicitRequirementId: Map<string, Set<number>>;
101
+ }
102
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import type { Change } from "../change.types.ts";
2
+ /**
3
+ * Execution phases for changes.
4
+ */
5
+ export type Phase = "drop" | "create_alter_object";
6
+ /**
7
+ * Check if a stable ID represents metadata (ACL, default privileges, comments, etc.)
8
+ * rather than an actual database object.
9
+ *
10
+ * Unified check used by both logical sorting and dependency sorting.
11
+ */
12
+ export declare function isMetadataStableId(stableId: string): boolean;
13
+ /**
14
+ * Determine the execution phase for a change based on its properties.
15
+ *
16
+ * Rules:
17
+ * - DROP operations → drop phase
18
+ * - CREATE operations → create_alter_object phase
19
+ * - ALTER operations with scope="privilege" → create_alter_object phase (metadata changes)
20
+ * - ALTER operations that drop actual objects → drop phase (destructive ALTER)
21
+ * - ALTER operations that don't drop objects → create_alter_object phase (non-destructive ALTER)
22
+ */
23
+ export declare function getExecutionPhase(change: Change): Phase;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Check if a stable ID represents metadata (ACL, default privileges, comments, etc.)
3
+ * rather than an actual database object.
4
+ *
5
+ * Unified check used by both logical sorting and dependency sorting.
6
+ */
7
+ export function isMetadataStableId(stableId) {
8
+ return (stableId.startsWith("acl:") ||
9
+ stableId.startsWith("defacl:") ||
10
+ stableId.startsWith("aclcol:") ||
11
+ stableId.startsWith("membership:") ||
12
+ stableId.startsWith("comment:"));
13
+ }
14
+ /**
15
+ * Determine the execution phase for a change based on its properties.
16
+ *
17
+ * Rules:
18
+ * - DROP operations → drop phase
19
+ * - CREATE operations → create_alter_object phase
20
+ * - ALTER operations with scope="privilege" → create_alter_object phase (metadata changes)
21
+ * - ALTER operations that drop actual objects → drop phase (destructive ALTER)
22
+ * - ALTER operations that don't drop objects → create_alter_object phase (non-destructive ALTER)
23
+ */
24
+ export function getExecutionPhase(change) {
25
+ // DROP operations always go to drop phase
26
+ if (change.operation === "drop") {
27
+ return "drop";
28
+ }
29
+ // CREATE operations always go to create_alter phase
30
+ if (change.operation === "create") {
31
+ return "create_alter_object";
32
+ }
33
+ // For ALTER operations, determine based on what they do
34
+ if (change.operation === "alter") {
35
+ // Privilege changes (metadata) always go to create_alter phase
36
+ if (change.scope === "privilege") {
37
+ return "create_alter_object";
38
+ }
39
+ // Check if this ALTER drops actual objects (not metadata)
40
+ const droppedIds = change.drops ?? [];
41
+ const dropsObjects = droppedIds.some((id) => !isMetadataStableId(id));
42
+ if (dropsObjects) {
43
+ // Destructive ALTER (DROP COLUMN, DROP CONSTRAINT, etc.) → drop phase
44
+ return "drop";
45
+ }
46
+ // Non-destructive ALTER (ADD COLUMN, GRANT, etc.) → create_alter phase
47
+ return "create_alter_object";
48
+ }
49
+ // Safe default
50
+ return "create_alter_object";
51
+ }
@@ -0,0 +1 @@
1
+ export * from "./core/index.ts";
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from "./core/index.js";
package/package.json CHANGED
@@ -1,19 +1,65 @@
1
1
  {
2
2
  "name": "@supabase/pg-delta",
3
- "version": "0.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
3
+ "version": "1.0.0-alpha.0",
4
+ "description": "PostgreSQL migrations made easy",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "exports": "./dist/index.js",
8
+ "bin": {
9
+ "pgdelta": "./dist/cli/bin/cli.js"
7
10
  },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "keywords": [
17
+ "pg",
18
+ "postgres",
19
+ "migrations",
20
+ "diff",
21
+ "pg-delta",
22
+ "pgdelta"
23
+ ],
24
+ "author": "Supabase",
25
+ "license": "MIT",
26
+ "homepage": "https://github.com/supabase/pg-delta",
8
27
  "repository": {
9
28
  "type": "git",
10
- "url": "git+https://github.com/supabase/pg-delta.git"
29
+ "url": "https://github.com/supabase/pg-delta.git"
11
30
  },
12
- "author": "",
13
- "license": "MIT",
14
- "bugs": {
15
- "url": "https://github.com/supabase/pg-delta/issues"
31
+ "bugs": "https://github.com/supabase/pg-delta/issues",
32
+ "engines": {
33
+ "node": ">=20.0.0"
16
34
  },
17
- "homepage": "https://github.com/supabase/pg-delta#readme",
18
- "description": ""
19
- }
35
+ "dependencies": {
36
+ "@stricli/core": "^1.2.4",
37
+ "chalk": "^5.6.2",
38
+ "debug": "^4.3.7",
39
+ "postgres": "^3.4.7",
40
+ "zod": "^4.2.1"
41
+ },
42
+ "devDependencies": {
43
+ "@biomejs/biome": "2.3.10",
44
+ "@changesets/cli": "^2.29.8",
45
+ "@tsconfig/node-ts": "^23.6.2",
46
+ "@tsconfig/node24": "^24.0.3",
47
+ "@types/debug": "^4.1.12",
48
+ "@types/node": "^24.10.4",
49
+ "@vitest/coverage-v8": "4.0.16",
50
+ "dedent": "^1.7.1",
51
+ "knip": "^5.75.2",
52
+ "testcontainers": "^11.10.0",
53
+ "typescript": "^5.9.3",
54
+ "vitest": "^4.0.16"
55
+ },
56
+ "scripts": {
57
+ "build": "tsc --project tsconfig.build.json",
58
+ "check-types": "tsc --noEmit",
59
+ "format-and-lint": "biome check . --error-on-warnings",
60
+ "knip": "knip",
61
+ "pgdelta": "node src/cli/bin/cli.ts",
62
+ "test": "vitest",
63
+ "version": "changeset version && pnpm install --no-frozen-lockfile && pnpm format-and-lint --write"
64
+ }
65
+ }