@supabase/pg-delta 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (717) 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 +240 -0
  10. package/dist/cli/commands/plan.js +47 -16
  11. package/dist/cli/commands/sync.js +8 -12
  12. package/dist/cli/exit-code.d.ts +2 -0
  13. package/dist/cli/exit-code.js +7 -0
  14. package/dist/cli/formatters/tree/tree.js +3 -2
  15. package/dist/cli/utils/apply-display.d.ts +52 -0
  16. package/dist/cli/utils/apply-display.js +183 -0
  17. package/dist/cli/utils/export-display.d.ts +43 -0
  18. package/dist/cli/utils/export-display.js +202 -0
  19. package/dist/cli/utils/integrations.d.ts +30 -6
  20. package/dist/cli/utils/integrations.js +98 -6
  21. package/dist/cli/utils/resolve-input.d.ts +7 -0
  22. package/dist/cli/utils/resolve-input.js +13 -0
  23. package/dist/cli/utils.d.ts +2 -0
  24. package/dist/cli/utils.js +1 -1
  25. package/dist/core/catalog-export/index.d.ts +11 -0
  26. package/dist/core/catalog-export/index.js +10 -0
  27. package/dist/core/catalog.diff.d.ts +1 -0
  28. package/dist/core/catalog.diff.js +64 -48
  29. package/dist/core/catalog.model.d.ts +16 -3
  30. package/dist/core/catalog.model.js +132 -30
  31. package/dist/core/catalog.snapshot.d.ts +66 -0
  32. package/dist/core/catalog.snapshot.js +206 -0
  33. package/dist/core/change-utils.d.ts +9 -0
  34. package/dist/core/change-utils.js +71 -0
  35. package/dist/core/change.types.d.ts +22 -0
  36. package/dist/core/change.types.js +37 -1
  37. package/dist/core/context.d.ts +3 -3
  38. package/dist/core/context.js +7 -10
  39. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  40. package/dist/core/declarative-apply/discover-sql.js +86 -0
  41. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  42. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  43. package/dist/core/declarative-apply/index.d.ts +49 -0
  44. package/dist/core/declarative-apply/index.js +134 -0
  45. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  46. package/dist/core/declarative-apply/round-apply.js +378 -0
  47. package/dist/core/depend.d.ts +2 -2
  48. package/dist/core/depend.js +33 -7
  49. package/dist/core/export/file-mapper.d.ts +71 -0
  50. package/dist/core/export/file-mapper.js +474 -0
  51. package/dist/core/export/grouper.d.ts +13 -0
  52. package/dist/core/export/grouper.js +76 -0
  53. package/dist/core/export/index.d.ts +45 -0
  54. package/dist/core/export/index.js +63 -0
  55. package/dist/core/export/types.d.ts +84 -0
  56. package/dist/core/export/types.js +25 -0
  57. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  58. package/dist/core/integrations/filter/dsl.d.ts +82 -41
  59. package/dist/core/integrations/filter/dsl.js +127 -61
  60. package/dist/core/integrations/filter/flatten.d.ts +51 -0
  61. package/dist/core/integrations/filter/flatten.js +116 -0
  62. package/dist/core/integrations/integration-dsl.d.ts +27 -1
  63. package/dist/core/integrations/merge.d.ts +20 -0
  64. package/dist/core/integrations/merge.js +60 -0
  65. package/dist/core/integrations/serialize/dsl.d.ts +7 -4
  66. package/dist/core/integrations/serialize/dsl.js +2 -2
  67. package/dist/core/integrations/supabase.d.ts +8 -0
  68. package/dist/core/integrations/supabase.js +34 -8
  69. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  70. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  71. package/dist/core/objects/aggregate/aggregate.model.d.ts +10 -10
  72. package/dist/core/objects/aggregate/aggregate.model.js +8 -10
  73. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  74. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  75. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +1 -0
  76. package/dist/core/objects/base.change.d.ts +10 -0
  77. package/dist/core/objects/base.change.js +10 -0
  78. package/dist/core/objects/base.model.d.ts +4 -1
  79. package/dist/core/objects/base.model.js +5 -2
  80. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  81. package/dist/core/objects/base.privilege-diff.js +104 -22
  82. package/dist/core/objects/base.privilege.d.ts +1 -0
  83. package/dist/core/objects/base.privilege.js +9 -2
  84. package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
  85. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  86. package/dist/core/objects/collation/collation.model.d.ts +2 -2
  87. package/dist/core/objects/collation/collation.model.js +29 -28
  88. package/dist/core/objects/diff-context.d.ts +15 -0
  89. package/dist/core/objects/diff-context.js +1 -0
  90. package/dist/core/objects/domain/changes/domain.create.d.ts +1 -1
  91. package/dist/core/objects/domain/changes/domain.create.js +11 -3
  92. package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
  93. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  94. package/dist/core/objects/domain/domain.diff.js +16 -77
  95. package/dist/core/objects/domain/domain.model.d.ts +2 -2
  96. package/dist/core/objects/domain/domain.model.js +9 -11
  97. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +1 -0
  98. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  99. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +2 -2
  100. package/dist/core/objects/event-trigger/event-trigger.model.js +7 -9
  101. package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
  102. package/dist/core/objects/extension/extension.model.d.ts +2 -2
  103. package/dist/core/objects/extension/extension.model.js +8 -10
  104. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
  105. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  106. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  107. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +2 -2
  108. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +22 -24
  109. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
  110. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
  111. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  112. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  113. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +2 -2
  114. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +21 -23
  115. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
  116. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  117. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  118. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +2 -2
  119. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +20 -22
  120. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
  121. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +2 -2
  122. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +20 -22
  123. package/dist/core/objects/index/changes/index.types.d.ts +1 -0
  124. package/dist/core/objects/index/index.model.d.ts +4 -4
  125. package/dist/core/objects/index/index.model.js +9 -11
  126. package/dist/core/objects/language/changes/language.types.d.ts +1 -0
  127. package/dist/core/objects/language/language.diff.d.ts +2 -5
  128. package/dist/core/objects/language/language.diff.js +7 -39
  129. package/dist/core/objects/language/language.model.js +5 -7
  130. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +1 -0
  131. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  132. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  133. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +5 -5
  134. package/dist/core/objects/materialized-view/materialized-view.model.js +9 -11
  135. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  136. package/dist/core/objects/procedure/changes/procedure.types.d.ts +1 -0
  137. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  138. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  139. package/dist/core/objects/procedure/procedure.model.d.ts +11 -11
  140. package/dist/core/objects/procedure/procedure.model.js +9 -11
  141. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  142. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  143. package/dist/core/objects/publication/changes/publication.types.d.ts +3 -2
  144. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  145. package/dist/core/objects/publication/publication.diff.js +8 -13
  146. package/dist/core/objects/publication/publication.model.d.ts +2 -2
  147. package/dist/core/objects/publication/publication.model.js +7 -9
  148. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  149. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
  150. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +4 -4
  151. package/dist/core/objects/rls-policy/rls-policy.model.js +8 -10
  152. package/dist/core/objects/role/changes/role.types.d.ts +1 -0
  153. package/dist/core/objects/role/role.diff.js +22 -1
  154. package/dist/core/objects/role/role.model.d.ts +6 -5
  155. package/dist/core/objects/role/role.model.js +146 -40
  156. package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
  157. package/dist/core/objects/rule/rule.model.d.ts +3 -3
  158. package/dist/core/objects/rule/rule.model.js +7 -9
  159. package/dist/core/objects/schema/changes/schema.types.d.ts +1 -0
  160. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  161. package/dist/core/objects/schema/schema.diff.js +16 -77
  162. package/dist/core/objects/schema/schema.model.d.ts +2 -2
  163. package/dist/core/objects/schema/schema.model.js +9 -11
  164. package/dist/core/objects/sequence/changes/sequence.types.d.ts +1 -0
  165. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  166. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  167. package/dist/core/objects/sequence/sequence.model.d.ts +2 -2
  168. package/dist/core/objects/sequence/sequence.model.js +9 -11
  169. package/dist/core/objects/subscription/changes/subscription.types.d.ts +1 -0
  170. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  171. package/dist/core/objects/subscription/subscription.model.d.ts +2 -2
  172. package/dist/core/objects/subscription/subscription.model.js +25 -20
  173. package/dist/core/objects/table/changes/table.create.js +3 -0
  174. package/dist/core/objects/table/changes/table.types.d.ts +1 -0
  175. package/dist/core/objects/table/table.diff.d.ts +2 -8
  176. package/dist/core/objects/table/table.diff.js +26 -157
  177. package/dist/core/objects/table/table.model.d.ts +27 -24
  178. package/dist/core/objects/table/table.model.js +12 -11
  179. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  180. package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
  181. package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
  182. package/dist/core/objects/trigger/trigger.model.d.ts +11 -2
  183. package/dist/core/objects/trigger/trigger.model.js +22 -10
  184. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +1 -0
  185. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  186. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  187. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +5 -5
  188. package/dist/core/objects/type/composite-type/composite-type.model.js +10 -11
  189. package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
  190. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  191. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  192. package/dist/core/objects/type/enum/enum.model.d.ts +2 -2
  193. package/dist/core/objects/type/enum/enum.model.js +23 -25
  194. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  195. package/dist/core/objects/type/range/changes/range.types.d.ts +1 -0
  196. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  197. package/dist/core/objects/type/range/range.diff.js +16 -77
  198. package/dist/core/objects/type/range/range.model.d.ts +2 -2
  199. package/dist/core/objects/type/range/range.model.js +8 -10
  200. package/dist/core/objects/type/type.types.d.ts +1 -0
  201. package/dist/core/objects/view/changes/view.types.d.ts +1 -0
  202. package/dist/core/objects/view/view.diff.d.ts +2 -8
  203. package/dist/core/objects/view/view.diff.js +37 -168
  204. package/dist/core/objects/view/view.model.d.ts +20 -6
  205. package/dist/core/objects/view/view.model.js +11 -23
  206. package/dist/core/plan/apply.d.ts +2 -2
  207. package/dist/core/plan/apply.js +33 -16
  208. package/dist/core/plan/create.d.ts +20 -7
  209. package/dist/core/plan/create.js +153 -112
  210. package/dist/core/plan/serialize.js +16 -4
  211. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  212. package/dist/core/plan/sql-format/constants.js +11 -0
  213. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  214. package/dist/core/plan/sql-format/fixtures.js +2447 -0
  215. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  216. package/dist/core/plan/sql-format/format-utils.js +274 -0
  217. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  218. package/dist/core/plan/sql-format/formatters.js +737 -0
  219. package/dist/core/plan/sql-format/index.d.ts +2 -0
  220. package/dist/core/plan/sql-format/index.js +98 -0
  221. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  222. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  223. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  224. package/dist/core/plan/sql-format/protect.js +269 -0
  225. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  226. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  227. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  228. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  229. package/dist/core/plan/sql-format/types.d.ts +28 -0
  230. package/dist/core/plan/sql-format/types.js +1 -0
  231. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  232. package/dist/core/plan/sql-format/wrap.js +165 -0
  233. package/dist/core/plan/sql-format.d.ts +2 -0
  234. package/dist/core/plan/sql-format.js +1 -0
  235. package/dist/core/plan/ssl-config.d.ts +32 -0
  236. package/dist/core/plan/ssl-config.js +115 -0
  237. package/dist/core/plan/statements.d.ts +2 -1
  238. package/dist/core/plan/statements.js +6 -2
  239. package/dist/core/plan/types.d.ts +6 -0
  240. package/dist/core/postgres-config.d.ts +47 -3
  241. package/dist/core/postgres-config.js +225 -39
  242. package/dist/core/sort/custom-constraints.js +1 -1
  243. package/dist/core/sort/graph-builder.js +10 -0
  244. package/dist/core/sort/logical-sort.js +34 -47
  245. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  246. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  247. package/dist/index.d.ts +9 -0
  248. package/dist/index.js +9 -1
  249. package/package.json +60 -22
  250. package/src/cli/app.ts +52 -0
  251. package/src/cli/bin/cli.ts +15 -0
  252. package/src/cli/commands/apply.ts +101 -0
  253. package/src/cli/commands/catalog-export.ts +78 -0
  254. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  255. package/src/cli/commands/declarative-apply.ts +380 -0
  256. package/src/cli/commands/declarative-export.ts +322 -0
  257. package/src/cli/commands/plan.ts +210 -0
  258. package/src/cli/commands/sync.ts +178 -0
  259. package/src/cli/exit-code.test.ts +19 -0
  260. package/src/cli/exit-code.ts +7 -0
  261. package/src/cli/formatters/index.ts +5 -0
  262. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  263. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  264. package/src/cli/formatters/tree/tree.ts +238 -0
  265. package/src/cli/utils/apply-display.test.ts +348 -0
  266. package/src/cli/utils/apply-display.ts +238 -0
  267. package/src/cli/utils/export-display.test.ts +103 -0
  268. package/src/cli/utils/export-display.ts +275 -0
  269. package/src/cli/utils/integrations.test.ts +251 -0
  270. package/src/cli/utils/integrations.ts +170 -0
  271. package/src/cli/utils/resolve-input.test.ts +38 -0
  272. package/src/cli/utils/resolve-input.ts +17 -0
  273. package/src/cli/utils.ts +231 -0
  274. package/src/core/catalog-export/index.ts +20 -0
  275. package/src/core/catalog.diff.ts +247 -0
  276. package/src/core/catalog.model.test.ts +122 -0
  277. package/src/core/catalog.model.ts +510 -0
  278. package/src/core/catalog.snapshot.test.ts +486 -0
  279. package/src/core/catalog.snapshot.ts +289 -0
  280. package/src/core/change-utils.test.ts +61 -0
  281. package/src/core/change-utils.ts +73 -0
  282. package/src/core/change.types.ts +94 -0
  283. package/src/core/context.ts +26 -0
  284. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  285. package/src/core/declarative-apply/discover-sql.ts +107 -0
  286. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  287. package/src/core/declarative-apply/index.test.ts +67 -0
  288. package/src/core/declarative-apply/index.ts +205 -0
  289. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  290. package/src/core/declarative-apply/round-apply.ts +562 -0
  291. package/src/core/depend.ts +1895 -0
  292. package/src/core/expand-replace-dependencies.test.ts +70 -0
  293. package/src/core/expand-replace-dependencies.ts +380 -0
  294. package/src/core/export/file-mapper.test.ts +816 -0
  295. package/src/core/export/file-mapper.ts +579 -0
  296. package/src/core/export/grouper.ts +108 -0
  297. package/src/core/export/index.ts +129 -0
  298. package/src/core/export/types.ts +104 -0
  299. package/src/core/fingerprint.ts +204 -0
  300. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  301. package/src/core/integrations/filter/dsl.test.ts +450 -0
  302. package/src/core/integrations/filter/dsl.ts +305 -0
  303. package/src/core/integrations/filter/filter.types.ts +3 -0
  304. package/src/core/integrations/filter/flatten.test.ts +282 -0
  305. package/src/core/integrations/filter/flatten.ts +150 -0
  306. package/src/core/integrations/integration-dsl.ts +50 -0
  307. package/src/core/integrations/integration.types.ts +7 -0
  308. package/src/core/integrations/merge.test.ts +128 -0
  309. package/src/core/integrations/merge.ts +72 -0
  310. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  311. package/src/core/integrations/serialize/dsl.ts +80 -0
  312. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  313. package/src/core/integrations/supabase.ts +145 -0
  314. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  315. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  316. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  317. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  318. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  319. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  320. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  321. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  322. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  323. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  324. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  325. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  326. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  327. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  328. package/src/core/objects/aggregate/changes/aggregate.types.ts +13 -0
  329. package/src/core/objects/base.change.ts +72 -0
  330. package/src/core/objects/base.default-privileges.ts +204 -0
  331. package/src/core/objects/base.diff.ts +20 -0
  332. package/src/core/objects/base.model.test.ts +43 -0
  333. package/src/core/objects/base.model.ts +85 -0
  334. package/src/core/objects/base.privilege-diff.ts +447 -0
  335. package/src/core/objects/base.privilege.ts +191 -0
  336. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  337. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  338. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  339. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  340. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  341. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  342. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  343. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  344. package/src/core/objects/collation/changes/collation.types.ts +11 -0
  345. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  346. package/src/core/objects/collation/collation.diff.ts +127 -0
  347. package/src/core/objects/collation/collation.model.ts +224 -0
  348. package/src/core/objects/diff-context.ts +16 -0
  349. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  350. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  351. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  352. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  353. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  354. package/src/core/objects/domain/changes/domain.create.ts +140 -0
  355. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  356. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  357. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  358. package/src/core/objects/domain/changes/domain.types.ts +13 -0
  359. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  360. package/src/core/objects/domain/domain.diff.ts +295 -0
  361. package/src/core/objects/domain/domain.model.ts +190 -0
  362. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  363. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  364. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  365. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  366. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  367. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  368. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  369. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  370. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +11 -0
  371. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  372. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  373. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  374. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  375. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  376. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  377. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  378. package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
  379. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  380. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  381. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  382. package/src/core/objects/extension/changes/extension.types.ts +11 -0
  383. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  384. package/src/core/objects/extension/extension.diff.ts +90 -0
  385. package/src/core/objects/extension/extension.model.test.ts +98 -0
  386. package/src/core/objects/extension/extension.model.ts +280 -0
  387. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  388. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  389. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  390. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  391. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  392. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  393. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  394. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  395. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  396. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +13 -0
  397. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  398. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  399. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  400. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +11 -0
  401. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  402. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  403. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  404. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  405. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  406. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  407. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  408. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  409. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  410. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +13 -0
  411. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  412. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  413. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  414. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  415. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  416. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  417. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  418. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  419. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  420. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  421. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  422. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  423. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +13 -0
  424. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  425. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  426. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  427. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  428. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  429. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  430. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  431. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  432. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  433. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  434. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +9 -0
  435. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  436. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  437. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  438. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  439. package/src/core/objects/index/changes/index.alter.ts +144 -0
  440. package/src/core/objects/index/changes/index.base.ts +20 -0
  441. package/src/core/objects/index/changes/index.comment.ts +63 -0
  442. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  443. package/src/core/objects/index/changes/index.create.ts +68 -0
  444. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  445. package/src/core/objects/index/changes/index.drop.ts +34 -0
  446. package/src/core/objects/index/changes/index.types.ts +7 -0
  447. package/src/core/objects/index/changes/utils.ts +16 -0
  448. package/src/core/objects/index/index.diff.test.ts +153 -0
  449. package/src/core/objects/index/index.diff.ts +243 -0
  450. package/src/core/objects/index/index.model.ts +370 -0
  451. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  452. package/src/core/objects/language/changes/language.alter.ts +53 -0
  453. package/src/core/objects/language/changes/language.base.ts +20 -0
  454. package/src/core/objects/language/changes/language.comment.ts +58 -0
  455. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  456. package/src/core/objects/language/changes/language.create.ts +104 -0
  457. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  458. package/src/core/objects/language/changes/language.drop.ts +39 -0
  459. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  460. package/src/core/objects/language/changes/language.types.ts +13 -0
  461. package/src/core/objects/language/language.diff.test.ts +135 -0
  462. package/src/core/objects/language/language.diff.ts +144 -0
  463. package/src/core/objects/language/language.model.ts +150 -0
  464. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  465. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  466. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  467. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  468. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  469. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  470. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  471. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  472. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  473. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +13 -0
  474. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  475. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  476. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  477. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  478. package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
  479. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  480. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  481. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  482. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  483. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  484. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  485. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  486. package/src/core/objects/procedure/changes/procedure.types.ts +13 -0
  487. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  488. package/src/core/objects/procedure/procedure.diff.ts +341 -0
  489. package/src/core/objects/procedure/procedure.model.ts +264 -0
  490. package/src/core/objects/procedure/utils.ts +58 -0
  491. package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
  492. package/src/core/objects/publication/changes/publication.alter.ts +225 -0
  493. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  494. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  495. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  496. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  497. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  498. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  499. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  500. package/src/core/objects/publication/changes/publication.types.ts +25 -0
  501. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  502. package/src/core/objects/publication/publication.diff.ts +247 -0
  503. package/src/core/objects/publication/publication.model.ts +206 -0
  504. package/src/core/objects/publication/utils.ts +55 -0
  505. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
  506. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  507. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  508. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  509. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
  510. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  511. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
  512. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  513. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +11 -0
  514. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  515. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  516. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  517. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  518. package/src/core/objects/role/changes/role.alter.ts +110 -0
  519. package/src/core/objects/role/changes/role.base.ts +24 -0
  520. package/src/core/objects/role/changes/role.comment.ts +55 -0
  521. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  522. package/src/core/objects/role/changes/role.create.ts +102 -0
  523. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  524. package/src/core/objects/role/changes/role.drop.ts +34 -0
  525. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  526. package/src/core/objects/role/changes/role.types.ts +13 -0
  527. package/src/core/objects/role/role.diff.test.ts +279 -0
  528. package/src/core/objects/role/role.diff.ts +499 -0
  529. package/src/core/objects/role/role.model.ts +452 -0
  530. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  531. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  532. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  533. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  534. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  535. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  536. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  537. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  538. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  539. package/src/core/objects/rule/changes/rule.types.ts +13 -0
  540. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  541. package/src/core/objects/rule/rule.diff.ts +79 -0
  542. package/src/core/objects/rule/rule.model.ts +173 -0
  543. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  544. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  545. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  546. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  547. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  548. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  549. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  550. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  551. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  552. package/src/core/objects/schema/changes/schema.types.ts +13 -0
  553. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  554. package/src/core/objects/schema/schema.diff.ts +146 -0
  555. package/src/core/objects/schema/schema.model.ts +107 -0
  556. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  557. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  558. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  559. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  560. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  561. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  562. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  563. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  564. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  565. package/src/core/objects/sequence/changes/sequence.types.ts +13 -0
  566. package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
  567. package/src/core/objects/sequence/sequence.diff.ts +294 -0
  568. package/src/core/objects/sequence/sequence.model.ts +185 -0
  569. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  570. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  571. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  572. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  573. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  574. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  575. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  576. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  577. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  578. package/src/core/objects/subscription/changes/subscription.types.ts +23 -0
  579. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  580. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  581. package/src/core/objects/subscription/subscription.model.ts +190 -0
  582. package/src/core/objects/subscription/utils.ts +156 -0
  583. package/src/core/objects/table/changes/table.alter.test.ts +846 -0
  584. package/src/core/objects/table/changes/table.alter.ts +806 -0
  585. package/src/core/objects/table/changes/table.base.ts +20 -0
  586. package/src/core/objects/table/changes/table.comment.ts +266 -0
  587. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  588. package/src/core/objects/table/changes/table.create.ts +192 -0
  589. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  590. package/src/core/objects/table/changes/table.drop.ts +45 -0
  591. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  592. package/src/core/objects/table/changes/table.types.ts +13 -0
  593. package/src/core/objects/table/table.diff.test.ts +868 -0
  594. package/src/core/objects/table/table.diff.ts +817 -0
  595. package/src/core/objects/table/table.model.ts +460 -0
  596. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  597. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  598. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  599. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  600. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  601. package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
  602. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  603. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  604. package/src/core/objects/trigger/changes/trigger.types.ts +11 -0
  605. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  606. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  607. package/src/core/objects/trigger/trigger.model.ts +264 -0
  608. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  609. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  610. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  611. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  612. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  613. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  614. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  615. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  616. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  617. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +13 -0
  618. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  619. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  620. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  621. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  622. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  623. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  624. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  625. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  626. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  627. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  628. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  629. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  630. package/src/core/objects/type/enum/changes/enum.types.ts +13 -0
  631. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  632. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  633. package/src/core/objects/type/enum/enum.model.ts +194 -0
  634. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  635. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  636. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  637. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  638. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  639. package/src/core/objects/type/range/changes/range.create.ts +155 -0
  640. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  641. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  642. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  643. package/src/core/objects/type/range/changes/range.types.ts +13 -0
  644. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  645. package/src/core/objects/type/range/range.diff.ts +197 -0
  646. package/src/core/objects/type/range/range.model.ts +187 -0
  647. package/src/core/objects/type/type.types.ts +6 -0
  648. package/src/core/objects/utils.ts +171 -0
  649. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  650. package/src/core/objects/view/changes/view.alter.ts +112 -0
  651. package/src/core/objects/view/changes/view.base.ts +20 -0
  652. package/src/core/objects/view/changes/view.comment.ts +59 -0
  653. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  654. package/src/core/objects/view/changes/view.create.ts +73 -0
  655. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  656. package/src/core/objects/view/changes/view.drop.ts +40 -0
  657. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  658. package/src/core/objects/view/changes/view.types.ts +13 -0
  659. package/src/core/objects/view/view.diff.test.ts +269 -0
  660. package/src/core/objects/view/view.diff.ts +230 -0
  661. package/src/core/objects/view/view.model.ts +262 -0
  662. package/src/core/plan/apply.ts +172 -0
  663. package/src/core/plan/create.ts +384 -0
  664. package/src/core/plan/hierarchy.ts +574 -0
  665. package/src/core/plan/index.ts +29 -0
  666. package/src/core/plan/io.ts +20 -0
  667. package/src/core/plan/risk.ts +48 -0
  668. package/src/core/plan/serialize.test.ts +317 -0
  669. package/src/core/plan/serialize.ts +209 -0
  670. package/src/core/plan/sql-format/constants.ts +13 -0
  671. package/src/core/plan/sql-format/fixtures.ts +2803 -0
  672. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  673. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  674. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  675. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  676. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  677. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  678. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  679. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  680. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  681. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  682. package/src/core/plan/sql-format/format-utils.ts +391 -0
  683. package/src/core/plan/sql-format/formatters.ts +921 -0
  684. package/src/core/plan/sql-format/index.ts +149 -0
  685. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  686. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  687. package/src/core/plan/sql-format/protect.test.ts +127 -0
  688. package/src/core/plan/sql-format/protect.ts +337 -0
  689. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  690. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  691. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  692. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  693. package/src/core/plan/sql-format/types.ts +31 -0
  694. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  695. package/src/core/plan/sql-format/wrap.ts +196 -0
  696. package/src/core/plan/sql-format.ts +2 -0
  697. package/src/core/plan/ssl-config.ts +172 -0
  698. package/src/core/plan/statements.ts +22 -0
  699. package/src/core/plan/types.ts +171 -0
  700. package/src/core/postgres-config.ts +293 -0
  701. package/src/core/sort/custom-constraints.ts +161 -0
  702. package/src/core/sort/debug-visualization.ts +239 -0
  703. package/src/core/sort/dependency-filter.ts +224 -0
  704. package/src/core/sort/graph-builder.ts +235 -0
  705. package/src/core/sort/graph-utils.ts +51 -0
  706. package/src/core/sort/logical-sort.test.ts +371 -0
  707. package/src/core/sort/logical-sort.ts +573 -0
  708. package/src/core/sort/sort-changes.ts +234 -0
  709. package/src/core/sort/topological-sort.test.ts +275 -0
  710. package/src/core/sort/topological-sort.ts +184 -0
  711. package/src/core/sort/types.ts +112 -0
  712. package/src/core/sort/utils.ts +69 -0
  713. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  714. package/src/index.ts +41 -0
  715. package/src/typedoc.ts +248 -0
  716. package/dist/core/integrations/filter/extractors.d.ts +0 -12
  717. package/dist/core/integrations/filter/extractors.js +0 -136
@@ -1,46 +1,232 @@
1
1
  /**
2
2
  * PostgreSQL connection configuration with custom type handlers.
3
3
  */
4
+ import { escapeIdentifier, Pool, types } from "pg";
5
+ import { parseSslConfig } from "./plan/ssl-config.js";
6
+ // ============================================================================
7
+ // Array Parser
8
+ // ============================================================================
4
9
  /**
5
- * Custom type handler for specific corner cases.
10
+ * Parse PostgreSQL array string into JavaScript array.
11
+ * Handles: {val1,val2}, {NULL,val}, {"quoted,val"}, nested arrays.
6
12
  */
7
- export const postgresConfig = {
8
- types: {
9
- int2vector: {
10
- // The pg_types oid for int2vector (22 is the OID for int2vector)
11
- to: 22,
12
- // Array of pg_types oids to handle when parsing values coming from the db
13
- from: [22],
14
- // Parse int2vector from string format "1 2 3" to array [1, 2, 3]
15
- parse: (value) => {
16
- if (!value || value === "")
17
- return [];
18
- return value
19
- .split(" ")
20
- .map(Number)
21
- .filter((n) => !Number.isNaN(n));
22
- },
23
- // Serialize array back to int2vector format if needed
24
- serialize: (value) => {
25
- if (!Array.isArray(value))
26
- return "";
27
- return value.join(" ");
28
- },
13
+ function parseArray(value, parseElement = (v) => v) {
14
+ if (!value || value === "{}")
15
+ return [];
16
+ // Remove outer braces
17
+ const inner = value.slice(1, -1);
18
+ if (inner === "")
19
+ return [];
20
+ const result = [];
21
+ let current = "";
22
+ let inQuotes = false;
23
+ let depth = 0;
24
+ for (let i = 0; i < inner.length; i++) {
25
+ const char = inner[i];
26
+ if (char === '"' && inner[i - 1] !== "\\") {
27
+ inQuotes = !inQuotes;
28
+ current += char;
29
+ }
30
+ else if (char === "{" && !inQuotes) {
31
+ depth++;
32
+ current += char;
33
+ }
34
+ else if (char === "}" && !inQuotes) {
35
+ depth--;
36
+ current += char;
37
+ }
38
+ else if (char === "," && !inQuotes && depth === 0) {
39
+ result.push(parseElement(current));
40
+ current = "";
41
+ }
42
+ else {
43
+ current += char;
44
+ }
45
+ }
46
+ if (current !== "") {
47
+ result.push(parseElement(current));
48
+ }
49
+ return result;
50
+ }
51
+ /**
52
+ * Parse element, handling NULL, quoted strings, and unquoted values.
53
+ */
54
+ function parseStringElement(val) {
55
+ if (val === "NULL")
56
+ return null;
57
+ if (val.startsWith('"') && val.endsWith('"')) {
58
+ // Unescape quoted string
59
+ return val.slice(1, -1).replace(/\\(.)/g, "$1");
60
+ }
61
+ return val;
62
+ }
63
+ function parseIntElement(val) {
64
+ if (val === "NULL")
65
+ return null;
66
+ return Number.parseInt(val, 10);
67
+ }
68
+ // ============================================================================
69
+ // Type Parsers
70
+ // ============================================================================
71
+ // int2vector: "1 2 3" -> [1, 2, 3]
72
+ // @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
73
+ types.setTypeParser(22, (val) => {
74
+ if (!val || val === "")
75
+ return [];
76
+ return val
77
+ .split(" ")
78
+ .map(Number)
79
+ .filter((n) => !Number.isNaN(n));
80
+ });
81
+ // bigint: string -> BigInt
82
+ types.setTypeParser(20, (val) => BigInt(val));
83
+ // PostgreSQL array types
84
+ // @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
85
+ types.setTypeParser(1002, (val) => parseArray(val, parseStringElement)); // "char"[]
86
+ // @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
87
+ types.setTypeParser(1009, (val) => parseArray(val, parseStringElement)); // text[]
88
+ // @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
89
+ types.setTypeParser(1015, (val) => parseArray(val, parseStringElement)); // varchar[]
90
+ // @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
91
+ types.setTypeParser(1005, (val) => parseArray(val, parseIntElement)); // int2[]
92
+ // @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
93
+ types.setTypeParser(1007, (val) => parseArray(val, parseIntElement)); // int4[]
94
+ // @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
95
+ types.setTypeParser(1016, (val) => parseArray(val, parseIntElement)); // int8[]
96
+ const DEFAULT_POOL_MAX = Number(process.env.PGDELTA_POOL_MAX) || 5;
97
+ const DEFAULT_CONNECTION_TIMEOUT_MS = Number(process.env.PGDELTA_CONNECTION_TIMEOUT_MS) || 3_000;
98
+ const DEFAULT_CONNECT_TIMEOUT_MS = Number(process.env.PGDELTA_CONNECT_TIMEOUT_MS) || 2_500;
99
+ /**
100
+ * Create a Pool with custom type handlers and optional event listeners.
101
+ */
102
+ export function createPool(connectionString, options) {
103
+ const { onConnect, onError, onAcquire, onRemove, ...config } = options ?? {};
104
+ const pool = new Pool({
105
+ connectionString,
106
+ max: DEFAULT_POOL_MAX,
107
+ connectionTimeoutMillis: DEFAULT_CONNECTION_TIMEOUT_MS,
108
+ ...config,
109
+ });
110
+ if (onConnect) {
111
+ const pendingClientSetup = new WeakMap();
112
+ const waitForClientSetup = async (client) => {
113
+ const setup = pendingClientSetup.get(client);
114
+ if (setup) {
115
+ await setup;
116
+ return;
117
+ }
118
+ throw new Error("Internal error: pool client was acquired before async onConnect setup was registered. This indicates a bug in the pool wrapper logic; please report it with reproduction steps.");
119
+ };
120
+ const originalConnect = pool.connect.bind(pool);
121
+ pool.on("connect", (client) => {
122
+ pendingClientSetup.set(client, Promise.resolve().then(() => onConnect(client)));
123
+ });
124
+ pool.connect = ((callback) => {
125
+ if (!callback) {
126
+ return originalConnect().then(async (client) => {
127
+ try {
128
+ await waitForClientSetup(client);
129
+ return client;
130
+ }
131
+ catch (setupError) {
132
+ client.release?.(setupError);
133
+ throw setupError;
134
+ }
135
+ });
136
+ }
137
+ return originalConnect(async (err, client, release) => {
138
+ if (err || !client) {
139
+ callback(err, client, release);
140
+ return;
141
+ }
142
+ try {
143
+ await waitForClientSetup(client);
144
+ callback(err, client, release);
145
+ }
146
+ catch (setupError) {
147
+ release(setupError);
148
+ callback(setupError, undefined, () => { });
149
+ }
150
+ });
151
+ });
152
+ }
153
+ if (onError)
154
+ pool.on("error", onError);
155
+ if (onAcquire)
156
+ pool.on("acquire", onAcquire);
157
+ if (onRemove)
158
+ pool.on("remove", onRemove);
159
+ return pool;
160
+ }
161
+ /**
162
+ * End a pool and wait for all client sockets to fully close.
163
+ *
164
+ * pg-pool's `pool.end()` resolves once clients are removed from its
165
+ * internal bookkeeping, but the underlying `client.end()` calls (which
166
+ * close the TCP/TLS sockets) are fired asynchronously *after* that.
167
+ * If the server (e.g. a test container) is stopped right after
168
+ * `pool.end()` resolves, the still-open sockets receive an unexpected
169
+ * RST and emit unhandled "Connection terminated unexpectedly" errors.
170
+ *
171
+ * This helper waits for every `remove` event — which pg-pool emits
172
+ * inside each `client.end()` callback — ensuring all sockets are
173
+ * truly closed before it resolves.
174
+ */
175
+ /**
176
+ * Create a pool from a connection URL with standard session setup:
177
+ * SSL parsing, search_path isolation, optional SET ROLE, and 57P01 suppression.
178
+ *
179
+ * Returns the pool and a `close` function that properly waits for all sockets
180
+ * to close (via {@link endPool}).
181
+ */
182
+ export async function createManagedPool(url, options) {
183
+ const sslConfig = await parseSslConfig(url, options?.label ?? "target");
184
+ const pool = createPool(sslConfig.cleanedUrl, {
185
+ ...(sslConfig.ssl !== undefined ? { ssl: sslConfig.ssl } : {}),
186
+ onError: (err) => {
187
+ if (err.code !== "57P01") {
188
+ console.error("Pool error:", err);
189
+ }
29
190
  },
30
- // Handle bigint values from PostgreSQL
31
- bigint: {
32
- // The pg_types oid for bigint (20 is the OID for int8/bigint)
33
- to: 20,
34
- // Array of pg_types oids to handle when parsing values coming from the db
35
- from: [20],
36
- // Parse bigint string to JavaScript BigInt
37
- parse: (value) => {
38
- return BigInt(value);
39
- },
40
- // Serialize BigInt back to string for PostgreSQL
41
- serialize: (value) => {
42
- return value.toString();
43
- },
191
+ onConnect: async (client) => {
192
+ await client.query("SET search_path = ''");
193
+ if (options?.role) {
194
+ await client.query(`SET ROLE ${escapeIdentifier(options.role)}`);
195
+ }
44
196
  },
45
- },
46
- };
197
+ });
198
+ // Eagerly validate connectivity so SSL/auth failures surface immediately
199
+ // instead of hanging on the first real query. node-pg's connectionTimeoutMillis
200
+ // is not reliably enforced under Bun when SSL negotiation hangs.
201
+ const label = options?.label ?? "target";
202
+ const timeoutMs = DEFAULT_CONNECT_TIMEOUT_MS;
203
+ try {
204
+ const client = await Promise.race([
205
+ pool.connect(),
206
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Connection to ${label} database timed out after ${timeoutMs}ms. ` +
207
+ `The server may require SSL, use an invalid certificate, or be unreachable.`)), timeoutMs)),
208
+ ]);
209
+ client.release();
210
+ }
211
+ catch (err) {
212
+ await pool.end().catch(() => { });
213
+ throw err;
214
+ }
215
+ return { pool, close: () => endPool(pool) };
216
+ }
217
+ export function endPool(pool) {
218
+ const clientCount = pool.totalCount;
219
+ if (clientCount === 0) {
220
+ return pool.end();
221
+ }
222
+ return new Promise((resolve, reject) => {
223
+ let removed = 0;
224
+ pool.on("remove", function onRemove() {
225
+ if (++removed >= clientCount) {
226
+ pool.removeListener("remove", onRemove);
227
+ resolve();
228
+ }
229
+ });
230
+ pool.end().catch(reject);
231
+ });
232
+ }
@@ -1,4 +1,4 @@
1
- import { getSchema } from "../integrations/filter/extractors.js";
1
+ import { getSchema } from "../change-utils.js";
2
2
  import { GrantRoleDefaultPrivileges, RevokeRoleDefaultPrivileges, } from "../objects/role/changes/role.privilege.js";
3
3
  /**
4
4
  * Maps object type names to PostgreSQL default privilege objtype codes.
@@ -56,7 +56,17 @@ export function convertExplicitRequirementsToConstraints(phaseChanges, graphData
56
56
  const requiredIds = graphData.explicitRequirementSets[consumerIndex];
57
57
  if (requiredIds.size === 0)
58
58
  continue;
59
+ // Collect dropped IDs for this change so we can skip requirements
60
+ // for stableIds that this change also drops. A change that drops a
61
+ // stableId should not depend on another change that creates the same
62
+ // stableId, because the entity already exists in the source database.
63
+ // This prevents false ordering constraints such as Grant → Revoke
64
+ // when both operate on the same ACL stableId.
65
+ const droppedIds = new Set(phaseChanges[consumerIndex].drops);
59
66
  for (const requiredId of requiredIds) {
67
+ if (droppedIds.has(requiredId)) {
68
+ continue;
69
+ }
60
70
  const producerIndexes = graphData.changeIndexesByCreatedId.get(requiredId);
61
71
  if (!producerIndexes || producerIndexes.size === 0)
62
72
  continue;
@@ -8,7 +8,7 @@
8
8
  * It groups related changes together while preserving the ability for the dependency
9
9
  * resolver to reorder within groups when necessary.
10
10
  */
11
- import { getSchema } from "../integrations/filter/extractors.js";
11
+ import { getSchema } from "../change-utils.js";
12
12
  import { getExecutionPhase, isMetadataStableId } from "./utils.js";
13
13
  /**
14
14
  * Object type ordering for logical grouping.
@@ -145,6 +145,25 @@ function getMainStableId(change) {
145
145
  }
146
146
  return null;
147
147
  }
148
+ // For default_privilege operations: group by role + schema combination (before CREATE so we group and use tiebreaker)
149
+ if (change.scope === "default_privilege") {
150
+ if (change.requires.length > 0) {
151
+ let grantingRole = null;
152
+ let schemaId = null;
153
+ for (const id of change.requires) {
154
+ if (id.startsWith("role:")) {
155
+ grantingRole = id;
156
+ }
157
+ else if (id.startsWith("schema:")) {
158
+ schemaId = id;
159
+ }
160
+ }
161
+ if (schemaId && grantingRole) {
162
+ return `${grantingRole}:${schemaId}`;
163
+ }
164
+ return grantingRole ?? null;
165
+ }
166
+ }
148
167
  // For CREATE operations: check if creating a constraint (sub-entity of table)
149
168
  if (change.operation === "create" && change.creates.length > 0) {
150
169
  // Iterate through creates to find the first non-metadata stable ID
@@ -182,29 +201,6 @@ function getMainStableId(change) {
182
201
  // Fallback: if all drops are metadata, use first
183
202
  return change.drops[0] ?? null;
184
203
  }
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
204
  // For ALTER operations: check if creating/dropping a constraint
209
205
  // Skip this for privilege/comment/default_privilege scopes (handled above)
210
206
  if (change.operation === "alter") {
@@ -291,27 +287,6 @@ function getParentStableId(change) {
291
287
  // Fallback: return first requires if available
292
288
  return requires.length > 0 ? requires[0] : null;
293
289
  }
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
290
  /**
316
291
  * Get the effective object type for sorting purposes.
317
292
  * For sub-entities, returns the parent's object type (table/view/materialized_view).
@@ -403,8 +378,8 @@ function sortPhase(changes, phase) {
403
378
  const changeA = a.change;
404
379
  const changeB = b.change;
405
380
  // 1. Compare schemas (group objects by schema)
406
- const schemaA = extractSchemaFromChange(changeA);
407
- const schemaB = extractSchemaFromChange(changeB);
381
+ const schemaA = getSchema(changeA);
382
+ const schemaB = getSchema(changeB);
408
383
  // Non-schema objects (roles, languages, extensions, etc.) sort first
409
384
  // Use a special prefix to ensure they come before schema objects
410
385
  const schemaKeyA = schemaA === null ? "::" : schemaA;
@@ -525,6 +500,18 @@ function sortPhase(changes, phase) {
525
500
  if (operationOrderA !== operationOrderB) {
526
501
  return operationOrderA - operationOrderB;
527
502
  }
503
+ // 6b. For default_privilege: deterministic tiebreaker by objtype then grantee (canonical order for objtype)
504
+ if (scopeA === "default_privilege" && scopeB === "default_privilege") {
505
+ const defPrivA = changeA;
506
+ const defPrivB = changeB;
507
+ const objtypeOrder = (code) => ({ n: 0, r: 1, S: 2, f: 3, T: 4 })[code] ?? 99;
508
+ const objtypeCompare = objtypeOrder(defPrivA.objtype) - objtypeOrder(defPrivB.objtype);
509
+ if (objtypeCompare !== 0)
510
+ return objtypeCompare;
511
+ const granteeCompare = defPrivA.grantee.localeCompare(defPrivB.grantee);
512
+ if (granteeCompare !== 0)
513
+ return granteeCompare;
514
+ }
528
515
  // 7. Preserve original order (stability)
529
516
  return a.originalIndex - b.originalIndex;
530
517
  });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Assert that the given SQL string is syntactically valid PostgreSQL.
3
+ *
4
+ * Uses the PostgreSQL parser from `@supabase/pg-topo` to ensure that
5
+ * serialized DDL statements are syntactically correct. This catches
6
+ * issues like malformed function signatures, missing keywords, etc.
7
+ *
8
+ * @param sql - The SQL string to validate (typically from `change.serialize()`).
9
+ */
10
+ export declare function assertValidSql(sql: string): Promise<void>;
@@ -0,0 +1,19 @@
1
+ import { validateSqlSyntax } from "@supabase/pg-topo";
2
+ /**
3
+ * Assert that the given SQL string is syntactically valid PostgreSQL.
4
+ *
5
+ * Uses the PostgreSQL parser from `@supabase/pg-topo` to ensure that
6
+ * serialized DDL statements are syntactically correct. This catches
7
+ * issues like malformed function signatures, missing keywords, etc.
8
+ *
9
+ * @param sql - The SQL string to validate (typically from `change.serialize()`).
10
+ */
11
+ export async function assertValidSql(sql) {
12
+ try {
13
+ await validateSqlSyntax(sql);
14
+ }
15
+ catch (error) {
16
+ const message = error instanceof Error ? error.message : "Unknown parser error";
17
+ throw new Error(`Invalid SQL syntax: ${message}\nSQL: ${sql}`);
18
+ }
19
+ }
package/dist/index.d.ts CHANGED
@@ -3,7 +3,16 @@
3
3
  *
4
4
  * This module exports the public API for the pg-delta library.
5
5
  */
6
+ export { Catalog, createEmptyCatalog, extractCatalog, } from "./core/catalog.model.ts";
7
+ export type { CatalogSnapshot } from "./core/catalog.snapshot.ts";
8
+ export { deserializeCatalog, serializeCatalog, stringifyCatalogSnapshot, } from "./core/catalog.snapshot.ts";
9
+ export { exportDeclarativeSchema } from "./core/export/index.ts";
10
+ export type { DeclarativeSchemaOutput, FileCategory, FileEntry, FileMetadata, } from "./core/export/types.ts";
6
11
  export type { IntegrationDSL } from "./core/integrations/integration-dsl.ts";
7
12
  export { applyPlan } from "./core/plan/apply.ts";
13
+ export type { CatalogInput } from "./core/plan/create.ts";
8
14
  export { createPlan } from "./core/plan/create.ts";
15
+ export type { SqlFormatOptions } from "./core/plan/sql-format.ts";
16
+ export { formatSqlStatements } from "./core/plan/sql-format.ts";
9
17
  export type { CreatePlanOptions, Plan } from "./core/plan/types.ts";
18
+ export { createManagedPool } from "./core/postgres-config.ts";
package/dist/index.js CHANGED
@@ -3,6 +3,14 @@
3
3
  *
4
4
  * This module exports the public API for the pg-delta library.
5
5
  */
6
+ // Catalog model and extraction
7
+ export { Catalog, createEmptyCatalog, extractCatalog, } from "./core/catalog.model.js";
8
+ export { deserializeCatalog, serializeCatalog, stringifyCatalogSnapshot, } from "./core/catalog.snapshot.js";
9
+ // Declarative schema export
10
+ export { exportDeclarativeSchema } from "./core/export/index.js";
11
+ // Plan operations
6
12
  export { applyPlan } from "./core/plan/apply.js";
7
- // Core operations
8
13
  export { createPlan } from "./core/plan/create.js";
14
+ export { formatSqlStatements } from "./core/plan/sql-format.js";
15
+ // Postgres config
16
+ export { createManagedPool } from "./core/postgres-config.js";
package/package.json CHANGED
@@ -1,18 +1,47 @@
1
1
  {
2
2
  "name": "@supabase/pg-delta",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "PostgreSQL migrations made easy",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
7
9
  "exports": {
8
- ".": "./dist/index.js",
9
- "./integrations/supabase": "./dist/core/integrations/supabase.js"
10
+ ".": {
11
+ "bun": "./src/index.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "default": "./dist/index.js"
16
+ },
17
+ "./integrations/supabase": {
18
+ "bun": "./src/core/integrations/supabase.ts",
19
+ "import": "./dist/core/integrations/supabase.js",
20
+ "require": "./dist/core/integrations/supabase.js",
21
+ "types": "./dist/core/integrations/supabase.d.ts",
22
+ "default": "./dist/core/integrations/supabase.js"
23
+ },
24
+ "./declarative": {
25
+ "bun": "./src/core/declarative-apply/index.ts",
26
+ "import": "./dist/core/declarative-apply/index.js",
27
+ "require": "./dist/core/declarative-apply/index.js",
28
+ "types": "./dist/core/declarative-apply/index.d.ts",
29
+ "default": "./dist/core/declarative-apply/index.js"
30
+ },
31
+ "./catalog-export": {
32
+ "bun": "./src/core/catalog-export/index.ts",
33
+ "import": "./dist/core/catalog-export/index.js",
34
+ "require": "./dist/core/catalog-export/index.js",
35
+ "types": "./dist/core/catalog-export/index.d.ts",
36
+ "default": "./dist/core/catalog-export/index.js"
37
+ }
10
38
  },
11
39
  "bin": {
12
40
  "pgdelta": "./dist/cli/bin/cli.js"
13
41
  },
14
42
  "files": [
15
43
  "dist",
44
+ "src",
16
45
  "README.md",
17
46
  "LICENSE"
18
47
  ],
@@ -26,43 +55,52 @@
26
55
  ],
27
56
  "author": "Supabase",
28
57
  "license": "MIT",
29
- "homepage": "https://github.com/supabase/pg-delta",
58
+ "homepage": "https://github.com/supabase/pg-toolbelt",
30
59
  "repository": {
31
60
  "type": "git",
32
- "url": "https://github.com/supabase/pg-delta.git"
61
+ "url": "https://github.com/supabase/pg-toolbelt.git",
62
+ "directory": "packages/pg-delta"
33
63
  },
34
- "bugs": "https://github.com/supabase/pg-delta/issues",
64
+ "bugs": "https://github.com/supabase/pg-toolbelt/issues",
35
65
  "engines": {
36
66
  "node": ">=20.0.0"
37
67
  },
68
+ "scripts": {
69
+ "build": "tsc --project tsconfig.build.json",
70
+ "check-types": "tsc --noEmit",
71
+ "docs": "typedoc",
72
+ "format-and-lint": "biome check . --error-on-warnings",
73
+ "knip": "knip",
74
+ "pgdelta": "bun src/cli/bin/cli.ts",
75
+ "test": "bun scripts/run-tests.ts",
76
+ "test:unit": "bun run test src/",
77
+ "test:integration": "bun run test tests/",
78
+ "update-empty-baseline": "bun scripts/update-empty-catalog-baseline.ts",
79
+ "version": "changeset version && bun install --no-frozen-lockfile && bun run format-and-lint --write"
80
+ },
38
81
  "dependencies": {
39
82
  "@stricli/core": "^1.2.4",
83
+ "@ts-safeql/sql-tag": "^0.2.0",
84
+ "@supabase/pg-topo": "^1.0.0-alpha.1",
40
85
  "chalk": "^5.6.2",
41
86
  "debug": "^4.3.7",
42
- "postgres": "^3.4.7",
87
+ "pg": "^8.17.2",
88
+ "picomatch": "^4.0.3",
43
89
  "zod": "^4.2.1"
44
90
  },
45
91
  "devDependencies": {
46
- "@biomejs/biome": "2.3.10",
47
- "@changesets/cli": "^2.29.8",
92
+ "@supabase/bun-istanbul-coverage": "workspace:*",
48
93
  "@tsconfig/node-ts": "^23.6.2",
49
94
  "@tsconfig/node24": "^24.0.3",
95
+ "@types/bun": "^1.3.9",
50
96
  "@types/debug": "^4.1.12",
51
97
  "@types/node": "^24.10.4",
52
- "@vitest/coverage-v8": "4.0.16",
98
+ "@types/pg": "^8.11.10",
99
+ "@types/picomatch": "^4.0.2",
53
100
  "dedent": "^1.7.1",
54
101
  "knip": "^5.75.2",
55
102
  "testcontainers": "^11.10.0",
56
- "typescript": "^5.9.3",
57
- "vitest": "^4.0.16"
58
- },
59
- "scripts": {
60
- "build": "tsc --project tsconfig.build.json",
61
- "check-types": "tsc --noEmit",
62
- "format-and-lint": "biome check . --error-on-warnings",
63
- "knip": "knip",
64
- "pgdelta": "node src/cli/bin/cli.ts",
65
- "test": "vitest",
66
- "version": "changeset version && pnpm install --no-frozen-lockfile && pnpm format-and-lint --write"
103
+ "typedoc": "^0.28.17",
104
+ "typescript": "^5.9.3"
67
105
  }
68
- }
106
+ }
package/src/cli/app.ts ADDED
@@ -0,0 +1,52 @@
1
+ import { buildApplication, buildRouteMap } from "@stricli/core";
2
+ import { applyCommand } from "./commands/apply.ts";
3
+ import { catalogExportCommand } from "./commands/catalog-export.ts";
4
+ import { declarativeApplyCommand } from "./commands/declarative-apply.ts";
5
+ import { declarativeExportCommand } from "./commands/declarative-export.ts";
6
+ import { planCommand } from "./commands/plan.ts";
7
+ import { syncCommand } from "./commands/sync.ts";
8
+
9
+ const declarativeRouteMap = buildRouteMap({
10
+ routes: {
11
+ apply: declarativeApplyCommand,
12
+ export: declarativeExportCommand,
13
+ },
14
+ docs: {
15
+ brief: "Declarative schema management",
16
+ fullDescription: `
17
+ Manage declarative SQL schemas.
18
+
19
+ Commands:
20
+ apply - Apply a declarative SQL schema to a database
21
+ export - Export a declarative schema from a database diff
22
+ `.trim(),
23
+ },
24
+ });
25
+
26
+ const root = buildRouteMap({
27
+ routes: {
28
+ plan: planCommand,
29
+ apply: applyCommand,
30
+ sync: syncCommand,
31
+ declarative: declarativeRouteMap,
32
+ "catalog-export": catalogExportCommand,
33
+ },
34
+ defaultCommand: "sync",
35
+ docs: {
36
+ brief: "PostgreSQL migrations made easy",
37
+ fullDescription: `
38
+ pgdelta generates migration scripts by comparing two PostgreSQL databases.
39
+
40
+ Commands:
41
+ plan - Compute schema diff and preview changes
42
+ apply - Apply a plan's migration script to a database
43
+ sync - Plan and apply changes in one go
44
+ declarative - Declarative schema (apply | export)
45
+ catalog-export - Export a database catalog as a snapshot JSON file
46
+ `.trim(),
47
+ },
48
+ });
49
+
50
+ export const app = buildApplication(root, {
51
+ name: "pgdelta",
52
+ });