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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/cli/app.d.ts +1 -0
  4. package/dist/cli/app.js +26 -0
  5. package/dist/cli/bin/cli.d.ts +2 -0
  6. package/dist/cli/bin/cli.js +7 -0
  7. package/dist/cli/commands/apply.d.ts +5 -0
  8. package/dist/cli/commands/apply.js +85 -0
  9. package/dist/cli/commands/plan.d.ts +5 -0
  10. package/dist/cli/commands/plan.js +137 -0
  11. package/dist/cli/commands/sync.d.ts +5 -0
  12. package/dist/cli/commands/sync.js +141 -0
  13. package/dist/cli/formatters/index.d.ts +4 -0
  14. package/dist/cli/formatters/index.js +4 -0
  15. package/dist/cli/formatters/tree/tree-builder.d.ts +10 -0
  16. package/dist/cli/formatters/tree/tree-builder.js +333 -0
  17. package/dist/cli/formatters/tree/tree-renderer.d.ts +45 -0
  18. package/dist/cli/formatters/tree/tree-renderer.js +303 -0
  19. package/dist/cli/formatters/tree/tree.d.ts +8 -0
  20. package/dist/cli/formatters/tree/tree.js +161 -0
  21. package/dist/cli/utils/integrations.d.ts +13 -0
  22. package/dist/cli/utils/integrations.js +35 -0
  23. package/dist/cli/utils.d.ts +64 -0
  24. package/dist/cli/utils.js +160 -0
  25. package/dist/core/catalog.diff.d.ts +5 -0
  26. package/dist/core/catalog.diff.js +147 -0
  27. package/dist/core/catalog.model.d.ts +93 -0
  28. package/dist/core/catalog.model.js +254 -0
  29. package/dist/core/change.types.d.ts +22 -0
  30. package/dist/core/change.types.js +1 -0
  31. package/dist/core/context.d.ts +11 -0
  32. package/dist/core/context.js +12 -0
  33. package/dist/core/depend.d.ts +31 -0
  34. package/dist/core/depend.js +1833 -0
  35. package/dist/core/expand-replace-dependencies.d.ts +14 -0
  36. package/dist/core/expand-replace-dependencies.js +280 -0
  37. package/dist/core/fingerprint.d.ts +23 -0
  38. package/dist/core/fingerprint.js +174 -0
  39. package/dist/core/index.d.ts +15 -0
  40. package/dist/core/index.js +14 -0
  41. package/dist/core/integrations/filter/dsl.d.ts +97 -0
  42. package/dist/core/integrations/filter/dsl.js +107 -0
  43. package/dist/core/integrations/filter/extractors.d.ts +12 -0
  44. package/dist/core/integrations/filter/extractors.js +136 -0
  45. package/dist/core/integrations/integration-dsl.d.ts +22 -0
  46. package/dist/core/integrations/integration-dsl.js +6 -0
  47. package/dist/core/integrations/integration.types.d.ts +5 -0
  48. package/dist/core/integrations/integration.types.js +1 -0
  49. package/dist/core/integrations/serialize/dsl.d.ts +58 -0
  50. package/dist/core/integrations/serialize/dsl.js +42 -0
  51. package/dist/core/main.d.ts +5 -0
  52. package/dist/core/main.js +44 -0
  53. package/dist/core/objects/aggregate/aggregate.diff.d.ts +10 -0
  54. package/dist/core/objects/aggregate/aggregate.diff.js +186 -0
  55. package/dist/core/objects/aggregate/aggregate.model.d.ts +174 -0
  56. package/dist/core/objects/aggregate/aggregate.model.js +297 -0
  57. package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +19 -0
  58. package/dist/core/objects/aggregate/changes/aggregate.alter.js +25 -0
  59. package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +17 -0
  60. package/dist/core/objects/aggregate/changes/aggregate.base.js +13 -0
  61. package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +23 -0
  62. package/dist/core/objects/aggregate/changes/aggregate.comment.js +44 -0
  63. package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +19 -0
  64. package/dist/core/objects/aggregate/changes/aggregate.create.js +228 -0
  65. package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +17 -0
  66. package/dist/core/objects/aggregate/changes/aggregate.drop.js +26 -0
  67. package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +62 -0
  68. package/dist/core/objects/aggregate/changes/aggregate.privilege.js +102 -0
  69. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +6 -0
  70. package/dist/core/objects/aggregate/changes/aggregate.types.js +1 -0
  71. package/dist/core/objects/base.change.d.ts +46 -0
  72. package/dist/core/objects/base.change.js +38 -0
  73. package/dist/core/objects/base.default-privileges.d.ts +29 -0
  74. package/dist/core/objects/base.default-privileges.js +167 -0
  75. package/dist/core/objects/base.diff.d.ts +6 -0
  76. package/dist/core/objects/base.diff.js +12 -0
  77. package/dist/core/objects/base.model.d.ts +74 -0
  78. package/dist/core/objects/base.model.js +47 -0
  79. package/dist/core/objects/base.privilege-diff.d.ts +54 -0
  80. package/dist/core/objects/base.privilege-diff.js +216 -0
  81. package/dist/core/objects/base.privilege.d.ts +27 -0
  82. package/dist/core/objects/base.privilege.js +169 -0
  83. package/dist/core/objects/collation/changes/collation.alter.d.ts +45 -0
  84. package/dist/core/objects/collation/changes/collation.alter.js +52 -0
  85. package/dist/core/objects/collation/changes/collation.base.d.ts +17 -0
  86. package/dist/core/objects/collation/changes/collation.base.js +13 -0
  87. package/dist/core/objects/collation/changes/collation.comment.d.ts +26 -0
  88. package/dist/core/objects/collation/changes/collation.comment.js +50 -0
  89. package/dist/core/objects/collation/changes/collation.create.d.ts +32 -0
  90. package/dist/core/objects/collation/changes/collation.create.js +86 -0
  91. package/dist/core/objects/collation/changes/collation.drop.d.ts +22 -0
  92. package/dist/core/objects/collation/changes/collation.drop.js +31 -0
  93. package/dist/core/objects/collation/changes/collation.types.d.ts +5 -0
  94. package/dist/core/objects/collation/changes/collation.types.js +1 -0
  95. package/dist/core/objects/collation/collation.diff.d.ts +13 -0
  96. package/dist/core/objects/collation/collation.diff.js +85 -0
  97. package/dist/core/objects/collation/collation.model.d.ts +67 -0
  98. package/dist/core/objects/collation/collation.model.js +207 -0
  99. package/dist/core/objects/domain/changes/domain.alter.d.ts +143 -0
  100. package/dist/core/objects/domain/changes/domain.alter.js +191 -0
  101. package/dist/core/objects/domain/changes/domain.base.d.ts +17 -0
  102. package/dist/core/objects/domain/changes/domain.base.js +13 -0
  103. package/dist/core/objects/domain/changes/domain.comment.d.ts +25 -0
  104. package/dist/core/objects/domain/changes/domain.comment.js +47 -0
  105. package/dist/core/objects/domain/changes/domain.create.d.ts +30 -0
  106. package/dist/core/objects/domain/changes/domain.create.js +92 -0
  107. package/dist/core/objects/domain/changes/domain.drop.d.ts +22 -0
  108. package/dist/core/objects/domain/changes/domain.drop.js +28 -0
  109. package/dist/core/objects/domain/changes/domain.privilege.d.ts +97 -0
  110. package/dist/core/objects/domain/changes/domain.privilege.js +127 -0
  111. package/dist/core/objects/domain/changes/domain.types.d.ts +6 -0
  112. package/dist/core/objects/domain/changes/domain.types.js +1 -0
  113. package/dist/core/objects/domain/domain.diff.d.ts +18 -0
  114. package/dist/core/objects/domain/domain.diff.js +244 -0
  115. package/dist/core/objects/domain/domain.model.d.ts +103 -0
  116. package/dist/core/objects/domain/domain.model.js +172 -0
  117. package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +44 -0
  118. package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +51 -0
  119. package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +17 -0
  120. package/dist/core/objects/event-trigger/changes/event-trigger.base.js +13 -0
  121. package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +23 -0
  122. package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +46 -0
  123. package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +25 -0
  124. package/dist/core/objects/event-trigger/changes/event-trigger.create.js +55 -0
  125. package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +22 -0
  126. package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +28 -0
  127. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +5 -0
  128. package/dist/core/objects/event-trigger/changes/event-trigger.types.js +1 -0
  129. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +13 -0
  130. package/dist/core/objects/event-trigger/event-trigger.diff.js +81 -0
  131. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +45 -0
  132. package/dist/core/objects/event-trigger/event-trigger.model.js +89 -0
  133. package/dist/core/objects/extension/changes/extension.alter.d.ts +44 -0
  134. package/dist/core/objects/extension/changes/extension.alter.js +51 -0
  135. package/dist/core/objects/extension/changes/extension.base.d.ts +17 -0
  136. package/dist/core/objects/extension/changes/extension.base.js +13 -0
  137. package/dist/core/objects/extension/changes/extension.comment.d.ts +26 -0
  138. package/dist/core/objects/extension/changes/extension.comment.js +46 -0
  139. package/dist/core/objects/extension/changes/extension.create.d.ts +25 -0
  140. package/dist/core/objects/extension/changes/extension.create.js +49 -0
  141. package/dist/core/objects/extension/changes/extension.drop.d.ts +22 -0
  142. package/dist/core/objects/extension/changes/extension.drop.js +28 -0
  143. package/dist/core/objects/extension/changes/extension.types.d.ts +5 -0
  144. package/dist/core/objects/extension/changes/extension.types.js +1 -0
  145. package/dist/core/objects/extension/extension.diff.d.ts +10 -0
  146. package/dist/core/objects/extension/extension.diff.js +65 -0
  147. package/dist/core/objects/extension/extension.model.d.ts +52 -0
  148. package/dist/core/objects/extension/extension.model.js +268 -0
  149. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +51 -0
  150. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +61 -0
  151. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.d.ts +17 -0
  152. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.js +13 -0
  153. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +26 -0
  154. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +50 -0
  155. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +25 -0
  156. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +78 -0
  157. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +22 -0
  158. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +28 -0
  159. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +97 -0
  160. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +123 -0
  161. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +6 -0
  162. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.js +1 -0
  163. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +18 -0
  164. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +221 -0
  165. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +59 -0
  166. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +128 -0
  167. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +5 -0
  168. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.js +1 -0
  169. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +163 -0
  170. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +248 -0
  171. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +17 -0
  172. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.js +13 -0
  173. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +26 -0
  174. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +50 -0
  175. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +25 -0
  176. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +64 -0
  177. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +22 -0
  178. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +31 -0
  179. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +97 -0
  180. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +129 -0
  181. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +6 -0
  182. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.js +1 -0
  183. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +18 -0
  184. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +268 -0
  185. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +117 -0
  186. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +215 -0
  187. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +65 -0
  188. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +84 -0
  189. package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.d.ts +17 -0
  190. package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.js +13 -0
  191. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +26 -0
  192. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +43 -0
  193. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +24 -0
  194. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +62 -0
  195. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +22 -0
  196. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +28 -0
  197. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +97 -0
  198. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +123 -0
  199. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +6 -0
  200. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.js +1 -0
  201. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +18 -0
  202. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +209 -0
  203. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +62 -0
  204. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +118 -0
  205. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +37 -0
  206. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +38 -0
  207. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.d.ts +17 -0
  208. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.js +13 -0
  209. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +24 -0
  210. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +52 -0
  211. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +23 -0
  212. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +34 -0
  213. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +4 -0
  214. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.js +1 -0
  215. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.d.ts +10 -0
  216. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.js +77 -0
  217. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +36 -0
  218. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +85 -0
  219. package/dist/core/objects/index/changes/index.alter.d.ts +76 -0
  220. package/dist/core/objects/index/changes/index.alter.js +94 -0
  221. package/dist/core/objects/index/changes/index.base.d.ts +17 -0
  222. package/dist/core/objects/index/changes/index.base.js +13 -0
  223. package/dist/core/objects/index/changes/index.comment.d.ts +26 -0
  224. package/dist/core/objects/index/changes/index.comment.js +50 -0
  225. package/dist/core/objects/index/changes/index.create.d.ts +30 -0
  226. package/dist/core/objects/index/changes/index.create.js +53 -0
  227. package/dist/core/objects/index/changes/index.drop.d.ts +22 -0
  228. package/dist/core/objects/index/changes/index.drop.js +28 -0
  229. package/dist/core/objects/index/changes/index.types.d.ts +5 -0
  230. package/dist/core/objects/index/changes/index.types.js +1 -0
  231. package/dist/core/objects/index/changes/utils.d.ts +3 -0
  232. package/dist/core/objects/index/changes/utils.js +6 -0
  233. package/dist/core/objects/index/index.diff.d.ts +12 -0
  234. package/dist/core/objects/index/index.diff.js +182 -0
  235. package/dist/core/objects/index/index.model.d.ts +150 -0
  236. package/dist/core/objects/index/index.model.js +340 -0
  237. package/dist/core/objects/language/changes/language.alter.d.ts +32 -0
  238. package/dist/core/objects/language/changes/language.alter.js +30 -0
  239. package/dist/core/objects/language/changes/language.base.d.ts +17 -0
  240. package/dist/core/objects/language/changes/language.base.js +13 -0
  241. package/dist/core/objects/language/changes/language.comment.d.ts +26 -0
  242. package/dist/core/objects/language/changes/language.comment.js +45 -0
  243. package/dist/core/objects/language/changes/language.create.d.ts +25 -0
  244. package/dist/core/objects/language/changes/language.create.js +76 -0
  245. package/dist/core/objects/language/changes/language.drop.d.ts +22 -0
  246. package/dist/core/objects/language/changes/language.drop.js +31 -0
  247. package/dist/core/objects/language/changes/language.privilege.d.ts +97 -0
  248. package/dist/core/objects/language/changes/language.privilege.js +128 -0
  249. package/dist/core/objects/language/changes/language.types.d.ts +6 -0
  250. package/dist/core/objects/language/changes/language.types.js +1 -0
  251. package/dist/core/objects/language/language.diff.d.ts +15 -0
  252. package/dist/core/objects/language/language.diff.js +117 -0
  253. package/dist/core/objects/language/language.model.d.ts +62 -0
  254. package/dist/core/objects/language/language.model.js +128 -0
  255. package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +67 -0
  256. package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +63 -0
  257. package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +17 -0
  258. package/dist/core/objects/materialized-view/changes/materialized-view.base.js +13 -0
  259. package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +53 -0
  260. package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +112 -0
  261. package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +35 -0
  262. package/dist/core/objects/materialized-view/changes/materialized-view.create.js +71 -0
  263. package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +26 -0
  264. package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +42 -0
  265. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +105 -0
  266. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +151 -0
  267. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +6 -0
  268. package/dist/core/objects/materialized-view/changes/materialized-view.types.js +1 -0
  269. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +18 -0
  270. package/dist/core/objects/materialized-view/materialized-view.diff.js +335 -0
  271. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +152 -0
  272. package/dist/core/objects/materialized-view/materialized-view.model.js +228 -0
  273. package/dist/core/objects/procedure/changes/procedure.alter.d.ts +143 -0
  274. package/dist/core/objects/procedure/changes/procedure.alter.js +207 -0
  275. package/dist/core/objects/procedure/changes/procedure.base.d.ts +17 -0
  276. package/dist/core/objects/procedure/changes/procedure.base.js +13 -0
  277. package/dist/core/objects/procedure/changes/procedure.comment.d.ts +26 -0
  278. package/dist/core/objects/procedure/changes/procedure.comment.js +52 -0
  279. package/dist/core/objects/procedure/changes/procedure.create.d.ts +42 -0
  280. package/dist/core/objects/procedure/changes/procedure.create.js +77 -0
  281. package/dist/core/objects/procedure/changes/procedure.drop.d.ts +23 -0
  282. package/dist/core/objects/procedure/changes/procedure.drop.js +37 -0
  283. package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +98 -0
  284. package/dist/core/objects/procedure/changes/procedure.privilege.js +144 -0
  285. package/dist/core/objects/procedure/changes/procedure.types.d.ts +6 -0
  286. package/dist/core/objects/procedure/changes/procedure.types.js +1 -0
  287. package/dist/core/objects/procedure/procedure.diff.d.ts +18 -0
  288. package/dist/core/objects/procedure/procedure.diff.js +282 -0
  289. package/dist/core/objects/procedure/procedure.model.d.ts +132 -0
  290. package/dist/core/objects/procedure/procedure.model.js +244 -0
  291. package/dist/core/objects/procedure/utils.d.ts +14 -0
  292. package/dist/core/objects/procedure/utils.js +55 -0
  293. package/dist/core/objects/publication/changes/publication.alter.d.ts +88 -0
  294. package/dist/core/objects/publication/changes/publication.alter.js +176 -0
  295. package/dist/core/objects/publication/changes/publication.base.d.ts +17 -0
  296. package/dist/core/objects/publication/changes/publication.base.js +13 -0
  297. package/dist/core/objects/publication/changes/publication.comment.d.ts +23 -0
  298. package/dist/core/objects/publication/changes/publication.comment.js +46 -0
  299. package/dist/core/objects/publication/changes/publication.create.d.ts +17 -0
  300. package/dist/core/objects/publication/changes/publication.create.js +61 -0
  301. package/dist/core/objects/publication/changes/publication.drop.d.ts +17 -0
  302. package/dist/core/objects/publication/changes/publication.drop.js +23 -0
  303. package/dist/core/objects/publication/changes/publication.types.d.ts +5 -0
  304. package/dist/core/objects/publication/changes/publication.types.js +1 -0
  305. package/dist/core/objects/publication/publication.diff.d.ts +5 -0
  306. package/dist/core/objects/publication/publication.diff.js +161 -0
  307. package/dist/core/objects/publication/publication.model.d.ts +96 -0
  308. package/dist/core/objects/publication/publication.model.js +186 -0
  309. package/dist/core/objects/publication/utils.d.ts +5 -0
  310. package/dist/core/objects/publication/utils.js +45 -0
  311. package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +62 -0
  312. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +90 -0
  313. package/dist/core/objects/rls-policy/changes/rls-policy.base.d.ts +17 -0
  314. package/dist/core/objects/rls-policy/changes/rls-policy.base.js +13 -0
  315. package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +23 -0
  316. package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +51 -0
  317. package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +27 -0
  318. package/dist/core/objects/rls-policy/changes/rls-policy.create.js +79 -0
  319. package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +22 -0
  320. package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +33 -0
  321. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +5 -0
  322. package/dist/core/objects/rls-policy/changes/rls-policy.types.js +1 -0
  323. package/dist/core/objects/rls-policy/rls-policy.diff.d.ts +10 -0
  324. package/dist/core/objects/rls-policy/rls-policy.diff.js +80 -0
  325. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +52 -0
  326. package/dist/core/objects/rls-policy/rls-policy.model.js +127 -0
  327. package/dist/core/objects/role/changes/role.alter.d.ts +78 -0
  328. package/dist/core/objects/role/changes/role.alter.js +55 -0
  329. package/dist/core/objects/role/changes/role.base.d.ts +17 -0
  330. package/dist/core/objects/role/changes/role.base.js +13 -0
  331. package/dist/core/objects/role/changes/role.comment.d.ts +23 -0
  332. package/dist/core/objects/role/changes/role.comment.js +42 -0
  333. package/dist/core/objects/role/changes/role.create.d.ts +38 -0
  334. package/dist/core/objects/role/changes/role.create.js +83 -0
  335. package/dist/core/objects/role/changes/role.drop.d.ts +22 -0
  336. package/dist/core/objects/role/changes/role.drop.js +28 -0
  337. package/dist/core/objects/role/changes/role.privilege.d.ts +148 -0
  338. package/dist/core/objects/role/changes/role.privilege.js +283 -0
  339. package/dist/core/objects/role/changes/role.types.d.ts +6 -0
  340. package/dist/core/objects/role/changes/role.types.js +1 -0
  341. package/dist/core/objects/role/role.diff.d.ts +13 -0
  342. package/dist/core/objects/role/role.diff.js +386 -0
  343. package/dist/core/objects/role/role.model.d.ts +89 -0
  344. package/dist/core/objects/role/role.model.js +312 -0
  345. package/dist/core/objects/rule/changes/rule.alter.d.ts +22 -0
  346. package/dist/core/objects/rule/changes/rule.alter.js +58 -0
  347. package/dist/core/objects/rule/changes/rule.base.d.ts +17 -0
  348. package/dist/core/objects/rule/changes/rule.base.js +13 -0
  349. package/dist/core/objects/rule/changes/rule.comment.d.ts +22 -0
  350. package/dist/core/objects/rule/changes/rule.comment.js +51 -0
  351. package/dist/core/objects/rule/changes/rule.create.d.ts +14 -0
  352. package/dist/core/objects/rule/changes/rule.create.js +28 -0
  353. package/dist/core/objects/rule/changes/rule.drop.d.ts +12 -0
  354. package/dist/core/objects/rule/changes/rule.drop.js +23 -0
  355. package/dist/core/objects/rule/changes/rule.types.d.ts +5 -0
  356. package/dist/core/objects/rule/changes/rule.types.js +1 -0
  357. package/dist/core/objects/rule/rule.diff.d.ts +3 -0
  358. package/dist/core/objects/rule/rule.diff.js +53 -0
  359. package/dist/core/objects/rule/rule.model.d.ts +72 -0
  360. package/dist/core/objects/rule/rule.model.js +156 -0
  361. package/dist/core/objects/schema/changes/schema.alter.d.ts +32 -0
  362. package/dist/core/objects/schema/changes/schema.alter.js +25 -0
  363. package/dist/core/objects/schema/changes/schema.base.d.ts +17 -0
  364. package/dist/core/objects/schema/changes/schema.base.js +13 -0
  365. package/dist/core/objects/schema/changes/schema.comment.d.ts +23 -0
  366. package/dist/core/objects/schema/changes/schema.comment.js +43 -0
  367. package/dist/core/objects/schema/changes/schema.create.d.ts +27 -0
  368. package/dist/core/objects/schema/changes/schema.create.js +38 -0
  369. package/dist/core/objects/schema/changes/schema.drop.d.ts +22 -0
  370. package/dist/core/objects/schema/changes/schema.drop.js +28 -0
  371. package/dist/core/objects/schema/changes/schema.privilege.d.ts +97 -0
  372. package/dist/core/objects/schema/changes/schema.privilege.js +131 -0
  373. package/dist/core/objects/schema/changes/schema.types.d.ts +6 -0
  374. package/dist/core/objects/schema/changes/schema.types.js +1 -0
  375. package/dist/core/objects/schema/schema.diff.d.ts +18 -0
  376. package/dist/core/objects/schema/schema.diff.js +142 -0
  377. package/dist/core/objects/schema/schema.model.d.ts +47 -0
  378. package/dist/core/objects/schema/schema.model.js +91 -0
  379. package/dist/core/objects/sequence/changes/sequence.alter.d.ts +59 -0
  380. package/dist/core/objects/sequence/changes/sequence.alter.js +75 -0
  381. package/dist/core/objects/sequence/changes/sequence.base.d.ts +17 -0
  382. package/dist/core/objects/sequence/changes/sequence.base.js +13 -0
  383. package/dist/core/objects/sequence/changes/sequence.comment.d.ts +23 -0
  384. package/dist/core/objects/sequence/changes/sequence.comment.js +47 -0
  385. package/dist/core/objects/sequence/changes/sequence.create.d.ts +25 -0
  386. package/dist/core/objects/sequence/changes/sequence.create.js +78 -0
  387. package/dist/core/objects/sequence/changes/sequence.drop.d.ts +22 -0
  388. package/dist/core/objects/sequence/changes/sequence.drop.js +31 -0
  389. package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +101 -0
  390. package/dist/core/objects/sequence/changes/sequence.privilege.js +135 -0
  391. package/dist/core/objects/sequence/changes/sequence.types.d.ts +6 -0
  392. package/dist/core/objects/sequence/changes/sequence.types.js +1 -0
  393. package/dist/core/objects/sequence/sequence.diff.d.ts +20 -0
  394. package/dist/core/objects/sequence/sequence.diff.js +258 -0
  395. package/dist/core/objects/sequence/sequence.model.d.ts +76 -0
  396. package/dist/core/objects/sequence/sequence.model.js +169 -0
  397. package/dist/core/objects/subscription/changes/subscription.alter.d.ts +56 -0
  398. package/dist/core/objects/subscription/changes/subscription.alter.js +82 -0
  399. package/dist/core/objects/subscription/changes/subscription.base.d.ts +17 -0
  400. package/dist/core/objects/subscription/changes/subscription.base.js +13 -0
  401. package/dist/core/objects/subscription/changes/subscription.comment.d.ts +23 -0
  402. package/dist/core/objects/subscription/changes/subscription.comment.js +46 -0
  403. package/dist/core/objects/subscription/changes/subscription.create.d.ts +12 -0
  404. package/dist/core/objects/subscription/changes/subscription.create.js +52 -0
  405. package/dist/core/objects/subscription/changes/subscription.drop.d.ts +11 -0
  406. package/dist/core/objects/subscription/changes/subscription.drop.js +15 -0
  407. package/dist/core/objects/subscription/changes/subscription.types.d.ts +5 -0
  408. package/dist/core/objects/subscription/changes/subscription.types.js +1 -0
  409. package/dist/core/objects/subscription/subscription.diff.d.ts +5 -0
  410. package/dist/core/objects/subscription/subscription.diff.js +167 -0
  411. package/dist/core/objects/subscription/subscription.model.d.ts +80 -0
  412. package/dist/core/objects/subscription/subscription.model.js +166 -0
  413. package/dist/core/objects/subscription/utils.d.ts +37 -0
  414. package/dist/core/objects/subscription/utils.js +112 -0
  415. package/dist/core/objects/table/changes/table.alter.d.ts +357 -0
  416. package/dist/core/objects/table/changes/table.alter.js +607 -0
  417. package/dist/core/objects/table/changes/table.base.d.ts +17 -0
  418. package/dist/core/objects/table/changes/table.base.js +13 -0
  419. package/dist/core/objects/table/changes/table.comment.d.ts +106 -0
  420. package/dist/core/objects/table/changes/table.comment.js +175 -0
  421. package/dist/core/objects/table/changes/table.create.d.ts +33 -0
  422. package/dist/core/objects/table/changes/table.create.js +145 -0
  423. package/dist/core/objects/table/changes/table.drop.d.ts +22 -0
  424. package/dist/core/objects/table/changes/table.drop.js +35 -0
  425. package/dist/core/objects/table/changes/table.privilege.d.ts +107 -0
  426. package/dist/core/objects/table/changes/table.privilege.js +150 -0
  427. package/dist/core/objects/table/changes/table.types.d.ts +6 -0
  428. package/dist/core/objects/table/changes/table.types.js +1 -0
  429. package/dist/core/objects/table/table.diff.d.ts +18 -0
  430. package/dist/core/objects/table/table.diff.js +668 -0
  431. package/dist/core/objects/table/table.model.d.ts +341 -0
  432. package/dist/core/objects/table/table.model.js +426 -0
  433. package/dist/core/objects/trigger/changes/trigger.alter.d.ts +29 -0
  434. package/dist/core/objects/trigger/changes/trigger.alter.js +27 -0
  435. package/dist/core/objects/trigger/changes/trigger.base.d.ts +17 -0
  436. package/dist/core/objects/trigger/changes/trigger.base.js +13 -0
  437. package/dist/core/objects/trigger/changes/trigger.comment.d.ts +23 -0
  438. package/dist/core/objects/trigger/changes/trigger.comment.js +51 -0
  439. package/dist/core/objects/trigger/changes/trigger.create.d.ts +41 -0
  440. package/dist/core/objects/trigger/changes/trigger.create.js +61 -0
  441. package/dist/core/objects/trigger/changes/trigger.drop.d.ts +22 -0
  442. package/dist/core/objects/trigger/changes/trigger.drop.js +33 -0
  443. package/dist/core/objects/trigger/changes/trigger.types.d.ts +5 -0
  444. package/dist/core/objects/trigger/changes/trigger.types.js +1 -0
  445. package/dist/core/objects/trigger/trigger.diff.d.ts +11 -0
  446. package/dist/core/objects/trigger/trigger.diff.js +84 -0
  447. package/dist/core/objects/trigger/trigger.model.d.ts +92 -0
  448. package/dist/core/objects/trigger/trigger.model.js +235 -0
  449. package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +81 -0
  450. package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +123 -0
  451. package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +17 -0
  452. package/dist/core/objects/type/composite-type/changes/composite-type.base.js +13 -0
  453. package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +53 -0
  454. package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +108 -0
  455. package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +23 -0
  456. package/dist/core/objects/type/composite-type/changes/composite-type.create.js +72 -0
  457. package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +22 -0
  458. package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +31 -0
  459. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +97 -0
  460. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +131 -0
  461. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +6 -0
  462. package/dist/core/objects/type/composite-type/changes/composite-type.types.js +1 -0
  463. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +18 -0
  464. package/dist/core/objects/type/composite-type/composite-type.diff.js +250 -0
  465. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +148 -0
  466. package/dist/core/objects/type/composite-type/composite-type.model.js +223 -0
  467. package/dist/core/objects/type/enum/changes/enum.alter.d.ts +52 -0
  468. package/dist/core/objects/type/enum/changes/enum.alter.js +60 -0
  469. package/dist/core/objects/type/enum/changes/enum.base.d.ts +17 -0
  470. package/dist/core/objects/type/enum/changes/enum.base.js +13 -0
  471. package/dist/core/objects/type/enum/changes/enum.comment.d.ts +26 -0
  472. package/dist/core/objects/type/enum/changes/enum.comment.js +47 -0
  473. package/dist/core/objects/type/enum/changes/enum.create.d.ts +22 -0
  474. package/dist/core/objects/type/enum/changes/enum.create.js +43 -0
  475. package/dist/core/objects/type/enum/changes/enum.drop.d.ts +22 -0
  476. package/dist/core/objects/type/enum/changes/enum.drop.js +28 -0
  477. package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +97 -0
  478. package/dist/core/objects/type/enum/changes/enum.privilege.js +131 -0
  479. package/dist/core/objects/type/enum/changes/enum.types.d.ts +6 -0
  480. package/dist/core/objects/type/enum/changes/enum.types.js +1 -0
  481. package/dist/core/objects/type/enum/enum.diff.d.ts +18 -0
  482. package/dist/core/objects/type/enum/enum.diff.js +268 -0
  483. package/dist/core/objects/type/enum/enum.model.d.ts +66 -0
  484. package/dist/core/objects/type/enum/enum.model.js +154 -0
  485. package/dist/core/objects/type/range/changes/range.alter.d.ts +33 -0
  486. package/dist/core/objects/type/range/changes/range.alter.js +30 -0
  487. package/dist/core/objects/type/range/changes/range.base.d.ts +17 -0
  488. package/dist/core/objects/type/range/changes/range.base.js +13 -0
  489. package/dist/core/objects/type/range/changes/range.comment.d.ts +26 -0
  490. package/dist/core/objects/type/range/changes/range.comment.js +47 -0
  491. package/dist/core/objects/type/range/changes/range.create.d.ts +31 -0
  492. package/dist/core/objects/type/range/changes/range.create.js +113 -0
  493. package/dist/core/objects/type/range/changes/range.drop.d.ts +22 -0
  494. package/dist/core/objects/type/range/changes/range.drop.js +28 -0
  495. package/dist/core/objects/type/range/changes/range.privilege.d.ts +97 -0
  496. package/dist/core/objects/type/range/changes/range.privilege.js +131 -0
  497. package/dist/core/objects/type/range/changes/range.types.d.ts +6 -0
  498. package/dist/core/objects/type/range/changes/range.types.js +1 -0
  499. package/dist/core/objects/type/range/range.diff.d.ts +18 -0
  500. package/dist/core/objects/type/range/range.diff.js +172 -0
  501. package/dist/core/objects/type/range/range.model.d.ts +81 -0
  502. package/dist/core/objects/type/range/range.model.js +165 -0
  503. package/dist/core/objects/type/type.types.d.ts +4 -0
  504. package/dist/core/objects/type/type.types.js +1 -0
  505. package/dist/core/objects/utils.d.ts +57 -0
  506. package/dist/core/objects/utils.js +137 -0
  507. package/dist/core/objects/view/changes/view.alter.d.ts +62 -0
  508. package/dist/core/objects/view/changes/view.alter.js +75 -0
  509. package/dist/core/objects/view/changes/view.base.d.ts +17 -0
  510. package/dist/core/objects/view/changes/view.base.js +13 -0
  511. package/dist/core/objects/view/changes/view.comment.d.ts +23 -0
  512. package/dist/core/objects/view/changes/view.comment.js +46 -0
  513. package/dist/core/objects/view/changes/view.create.d.ts +27 -0
  514. package/dist/core/objects/view/changes/view.create.js +57 -0
  515. package/dist/core/objects/view/changes/view.drop.d.ts +17 -0
  516. package/dist/core/objects/view/changes/view.drop.js +30 -0
  517. package/dist/core/objects/view/changes/view.privilege.d.ts +107 -0
  518. package/dist/core/objects/view/changes/view.privilege.js +150 -0
  519. package/dist/core/objects/view/changes/view.types.d.ts +6 -0
  520. package/dist/core/objects/view/changes/view.types.js +1 -0
  521. package/dist/core/objects/view/view.diff.d.ts +18 -0
  522. package/dist/core/objects/view/view.diff.js +270 -0
  523. package/dist/core/objects/view/view.model.d.ts +152 -0
  524. package/dist/core/objects/view/view.model.js +250 -0
  525. package/dist/core/plan/apply.d.ts +33 -0
  526. package/dist/core/plan/apply.js +112 -0
  527. package/dist/core/plan/create.d.ts +22 -0
  528. package/dist/core/plan/create.js +228 -0
  529. package/dist/core/plan/hierarchy.d.ts +19 -0
  530. package/dist/core/plan/hierarchy.js +488 -0
  531. package/dist/core/plan/index.d.ts +19 -0
  532. package/dist/core/plan/index.js +21 -0
  533. package/dist/core/plan/io.d.ts +12 -0
  534. package/dist/core/plan/io.js +17 -0
  535. package/dist/core/plan/risk.d.ts +10 -0
  536. package/dist/core/plan/risk.js +38 -0
  537. package/dist/core/plan/serialize.d.ts +26 -0
  538. package/dist/core/plan/serialize.js +176 -0
  539. package/dist/core/plan/statements.d.ts +8 -0
  540. package/dist/core/plan/statements.js +13 -0
  541. package/dist/core/plan/types.d.ts +153 -0
  542. package/dist/core/plan/types.js +32 -0
  543. package/dist/core/postgres-config.d.ts +8 -0
  544. package/dist/core/postgres-config.js +46 -0
  545. package/dist/core/sort/custom-constraints.d.ts +9 -0
  546. package/dist/core/sort/custom-constraints.js +133 -0
  547. package/dist/core/sort/debug-visualization.d.ts +8 -0
  548. package/dist/core/sort/debug-visualization.js +145 -0
  549. package/dist/core/sort/dependency-filter.d.ts +19 -0
  550. package/dist/core/sort/dependency-filter.js +152 -0
  551. package/dist/core/sort/graph-builder.d.ts +37 -0
  552. package/dist/core/sort/graph-builder.js +172 -0
  553. package/dist/core/sort/graph-utils.d.ts +14 -0
  554. package/dist/core/sort/graph-utils.js +41 -0
  555. package/dist/core/sort/logical-sort.d.ts +26 -0
  556. package/dist/core/sort/logical-sort.js +532 -0
  557. package/dist/core/sort/sort-changes.d.ts +28 -0
  558. package/dist/core/sort/sort-changes.js +147 -0
  559. package/dist/core/sort/topological-sort.d.ts +20 -0
  560. package/dist/core/sort/topological-sort.js +138 -0
  561. package/dist/core/sort/types.d.ts +102 -0
  562. package/dist/core/sort/types.js +1 -0
  563. package/dist/core/sort/utils.d.ts +23 -0
  564. package/dist/core/sort/utils.js +51 -0
  565. package/dist/index.d.ts +1 -0
  566. package/dist/index.js +1 -0
  567. package/package.json +58 -12
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Maps object type names to PostgreSQL default privilege objtype codes.
3
+ * Used to look up default privileges for different object types.
4
+ */
5
+ function objectTypeToObjtype(objectType) {
6
+ switch (objectType) {
7
+ case "table":
8
+ return "r"; // Relations (tables)
9
+ case "view":
10
+ return "r"; // Views are also relations
11
+ case "materialized_view":
12
+ return "r"; // Materialized views are also relations
13
+ case "sequence":
14
+ return "S"; // Sequences
15
+ case "procedure":
16
+ case "function":
17
+ case "aggregate":
18
+ return "f"; // Functions/routines
19
+ case "type":
20
+ case "domain":
21
+ case "enum":
22
+ case "range":
23
+ case "composite_type":
24
+ return "T"; // Types
25
+ case "schema":
26
+ return "n"; // Schemas
27
+ default:
28
+ return null;
29
+ }
30
+ }
31
+ /**
32
+ * Tracks the effective state of default privileges as changes are processed.
33
+ * This allows us to compute what default privileges would be in effect at any point
34
+ * in the migration script, accounting for ALTER DEFAULT PRIVILEGES statements.
35
+ */
36
+ export class DefaultPrivilegeState {
37
+ state = new Map(); // role -> objtype -> schema -> grantee -> privileges
38
+ constructor(initialRoles) {
39
+ // Initialize state from roles' default_privileges
40
+ for (const [_roleId, role] of Object.entries(initialRoles)) {
41
+ const roleName = role.name;
42
+ if (!this.state.has(roleName)) {
43
+ this.state.set(roleName, new Map());
44
+ }
45
+ // biome-ignore lint/style/noNonNullAssertion: roleName is guaranteed to be in the state
46
+ const roleState = this.state.get(roleName);
47
+ for (const defPriv of role.default_privileges) {
48
+ if (!roleState.has(defPriv.objtype)) {
49
+ roleState.set(defPriv.objtype, new Map());
50
+ }
51
+ // biome-ignore lint/style/noNonNullAssertion: objtype is guaranteed to be in the state
52
+ const objtypeState = roleState.get(defPriv.objtype);
53
+ const schemaKey = defPriv.in_schema ?? null;
54
+ if (!objtypeState.has(schemaKey)) {
55
+ objtypeState.set(schemaKey, new Map());
56
+ }
57
+ // biome-ignore lint/style/noNonNullAssertion: schemaKey is guaranteed to be in the state
58
+ const schemaState = objtypeState.get(schemaKey);
59
+ if (!schemaState.has(defPriv.grantee)) {
60
+ schemaState.set(defPriv.grantee, new Set());
61
+ }
62
+ // biome-ignore lint/style/noNonNullAssertion: grantee is guaranteed to be in the state
63
+ const privileges = schemaState.get(defPriv.grantee);
64
+ for (const priv of defPriv.privileges) {
65
+ const key = `${priv.privilege}:${priv.grantable}`;
66
+ privileges.add(key);
67
+ }
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Apply a GrantRoleDefaultPrivileges change to the state.
73
+ */
74
+ applyGrant(roleName, objtype, inSchema, grantee, privileges) {
75
+ if (!this.state.has(roleName)) {
76
+ this.state.set(roleName, new Map());
77
+ }
78
+ // biome-ignore lint/style/noNonNullAssertion: roleName is guaranteed to be in the state
79
+ const roleState = this.state.get(roleName);
80
+ if (!roleState.has(objtype)) {
81
+ roleState.set(objtype, new Map());
82
+ }
83
+ // biome-ignore lint/style/noNonNullAssertion: objtype is guaranteed to be in the state
84
+ const objtypeState = roleState.get(objtype);
85
+ const schemaKey = inSchema ?? null;
86
+ if (!objtypeState.has(schemaKey)) {
87
+ objtypeState.set(schemaKey, new Map());
88
+ }
89
+ // biome-ignore lint/style/noNonNullAssertion: schemaKey is guaranteed to be in the state
90
+ const schemaState = objtypeState.get(schemaKey);
91
+ if (!schemaState.has(grantee)) {
92
+ schemaState.set(grantee, new Set());
93
+ }
94
+ // biome-ignore lint/style/noNonNullAssertion: grantee is guaranteed to be in the state
95
+ const privilegesSet = schemaState.get(grantee);
96
+ for (const priv of privileges) {
97
+ const key = `${priv.privilege}:${priv.grantable}`;
98
+ privilegesSet.add(key);
99
+ }
100
+ }
101
+ /**
102
+ * Apply a RevokeRoleDefaultPrivileges change to the state.
103
+ */
104
+ applyRevoke(roleName, objtype, inSchema, grantee, privileges) {
105
+ const roleState = this.state.get(roleName);
106
+ if (!roleState)
107
+ return;
108
+ const objtypeState = roleState.get(objtype);
109
+ if (!objtypeState)
110
+ return;
111
+ const schemaKey = inSchema ?? null;
112
+ const schemaState = objtypeState.get(schemaKey);
113
+ if (!schemaState)
114
+ return;
115
+ const privilegesSet = schemaState.get(grantee);
116
+ if (!privilegesSet)
117
+ return;
118
+ for (const priv of privileges) {
119
+ const key = `${priv.privilege}:${priv.grantable}`;
120
+ privilegesSet.delete(key);
121
+ // Also remove base privilege if grantable was revoked
122
+ if (priv.grantable) {
123
+ const baseKey = `${priv.privilege}:false`;
124
+ privilegesSet.delete(baseKey);
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Get effective default privileges for a given object creation.
130
+ */
131
+ getEffectiveDefaults(currentUser, objectType, objectSchema) {
132
+ const objtype = objectTypeToObjtype(objectType);
133
+ if (!objtype)
134
+ return [];
135
+ const roleState = this.state.get(currentUser);
136
+ if (!roleState)
137
+ return [];
138
+ const objtypeState = roleState.get(objtype);
139
+ if (!objtypeState)
140
+ return [];
141
+ const defaultPrivs = [];
142
+ // Check schema-specific first, then global (null schema)
143
+ const schemasToCheck = [objectSchema, null];
144
+ for (const schemaKey of schemasToCheck) {
145
+ const schemaState = objtypeState.get(schemaKey);
146
+ if (!schemaState)
147
+ continue;
148
+ for (const [grantee, privilegesSet] of schemaState.entries()) {
149
+ for (const privKey of privilegesSet) {
150
+ const [privilege, grantableStr] = privKey.split(":");
151
+ const grantable = grantableStr === "true";
152
+ defaultPrivs.push({
153
+ grantee,
154
+ privilege,
155
+ grantable,
156
+ columns: null,
157
+ });
158
+ }
159
+ }
160
+ // Schema-specific takes precedence, so break after first match
161
+ if (schemaKey === objectSchema && schemaState.size > 0) {
162
+ break;
163
+ }
164
+ }
165
+ return defaultPrivs;
166
+ }
167
+ }
@@ -0,0 +1,6 @@
1
+ import type { BasePgModel } from "./base.model.ts";
2
+ export declare function diffObjects<T extends BasePgModel>(main: Record<string, T>, branch: Record<string, T>): {
3
+ created: string[];
4
+ dropped: string[];
5
+ altered: string[];
6
+ };
@@ -0,0 +1,12 @@
1
+ export function diffObjects(main, branch) {
2
+ const mainIds = new Set(Object.keys(main));
3
+ const branchIds = new Set(Object.keys(branch));
4
+ const created = [...branchIds.difference(mainIds)];
5
+ const dropped = [...mainIds.difference(branchIds)];
6
+ const altered = [...mainIds.intersection(branchIds)].filter((id) => {
7
+ const mainModel = main[id];
8
+ const branchModel = branch[id];
9
+ return !mainModel.equals(branchModel);
10
+ });
11
+ return { created, dropped, altered };
12
+ }
@@ -0,0 +1,74 @@
1
+ import z from "zod";
2
+ export declare const columnPropsSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ position: z.ZodNumber;
5
+ data_type: z.ZodString;
6
+ data_type_str: z.ZodString;
7
+ is_custom_type: z.ZodBoolean;
8
+ custom_type_type: z.ZodNullable<z.ZodString>;
9
+ custom_type_category: z.ZodNullable<z.ZodString>;
10
+ custom_type_schema: z.ZodNullable<z.ZodString>;
11
+ custom_type_name: z.ZodNullable<z.ZodString>;
12
+ not_null: z.ZodBoolean;
13
+ is_identity: z.ZodBoolean;
14
+ is_identity_always: z.ZodBoolean;
15
+ is_generated: z.ZodBoolean;
16
+ collation: z.ZodNullable<z.ZodString>;
17
+ default: z.ZodNullable<z.ZodString>;
18
+ comment: z.ZodNullable<z.ZodString>;
19
+ }, z.z.core.$strip>;
20
+ export type ColumnProps = z.infer<typeof columnPropsSchema>;
21
+ export declare function normalizeColumns(columns: ColumnProps[]): {
22
+ name: string;
23
+ data_type: string;
24
+ data_type_str: string;
25
+ is_custom_type: boolean;
26
+ custom_type_type: string | null;
27
+ custom_type_category: string | null;
28
+ custom_type_schema: string | null;
29
+ custom_type_name: string | null;
30
+ not_null: boolean;
31
+ is_identity: boolean;
32
+ is_identity_always: boolean;
33
+ is_generated: boolean;
34
+ collation: string | null;
35
+ default: string | null;
36
+ comment: string | null;
37
+ }[];
38
+ /**
39
+ * Interface for table-like objects that have columns (tables, views, materialized views).
40
+ * In PostgreSQL, these are relations with relkind in ('r', 'p', 'v', 'm').
41
+ */
42
+ export interface TableLikeObject {
43
+ readonly columns: ColumnProps[];
44
+ }
45
+ export declare abstract class BasePgModel {
46
+ /**
47
+ * Database-portable stable identifier for dependency resolution.
48
+ * This identifier remains constant across database dumps/restores and
49
+ * is used for cross-database dependency resolution.
50
+ */
51
+ abstract get stableId(): string;
52
+ /**
53
+ * Get all identity fields and their values.
54
+ * Subclasses should override this to return the identity fields.
55
+ */
56
+ abstract get identityFields(): Record<string, unknown>;
57
+ /**
58
+ * Get all data fields and their values.
59
+ * Subclasses should override this to return the data fields.
60
+ */
61
+ abstract get dataFields(): Record<string, unknown>;
62
+ /**
63
+ * Compare this object with another BasePgModel for equality based on stableId and dataFields.
64
+ */
65
+ equals(other: BasePgModel): boolean;
66
+ /**
67
+ * Stable representation used for equality/fingerprints.
68
+ * Subclasses can override to normalize unstable fields.
69
+ */
70
+ stableSnapshot(): {
71
+ identity: Record<string, unknown>;
72
+ data: Record<string, unknown>;
73
+ };
74
+ }
@@ -0,0 +1,47 @@
1
+ import z from "zod";
2
+ import { deepEqual } from "./utils.js";
3
+ export const columnPropsSchema = z.object({
4
+ name: z.string(),
5
+ position: z.number(),
6
+ data_type: z.string(),
7
+ data_type_str: z.string(),
8
+ is_custom_type: z.boolean(),
9
+ custom_type_type: z.string().nullable(),
10
+ custom_type_category: z.string().nullable(),
11
+ custom_type_schema: z.string().nullable(),
12
+ custom_type_name: z.string().nullable(),
13
+ not_null: z.boolean(),
14
+ is_identity: z.boolean(),
15
+ is_identity_always: z.boolean(),
16
+ is_generated: z.boolean(),
17
+ collation: z.string().nullable(),
18
+ default: z.string().nullable(),
19
+ comment: z.string().nullable(),
20
+ });
21
+ export function normalizeColumns(columns) {
22
+ return columns
23
+ .map((column) => {
24
+ const { position: _position, ...rest } = column;
25
+ return rest;
26
+ })
27
+ .sort((a, b) => a.name.localeCompare(b.name));
28
+ }
29
+ export class BasePgModel {
30
+ /**
31
+ * Compare this object with another BasePgModel for equality based on stableId and dataFields.
32
+ */
33
+ equals(other) {
34
+ return (this.stableId === other.stableId &&
35
+ deepEqual(this.dataFields, other.dataFields));
36
+ }
37
+ /**
38
+ * Stable representation used for equality/fingerprints.
39
+ * Subclasses can override to normalize unstable fields.
40
+ */
41
+ stableSnapshot() {
42
+ return {
43
+ identity: this.identityFields,
44
+ data: this.dataFields,
45
+ };
46
+ }
47
+ }
@@ -0,0 +1,54 @@
1
+ import z from "zod";
2
+ import type { Change } from "../change.types.ts";
3
+ import type { Role } from "./role/role.model.ts";
4
+ /**
5
+ * Privilege properties that all privilege objects share.
6
+ */
7
+ export declare const privilegePropsSchema: z.ZodObject<{
8
+ grantee: z.ZodString;
9
+ privilege: z.ZodString;
10
+ grantable: z.ZodBoolean;
11
+ columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
12
+ }, z.z.core.$strip>;
13
+ export type PrivilegeProps = z.infer<typeof privilegePropsSchema>;
14
+ /**
15
+ * Result of privilege diffing for a single grantee
16
+ */
17
+ interface PrivilegeDiffResult<T extends PrivilegeProps> {
18
+ grants: T[];
19
+ revokes: T[];
20
+ revokeGrantOption: string[];
21
+ }
22
+ /**
23
+ * Groups privileges by grantable flag for efficient SQL generation
24
+ */
25
+ export declare function groupPrivilegesByGrantable<T extends PrivilegeProps>(privileges: T[]): Map<boolean, T[]>;
26
+ /**
27
+ * Groups privileges by columns and grantable flag
28
+ */
29
+ export declare function groupPrivilegesByColumns<T extends PrivilegeProps>(privileges: T[]): Map<string, {
30
+ columns?: string[];
31
+ byGrant: Map<boolean, Set<string>>;
32
+ }>;
33
+ /**
34
+ * Filters out PUBLIC's built-in default privileges that PostgreSQL automatically grants
35
+ * when creating certain object types. This prevents generating unnecessary GRANT statements
36
+ * for privileges that PostgreSQL grants automatically.
37
+ *
38
+ * Reference: PostgreSQL 17 Documentation, Table 5.2 "Summary of Access Privileges"
39
+ * https://www.postgresql.org/docs/17/ddl-priv.html
40
+ *
41
+ * Objects with default PUBLIC privileges:
42
+ * - Functions/Procedures/Aggregates: EXECUTE
43
+ * - Types/Domains/Enums/Ranges/Composite Types: USAGE
44
+ * - Languages: USAGE
45
+ *
46
+ * Objects WITHOUT default PUBLIC privileges (so we should generate GRANT statements):
47
+ * - Tables, Views, Materialized Views, Sequences, Schemas, etc.
48
+ */
49
+ export declare function filterPublicBuiltInDefaults<T extends PrivilegeProps>(objectType: Change["objectType"], privileges: T[]): T[];
50
+ /**
51
+ * Generic privilege diffing function that works for any object type
52
+ */
53
+ export declare function diffPrivileges<T extends PrivilegeProps>(mainPrivileges: T[], branchPrivileges: T[], owner?: string, mainRoles?: Record<string, Role>): Map<string, PrivilegeDiffResult<T>>;
54
+ export {};
@@ -0,0 +1,216 @@
1
+ import z from "zod";
2
+ import { stableId } from "./utils.js";
3
+ /**
4
+ * Privilege properties that all privilege objects share.
5
+ */
6
+ export const privilegePropsSchema = z.object({
7
+ grantee: z.string(),
8
+ privilege: z.string(),
9
+ grantable: z.boolean(),
10
+ columns: z.array(z.string()).nullable().optional(),
11
+ });
12
+ /**
13
+ * Groups privileges by grantee for efficient diffing
14
+ */
15
+ function groupPrivilegesByGrantee(privileges) {
16
+ const byGrantee = new Map();
17
+ for (const privilege of privileges) {
18
+ const existing = byGrantee.get(privilege.grantee) || [];
19
+ existing.push(privilege);
20
+ byGrantee.set(privilege.grantee, existing);
21
+ }
22
+ return byGrantee;
23
+ }
24
+ /**
25
+ * Diffs privileges for a single grantee between main and branch
26
+ */
27
+ function diffPrivilegesForGrantee(mainPrivs, branchPrivs) {
28
+ // Create comparison key - always include columns (null for object-level privileges)
29
+ const toKey = (p) => {
30
+ const cols = p.columns || [];
31
+ return `${p.privilege}:${p.grantable}:${cols.sort().join(",")}`;
32
+ };
33
+ // Create key-to-object mappings to retain original data structures
34
+ const mainKeyToObj = new Map(mainPrivs.map((p) => [toKey(p), p]));
35
+ const branchKeyToObj = new Map(branchPrivs.map((p) => [toKey(p), p]));
36
+ const aSet = new Set(mainPrivs.map(toKey));
37
+ const bSet = new Set(branchPrivs.map(toKey));
38
+ const grants = [];
39
+ const revokes = [];
40
+ const revokeGrantOption = [];
41
+ // Find privileges to grant
42
+ for (const key of bSet) {
43
+ if (!aSet.has(key)) {
44
+ const obj = branchKeyToObj.get(key);
45
+ if (obj)
46
+ grants.push(obj);
47
+ }
48
+ }
49
+ // Find privileges to revoke
50
+ for (const key of aSet) {
51
+ if (!bSet.has(key)) {
52
+ const obj = mainKeyToObj.get(key);
53
+ if (!obj)
54
+ continue;
55
+ const wasGrantable = obj.grantable;
56
+ // Upgrade: base -> with grant option (no base revoke)
57
+ const upgradedKey = key.replace(":false", ":true");
58
+ const upgraded = !wasGrantable && bSet.has(upgradedKey);
59
+ if (upgraded)
60
+ continue;
61
+ // If only grantable flipped from true to false, emit REVOKE GRANT OPTION FOR
62
+ const stillHasBase = checkStillHasBase(branchPrivs, obj.privilege, key);
63
+ if (wasGrantable && stillHasBase) {
64
+ revokeGrantOption.push(obj.privilege);
65
+ }
66
+ else {
67
+ revokes.push(obj);
68
+ }
69
+ }
70
+ }
71
+ return { grants, revokes, revokeGrantOption };
72
+ }
73
+ /**
74
+ * Check if a privilege still exists in the target set
75
+ */
76
+ function checkStillHasBase(targetPrivs, privilege, key) {
77
+ const [, , columnsStr] = key.split(":");
78
+ return targetPrivs.some((p) => p.privilege === privilege &&
79
+ (p.columns || []).sort().join(",") === columnsStr);
80
+ }
81
+ /**
82
+ * Groups privileges by grantable flag for efficient SQL generation
83
+ */
84
+ export function groupPrivilegesByGrantable(privileges) {
85
+ const groups = new Map();
86
+ for (const privilege of privileges) {
87
+ const arr = groups.get(privilege.grantable) ?? [];
88
+ arr.push(privilege);
89
+ groups.set(privilege.grantable, arr);
90
+ }
91
+ return groups;
92
+ }
93
+ /**
94
+ * Groups privileges by columns and grantable flag
95
+ */
96
+ export function groupPrivilegesByColumns(privileges) {
97
+ const groups = new Map();
98
+ for (const privilege of privileges) {
99
+ const key = privilege.columns ? privilege.columns.sort().join(",") : "";
100
+ if (!groups.has(key)) {
101
+ groups.set(key, {
102
+ columns: privilege.columns ? [...privilege.columns] : undefined,
103
+ byGrant: new Map(),
104
+ });
105
+ }
106
+ const group = groups.get(key);
107
+ if (!group)
108
+ continue;
109
+ if (!group.byGrant.has(privilege.grantable)) {
110
+ group.byGrant.set(privilege.grantable, new Set());
111
+ }
112
+ const privSet = group.byGrant.get(privilege.grantable);
113
+ if (!privSet)
114
+ continue;
115
+ privSet.add(privilege.privilege);
116
+ }
117
+ return groups;
118
+ }
119
+ /**
120
+ * Filters out PUBLIC's built-in default privileges that PostgreSQL automatically grants
121
+ * when creating certain object types. This prevents generating unnecessary GRANT statements
122
+ * for privileges that PostgreSQL grants automatically.
123
+ *
124
+ * Reference: PostgreSQL 17 Documentation, Table 5.2 "Summary of Access Privileges"
125
+ * https://www.postgresql.org/docs/17/ddl-priv.html
126
+ *
127
+ * Objects with default PUBLIC privileges:
128
+ * - Functions/Procedures/Aggregates: EXECUTE
129
+ * - Types/Domains/Enums/Ranges/Composite Types: USAGE
130
+ * - Languages: USAGE
131
+ *
132
+ * Objects WITHOUT default PUBLIC privileges (so we should generate GRANT statements):
133
+ * - Tables, Views, Materialized Views, Sequences, Schemas, etc.
134
+ */
135
+ export function filterPublicBuiltInDefaults(objectType, privileges) {
136
+ // Only filter PUBLIC privileges
137
+ return privileges.filter((priv) => {
138
+ if (priv.grantee !== "PUBLIC") {
139
+ return true; // Keep all non-PUBLIC privileges
140
+ }
141
+ // Check if this is a built-in default privilege for this object type
142
+ switch (objectType) {
143
+ case "procedure":
144
+ case "aggregate":
145
+ // Functions/Procedures/Aggregates: EXECUTE is granted to PUBLIC by default
146
+ // Filter it out so we don't generate unnecessary GRANT EXECUTE TO PUBLIC
147
+ return priv.privilege !== "EXECUTE";
148
+ case "domain":
149
+ case "enum":
150
+ case "range":
151
+ case "composite_type":
152
+ // Types/Domains/Enums/Ranges/Composite Types: USAGE is granted to PUBLIC by default
153
+ // Filter it out so we don't generate unnecessary GRANT USAGE TO PUBLIC
154
+ return priv.privilege !== "USAGE";
155
+ case "language":
156
+ // Languages: USAGE is granted to PUBLIC by default
157
+ // Filter it out so we don't generate unnecessary GRANT USAGE TO PUBLIC
158
+ return priv.privilege !== "USAGE";
159
+ default:
160
+ // For other object types (tables, views, sequences, schemas, etc.),
161
+ // PUBLIC has NO default privileges, so we should keep all PUBLIC privileges
162
+ // and generate GRANT statements for them
163
+ return true;
164
+ }
165
+ });
166
+ }
167
+ /**
168
+ * Filter out owner privileges from a privilege list.
169
+ * Owner privileges are implicit (owner always has ALL) and shouldn't be compared.
170
+ */
171
+ function filterOwnerPrivileges(privileges, owner) {
172
+ return privileges.filter((p) => p.grantee !== owner);
173
+ }
174
+ /**
175
+ * Filter out privileges for superuser roles, as PostgreSQL doesn't store
176
+ * GRANTs to superusers in relacl (they already have all privileges implicitly).
177
+ * Reference: https://www.postgresql.org/docs/current/role-attributes.html
178
+ */
179
+ function filterSuperuserPrivileges(privileges, mainRoles) {
180
+ if (!mainRoles)
181
+ return privileges;
182
+ return privileges.filter((priv) => {
183
+ const role = mainRoles[stableId.role(priv.grantee)];
184
+ return !role?.is_superuser;
185
+ });
186
+ }
187
+ /**
188
+ * Generic privilege diffing function that works for any object type
189
+ */
190
+ export function diffPrivileges(mainPrivileges, branchPrivileges, owner, mainRoles) {
191
+ // Filter out superuser privileges from branch - PostgreSQL doesn't store GRANTs
192
+ // to superusers in relacl because they already have all privileges implicitly
193
+ const branchPrivilegesFiltered = filterSuperuserPrivileges(branchPrivileges, mainRoles);
194
+ // Filter out owner privileges if owner is provided
195
+ const mainFiltered = owner
196
+ ? filterOwnerPrivileges(mainPrivileges, owner)
197
+ : mainPrivileges;
198
+ const branchFiltered = owner
199
+ ? filterOwnerPrivileges(branchPrivilegesFiltered, owner)
200
+ : branchPrivilegesFiltered;
201
+ const mainByGrantee = groupPrivilegesByGrantee(mainFiltered);
202
+ const branchByGrantee = groupPrivilegesByGrantee(branchFiltered);
203
+ // Get all grantees
204
+ const allGrantees = new Set([
205
+ ...mainByGrantee.keys(),
206
+ ...branchByGrantee.keys(),
207
+ ]);
208
+ const results = new Map();
209
+ for (const grantee of allGrantees) {
210
+ const mainPrivs = mainByGrantee.get(grantee) || [];
211
+ const branchPrivs = branchByGrantee.get(grantee) || [];
212
+ const result = diffPrivilegesForGrantee(mainPrivs, branchPrivs);
213
+ results.set(grantee, result);
214
+ }
215
+ return results;
216
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Base utilities and helpers for object privilege changes.
3
+ * These functions support GRANT/REVOKE operations across different database objects.
4
+ */
5
+ import type { PrivilegeProps } from "./base.privilege-diff.ts";
6
+ /**
7
+ * Formats a list of privileges for use in GRANT/REVOKE statements.
8
+ * If the list represents all privileges, returns "ALL", otherwise returns a comma-separated list.
9
+ *
10
+ * @param kind - The PostgreSQL object kind
11
+ * @param list - Array of privilege names to format
12
+ * @param version - The PostgreSQL version number
13
+ * @returns A SQL-formatted privilege list (either "ALL" or "PRIV1, PRIV2, ...")
14
+ */
15
+ export declare function formatObjectPrivilegeList(kind: string, list: string[], version: number | undefined): string;
16
+ /**
17
+ * Gets the SQL keyword prefix for a given object kind in GRANT/REVOKE statements.
18
+ *
19
+ * @param objectKind - The PostgreSQL object kind
20
+ * @returns The SQL prefix (e.g., "ON SCHEMA", "ON DOMAIN", "ON")
21
+ */
22
+ export declare function getObjectKindPrefix(objectKind: string): string;
23
+ export declare function normalizePrivileges(privileges: PrivilegeProps[]): {
24
+ grantee: string;
25
+ privilege: string;
26
+ grantable: boolean;
27
+ }[];