@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,131 @@
1
+ import { formatObjectPrivilegeList, getObjectKindPrefix, } from "../../../base.privilege.js";
2
+ import { stableId } from "../../../utils.js";
3
+ import { AlterEnumChange } from "./enum.base.js";
4
+ /**
5
+ * Grant privileges on an enum type.
6
+ *
7
+ * @see https://www.postgresql.org/docs/17/sql-grant.html
8
+ *
9
+ * Synopsis
10
+ * ```sql
11
+ * GRANT { USAGE | ALL [ PRIVILEGES ] }
12
+ * ON TYPE type_name [, ...]
13
+ * TO role_specification [, ...] [ WITH GRANT OPTION ]
14
+ * [ GRANTED BY role_specification ]
15
+ * ```
16
+ */
17
+ export class GrantEnumPrivileges extends AlterEnumChange {
18
+ enum;
19
+ grantee;
20
+ privileges;
21
+ version;
22
+ scope = "privilege";
23
+ constructor(props) {
24
+ super();
25
+ this.enum = props.enum;
26
+ this.grantee = props.grantee;
27
+ this.privileges = props.privileges;
28
+ this.version = props.version;
29
+ }
30
+ get creates() {
31
+ return [stableId.acl(this.enum.stableId, this.grantee)];
32
+ }
33
+ get requires() {
34
+ return [this.enum.stableId, stableId.role(this.grantee)];
35
+ }
36
+ serialize() {
37
+ const hasGrantable = this.privileges.some((p) => p.grantable);
38
+ const hasBase = this.privileges.some((p) => !p.grantable);
39
+ if (hasGrantable && hasBase) {
40
+ throw new Error("GrantEnumPrivileges expects privileges with uniform grantable flag");
41
+ }
42
+ const withGrant = hasGrantable ? " WITH GRANT OPTION" : "";
43
+ const kindPrefix = getObjectKindPrefix("TYPE");
44
+ const list = this.privileges.map((p) => p.privilege);
45
+ const privSql = formatObjectPrivilegeList("TYPE", list, this.version);
46
+ const typeName = `${this.enum.schema}.${this.enum.name}`;
47
+ return `GRANT ${privSql} ${kindPrefix} ${typeName} TO ${this.grantee}${withGrant}`;
48
+ }
49
+ }
50
+ /**
51
+ * Revoke privileges on an enum type.
52
+ *
53
+ * @see https://www.postgresql.org/docs/17/sql-revoke.html
54
+ *
55
+ * Synopsis
56
+ * ```sql
57
+ * REVOKE [ GRANT OPTION FOR ]
58
+ * { USAGE | ALL [ PRIVILEGES ] }
59
+ * ON TYPE type_name [, ...]
60
+ * FROM role_specification [, ...]
61
+ * [ GRANTED BY role_specification ]
62
+ * [ CASCADE | RESTRICT ]
63
+ * ```
64
+ */
65
+ export class RevokeEnumPrivileges extends AlterEnumChange {
66
+ enum;
67
+ grantee;
68
+ privileges;
69
+ version;
70
+ scope = "privilege";
71
+ constructor(props) {
72
+ super();
73
+ this.enum = props.enum;
74
+ this.grantee = props.grantee;
75
+ this.privileges = props.privileges;
76
+ this.version = props.version;
77
+ }
78
+ get drops() {
79
+ // Return ACL ID for dependency tracking, even though this is an ALTER operation
80
+ // Phase assignment now uses operation type, so this won't affect phase placement
81
+ return [stableId.acl(this.enum.stableId, this.grantee)];
82
+ }
83
+ get requires() {
84
+ return [
85
+ stableId.acl(this.enum.stableId, this.grantee),
86
+ this.enum.stableId,
87
+ stableId.role(this.grantee),
88
+ ];
89
+ }
90
+ serialize() {
91
+ const kindPrefix = getObjectKindPrefix("TYPE");
92
+ const list = this.privileges.map((p) => p.privilege);
93
+ const privSql = formatObjectPrivilegeList("TYPE", list, this.version);
94
+ const typeName = `${this.enum.schema}.${this.enum.name}`;
95
+ return `REVOKE ${privSql} ${kindPrefix} ${typeName} FROM ${this.grantee}`;
96
+ }
97
+ }
98
+ /**
99
+ * Revoke grant option for privileges on an enum type.
100
+ *
101
+ * This removes the ability to grant the privilege to others, but keeps the privilege itself.
102
+ *
103
+ * @see https://www.postgresql.org/docs/17/sql-revoke.html
104
+ */
105
+ export class RevokeGrantOptionEnumPrivileges extends AlterEnumChange {
106
+ enum;
107
+ grantee;
108
+ privilegeNames;
109
+ version;
110
+ scope = "privilege";
111
+ constructor(props) {
112
+ super();
113
+ this.enum = props.enum;
114
+ this.grantee = props.grantee;
115
+ this.privilegeNames = [...new Set(props.privilegeNames)].sort();
116
+ this.version = props.version;
117
+ }
118
+ get requires() {
119
+ return [
120
+ stableId.acl(this.enum.stableId, this.grantee),
121
+ this.enum.stableId,
122
+ stableId.role(this.grantee),
123
+ ];
124
+ }
125
+ serialize() {
126
+ const kindPrefix = getObjectKindPrefix("TYPE");
127
+ const privSql = formatObjectPrivilegeList("TYPE", this.privilegeNames, this.version);
128
+ const typeName = `${this.enum.schema}.${this.enum.name}`;
129
+ return `REVOKE GRANT OPTION FOR ${privSql} ${kindPrefix} ${typeName} FROM ${this.grantee}`;
130
+ }
131
+ }
@@ -0,0 +1,6 @@
1
+ import type { AlterEnum } from "./enum.alter.ts";
2
+ import type { CommentEnum } from "./enum.comment.ts";
3
+ import type { CreateEnum } from "./enum.create.ts";
4
+ import type { DropEnum } from "./enum.drop.ts";
5
+ import type { EnumPrivilege } from "./enum.privilege.ts";
6
+ export type EnumChange = AlterEnum | CommentEnum | CreateEnum | DropEnum | EnumPrivilege;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { DefaultPrivilegeState } from "../../base.default-privileges.ts";
2
+ import type { Role } from "../../role/role.model.ts";
3
+ import type { EnumChange } from "./changes/enum.types.ts";
4
+ import type { Enum } from "./enum.model.ts";
5
+ /**
6
+ * Diff two sets of enums from main and branch catalogs.
7
+ *
8
+ * @param ctx - Context containing version, currentUser, and defaultPrivilegeState
9
+ * @param main - The enums in the main catalog.
10
+ * @param branch - The enums in the branch catalog.
11
+ * @returns A list of changes to apply to main to make it match branch.
12
+ */
13
+ export declare function diffEnums(ctx: {
14
+ version: number;
15
+ currentUser: string;
16
+ defaultPrivilegeState: DefaultPrivilegeState;
17
+ mainRoles: Record<string, Role>;
18
+ }, main: Record<string, Enum>, branch: Record<string, Enum>): EnumChange[];
@@ -0,0 +1,268 @@
1
+ import { diffObjects } from "../../base.diff.js";
2
+ import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../../base.privilege-diff.js";
3
+ import { AlterEnumAddValue, AlterEnumChangeOwner, } from "./changes/enum.alter.js";
4
+ import { CreateCommentOnEnum, DropCommentOnEnum, } from "./changes/enum.comment.js";
5
+ import { CreateEnum } from "./changes/enum.create.js";
6
+ import { DropEnum } from "./changes/enum.drop.js";
7
+ import { GrantEnumPrivileges, RevokeEnumPrivileges, RevokeGrantOptionEnumPrivileges, } from "./changes/enum.privilege.js";
8
+ /**
9
+ * Diff two sets of enums from main and branch catalogs.
10
+ *
11
+ * @param ctx - Context containing version, currentUser, and defaultPrivilegeState
12
+ * @param main - The enums in the main catalog.
13
+ * @param branch - The enums in the branch catalog.
14
+ * @returns A list of changes to apply to main to make it match branch.
15
+ */
16
+ export function diffEnums(ctx, main, branch) {
17
+ const { created, dropped, altered } = diffObjects(main, branch);
18
+ const changes = [];
19
+ for (const enumId of created) {
20
+ const createdEnum = branch[enumId];
21
+ changes.push(new CreateEnum({ enum: createdEnum }));
22
+ // OWNER: If the enum should be owned by someone other than the current user,
23
+ // emit ALTER TYPE ... OWNER TO after creation
24
+ if (createdEnum.owner !== ctx.currentUser) {
25
+ changes.push(new AlterEnumChangeOwner({
26
+ enum: createdEnum,
27
+ owner: createdEnum.owner,
28
+ }));
29
+ }
30
+ if (createdEnum.comment !== null) {
31
+ changes.push(new CreateCommentOnEnum({ enum: createdEnum }));
32
+ }
33
+ // PRIVILEGES: For created objects, compare against default privileges state
34
+ // The migration script will run ALTER DEFAULT PRIVILEGES before CREATE (via constraint spec),
35
+ // so objects are created with the default privileges state in effect.
36
+ // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
37
+ // needed to reach the final desired state.
38
+ const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "enum", createdEnum.schema ?? "");
39
+ // Filter out PUBLIC's built-in default USAGE privilege (PostgreSQL grants it automatically)
40
+ // Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
41
+ // This prevents generating unnecessary "GRANT USAGE TO PUBLIC" statements
42
+ const desiredPrivileges = filterPublicBuiltInDefaults("enum", createdEnum.privileges);
43
+ // Filter out owner privileges - owner always has ALL privileges implicitly
44
+ // and shouldn't be compared. Use the enum owner as the reference.
45
+ const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdEnum.owner, ctx.mainRoles);
46
+ // Generate grant changes
47
+ for (const [grantee, result] of privilegeResults) {
48
+ if (result.grants.length > 0) {
49
+ const grantGroups = groupPrivilegesByGrantable(result.grants);
50
+ for (const [grantable, list] of grantGroups) {
51
+ void grantable;
52
+ changes.push(new GrantEnumPrivileges({
53
+ enum: createdEnum,
54
+ grantee,
55
+ privileges: list,
56
+ version: ctx.version,
57
+ }));
58
+ }
59
+ }
60
+ // Generate revoke changes
61
+ if (result.revokes.length > 0) {
62
+ const revokeGroups = groupPrivilegesByGrantable(result.revokes);
63
+ for (const [grantable, list] of revokeGroups) {
64
+ void grantable;
65
+ changes.push(new RevokeEnumPrivileges({
66
+ enum: createdEnum,
67
+ grantee,
68
+ privileges: list,
69
+ version: ctx.version,
70
+ }));
71
+ }
72
+ }
73
+ // Generate revoke grant option changes
74
+ if (result.revokeGrantOption.length > 0) {
75
+ changes.push(new RevokeGrantOptionEnumPrivileges({
76
+ enum: createdEnum,
77
+ grantee,
78
+ privilegeNames: result.revokeGrantOption,
79
+ version: ctx.version,
80
+ }));
81
+ }
82
+ }
83
+ }
84
+ for (const enumId of dropped) {
85
+ changes.push(new DropEnum({ enum: main[enumId] }));
86
+ }
87
+ for (const enumId of altered) {
88
+ const mainEnum = main[enumId];
89
+ const branchEnum = branch[enumId];
90
+ // If labels were removed (branch is missing labels present in main),
91
+ // recreate the enum to avoid relying on unsupported DROP VALUE operations.
92
+ const removedLabels = mainEnum.labels
93
+ .map((l) => l.label)
94
+ .filter((label) => !branchEnum.labels.some((b) => b.label === label));
95
+ if (removedLabels.length > 0) {
96
+ changes.push(new DropEnum({ enum: mainEnum }));
97
+ changes.push(new CreateEnum({ enum: branchEnum }));
98
+ if (branchEnum.owner !== ctx.currentUser) {
99
+ changes.push(new AlterEnumChangeOwner({
100
+ enum: branchEnum,
101
+ owner: branchEnum.owner,
102
+ }));
103
+ }
104
+ if (branchEnum.comment !== null) {
105
+ changes.push(new CreateCommentOnEnum({ enum: branchEnum }));
106
+ }
107
+ const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "enum", branchEnum.schema ?? "");
108
+ const desiredPrivileges = filterPublicBuiltInDefaults("enum", branchEnum.privileges);
109
+ const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, branchEnum.owner, ctx.mainRoles);
110
+ for (const [grantee, result] of privilegeResults) {
111
+ if (result.grants.length > 0) {
112
+ const grantGroups = groupPrivilegesByGrantable(result.grants);
113
+ for (const [grantable, list] of grantGroups) {
114
+ void grantable;
115
+ changes.push(new GrantEnumPrivileges({
116
+ enum: branchEnum,
117
+ grantee,
118
+ privileges: list,
119
+ version: ctx.version,
120
+ }));
121
+ }
122
+ }
123
+ if (result.revokes.length > 0) {
124
+ const revokeGroups = groupPrivilegesByGrantable(result.revokes);
125
+ for (const [grantable, list] of revokeGroups) {
126
+ void grantable;
127
+ changes.push(new RevokeEnumPrivileges({
128
+ enum: branchEnum,
129
+ grantee,
130
+ privileges: list,
131
+ version: ctx.version,
132
+ }));
133
+ }
134
+ }
135
+ if (result.revokeGrantOption.length > 0) {
136
+ changes.push(new RevokeGrantOptionEnumPrivileges({
137
+ enum: branchEnum,
138
+ grantee,
139
+ privilegeNames: result.revokeGrantOption,
140
+ version: ctx.version,
141
+ }));
142
+ }
143
+ }
144
+ continue;
145
+ }
146
+ // OWNER
147
+ if (mainEnum.owner !== branchEnum.owner) {
148
+ changes.push(new AlterEnumChangeOwner({ enum: mainEnum, owner: branchEnum.owner }));
149
+ }
150
+ // LABELS (enum values)
151
+ if (JSON.stringify(mainEnum.labels) !== JSON.stringify(branchEnum.labels)) {
152
+ const labelChanges = diffEnumLabels(mainEnum, branchEnum);
153
+ changes.push(...labelChanges);
154
+ }
155
+ // COMMENT
156
+ if (mainEnum.comment !== branchEnum.comment) {
157
+ if (branchEnum.comment === null) {
158
+ changes.push(new DropCommentOnEnum({ enum: mainEnum }));
159
+ }
160
+ else {
161
+ changes.push(new CreateCommentOnEnum({ enum: branchEnum }));
162
+ }
163
+ }
164
+ // PRIVILEGES
165
+ // Filter out PUBLIC's built-in default USAGE privilege from main catalog
166
+ // (PostgreSQL grants it automatically, so we shouldn't compare it)
167
+ const mainPrivilegesFiltered = filterPublicBuiltInDefaults("enum", mainEnum.privileges);
168
+ // Filter out PUBLIC's built-in default USAGE privilege from branch catalog
169
+ const branchPrivilegesFiltered = filterPublicBuiltInDefaults("enum", branchEnum.privileges);
170
+ // Filter out owner privileges - owner always has ALL privileges implicitly
171
+ // and shouldn't be compared. Use branch owner as the reference.
172
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchEnum.owner, ctx.mainRoles);
173
+ for (const [grantee, result] of privilegeResults) {
174
+ // Generate grant changes
175
+ if (result.grants.length > 0) {
176
+ const grantGroups = groupPrivilegesByGrantable(result.grants);
177
+ for (const [grantable, list] of grantGroups) {
178
+ void grantable;
179
+ changes.push(new GrantEnumPrivileges({
180
+ enum: branchEnum,
181
+ grantee,
182
+ privileges: list,
183
+ version: ctx.version,
184
+ }));
185
+ }
186
+ }
187
+ // Generate revoke changes
188
+ if (result.revokes.length > 0) {
189
+ const revokeGroups = groupPrivilegesByGrantable(result.revokes);
190
+ for (const [grantable, list] of revokeGroups) {
191
+ void grantable;
192
+ changes.push(new RevokeEnumPrivileges({
193
+ enum: mainEnum,
194
+ grantee,
195
+ privileges: list,
196
+ version: ctx.version,
197
+ }));
198
+ }
199
+ }
200
+ // Generate revoke grant option changes
201
+ if (result.revokeGrantOption.length > 0) {
202
+ changes.push(new RevokeGrantOptionEnumPrivileges({
203
+ enum: mainEnum,
204
+ grantee,
205
+ privilegeNames: result.revokeGrantOption,
206
+ version: ctx.version,
207
+ }));
208
+ }
209
+ }
210
+ // Note: Enum renaming would also use ALTER TYPE ... RENAME TO ...
211
+ // But since our Enum model uses 'name' as the identity field,
212
+ // a name change would be handled as drop + create by diffObjects()
213
+ }
214
+ return changes;
215
+ }
216
+ /**
217
+ * Diff enum labels to determine what ALTER TYPE statements are needed.
218
+ * This implementation properly handles enum value positioning using sort_order.
219
+ * Note: We cannot reliably detect renames, so we only handle additions.
220
+ */
221
+ function diffEnumLabels(mainEnum, branchEnum) {
222
+ const changes = [];
223
+ // Create maps for efficient lookup
224
+ const mainLabelMap = new Map(mainEnum.labels.map((label) => [label.label, label.sort_order]));
225
+ const branchLabelMap = new Map(branchEnum.labels.map((label) => [label.label, label.sort_order]));
226
+ // Find added values (values in branch but not in main)
227
+ const addedValues = Array.from(branchLabelMap.keys()).filter((label) => !mainLabelMap.has(label));
228
+ // Maintain a working list of labels (by name) to calculate correct BEFORE/AFTER
229
+ // anchors as we simulate applying the additions in order.
230
+ const branchOrdered = [...branchEnum.labels].sort((a, b) => a.sort_order - b.sort_order);
231
+ const workingLabels = [...mainEnum.labels].map((l) => l.label);
232
+ for (const newValue of addedValues) {
233
+ const branchIdx = branchOrdered.findIndex((l) => l.label === newValue);
234
+ if (branchIdx === -1)
235
+ continue;
236
+ const prevBranch = branchOrdered[branchIdx - 1]?.label;
237
+ const nextBranch = branchOrdered[branchIdx + 1]?.label;
238
+ let position;
239
+ // Prefer AFTER when prevBranch exists in workingLabels (more natural for sequential additions)
240
+ // Use BEFORE only when we need to insert before the first value or when prevBranch doesn't exist
241
+ if (prevBranch && workingLabels.includes(prevBranch)) {
242
+ position = { after: prevBranch };
243
+ // Insert after the previous label in our working list
244
+ const prevIdx = workingLabels.indexOf(prevBranch);
245
+ workingLabels.splice(prevIdx + 1, 0, newValue);
246
+ }
247
+ else if (nextBranch && workingLabels.includes(nextBranch)) {
248
+ // Insert before nextBranch when prevBranch doesn't exist (e.g., adding at beginning)
249
+ position = { before: nextBranch };
250
+ const nextIdx = workingLabels.indexOf(nextBranch);
251
+ workingLabels.splice(nextIdx, 0, newValue);
252
+ }
253
+ else if (nextBranch) {
254
+ // nextBranch exists but not in workingLabels yet (shouldn't happen in normal flow)
255
+ position = { before: nextBranch };
256
+ workingLabels.push(newValue);
257
+ }
258
+ else {
259
+ // Fallback: append to the end
260
+ position = { after: workingLabels[workingLabels.length - 1] };
261
+ workingLabels.push(newValue);
262
+ }
263
+ changes.push(new AlterEnumAddValue({ enum: mainEnum, newValue, position }));
264
+ }
265
+ // Complex changes (removals, resorting) are currently not auto-handled.
266
+ // We intentionally avoid emitting drop+create to prevent data loss.
267
+ return changes;
268
+ }
@@ -0,0 +1,66 @@
1
+ import type { Sql } from "postgres";
2
+ import z from "zod";
3
+ import { BasePgModel } from "../../base.model.ts";
4
+ import { type PrivilegeProps } from "../../base.privilege-diff.ts";
5
+ /**
6
+ * All properties exposed by CREATE TYPE AS ENUM statement are included in diff output.
7
+ * https://www.postgresql.org/docs/current/sql-createtype.html
8
+ *
9
+ * ALTER TYPE statement can be generated for changes to the following properties:
10
+ * - name, owner, schema, add or rename value
11
+ * https://www.postgresql.org/docs/current/sql-altertype.html
12
+ *
13
+ * Sort order of values may be negative or fractional.
14
+ * https://www.postgresql.org/docs/current/catalog-pg-enum.html
15
+ *
16
+ * Type ACL will be supported separately.
17
+ * https://www.postgresql.org/docs/current/ddl-priv.html
18
+ */
19
+ declare const enumPropsSchema: z.ZodObject<{
20
+ schema: z.ZodString;
21
+ name: z.ZodString;
22
+ owner: z.ZodString;
23
+ labels: z.ZodArray<z.ZodObject<{
24
+ sort_order: z.ZodNumber;
25
+ label: z.ZodString;
26
+ }, z.z.core.$strip>>;
27
+ comment: z.ZodNullable<z.ZodString>;
28
+ privileges: z.ZodArray<z.ZodObject<{
29
+ grantee: z.ZodString;
30
+ privilege: z.ZodString;
31
+ grantable: z.ZodBoolean;
32
+ columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
33
+ }, z.z.core.$strip>>;
34
+ }, z.z.core.$strip>;
35
+ type EnumPrivilegeProps = PrivilegeProps;
36
+ export type EnumProps = z.infer<typeof enumPropsSchema>;
37
+ export declare class Enum extends BasePgModel {
38
+ readonly schema: EnumProps["schema"];
39
+ readonly name: EnumProps["name"];
40
+ readonly owner: EnumProps["owner"];
41
+ readonly labels: EnumProps["labels"];
42
+ readonly comment: EnumProps["comment"];
43
+ readonly privileges: EnumPrivilegeProps[];
44
+ constructor(props: EnumProps);
45
+ get stableId(): `type:${string}`;
46
+ get identityFields(): {
47
+ schema: string;
48
+ name: string;
49
+ };
50
+ get dataFields(): {
51
+ owner: string;
52
+ labels: {
53
+ sort_order: number;
54
+ label: string;
55
+ }[];
56
+ comment: string | null;
57
+ privileges: {
58
+ columns: string[] | null | undefined;
59
+ grantee: string;
60
+ privilege: string;
61
+ grantable: boolean;
62
+ }[];
63
+ };
64
+ }
65
+ export declare function extractEnums(sql: Sql): Promise<Enum[]>;
66
+ export {};
@@ -0,0 +1,154 @@
1
+ import z from "zod";
2
+ import { BasePgModel } from "../../base.model.js";
3
+ import { privilegePropsSchema, } from "../../base.privilege-diff.js";
4
+ const enumLabelSchema = z.object({
5
+ sort_order: z.number(),
6
+ label: z.string(),
7
+ });
8
+ /**
9
+ * All properties exposed by CREATE TYPE AS ENUM statement are included in diff output.
10
+ * https://www.postgresql.org/docs/current/sql-createtype.html
11
+ *
12
+ * ALTER TYPE statement can be generated for changes to the following properties:
13
+ * - name, owner, schema, add or rename value
14
+ * https://www.postgresql.org/docs/current/sql-altertype.html
15
+ *
16
+ * Sort order of values may be negative or fractional.
17
+ * https://www.postgresql.org/docs/current/catalog-pg-enum.html
18
+ *
19
+ * Type ACL will be supported separately.
20
+ * https://www.postgresql.org/docs/current/ddl-priv.html
21
+ */
22
+ const enumPropsSchema = z.object({
23
+ schema: z.string(),
24
+ name: z.string(),
25
+ owner: z.string(),
26
+ labels: z.array(enumLabelSchema),
27
+ comment: z.string().nullable(),
28
+ privileges: z.array(privilegePropsSchema),
29
+ });
30
+ export class Enum extends BasePgModel {
31
+ schema;
32
+ name;
33
+ owner;
34
+ labels;
35
+ comment;
36
+ privileges;
37
+ constructor(props) {
38
+ super();
39
+ // Identity fields
40
+ this.schema = props.schema;
41
+ this.name = props.name;
42
+ // Data fields
43
+ this.owner = props.owner;
44
+ this.labels = props.labels;
45
+ this.comment = props.comment;
46
+ this.privileges = props.privileges;
47
+ }
48
+ get stableId() {
49
+ return `type:${this.schema}.${this.name}`;
50
+ }
51
+ get identityFields() {
52
+ return {
53
+ schema: this.schema,
54
+ name: this.name,
55
+ };
56
+ }
57
+ get dataFields() {
58
+ const orderedLabels = [...this.labels]
59
+ .map((label) => ({ ...label }))
60
+ .sort((a, b) => a.sort_order - b.sort_order || a.label.localeCompare(b.label));
61
+ // Normalize sort_order to a deterministic 1..N sequence to avoid float gaps
62
+ // that occur when adding multiple enum values with AFTER clauses.
63
+ const labels = orderedLabels.map((label, idx) => ({
64
+ sort_order: idx + 1,
65
+ label: label.label,
66
+ }));
67
+ const privileges = [...this.privileges]
68
+ .map((priv) => ({
69
+ ...priv,
70
+ columns: priv.columns ? [...priv.columns].sort() : priv.columns,
71
+ }))
72
+ .sort((a, b) => {
73
+ const byGrantee = a.grantee.localeCompare(b.grantee);
74
+ if (byGrantee !== 0)
75
+ return byGrantee;
76
+ const byPriv = a.privilege.localeCompare(b.privilege);
77
+ if (byPriv !== 0)
78
+ return byPriv;
79
+ if (a.grantable !== b.grantable)
80
+ return a.grantable ? 1 : -1;
81
+ const colsA = (a.columns ?? []).join(",");
82
+ const colsB = (b.columns ?? []).join(",");
83
+ return colsA.localeCompare(colsB);
84
+ });
85
+ return {
86
+ owner: this.owner,
87
+ labels,
88
+ comment: this.comment,
89
+ privileges,
90
+ };
91
+ }
92
+ }
93
+ export async function extractEnums(sql) {
94
+ return sql.begin(async (sql) => {
95
+ await sql `set search_path = ''`;
96
+ const enumRows = await sql `
97
+ with extension_oids as (
98
+ select
99
+ objid
100
+ from
101
+ pg_depend d
102
+ where
103
+ d.refclassid = 'pg_extension'::regclass
104
+ and d.classid = 'pg_type'::regclass
105
+ )
106
+ select
107
+ t.typnamespace::regnamespace::text as schema,
108
+ quote_ident(t.typname) as name,
109
+ e.enumsortorder as sort_order,
110
+ e.enumlabel as label,
111
+ t.typowner::regrole::text as owner,
112
+ obj_description(t.oid, 'pg_type') as comment,
113
+ coalesce(
114
+ (
115
+ select json_agg(
116
+ json_build_object(
117
+ 'grantee', case when x.grantee = 0 then 'PUBLIC' else x.grantee::regrole::text end,
118
+ 'privilege', x.privilege_type,
119
+ 'grantable', x.is_grantable
120
+ )
121
+ order by x.grantee, x.privilege_type
122
+ )
123
+ from lateral aclexplode(t.typacl) as x(grantor, grantee, privilege_type, is_grantable)
124
+ ), '[]'
125
+ ) as privileges
126
+ from
127
+ pg_catalog.pg_enum e
128
+ inner join pg_catalog.pg_type t on t.oid = e.enumtypid
129
+ left outer join extension_oids ext on t.oid = ext.objid
130
+ where not t.typnamespace::regnamespace::text like any(array['pg\\_%', 'information\\_schema'])
131
+ and ext.objid is null
132
+ order by
133
+ 1, 2, 3;
134
+ `;
135
+ const grouped = {};
136
+ for (const e of enumRows) {
137
+ const key = `${e.schema}.${e.name}`;
138
+ if (!grouped[key]) {
139
+ grouped[key] = {
140
+ schema: e.schema,
141
+ name: e.name,
142
+ owner: e.owner,
143
+ labels: [],
144
+ comment: e.comment,
145
+ privileges: e.privileges,
146
+ };
147
+ }
148
+ grouped[key].labels.push({ sort_order: e.sort_order, label: e.label });
149
+ }
150
+ // Validate and parse each enum using the Zod schema
151
+ const validatedEnums = Object.values(grouped).map((e) => enumPropsSchema.parse(e));
152
+ return validatedEnums.map((e) => new Enum(e));
153
+ });
154
+ }
@@ -0,0 +1,33 @@
1
+ import type { Range } from "../range.model.ts";
2
+ import { AlterRangeChange } from "./range.base.ts";
3
+ /**
4
+ * Alter a range type.
5
+ *
6
+ * @see https://www.postgresql.org/docs/17/sql-altertype.html
7
+ *
8
+ * Synopsis
9
+ * ```sql
10
+ * ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
11
+ * ALTER TYPE name RENAME TO new_name
12
+ * ALTER TYPE name SET SCHEMA new_schema
13
+ * ```
14
+ */
15
+ export type AlterRange = AlterRangeChangeOwner;
16
+ /**
17
+ * ALTER TYPE ... OWNER TO ...
18
+ */
19
+ export declare class AlterRangeChangeOwner extends AlterRangeChange {
20
+ readonly range: Range;
21
+ readonly owner: string;
22
+ readonly scope: "object";
23
+ constructor(props: {
24
+ range: Range;
25
+ owner: string;
26
+ });
27
+ get requires(): `type:${string}`[];
28
+ serialize(): string;
29
+ }
30
+ /**
31
+ * Replace a range type by dropping and recreating it.
32
+ * This is used when properties that cannot be altered via ALTER TYPE change.
33
+ */