@supabase/pg-delta 1.0.0-alpha.3 → 1.0.0-alpha.5

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 (633) hide show
  1. package/README.md +41 -2
  2. package/dist/cli/app.js +26 -3
  3. package/dist/cli/bin/cli.js +5 -0
  4. package/dist/cli/commands/catalog-export.d.ts +5 -0
  5. package/dist/cli/commands/catalog-export.js +64 -0
  6. package/dist/cli/commands/declarative-apply.d.ts +6 -0
  7. package/dist/cli/commands/declarative-apply.js +288 -0
  8. package/dist/cli/commands/declarative-export.d.ts +5 -0
  9. package/dist/cli/commands/declarative-export.js +245 -0
  10. package/dist/cli/commands/plan.js +40 -6
  11. package/dist/cli/exit-code.d.ts +2 -0
  12. package/dist/cli/exit-code.js +7 -0
  13. package/dist/cli/formatters/tree/tree.js +3 -2
  14. package/dist/cli/utils/apply-display.d.ts +52 -0
  15. package/dist/cli/utils/apply-display.js +183 -0
  16. package/dist/cli/utils/export-display.d.ts +43 -0
  17. package/dist/cli/utils/export-display.js +202 -0
  18. package/dist/cli/utils/resolve-input.d.ts +7 -0
  19. package/dist/cli/utils/resolve-input.js +13 -0
  20. package/dist/cli/utils.d.ts +2 -0
  21. package/dist/cli/utils.js +1 -1
  22. package/dist/core/catalog-export/index.d.ts +11 -0
  23. package/dist/core/catalog-export/index.js +10 -0
  24. package/dist/core/catalog.diff.d.ts +1 -0
  25. package/dist/core/catalog.diff.js +64 -48
  26. package/dist/core/catalog.model.d.ts +14 -1
  27. package/dist/core/catalog.model.js +103 -1
  28. package/dist/core/catalog.snapshot.d.ts +66 -0
  29. package/dist/core/catalog.snapshot.js +206 -0
  30. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  31. package/dist/core/declarative-apply/discover-sql.js +86 -0
  32. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  33. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  34. package/dist/core/declarative-apply/index.d.ts +49 -0
  35. package/dist/core/declarative-apply/index.js +134 -0
  36. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  37. package/dist/core/declarative-apply/round-apply.js +378 -0
  38. package/dist/core/export/file-mapper.d.ts +71 -0
  39. package/dist/core/export/file-mapper.js +474 -0
  40. package/dist/core/export/grouper.d.ts +13 -0
  41. package/dist/core/export/grouper.js +76 -0
  42. package/dist/core/export/index.d.ts +45 -0
  43. package/dist/core/export/index.js +63 -0
  44. package/dist/core/export/types.d.ts +84 -0
  45. package/dist/core/export/types.js +25 -0
  46. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  47. package/dist/core/integrations/filter/dsl.d.ts +38 -1
  48. package/dist/core/integrations/filter/dsl.js +20 -2
  49. package/dist/core/integrations/filter/extractors.js +42 -0
  50. package/dist/core/integrations/integration-dsl.d.ts +10 -0
  51. package/dist/core/integrations/supabase.d.ts +8 -0
  52. package/dist/core/integrations/supabase.js +9 -0
  53. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  54. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  55. package/dist/core/objects/aggregate/aggregate.model.d.ts +8 -8
  56. package/dist/core/objects/aggregate/aggregate.model.js +1 -1
  57. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  58. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  59. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  60. package/dist/core/objects/base.privilege-diff.js +104 -22
  61. package/dist/core/objects/base.privilege.d.ts +1 -0
  62. package/dist/core/objects/base.privilege.js +9 -2
  63. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  64. package/dist/core/objects/diff-context.d.ts +15 -0
  65. package/dist/core/objects/diff-context.js +1 -0
  66. package/dist/core/objects/domain/changes/domain.create.js +4 -2
  67. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  68. package/dist/core/objects/domain/domain.diff.js +16 -77
  69. package/dist/core/objects/domain/domain.model.js +1 -1
  70. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  71. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  72. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  73. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +2 -2
  74. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  75. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  76. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +1 -1
  77. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  78. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  79. package/dist/core/objects/language/language.diff.d.ts +2 -5
  80. package/dist/core/objects/language/language.diff.js +7 -39
  81. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  82. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  83. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +3 -3
  84. package/dist/core/objects/materialized-view/materialized-view.model.js +1 -1
  85. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  86. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  87. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  88. package/dist/core/objects/procedure/procedure.model.d.ts +9 -9
  89. package/dist/core/objects/procedure/procedure.model.js +1 -1
  90. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  91. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  92. package/dist/core/objects/publication/changes/publication.types.d.ts +2 -2
  93. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  94. package/dist/core/objects/publication/publication.diff.js +8 -13
  95. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  96. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +2 -2
  97. package/dist/core/objects/role/role.diff.js +22 -1
  98. package/dist/core/objects/role/role.model.d.ts +4 -3
  99. package/dist/core/objects/role/role.model.js +118 -12
  100. package/dist/core/objects/rule/rule.model.d.ts +1 -1
  101. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  102. package/dist/core/objects/schema/schema.diff.js +16 -77
  103. package/dist/core/objects/schema/schema.model.js +1 -1
  104. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  105. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  106. package/dist/core/objects/sequence/sequence.model.js +1 -1
  107. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  108. package/dist/core/objects/table/changes/table.create.js +3 -0
  109. package/dist/core/objects/table/table.diff.d.ts +2 -8
  110. package/dist/core/objects/table/table.diff.js +26 -157
  111. package/dist/core/objects/table/table.model.d.ts +25 -22
  112. package/dist/core/objects/table/table.model.js +4 -1
  113. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  114. package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
  115. package/dist/core/objects/trigger/trigger.model.d.ts +9 -0
  116. package/dist/core/objects/trigger/trigger.model.js +14 -0
  117. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  118. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  119. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +3 -3
  120. package/dist/core/objects/type/composite-type/composite-type.model.js +2 -1
  121. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  122. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  123. package/dist/core/objects/type/enum/enum.model.js +1 -1
  124. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  125. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  126. package/dist/core/objects/type/range/range.diff.js +16 -77
  127. package/dist/core/objects/type/range/range.model.js +1 -1
  128. package/dist/core/objects/view/view.diff.d.ts +2 -8
  129. package/dist/core/objects/view/view.diff.js +16 -158
  130. package/dist/core/objects/view/view.model.d.ts +18 -4
  131. package/dist/core/objects/view/view.model.js +3 -13
  132. package/dist/core/plan/apply.js +11 -28
  133. package/dist/core/plan/create.d.ts +19 -6
  134. package/dist/core/plan/create.js +134 -155
  135. package/dist/core/plan/serialize.js +16 -4
  136. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  137. package/dist/core/plan/sql-format/constants.js +11 -0
  138. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  139. package/dist/core/plan/sql-format/fixtures.js +2447 -0
  140. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  141. package/dist/core/plan/sql-format/format-utils.js +274 -0
  142. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  143. package/dist/core/plan/sql-format/formatters.js +737 -0
  144. package/dist/core/plan/sql-format/index.d.ts +2 -0
  145. package/dist/core/plan/sql-format/index.js +98 -0
  146. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  147. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  148. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  149. package/dist/core/plan/sql-format/protect.js +269 -0
  150. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  151. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  152. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  153. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  154. package/dist/core/plan/sql-format/types.d.ts +28 -0
  155. package/dist/core/plan/sql-format/types.js +1 -0
  156. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  157. package/dist/core/plan/sql-format/wrap.js +165 -0
  158. package/dist/core/plan/sql-format.d.ts +2 -0
  159. package/dist/core/plan/sql-format.js +1 -0
  160. package/dist/core/plan/ssl-config.d.ts +32 -0
  161. package/dist/core/plan/ssl-config.js +115 -0
  162. package/dist/core/plan/statements.d.ts +2 -1
  163. package/dist/core/plan/statements.js +6 -2
  164. package/dist/core/plan/types.d.ts +6 -0
  165. package/dist/core/postgres-config.d.ts +29 -0
  166. package/dist/core/postgres-config.js +83 -2
  167. package/dist/core/sort/graph-builder.js +10 -0
  168. package/dist/core/sort/logical-sort.js +31 -23
  169. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  170. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  171. package/dist/index.d.ts +8 -0
  172. package/dist/index.js +7 -1
  173. package/package.json +54 -22
  174. package/src/cli/app.ts +52 -0
  175. package/src/cli/bin/cli.ts +15 -0
  176. package/src/cli/commands/apply.ts +101 -0
  177. package/src/cli/commands/catalog-export.ts +78 -0
  178. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  179. package/src/cli/commands/declarative-apply.ts +380 -0
  180. package/src/cli/commands/declarative-export.ts +330 -0
  181. package/src/cli/commands/plan.ts +216 -0
  182. package/src/cli/commands/sync.ts +185 -0
  183. package/src/cli/exit-code.test.ts +19 -0
  184. package/src/cli/exit-code.ts +7 -0
  185. package/src/cli/formatters/index.ts +5 -0
  186. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  187. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  188. package/src/cli/formatters/tree/tree.ts +238 -0
  189. package/src/cli/utils/apply-display.test.ts +348 -0
  190. package/src/cli/utils/apply-display.ts +238 -0
  191. package/src/cli/utils/export-display.test.ts +103 -0
  192. package/src/cli/utils/export-display.ts +275 -0
  193. package/src/cli/utils/integrations.test.ts +44 -0
  194. package/src/cli/utils/integrations.ts +42 -0
  195. package/src/cli/utils/resolve-input.test.ts +38 -0
  196. package/src/cli/utils/resolve-input.ts +17 -0
  197. package/src/cli/utils.ts +231 -0
  198. package/src/core/catalog-export/index.ts +20 -0
  199. package/src/core/catalog.diff.ts +247 -0
  200. package/src/core/catalog.model.test.ts +122 -0
  201. package/src/core/catalog.model.ts +510 -0
  202. package/src/core/catalog.snapshot.test.ts +464 -0
  203. package/src/core/catalog.snapshot.ts +289 -0
  204. package/src/core/change.types.ts +44 -0
  205. package/src/core/context.ts +26 -0
  206. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  207. package/src/core/declarative-apply/discover-sql.ts +107 -0
  208. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  209. package/src/core/declarative-apply/index.test.ts +67 -0
  210. package/src/core/declarative-apply/index.ts +205 -0
  211. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  212. package/src/core/declarative-apply/round-apply.ts +562 -0
  213. package/src/core/depend.ts +1870 -0
  214. package/src/core/expand-replace-dependencies.test.ts +70 -0
  215. package/src/core/expand-replace-dependencies.ts +380 -0
  216. package/src/core/export/file-mapper.test.ts +816 -0
  217. package/src/core/export/file-mapper.ts +574 -0
  218. package/src/core/export/grouper.ts +108 -0
  219. package/src/core/export/index.ts +129 -0
  220. package/src/core/export/types.ts +104 -0
  221. package/src/core/fingerprint.ts +204 -0
  222. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  223. package/src/core/integrations/filter/dsl.test.ts +211 -0
  224. package/src/core/integrations/filter/dsl.ts +266 -0
  225. package/src/core/integrations/filter/extractors.test.ts +244 -0
  226. package/src/core/integrations/filter/extractors.ts +187 -0
  227. package/src/core/integrations/filter/filter.types.ts +3 -0
  228. package/src/core/integrations/integration-dsl.ts +34 -0
  229. package/src/core/integrations/integration.types.ts +7 -0
  230. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  231. package/src/core/integrations/serialize/dsl.ts +77 -0
  232. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  233. package/src/core/integrations/supabase.ts +130 -0
  234. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  235. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  236. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  237. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  238. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  239. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  240. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  241. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  242. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  243. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  244. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  245. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  246. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  247. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  248. package/src/core/objects/aggregate/changes/aggregate.types.ts +12 -0
  249. package/src/core/objects/base.change.ts +62 -0
  250. package/src/core/objects/base.default-privileges.ts +204 -0
  251. package/src/core/objects/base.diff.ts +20 -0
  252. package/src/core/objects/base.model.ts +82 -0
  253. package/src/core/objects/base.privilege-diff.ts +447 -0
  254. package/src/core/objects/base.privilege.ts +191 -0
  255. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  256. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  257. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  258. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  259. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  260. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  261. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  262. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  263. package/src/core/objects/collation/changes/collation.types.ts +10 -0
  264. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  265. package/src/core/objects/collation/collation.diff.ts +127 -0
  266. package/src/core/objects/collation/collation.model.ts +224 -0
  267. package/src/core/objects/diff-context.ts +16 -0
  268. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  269. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  270. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  271. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  272. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  273. package/src/core/objects/domain/changes/domain.create.ts +124 -0
  274. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  275. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  276. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  277. package/src/core/objects/domain/changes/domain.types.ts +12 -0
  278. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  279. package/src/core/objects/domain/domain.diff.ts +295 -0
  280. package/src/core/objects/domain/domain.model.ts +190 -0
  281. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  282. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  283. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  284. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  285. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  286. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  287. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  288. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  289. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +10 -0
  290. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  291. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  292. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  293. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  294. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  295. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  296. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  297. package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
  298. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  299. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  300. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  301. package/src/core/objects/extension/changes/extension.types.ts +10 -0
  302. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  303. package/src/core/objects/extension/extension.diff.ts +90 -0
  304. package/src/core/objects/extension/extension.model.test.ts +98 -0
  305. package/src/core/objects/extension/extension.model.ts +280 -0
  306. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  307. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  308. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  309. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  310. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  311. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  312. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  313. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  314. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  315. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +12 -0
  316. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  317. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  318. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  319. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +10 -0
  320. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  321. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  322. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  323. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  324. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  325. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  326. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  327. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  328. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  329. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +12 -0
  330. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  331. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  332. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  333. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  334. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  335. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  336. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  337. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  338. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  339. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  340. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  341. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  342. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +12 -0
  343. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  344. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  345. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  346. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  347. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  348. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  349. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  350. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  351. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  352. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  353. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +8 -0
  354. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  355. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  356. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  357. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  358. package/src/core/objects/index/changes/index.alter.ts +144 -0
  359. package/src/core/objects/index/changes/index.base.ts +20 -0
  360. package/src/core/objects/index/changes/index.comment.ts +63 -0
  361. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  362. package/src/core/objects/index/changes/index.create.ts +68 -0
  363. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  364. package/src/core/objects/index/changes/index.drop.ts +34 -0
  365. package/src/core/objects/index/changes/index.types.ts +6 -0
  366. package/src/core/objects/index/changes/utils.ts +16 -0
  367. package/src/core/objects/index/index.diff.test.ts +153 -0
  368. package/src/core/objects/index/index.diff.ts +243 -0
  369. package/src/core/objects/index/index.model.ts +370 -0
  370. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  371. package/src/core/objects/language/changes/language.alter.ts +53 -0
  372. package/src/core/objects/language/changes/language.base.ts +20 -0
  373. package/src/core/objects/language/changes/language.comment.ts +58 -0
  374. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  375. package/src/core/objects/language/changes/language.create.ts +104 -0
  376. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  377. package/src/core/objects/language/changes/language.drop.ts +39 -0
  378. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  379. package/src/core/objects/language/changes/language.types.ts +12 -0
  380. package/src/core/objects/language/language.diff.test.ts +135 -0
  381. package/src/core/objects/language/language.diff.ts +144 -0
  382. package/src/core/objects/language/language.model.ts +150 -0
  383. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  384. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  385. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  386. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  387. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  388. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  389. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  390. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  391. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  392. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +12 -0
  393. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  394. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  395. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  396. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  397. package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
  398. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  399. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  400. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  401. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  402. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  403. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  404. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  405. package/src/core/objects/procedure/changes/procedure.types.ts +12 -0
  406. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  407. package/src/core/objects/procedure/procedure.diff.ts +341 -0
  408. package/src/core/objects/procedure/procedure.model.ts +264 -0
  409. package/src/core/objects/procedure/utils.ts +58 -0
  410. package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
  411. package/src/core/objects/publication/changes/publication.alter.ts +225 -0
  412. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  413. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  414. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  415. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  416. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  417. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  418. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  419. package/src/core/objects/publication/changes/publication.types.ts +24 -0
  420. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  421. package/src/core/objects/publication/publication.diff.ts +247 -0
  422. package/src/core/objects/publication/publication.model.ts +206 -0
  423. package/src/core/objects/publication/utils.ts +55 -0
  424. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
  425. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  426. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  427. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  428. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
  429. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  430. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
  431. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  432. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +10 -0
  433. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  434. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  435. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  436. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  437. package/src/core/objects/role/changes/role.alter.ts +110 -0
  438. package/src/core/objects/role/changes/role.base.ts +24 -0
  439. package/src/core/objects/role/changes/role.comment.ts +55 -0
  440. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  441. package/src/core/objects/role/changes/role.create.ts +102 -0
  442. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  443. package/src/core/objects/role/changes/role.drop.ts +34 -0
  444. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  445. package/src/core/objects/role/changes/role.types.ts +12 -0
  446. package/src/core/objects/role/role.diff.test.ts +279 -0
  447. package/src/core/objects/role/role.diff.ts +499 -0
  448. package/src/core/objects/role/role.model.ts +452 -0
  449. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  450. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  451. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  452. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  453. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  454. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  455. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  456. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  457. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  458. package/src/core/objects/rule/changes/rule.types.ts +12 -0
  459. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  460. package/src/core/objects/rule/rule.diff.ts +79 -0
  461. package/src/core/objects/rule/rule.model.ts +173 -0
  462. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  463. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  464. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  465. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  466. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  467. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  468. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  469. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  470. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  471. package/src/core/objects/schema/changes/schema.types.ts +12 -0
  472. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  473. package/src/core/objects/schema/schema.diff.ts +146 -0
  474. package/src/core/objects/schema/schema.model.ts +107 -0
  475. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  476. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  477. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  478. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  479. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  480. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  481. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  482. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  483. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  484. package/src/core/objects/sequence/changes/sequence.types.ts +12 -0
  485. package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
  486. package/src/core/objects/sequence/sequence.diff.ts +294 -0
  487. package/src/core/objects/sequence/sequence.model.ts +185 -0
  488. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  489. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  490. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  491. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  492. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  493. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  494. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  495. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  496. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  497. package/src/core/objects/subscription/changes/subscription.types.ts +22 -0
  498. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  499. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  500. package/src/core/objects/subscription/subscription.model.ts +190 -0
  501. package/src/core/objects/subscription/utils.ts +156 -0
  502. package/src/core/objects/table/changes/table.alter.test.ts +846 -0
  503. package/src/core/objects/table/changes/table.alter.ts +806 -0
  504. package/src/core/objects/table/changes/table.base.ts +20 -0
  505. package/src/core/objects/table/changes/table.comment.ts +266 -0
  506. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  507. package/src/core/objects/table/changes/table.create.ts +192 -0
  508. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  509. package/src/core/objects/table/changes/table.drop.ts +45 -0
  510. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  511. package/src/core/objects/table/changes/table.types.ts +12 -0
  512. package/src/core/objects/table/table.diff.test.ts +868 -0
  513. package/src/core/objects/table/table.diff.ts +817 -0
  514. package/src/core/objects/table/table.model.ts +460 -0
  515. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  516. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  517. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  518. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  519. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  520. package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
  521. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  522. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  523. package/src/core/objects/trigger/changes/trigger.types.ts +10 -0
  524. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  525. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  526. package/src/core/objects/trigger/trigger.model.ts +264 -0
  527. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  528. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  529. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  530. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  531. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  532. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  533. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  534. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  535. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  536. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +12 -0
  537. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  538. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  539. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  540. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  541. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  542. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  543. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  544. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  545. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  546. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  547. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  548. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  549. package/src/core/objects/type/enum/changes/enum.types.ts +12 -0
  550. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  551. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  552. package/src/core/objects/type/enum/enum.model.ts +194 -0
  553. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  554. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  555. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  556. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  557. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  558. package/src/core/objects/type/range/changes/range.create.ts +155 -0
  559. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  560. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  561. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  562. package/src/core/objects/type/range/changes/range.types.ts +12 -0
  563. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  564. package/src/core/objects/type/range/range.diff.ts +197 -0
  565. package/src/core/objects/type/range/range.model.ts +187 -0
  566. package/src/core/objects/type/type.types.ts +5 -0
  567. package/src/core/objects/utils.ts +171 -0
  568. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  569. package/src/core/objects/view/changes/view.alter.ts +112 -0
  570. package/src/core/objects/view/changes/view.base.ts +20 -0
  571. package/src/core/objects/view/changes/view.comment.ts +59 -0
  572. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  573. package/src/core/objects/view/changes/view.create.ts +73 -0
  574. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  575. package/src/core/objects/view/changes/view.drop.ts +40 -0
  576. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  577. package/src/core/objects/view/changes/view.types.ts +12 -0
  578. package/src/core/objects/view/view.diff.test.ts +173 -0
  579. package/src/core/objects/view/view.diff.ts +215 -0
  580. package/src/core/objects/view/view.model.ts +262 -0
  581. package/src/core/plan/apply.ts +172 -0
  582. package/src/core/plan/create.ts +368 -0
  583. package/src/core/plan/hierarchy.ts +574 -0
  584. package/src/core/plan/index.ts +29 -0
  585. package/src/core/plan/io.ts +20 -0
  586. package/src/core/plan/risk.ts +48 -0
  587. package/src/core/plan/serialize.test.ts +317 -0
  588. package/src/core/plan/serialize.ts +209 -0
  589. package/src/core/plan/sql-format/constants.ts +13 -0
  590. package/src/core/plan/sql-format/fixtures.ts +2803 -0
  591. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  592. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  593. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  594. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  595. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  596. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  597. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  598. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  599. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  600. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  601. package/src/core/plan/sql-format/format-utils.ts +391 -0
  602. package/src/core/plan/sql-format/formatters.ts +921 -0
  603. package/src/core/plan/sql-format/index.ts +149 -0
  604. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  605. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  606. package/src/core/plan/sql-format/protect.test.ts +127 -0
  607. package/src/core/plan/sql-format/protect.ts +337 -0
  608. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  609. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  610. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  611. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  612. package/src/core/plan/sql-format/types.ts +31 -0
  613. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  614. package/src/core/plan/sql-format/wrap.ts +196 -0
  615. package/src/core/plan/sql-format.ts +2 -0
  616. package/src/core/plan/ssl-config.ts +172 -0
  617. package/src/core/plan/statements.ts +22 -0
  618. package/src/core/plan/types.ts +171 -0
  619. package/src/core/postgres-config.ts +238 -0
  620. package/src/core/sort/custom-constraints.ts +161 -0
  621. package/src/core/sort/debug-visualization.ts +239 -0
  622. package/src/core/sort/dependency-filter.ts +224 -0
  623. package/src/core/sort/graph-builder.ts +235 -0
  624. package/src/core/sort/graph-utils.ts +51 -0
  625. package/src/core/sort/logical-sort.test.ts +371 -0
  626. package/src/core/sort/logical-sort.ts +597 -0
  627. package/src/core/sort/sort-changes.ts +234 -0
  628. package/src/core/sort/topological-sort.test.ts +275 -0
  629. package/src/core/sort/topological-sort.ts +184 -0
  630. package/src/core/sort/types.ts +112 -0
  631. package/src/core/sort/utils.ts +69 -0
  632. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  633. package/src/index.ts +38 -0
@@ -1,177 +1,68 @@
1
1
  /**
2
2
  * Plan creation - the main entry point for creating migration plans.
3
3
  */
4
- import { readFile } from "node:fs/promises";
5
4
  import { escapeIdentifier } from "pg";
6
5
  import { diffCatalogs } from "../catalog.diff.js";
7
- import { extractCatalog } from "../catalog.model.js";
6
+ import { Catalog, createEmptyCatalog, extractCatalog, } from "../catalog.model.js";
8
7
  import { buildPlanScopeFingerprint, hashStableIds } from "../fingerprint.js";
9
8
  import { compileFilterDSL, } from "../integrations/filter/dsl.js";
10
9
  import { compileSerializeDSL, } from "../integrations/serialize/dsl.js";
11
- import { createPool } from "../postgres-config.js";
10
+ import { createManagedPool, endPool } from "../postgres-config.js";
12
11
  import { sortChanges } from "../sort/sort-changes.js";
13
12
  import { classifyChangesRisk } from "./risk.js";
14
13
  /**
15
- * Parse SSL configuration from a PostgreSQL connection URL.
16
- * Supports sslmode (require, verify-ca, verify-full, prefer, disable).
17
- * Certificates can be provided via:
18
- * - Query string parameters (file paths): sslrootcert, sslcert, sslkey (preferred)
19
- * - Environment variables (content): PGDELTA_SOURCE_SSLROOTCERT/SSLCERT/SSLKEY or PGDELTA_TARGET_SSLROOTCERT/SSLCERT/SSLKEY
20
- * Returns SSL options for the postgres.js library and a cleaned URL without SSL-related query parameters.
14
+ * Create a migration plan by comparing two catalog states.
15
+ *
16
+ * Each input can be:
17
+ * - A postgres connection URL (string) -- a pool is created and catalog extracted
18
+ * - An existing pg Pool -- catalog is extracted directly
19
+ * - A Catalog instance -- used as-is (e.g. from a deserialized snapshot)
20
+ *
21
+ * When `source` is `null`, a minimal empty catalog (`createEmptyCatalog`) is
22
+ * used as the baseline. For a more accurate baseline, pass a Catalog
23
+ * deserialized from a snapshot of `template1` or another reference database.
24
+ *
25
+ * @param source - Source catalog input (current state), or null for empty baseline
26
+ * @param target - Target catalog input (desired state)
27
+ * @param options - Optional configuration
28
+ * @returns A Plan if there are changes, null if databases are identical
21
29
  */
22
- async function parseSslConfig(url, connectionType) {
23
- const urlObj = new URL(url);
24
- const sslmode = urlObj.searchParams.get("sslmode");
25
- const sslrootcert = urlObj.searchParams.get("sslrootcert");
26
- const sslcert = urlObj.searchParams.get("sslcert");
27
- const sslkey = urlObj.searchParams.get("sslkey");
28
- // Remove SSL-related query parameters since we parse them ourselves
29
- urlObj.searchParams.delete("sslmode");
30
- urlObj.searchParams.delete("sslrootcert");
31
- urlObj.searchParams.delete("sslcert");
32
- urlObj.searchParams.delete("sslkey");
33
- const cleanedUrl = urlObj.toString();
34
- // Handle different SSL modes
35
- if (sslmode === "disable") {
36
- return { cleanedUrl };
37
- }
38
- if (sslmode === "require" ||
39
- sslmode === "prefer" ||
40
- sslmode === "verify-ca" ||
41
- sslmode === "verify-full") {
42
- // Helper function to get certificate value: query param (file path) takes precedence over env var (content)
43
- const getCertValue = async (queryParam, envVarName) => {
44
- // Prefer query parameter (file path)
45
- if (queryParam) {
46
- try {
47
- return await readFile(queryParam, "utf-8");
48
- }
49
- catch (error) {
50
- throw new Error(`Failed to read certificate file '${queryParam}': ${error instanceof Error ? error.message : String(error)}`);
51
- }
52
- }
53
- // Fallback to environment variable (content)
54
- const envValue = process.env[envVarName];
55
- return envValue || undefined;
56
- };
57
- // Get CA certificate value (needed for verify-ca, verify-full, and libpq compatibility with require/prefer)
58
- const caEnvVar = connectionType === "source"
59
- ? "PGDELTA_SOURCE_SSLROOTCERT"
60
- : "PGDELTA_TARGET_SSLROOTCERT";
61
- const caValue = await getCertValue(sslrootcert, caEnvVar);
62
- // Determine if we should verify the CA chain
63
- // - verify-ca and verify-full: always verify CA
64
- // - require/prefer with CA cert provided: verify CA (libpq backward compatibility)
65
- // From PostgreSQL docs: "if a root CA file exists, the behavior of sslmode=require
66
- // will be the same as that of verify-ca"
67
- const hasExplicitVerification = sslmode === "verify-ca" || sslmode === "verify-full";
68
- const hasLibpqCompatibility = (sslmode === "require" || sslmode === "prefer") && caValue !== undefined;
69
- const shouldVerifyCa = hasExplicitVerification || hasLibpqCompatibility;
70
- // Determine if we should verify hostname
71
- // - verify-full: verify both CA and hostname
72
- // - verify-ca: verify CA only (skip hostname)
73
- // - require/prefer with CA (libpq compat): behaves like verify-ca (skip hostname)
74
- const shouldVerifyHostname = sslmode === "verify-full";
75
- const ssl = {
76
- rejectUnauthorized: shouldVerifyCa,
77
- };
78
- // Add CA certificate if verifying
79
- if (shouldVerifyCa && caValue) {
80
- ssl.ca = caValue;
81
- }
82
- // For verify-ca and libpq compatibility mode: skip hostname verification
83
- // This matches PostgreSQL semantics where verify-ca only checks the CA chain
84
- if (shouldVerifyCa && !shouldVerifyHostname) {
85
- ssl.checkServerIdentity = () => undefined;
86
- }
87
- // Get client certificate (optional, for mutual TLS)
88
- const certEnvVar = connectionType === "source"
89
- ? "PGDELTA_SOURCE_SSLCERT"
90
- : "PGDELTA_TARGET_SSLCERT";
91
- const certValue = await getCertValue(sslcert, certEnvVar);
92
- if (certValue) {
93
- ssl.cert = certValue;
94
- }
95
- // Get client key (optional, for mutual TLS, required if cert is provided)
96
- const keyEnvVar = connectionType === "source"
97
- ? "PGDELTA_SOURCE_SSLKEY"
98
- : "PGDELTA_TARGET_SSLKEY";
99
- const keyValue = await getCertValue(sslkey, keyEnvVar);
100
- if (keyValue) {
101
- ssl.key = keyValue;
102
- }
103
- // Warn if cert is provided without key (or vice versa)
104
- if ((ssl.cert && !ssl.key) || (!ssl.cert && ssl.key)) {
105
- throw new Error("Both client certificate and key must be provided together for mutual TLS");
106
- }
107
- return { ssl, cleanedUrl };
108
- }
109
- // No sslmode specified or invalid value - no SSL configuration
110
- return { cleanedUrl };
111
- }
112
30
  export async function createPlan(source, target, options = {}) {
113
- let sourcePool;
114
- let targetPool;
115
- let shouldCloseSource = false;
116
- let shouldCloseTarget = false;
117
- // Suppress expected shutdown errors from idle pool connections (57P01 = admin_shutdown)
118
- const onError = (err) => {
119
- if (err.code !== "57P01") {
120
- console.error("Pool error:", err);
31
+ const resolvePool = async (input, label) => {
32
+ if (typeof input === "string") {
33
+ const managed = await createManagedPool(input, {
34
+ role: options.role,
35
+ label,
36
+ });
37
+ return { pool: managed.pool, shouldClose: true };
121
38
  }
39
+ return { pool: input, shouldClose: false };
122
40
  };
123
- if (typeof source === "string") {
124
- const sslConfig = await parseSslConfig(source, "source");
125
- sourcePool = createPool(sslConfig.cleanedUrl, {
126
- ...(sslConfig.ssl ? { ssl: sslConfig.ssl } : {}),
127
- onError,
128
- onConnect: async (client) => {
129
- // Force fully qualified names in catalog queries
130
- await client.query("SET search_path = ''");
131
- if (options.role) {
132
- await client.query(`SET ROLE ${escapeIdentifier(options.role)}`);
133
- }
134
- },
135
- });
136
- shouldCloseSource = true;
137
- }
138
- else {
139
- sourcePool = source;
140
- }
141
- if (typeof target === "string") {
142
- const sslConfig = await parseSslConfig(target, "target");
143
- targetPool = createPool(sslConfig.cleanedUrl, {
144
- ...(sslConfig.ssl ? { ssl: sslConfig.ssl } : {}),
145
- onError,
146
- onConnect: async (client) => {
147
- // Force fully qualified names in catalog queries
148
- await client.query("SET search_path = ''");
149
- if (options.role) {
150
- await client.query(`SET ROLE ${escapeIdentifier(options.role)}`);
151
- }
152
- },
153
- });
154
- shouldCloseTarget = true;
155
- }
156
- else {
157
- targetPool = target;
158
- }
41
+ /**
42
+ * Resolve a CatalogInput to a Catalog, tracking pools that need cleanup.
43
+ */
44
+ const resolveCatalog = async (input, label, pools) => {
45
+ if (input instanceof Catalog) {
46
+ return input;
47
+ }
48
+ const resolved = await resolvePool(input, label);
49
+ pools.push(resolved);
50
+ return extractCatalog(resolved.pool);
51
+ };
52
+ const pools = [];
159
53
  try {
160
- const [fromCatalog, toCatalog] = await Promise.all([
161
- extractCatalog(sourcePool),
162
- extractCatalog(targetPool),
163
- ]);
54
+ const toCatalog = await resolveCatalog(target, "target", pools);
55
+ const fromCatalog = source !== null
56
+ ? await resolveCatalog(source, "source", pools)
57
+ : await createEmptyCatalog(toCatalog.version, toCatalog.currentUser);
164
58
  return buildPlanForCatalogs(fromCatalog, toCatalog, options);
165
59
  }
166
60
  finally {
167
- const closers = [];
168
- if (shouldCloseSource)
169
- closers.push(sourcePool.end());
170
- if (shouldCloseTarget)
171
- closers.push(targetPool.end());
172
- if (closers.length) {
61
+ const closers = pools
62
+ .filter((p) => p.shouldClose)
63
+ .map((p) => endPool(p.pool));
64
+ if (closers.length)
173
65
  await Promise.all(closers);
174
- }
175
66
  }
176
67
  }
177
68
  /**
@@ -180,6 +71,7 @@ export async function createPlan(source, target, options = {}) {
180
71
  function buildPlanForCatalogs(fromCatalog, toCatalog, options = {}) {
181
72
  const changes = diffCatalogs(fromCatalog, toCatalog, {
182
73
  role: options.role,
74
+ skipDefaultPrivilegeSubtraction: options.skipDefaultPrivilegeSubtraction,
183
75
  });
184
76
  const filterOption = options.filter;
185
77
  const serializeOption = options.serialize;
@@ -212,9 +104,18 @@ function buildPlanForCatalogs(fromCatalog, toCatalog, options = {}) {
212
104
  }
213
105
  // Use filter from final integration
214
106
  const filterFn = finalIntegration?.filter;
215
- const filteredChanges = filterFn
107
+ let filteredChanges = filterFn
216
108
  ? changes.filter((change) => filterFn(change))
217
109
  : changes;
110
+ // Cascade dependency exclusions: when a change is excluded by the filter,
111
+ // also exclude changes that depend on it (via requires or pg_depend).
112
+ // DSL filters: cascade only if explicitly opted in (cascade: true). Function filters: cascade by default.
113
+ const shouldCascade = isFilterDSL
114
+ ? filterDSL?.cascade === true
115
+ : true;
116
+ if (filterFn && filteredChanges.length < changes.length && shouldCascade) {
117
+ filteredChanges = cascadeExclusions(filteredChanges, changes, toCatalog.depends);
118
+ }
218
119
  if (filteredChanges.length === 0) {
219
120
  return null;
220
121
  }
@@ -223,6 +124,84 @@ function buildPlanForCatalogs(fromCatalog, toCatalog, options = {}) {
223
124
  return { plan, sortedChanges, ctx };
224
125
  }
225
126
  // ============================================================================
127
+ // Dependency Cascading
128
+ // ============================================================================
129
+ /**
130
+ * Cascade exclusions through dependency relationships.
131
+ *
132
+ * When a change is excluded by the filter, any change that depends on it
133
+ * (via explicit `requires` or via catalog `pg_depend`) should also be excluded.
134
+ * This runs as a fixpoint loop, bounded by the total number of changes to
135
+ * guarantee deterministic termination.
136
+ *
137
+ * @param filteredChanges - Changes that passed the initial filter
138
+ * @param allChanges - All changes before filtering
139
+ * @param catalogDepends - Dependency rows from the target catalog (pg_depend)
140
+ * @returns The filtered changes with cascading exclusions applied
141
+ */
142
+ function cascadeExclusions(filteredChanges, allChanges, catalogDepends) {
143
+ // Collect stableIds created by initially-excluded changes
144
+ const filteredSet = new Set(filteredChanges);
145
+ const excludedIds = new Set();
146
+ for (const change of allChanges) {
147
+ if (!filteredSet.has(change)) {
148
+ for (const id of change.creates ?? []) {
149
+ excludedIds.add(id);
150
+ }
151
+ }
152
+ }
153
+ if (excludedIds.size === 0) {
154
+ return filteredChanges;
155
+ }
156
+ // Build reverse dependency map: referenced_stable_id -> Set(dependent_stable_ids)
157
+ const catalogDependents = new Map();
158
+ for (const dep of catalogDepends) {
159
+ const existing = catalogDependents.get(dep.referenced_stable_id);
160
+ if (existing) {
161
+ existing.add(dep.dependent_stable_id);
162
+ }
163
+ else {
164
+ catalogDependents.set(dep.referenced_stable_id, new Set([dep.dependent_stable_id]));
165
+ }
166
+ }
167
+ // Fixpoint loop: bounded by total changes to guarantee termination.
168
+ // Each iteration must remove at least one change, otherwise we break.
169
+ let result = filteredChanges;
170
+ for (let i = 0; i < allChanges.length; i++) {
171
+ const beforeLength = result.length;
172
+ result = result.filter((change) => {
173
+ // Check explicit requirements: does this change require an excluded id?
174
+ const requires = change.requires ?? [];
175
+ if (requires.some((dep) => excludedIds.has(dep))) {
176
+ for (const id of change.creates ?? []) {
177
+ excludedIds.add(id);
178
+ }
179
+ return false;
180
+ }
181
+ // Check catalog dependencies: does anything this change creates
182
+ // depend on an excluded id via pg_depend?
183
+ const creates = change.creates ?? [];
184
+ for (const createdId of creates) {
185
+ for (const excludedId of excludedIds) {
186
+ const dependents = catalogDependents.get(excludedId);
187
+ if (dependents?.has(createdId)) {
188
+ for (const id of creates) {
189
+ excludedIds.add(id);
190
+ }
191
+ return false;
192
+ }
193
+ }
194
+ }
195
+ return true;
196
+ });
197
+ // No changes removed this iteration — fixpoint reached
198
+ if (result.length === beforeLength) {
199
+ break;
200
+ }
201
+ }
202
+ return result;
203
+ }
204
+ // ============================================================================
226
205
  // Plan Building
227
206
  // ============================================================================
228
207
  /**
@@ -139,10 +139,22 @@ export function getParentInfo(change) {
139
139
  const parentType = change.index.table_relkind === "m" ? "materialized_view" : "table";
140
140
  return { type: parentType, name: change.index.table_name };
141
141
  }
142
- case "trigger":
143
- return { type: "table", name: change.trigger.table_name };
144
- case "rule":
145
- return { type: "table", name: change.rule.table_name };
142
+ case "trigger": {
143
+ const parentType = change.trigger.table_relkind === "v"
144
+ ? "view"
145
+ : change.trigger.table_relkind === "m"
146
+ ? "materialized_view"
147
+ : "table";
148
+ return { type: parentType, name: change.trigger.table_name };
149
+ }
150
+ case "rule": {
151
+ const parentType = change.rule.relation_kind === "v"
152
+ ? "view"
153
+ : change.rule.relation_kind === "m"
154
+ ? "materialized_view"
155
+ : "table";
156
+ return { type: parentType, name: change.rule.table_name };
157
+ }
146
158
  case "rls_policy":
147
159
  return { type: "table", name: change.policy.table_name };
148
160
  case "aggregate":
@@ -0,0 +1,2 @@
1
+ import type { NormalizedOptions } from "./types.ts";
2
+ export declare const DEFAULT_OPTIONS: NormalizedOptions;
@@ -0,0 +1,11 @@
1
+ export const DEFAULT_OPTIONS = {
2
+ keywordCase: "preserve",
3
+ indent: 2,
4
+ maxWidth: 100,
5
+ commaStyle: "trailing",
6
+ alignColumns: true,
7
+ alignKeyValues: true,
8
+ preserveRoutineBodies: true,
9
+ preserveViewBodies: true,
10
+ preserveRuleBodies: true,
11
+ };
@@ -0,0 +1,2 @@
1
+ import type { SqlFormatOptions } from "../sql-format.ts";
2
+ export declare function renderScript(options?: SqlFormatOptions): string;