@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,532 @@
1
+ /**
2
+ * Logical pre-sorting for migration scripts.
3
+ *
4
+ * Groups changes by object type, stable ID, and scope to create a readable,
5
+ * logically organized migration script before dependency resolution.
6
+ *
7
+ * This is a pre-sorting step that runs before the dependency-based topological sort.
8
+ * It groups related changes together while preserving the ability for the dependency
9
+ * resolver to reorder within groups when necessary.
10
+ */
11
+ import { getSchema } from "../integrations/filter/extractors.js";
12
+ import { getExecutionPhase, isMetadataStableId } from "./utils.js";
13
+ /**
14
+ * Object type ordering for logical grouping.
15
+ * Lower numbers come first in the migration script.
16
+ */
17
+ const OBJECT_TYPE_ORDER = {
18
+ // CREATE/ALTER phase order (forward dependency)
19
+ schema: 1,
20
+ extension: 2,
21
+ role: 3,
22
+ language: 4,
23
+ collation: 5,
24
+ domain: 6,
25
+ enum: 7,
26
+ composite_type: 8,
27
+ range: 9,
28
+ sequence: 10,
29
+ procedure: 11,
30
+ aggregate: 12,
31
+ table: 13,
32
+ index: 14, // Grouped with tables/materialized views
33
+ view: 15,
34
+ materialized_view: 16,
35
+ trigger: 17, // Grouped with tables
36
+ rls_policy: 18, // Grouped with tables
37
+ rule: 19, // Grouped with tables/views
38
+ event_trigger: 20,
39
+ publication: 21,
40
+ subscription: 22,
41
+ };
42
+ /**
43
+ * Scope ordering within each stable ID group.
44
+ * Lower numbers come first.
45
+ */
46
+ const SCOPE_ORDER_CREATE_ALTER = {
47
+ default_privilege: 1,
48
+ object: 2,
49
+ comment: 3,
50
+ privilege: 4,
51
+ membership: 5,
52
+ };
53
+ const SCOPE_ORDER_DROP = {
54
+ privilege: 1,
55
+ comment: 2,
56
+ object: 3,
57
+ };
58
+ /**
59
+ * Sub-entity object types that should be grouped by their parent's stable ID.
60
+ */
61
+ const SUB_ENTITY_TYPES = new Set(["index", "trigger", "rls_policy", "rule"]);
62
+ /**
63
+ * Regex for parsing stable IDs.
64
+ */
65
+ const CONSTRAINT_REGEX = /^constraint:([^.]+)\.([^.]+)\./;
66
+ const COLUMN_REGEX = /^column:([^.]+)\.([^.]+)\./;
67
+ /**
68
+ * Find the object stable ID from an array of stable IDs, skipping metadata stable IDs.
69
+ * Iterates through all stable IDs to find the first non-metadata one.
70
+ */
71
+ function findObjectStableId(stableIds) {
72
+ for (const id of stableIds) {
73
+ if (!isMetadataStableId(id)) {
74
+ return id;
75
+ }
76
+ }
77
+ // If all are metadata, return null (shouldn't happen, but safe fallback)
78
+ return stableIds.length > 0 ? stableIds[0] : null;
79
+ }
80
+ /**
81
+ * Extract the main stable ID that a change is touching.
82
+ *
83
+ * For sub-entities (indexes, triggers, constraints, etc.), returns the parent's stable ID.
84
+ * For other changes, returns the primary stable ID being created/dropped/modified.
85
+ */
86
+ function getMainStableId(change) {
87
+ // For sub-entities, extract parent stable ID from requires
88
+ if (SUB_ENTITY_TYPES.has(change.objectType)) {
89
+ return getParentStableId(change);
90
+ }
91
+ // For metadata operations (comment, privilege): use requires to find object stable ID
92
+ // Check these BEFORE CREATE/DROP/ALTER logic to ensure they group with their target objects
93
+ if (change.scope === "comment" || change.scope === "privilege") {
94
+ // For CREATE comments/privileges: check creates first, but extract object stable ID from requires
95
+ if (change.operation === "create" && change.creates.length > 0) {
96
+ const createdId = change.creates[0];
97
+ // If creating a comment/privilege, find the object stable ID from requires
98
+ if (isMetadataStableId(createdId)) {
99
+ const objectId = findObjectStableId(change.requires);
100
+ if (objectId) {
101
+ // Check if commenting on a constraint - extract table from it
102
+ if (objectId.startsWith("constraint:")) {
103
+ const match = objectId.match(CONSTRAINT_REGEX);
104
+ if (match) {
105
+ const [, schema, table] = match;
106
+ return `table:${schema}.${table}`;
107
+ }
108
+ }
109
+ // Check if commenting on a column - extract table from it
110
+ // Format: column:schema.table.column
111
+ if (objectId.startsWith("column:")) {
112
+ const match = objectId.match(COLUMN_REGEX);
113
+ if (match) {
114
+ const [, schema, table] = match;
115
+ return `table:${schema}.${table}`;
116
+ }
117
+ }
118
+ return objectId;
119
+ }
120
+ }
121
+ }
122
+ // For DROP/ALTER comments/privileges: find object stable ID from requires
123
+ if (change.requires.length > 0) {
124
+ const objectId = findObjectStableId(change.requires);
125
+ if (objectId) {
126
+ // Check if commenting on a constraint - extract table from it
127
+ if (objectId.startsWith("constraint:")) {
128
+ const match = objectId.match(CONSTRAINT_REGEX);
129
+ if (match) {
130
+ const [, schema, table] = match;
131
+ return `table:${schema}.${table}`;
132
+ }
133
+ }
134
+ // Check if commenting on a column - extract table from it
135
+ // Format: column:schema.table.column
136
+ if (objectId.startsWith("column:")) {
137
+ const match = objectId.match(COLUMN_REGEX);
138
+ if (match) {
139
+ const [, schema, table] = match;
140
+ return `table:${schema}.${table}`;
141
+ }
142
+ }
143
+ return objectId;
144
+ }
145
+ }
146
+ return null;
147
+ }
148
+ // For CREATE operations: check if creating a constraint (sub-entity of table)
149
+ if (change.operation === "create" && change.creates.length > 0) {
150
+ // Iterate through creates to find the first non-metadata stable ID
151
+ const createdId = findObjectStableId(change.creates);
152
+ if (createdId) {
153
+ if (createdId.startsWith("constraint:")) {
154
+ // Extract table stable ID from constraint stable ID
155
+ // Format: constraint:schema.table.constraint_name
156
+ const match = createdId.match(CONSTRAINT_REGEX);
157
+ if (match) {
158
+ const [, schema, table] = match;
159
+ return `table:${schema}.${table}`;
160
+ }
161
+ }
162
+ return createdId;
163
+ }
164
+ // Fallback: if all creates are metadata (shouldn't happen for non-comment scopes), use first
165
+ return change.creates[0] ?? null;
166
+ }
167
+ // For DROP operations: check if dropping a constraint (sub-entity of table)
168
+ if (change.operation === "drop" && change.drops.length > 0) {
169
+ // Iterate through drops to find the first non-metadata stable ID
170
+ const droppedId = findObjectStableId(change.drops);
171
+ if (droppedId) {
172
+ if (droppedId.startsWith("constraint:")) {
173
+ // Extract table stable ID from constraint stable ID
174
+ const match = droppedId.match(CONSTRAINT_REGEX);
175
+ if (match) {
176
+ const [, schema, table] = match;
177
+ return `table:${schema}.${table}`;
178
+ }
179
+ }
180
+ return droppedId;
181
+ }
182
+ // Fallback: if all drops are metadata, use first
183
+ return change.drops[0] ?? null;
184
+ }
185
+ // For default_privilege operations: group by role + schema combination
186
+ // This groups all "FOR ROLE X IN SCHEMA Y" statements together
187
+ if (change.scope === "default_privilege") {
188
+ if (change.requires.length > 0) {
189
+ // Iterate through requires to find role and schema
190
+ let grantingRole = null;
191
+ let schemaId = null;
192
+ for (const id of change.requires) {
193
+ if (id.startsWith("role:")) {
194
+ grantingRole = id;
195
+ }
196
+ else if (id.startsWith("schema:")) {
197
+ schemaId = id;
198
+ }
199
+ }
200
+ if (schemaId && grantingRole) {
201
+ // Create composite key: "role:postgres:schema:public"
202
+ return `${grantingRole}:${schemaId}`;
203
+ }
204
+ // If no schema, just group by role
205
+ return grantingRole ?? null;
206
+ }
207
+ }
208
+ // For ALTER operations: check if creating/dropping a constraint
209
+ // Skip this for privilege/comment/default_privilege scopes (handled above)
210
+ if (change.operation === "alter") {
211
+ // Check creates first (ADD CONSTRAINT, ADD COLUMN, etc.)
212
+ if (change.creates.length > 0) {
213
+ const createdId = findObjectStableId(change.creates);
214
+ if (createdId) {
215
+ if (createdId.startsWith("constraint:")) {
216
+ const match = createdId.match(CONSTRAINT_REGEX);
217
+ if (match) {
218
+ const [, schema, table] = match;
219
+ return `table:${schema}.${table}`;
220
+ }
221
+ }
222
+ // Extract table stable ID from column stable IDs (for ALTER TABLE ADD COLUMN)
223
+ // Format: column:schema.table.column
224
+ if (createdId.startsWith("column:")) {
225
+ const match = createdId.match(COLUMN_REGEX);
226
+ if (match) {
227
+ const [, schema, table] = match;
228
+ return `table:${schema}.${table}`;
229
+ }
230
+ }
231
+ return createdId;
232
+ }
233
+ // Fallback: if all creates are metadata, use first
234
+ return change.creates[0] ?? null;
235
+ }
236
+ // Check drops (DROP CONSTRAINT)
237
+ if (change.drops && change.drops.length > 0) {
238
+ const droppedId = findObjectStableId(change.drops);
239
+ if (droppedId) {
240
+ if (droppedId.startsWith("constraint:")) {
241
+ const match = droppedId.match(CONSTRAINT_REGEX);
242
+ if (match) {
243
+ const [, schema, table] = match;
244
+ return `table:${schema}.${table}`;
245
+ }
246
+ }
247
+ return droppedId;
248
+ }
249
+ // Fallback: if all drops are metadata, use first
250
+ return change.drops[0] ?? null;
251
+ }
252
+ // Otherwise use requires (VALIDATE CONSTRAINT, etc.)
253
+ if (change.requires.length > 0) {
254
+ const requiredId = findObjectStableId(change.requires);
255
+ if (requiredId) {
256
+ // Check if requiring a constraint - extract table from it
257
+ if (requiredId.startsWith("constraint:")) {
258
+ const match = requiredId.match(CONSTRAINT_REGEX);
259
+ if (match) {
260
+ const [, schema, table] = match;
261
+ return `table:${schema}.${table}`;
262
+ }
263
+ }
264
+ return requiredId;
265
+ }
266
+ // Fallback: if all requires are metadata, use first
267
+ return change.requires[0] ?? null;
268
+ }
269
+ }
270
+ // Fallback: try requires if available
271
+ if (change.requires.length > 0) {
272
+ return findObjectStableId(change.requires) ?? null;
273
+ }
274
+ return null;
275
+ }
276
+ /**
277
+ * Extract parent stable ID for sub-entities (indexes, triggers, RLS policies, rules).
278
+ *
279
+ * Looks for table/view/materialized view stable IDs in the change's requirements.
280
+ */
281
+ function getParentStableId(change) {
282
+ const requires = change.requires;
283
+ // Look for table, view, or materialized view stable IDs
284
+ for (const stableId of requires) {
285
+ if (stableId.startsWith("table:") ||
286
+ stableId.startsWith("view:") ||
287
+ stableId.startsWith("materializedView:")) {
288
+ return stableId;
289
+ }
290
+ }
291
+ // Fallback: return first requires if available
292
+ return requires.length > 0 ? requires[0] : null;
293
+ }
294
+ /**
295
+ * Extract schema name from a change.
296
+ * Returns the schema name if present, or null for non-schema objects.
297
+ *
298
+ * Uses the getSchema helper which directly accesses schema properties from change objects.
299
+ * For default_privilege changes, accesses the inSchema property directly.
300
+ * For event_trigger changes, groups by their function's schema.
301
+ */
302
+ function extractSchemaFromChange(change) {
303
+ // Handle default_privilege changes specially (they have inSchema property)
304
+ if (change.scope === "default_privilege") {
305
+ // TypeScript doesn't know about inSchema, but we know it exists for default_privilege changes
306
+ return change.inSchema ?? null;
307
+ }
308
+ // Handle event_trigger changes specially - group by their function's schema
309
+ if (change.objectType === "event_trigger") {
310
+ return change.eventTrigger.function_schema;
311
+ }
312
+ // Use the getSchema helper for all other changes
313
+ return getSchema(change);
314
+ }
315
+ /**
316
+ * Get the effective object type for sorting purposes.
317
+ * For sub-entities, returns the parent's object type (table/view/materialized_view).
318
+ * For other objects, returns the object type as-is.
319
+ */
320
+ function getEffectiveObjectType(change) {
321
+ // For sub-entities, determine parent type from stable ID
322
+ if (SUB_ENTITY_TYPES.has(change.objectType)) {
323
+ const parentStableId = getParentStableId(change);
324
+ if (parentStableId) {
325
+ if (parentStableId.startsWith("table:")) {
326
+ return "table";
327
+ }
328
+ if (parentStableId.startsWith("view:")) {
329
+ return "view";
330
+ }
331
+ if (parentStableId.startsWith("materializedView:")) {
332
+ return "materialized_view";
333
+ }
334
+ }
335
+ }
336
+ return change.objectType;
337
+ }
338
+ /**
339
+ * Get the object type order for sorting.
340
+ * Returns a high number for unknown types to sort them last.
341
+ */
342
+ function getObjectTypeOrder(objectType) {
343
+ return OBJECT_TYPE_ORDER[objectType] ?? 999;
344
+ }
345
+ /**
346
+ * Get the scope order for sorting within a stable ID group.
347
+ */
348
+ function getScopeOrder(scope, phase) {
349
+ const orderMap = phase === "drop" ? SCOPE_ORDER_DROP : SCOPE_ORDER_CREATE_ALTER;
350
+ return orderMap[scope] ?? 999;
351
+ }
352
+ /**
353
+ * Logically pre-sort changes by grouping them into a readable structure.
354
+ *
355
+ * Groups changes by:
356
+ * 1. Phase (DROP vs CREATE/ALTER)
357
+ * 2. Object type (schema, table, index, etc.)
358
+ * 3. Main stable ID (table:public.users, etc.)
359
+ * 4. Scope (object, comment, privilege, etc.)
360
+ *
361
+ * Within each group, preserves the original order (stability).
362
+ *
363
+ * @param changes - Array of changes to sort
364
+ * @returns Logically grouped and sorted array of changes
365
+ */
366
+ export function logicalSort(changes) {
367
+ if (changes.length === 0) {
368
+ return changes;
369
+ }
370
+ // Step 1: Partition by phase
371
+ const changesByPhase = {
372
+ drop: [],
373
+ create_alter_object: [],
374
+ };
375
+ for (const change of changes) {
376
+ const phase = getExecutionPhase(change);
377
+ changesByPhase[phase].push(change);
378
+ }
379
+ // Step 2: Sort each phase
380
+ const sortedDrop = sortPhase(changesByPhase.drop, "drop");
381
+ const sortedCreateAlter = sortPhase(changesByPhase.create_alter_object, "create_alter_object");
382
+ // Step 3: Combine phases (DROP first, then CREATE/ALTER)
383
+ return [...sortedDrop, ...sortedCreateAlter];
384
+ }
385
+ /**
386
+ * Sort changes within a phase by object type, stable ID, and scope.
387
+ */
388
+ function sortPhase(changes, phase) {
389
+ if (changes.length === 0) {
390
+ return changes;
391
+ }
392
+ // Create a map to preserve original indices for stability
393
+ const changesWithIndices = changes.map((change, index) => ({
394
+ change,
395
+ originalIndex: index,
396
+ }));
397
+ // Sort by: schema → effective object type (only when schemas differ) → stable ID → actual object type → scope → original index
398
+ // Schema groups all objects within the same schema together
399
+ // Effective object type ensures schemas come before tables when comparing across schemas
400
+ // Stable ID groups sub-entities with their parents
401
+ // Actual object type orders sub-entities within their parent group
402
+ changesWithIndices.sort((a, b) => {
403
+ const changeA = a.change;
404
+ const changeB = b.change;
405
+ // 1. Compare schemas (group objects by schema)
406
+ const schemaA = extractSchemaFromChange(changeA);
407
+ const schemaB = extractSchemaFromChange(changeB);
408
+ // Non-schema objects (roles, languages, extensions, etc.) sort first
409
+ // Use a special prefix to ensure they come before schema objects
410
+ const schemaKeyA = schemaA === null ? "::" : schemaA;
411
+ const schemaKeyB = schemaB === null ? "::" : schemaB;
412
+ const schemaCompare = schemaKeyA.localeCompare(schemaKeyB);
413
+ if (schemaCompare !== 0) {
414
+ return schemaCompare;
415
+ }
416
+ // 2. Compare effective object types (parent type for sub-entities)
417
+ // Only apply this ordering when schemas differ (for cross-schema ordering)
418
+ // Within the same schema, we want all objects grouped together
419
+ const effectiveTypeA = getEffectiveObjectType(changeA);
420
+ const effectiveTypeB = getEffectiveObjectType(changeB);
421
+ const effectiveTypeOrderA = getObjectTypeOrder(effectiveTypeA);
422
+ const effectiveTypeOrderB = getObjectTypeOrder(effectiveTypeB);
423
+ if (effectiveTypeOrderA !== effectiveTypeOrderB) {
424
+ return effectiveTypeOrderA - effectiveTypeOrderB;
425
+ }
426
+ // 3. Compare main stable IDs (groups sub-entities with parents)
427
+ const stableIdA = getMainStableId(changeA);
428
+ const stableIdB = getMainStableId(changeB);
429
+ const stableIdCompare = (stableIdA ?? "").localeCompare(stableIdB ?? "");
430
+ if (stableIdCompare !== 0) {
431
+ return stableIdCompare;
432
+ }
433
+ // 4. Compare actual object types (orders sub-entities within parent group)
434
+ const typeOrderA = getObjectTypeOrder(changeA.objectType);
435
+ const typeOrderB = getObjectTypeOrder(changeB.objectType);
436
+ if (typeOrderA !== typeOrderB) {
437
+ return typeOrderA - typeOrderB;
438
+ }
439
+ // 5. Compare scopes (within same stable ID and object type)
440
+ // Special handling: comments should come after CREATE object but before ALTER object
441
+ const scopeA = changeA.scope;
442
+ const scopeB = changeB.scope;
443
+ const operationA = changeA.operation;
444
+ const operationB = changeB.operation;
445
+ // Special case: if one is "object" scope and one is "comment" scope
446
+ if (scopeA === "object" && scopeB === "comment") {
447
+ // Comment comes after CREATE object, but before ALTER object
448
+ if (operationA === "create") {
449
+ return -1; // CREATE object comes before comment (A < B)
450
+ }
451
+ else if (operationA === "alter") {
452
+ return 1; // ALTER object comes after comment (A > B)
453
+ }
454
+ }
455
+ else if (scopeA === "comment" && scopeB === "object") {
456
+ // Comment comes after CREATE object, but before ALTER object
457
+ if (operationB === "create") {
458
+ return 1; // CREATE object comes before comment (B < A, so A > B)
459
+ }
460
+ else if (operationB === "alter") {
461
+ return -1; // ALTER object comes after comment (B > A, so A < B)
462
+ }
463
+ }
464
+ // Special case: if one is ALTER TABLE ADD COLUMN and one is a column comment for that column
465
+ // Column comment should come right after ADD COLUMN
466
+ if (scopeA === "object" &&
467
+ operationA === "alter" &&
468
+ changeA.creates.length > 0 &&
469
+ changeA.creates[0]?.startsWith("column:")) {
470
+ // This is ALTER TABLE ADD COLUMN
471
+ const addedColumnId = changeA.creates[0];
472
+ if (scopeB === "comment" && changeB.requires.length > 0) {
473
+ const commentColumnId = changeB.requires[0];
474
+ if (commentColumnId === addedColumnId) {
475
+ return -1; // ADD COLUMN comes before its column comment
476
+ }
477
+ }
478
+ }
479
+ if (scopeB === "object" &&
480
+ operationB === "alter" &&
481
+ changeB.creates.length > 0 &&
482
+ changeB.creates[0]?.startsWith("column:")) {
483
+ // This is ALTER TABLE ADD COLUMN
484
+ const addedColumnId = changeB.creates[0];
485
+ if (scopeA === "comment" && changeA.requires.length > 0) {
486
+ const commentColumnId = changeA.requires[0];
487
+ if (commentColumnId === addedColumnId) {
488
+ return 1; // Column comment comes after ADD COLUMN
489
+ }
490
+ }
491
+ }
492
+ // Special case: if both are comments, ensure table comments come before column comments
493
+ if (scopeA === "comment" && scopeB === "comment") {
494
+ // Check if one is a table comment and one is a column comment
495
+ const requiresA = changeA.requires.length > 0 ? changeA.requires[0] : null;
496
+ const requiresB = changeB.requires.length > 0 ? changeB.requires[0] : null;
497
+ // Table comments require table stable ID, column comments require column stable ID
498
+ const isTableCommentA = requiresA?.startsWith("table:");
499
+ const isTableCommentB = requiresB?.startsWith("table:");
500
+ const isColumnCommentA = requiresA?.startsWith("column:");
501
+ const isColumnCommentB = requiresB?.startsWith("column:");
502
+ // Table comments come before column comments
503
+ if (isTableCommentA && isColumnCommentB) {
504
+ return -1; // Table comment comes before column comment
505
+ }
506
+ if (isColumnCommentA && isTableCommentB) {
507
+ return 1; // Column comment comes after table comment
508
+ }
509
+ }
510
+ // Default scope comparison
511
+ const scopeOrderA = getScopeOrder(scopeA, phase);
512
+ const scopeOrderB = getScopeOrder(scopeB, phase);
513
+ if (scopeOrderA !== scopeOrderB) {
514
+ return scopeOrderA - scopeOrderB;
515
+ }
516
+ // 6. Compare operations (CREATE before ALTER within same stable ID, scope, and object type)
517
+ // This ensures CREATE ROLE comes before ALTER ROLE, CREATE SCHEMA before GRANT, etc.
518
+ const operationOrder = {
519
+ create: 1,
520
+ alter: 2,
521
+ drop: 3,
522
+ };
523
+ const operationOrderA = operationOrder[operationA] ?? 999;
524
+ const operationOrderB = operationOrder[operationB] ?? 999;
525
+ if (operationOrderA !== operationOrderB) {
526
+ return operationOrderA - operationOrderB;
527
+ }
528
+ // 7. Preserve original order (stability)
529
+ return a.originalIndex - b.originalIndex;
530
+ });
531
+ return changesWithIndices.map((item) => item.change);
532
+ }
@@ -0,0 +1,28 @@
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 type { Catalog } from "../catalog.model.ts";
14
+ import type { Change } from "../change.types.ts";
15
+ /**
16
+ * Sort changes using dependency information from catalogs and custom constraints.
17
+ *
18
+ * First applies logical pre-sorting to group related changes together,
19
+ * then applies dependency-based topological sorting to ensure correct execution order.
20
+ *
21
+ * @param catalogs - Main and branch catalogs containing dependency information
22
+ * @param changes - List of Change objects to order
23
+ * @returns Ordered list of Change objects
24
+ */
25
+ export declare function sortChanges(catalogs: {
26
+ mainCatalog: Catalog;
27
+ branchCatalog: Catalog;
28
+ }, changes: Change[]): Change[];