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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (717) hide show
  1. package/README.md +41 -2
  2. package/dist/cli/app.js +26 -3
  3. package/dist/cli/bin/cli.js +5 -0
  4. package/dist/cli/commands/catalog-export.d.ts +5 -0
  5. package/dist/cli/commands/catalog-export.js +64 -0
  6. package/dist/cli/commands/declarative-apply.d.ts +6 -0
  7. package/dist/cli/commands/declarative-apply.js +288 -0
  8. package/dist/cli/commands/declarative-export.d.ts +5 -0
  9. package/dist/cli/commands/declarative-export.js +240 -0
  10. package/dist/cli/commands/plan.js +47 -16
  11. package/dist/cli/commands/sync.js +8 -12
  12. package/dist/cli/exit-code.d.ts +2 -0
  13. package/dist/cli/exit-code.js +7 -0
  14. package/dist/cli/formatters/tree/tree.js +3 -2
  15. package/dist/cli/utils/apply-display.d.ts +52 -0
  16. package/dist/cli/utils/apply-display.js +183 -0
  17. package/dist/cli/utils/export-display.d.ts +43 -0
  18. package/dist/cli/utils/export-display.js +202 -0
  19. package/dist/cli/utils/integrations.d.ts +30 -6
  20. package/dist/cli/utils/integrations.js +98 -6
  21. package/dist/cli/utils/resolve-input.d.ts +7 -0
  22. package/dist/cli/utils/resolve-input.js +13 -0
  23. package/dist/cli/utils.d.ts +2 -0
  24. package/dist/cli/utils.js +1 -1
  25. package/dist/core/catalog-export/index.d.ts +11 -0
  26. package/dist/core/catalog-export/index.js +10 -0
  27. package/dist/core/catalog.diff.d.ts +1 -0
  28. package/dist/core/catalog.diff.js +64 -48
  29. package/dist/core/catalog.model.d.ts +16 -3
  30. package/dist/core/catalog.model.js +132 -30
  31. package/dist/core/catalog.snapshot.d.ts +66 -0
  32. package/dist/core/catalog.snapshot.js +206 -0
  33. package/dist/core/change-utils.d.ts +9 -0
  34. package/dist/core/change-utils.js +71 -0
  35. package/dist/core/change.types.d.ts +22 -0
  36. package/dist/core/change.types.js +37 -1
  37. package/dist/core/context.d.ts +3 -3
  38. package/dist/core/context.js +7 -10
  39. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  40. package/dist/core/declarative-apply/discover-sql.js +86 -0
  41. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  42. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  43. package/dist/core/declarative-apply/index.d.ts +49 -0
  44. package/dist/core/declarative-apply/index.js +134 -0
  45. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  46. package/dist/core/declarative-apply/round-apply.js +378 -0
  47. package/dist/core/depend.d.ts +2 -2
  48. package/dist/core/depend.js +33 -7
  49. package/dist/core/export/file-mapper.d.ts +71 -0
  50. package/dist/core/export/file-mapper.js +474 -0
  51. package/dist/core/export/grouper.d.ts +13 -0
  52. package/dist/core/export/grouper.js +76 -0
  53. package/dist/core/export/index.d.ts +45 -0
  54. package/dist/core/export/index.js +63 -0
  55. package/dist/core/export/types.d.ts +84 -0
  56. package/dist/core/export/types.js +25 -0
  57. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  58. package/dist/core/integrations/filter/dsl.d.ts +82 -41
  59. package/dist/core/integrations/filter/dsl.js +127 -61
  60. package/dist/core/integrations/filter/flatten.d.ts +51 -0
  61. package/dist/core/integrations/filter/flatten.js +116 -0
  62. package/dist/core/integrations/integration-dsl.d.ts +27 -1
  63. package/dist/core/integrations/merge.d.ts +20 -0
  64. package/dist/core/integrations/merge.js +60 -0
  65. package/dist/core/integrations/serialize/dsl.d.ts +7 -4
  66. package/dist/core/integrations/serialize/dsl.js +2 -2
  67. package/dist/core/integrations/supabase.d.ts +8 -0
  68. package/dist/core/integrations/supabase.js +34 -8
  69. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  70. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  71. package/dist/core/objects/aggregate/aggregate.model.d.ts +10 -10
  72. package/dist/core/objects/aggregate/aggregate.model.js +8 -10
  73. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  74. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  75. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +1 -0
  76. package/dist/core/objects/base.change.d.ts +10 -0
  77. package/dist/core/objects/base.change.js +10 -0
  78. package/dist/core/objects/base.model.d.ts +4 -1
  79. package/dist/core/objects/base.model.js +5 -2
  80. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  81. package/dist/core/objects/base.privilege-diff.js +104 -22
  82. package/dist/core/objects/base.privilege.d.ts +1 -0
  83. package/dist/core/objects/base.privilege.js +9 -2
  84. package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
  85. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  86. package/dist/core/objects/collation/collation.model.d.ts +2 -2
  87. package/dist/core/objects/collation/collation.model.js +29 -28
  88. package/dist/core/objects/diff-context.d.ts +15 -0
  89. package/dist/core/objects/diff-context.js +1 -0
  90. package/dist/core/objects/domain/changes/domain.create.d.ts +1 -1
  91. package/dist/core/objects/domain/changes/domain.create.js +11 -3
  92. package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
  93. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  94. package/dist/core/objects/domain/domain.diff.js +16 -77
  95. package/dist/core/objects/domain/domain.model.d.ts +2 -2
  96. package/dist/core/objects/domain/domain.model.js +9 -11
  97. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +1 -0
  98. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  99. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +2 -2
  100. package/dist/core/objects/event-trigger/event-trigger.model.js +7 -9
  101. package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
  102. package/dist/core/objects/extension/extension.model.d.ts +2 -2
  103. package/dist/core/objects/extension/extension.model.js +8 -10
  104. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
  105. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  106. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  107. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +2 -2
  108. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +22 -24
  109. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
  110. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
  111. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  112. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  113. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +2 -2
  114. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +21 -23
  115. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
  116. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  117. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  118. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +2 -2
  119. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +20 -22
  120. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
  121. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +2 -2
  122. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +20 -22
  123. package/dist/core/objects/index/changes/index.types.d.ts +1 -0
  124. package/dist/core/objects/index/index.model.d.ts +4 -4
  125. package/dist/core/objects/index/index.model.js +9 -11
  126. package/dist/core/objects/language/changes/language.types.d.ts +1 -0
  127. package/dist/core/objects/language/language.diff.d.ts +2 -5
  128. package/dist/core/objects/language/language.diff.js +7 -39
  129. package/dist/core/objects/language/language.model.js +5 -7
  130. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +1 -0
  131. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  132. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  133. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +5 -5
  134. package/dist/core/objects/materialized-view/materialized-view.model.js +9 -11
  135. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  136. package/dist/core/objects/procedure/changes/procedure.types.d.ts +1 -0
  137. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  138. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  139. package/dist/core/objects/procedure/procedure.model.d.ts +11 -11
  140. package/dist/core/objects/procedure/procedure.model.js +9 -11
  141. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  142. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  143. package/dist/core/objects/publication/changes/publication.types.d.ts +3 -2
  144. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  145. package/dist/core/objects/publication/publication.diff.js +8 -13
  146. package/dist/core/objects/publication/publication.model.d.ts +2 -2
  147. package/dist/core/objects/publication/publication.model.js +7 -9
  148. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  149. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
  150. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +4 -4
  151. package/dist/core/objects/rls-policy/rls-policy.model.js +8 -10
  152. package/dist/core/objects/role/changes/role.types.d.ts +1 -0
  153. package/dist/core/objects/role/role.diff.js +22 -1
  154. package/dist/core/objects/role/role.model.d.ts +6 -5
  155. package/dist/core/objects/role/role.model.js +146 -40
  156. package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
  157. package/dist/core/objects/rule/rule.model.d.ts +3 -3
  158. package/dist/core/objects/rule/rule.model.js +7 -9
  159. package/dist/core/objects/schema/changes/schema.types.d.ts +1 -0
  160. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  161. package/dist/core/objects/schema/schema.diff.js +16 -77
  162. package/dist/core/objects/schema/schema.model.d.ts +2 -2
  163. package/dist/core/objects/schema/schema.model.js +9 -11
  164. package/dist/core/objects/sequence/changes/sequence.types.d.ts +1 -0
  165. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  166. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  167. package/dist/core/objects/sequence/sequence.model.d.ts +2 -2
  168. package/dist/core/objects/sequence/sequence.model.js +9 -11
  169. package/dist/core/objects/subscription/changes/subscription.types.d.ts +1 -0
  170. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  171. package/dist/core/objects/subscription/subscription.model.d.ts +2 -2
  172. package/dist/core/objects/subscription/subscription.model.js +25 -20
  173. package/dist/core/objects/table/changes/table.create.js +3 -0
  174. package/dist/core/objects/table/changes/table.types.d.ts +1 -0
  175. package/dist/core/objects/table/table.diff.d.ts +2 -8
  176. package/dist/core/objects/table/table.diff.js +26 -157
  177. package/dist/core/objects/table/table.model.d.ts +27 -24
  178. package/dist/core/objects/table/table.model.js +12 -11
  179. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  180. package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
  181. package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
  182. package/dist/core/objects/trigger/trigger.model.d.ts +11 -2
  183. package/dist/core/objects/trigger/trigger.model.js +22 -10
  184. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +1 -0
  185. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  186. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  187. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +5 -5
  188. package/dist/core/objects/type/composite-type/composite-type.model.js +10 -11
  189. package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
  190. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  191. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  192. package/dist/core/objects/type/enum/enum.model.d.ts +2 -2
  193. package/dist/core/objects/type/enum/enum.model.js +23 -25
  194. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  195. package/dist/core/objects/type/range/changes/range.types.d.ts +1 -0
  196. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  197. package/dist/core/objects/type/range/range.diff.js +16 -77
  198. package/dist/core/objects/type/range/range.model.d.ts +2 -2
  199. package/dist/core/objects/type/range/range.model.js +8 -10
  200. package/dist/core/objects/type/type.types.d.ts +1 -0
  201. package/dist/core/objects/view/changes/view.types.d.ts +1 -0
  202. package/dist/core/objects/view/view.diff.d.ts +2 -8
  203. package/dist/core/objects/view/view.diff.js +37 -168
  204. package/dist/core/objects/view/view.model.d.ts +20 -6
  205. package/dist/core/objects/view/view.model.js +11 -23
  206. package/dist/core/plan/apply.d.ts +2 -2
  207. package/dist/core/plan/apply.js +33 -16
  208. package/dist/core/plan/create.d.ts +20 -7
  209. package/dist/core/plan/create.js +153 -112
  210. package/dist/core/plan/serialize.js +16 -4
  211. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  212. package/dist/core/plan/sql-format/constants.js +11 -0
  213. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  214. package/dist/core/plan/sql-format/fixtures.js +2447 -0
  215. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  216. package/dist/core/plan/sql-format/format-utils.js +274 -0
  217. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  218. package/dist/core/plan/sql-format/formatters.js +737 -0
  219. package/dist/core/plan/sql-format/index.d.ts +2 -0
  220. package/dist/core/plan/sql-format/index.js +98 -0
  221. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  222. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  223. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  224. package/dist/core/plan/sql-format/protect.js +269 -0
  225. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  226. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  227. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  228. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  229. package/dist/core/plan/sql-format/types.d.ts +28 -0
  230. package/dist/core/plan/sql-format/types.js +1 -0
  231. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  232. package/dist/core/plan/sql-format/wrap.js +165 -0
  233. package/dist/core/plan/sql-format.d.ts +2 -0
  234. package/dist/core/plan/sql-format.js +1 -0
  235. package/dist/core/plan/ssl-config.d.ts +32 -0
  236. package/dist/core/plan/ssl-config.js +115 -0
  237. package/dist/core/plan/statements.d.ts +2 -1
  238. package/dist/core/plan/statements.js +6 -2
  239. package/dist/core/plan/types.d.ts +6 -0
  240. package/dist/core/postgres-config.d.ts +47 -3
  241. package/dist/core/postgres-config.js +225 -39
  242. package/dist/core/sort/custom-constraints.js +1 -1
  243. package/dist/core/sort/graph-builder.js +10 -0
  244. package/dist/core/sort/logical-sort.js +34 -47
  245. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  246. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  247. package/dist/index.d.ts +9 -0
  248. package/dist/index.js +9 -1
  249. package/package.json +60 -22
  250. package/src/cli/app.ts +52 -0
  251. package/src/cli/bin/cli.ts +15 -0
  252. package/src/cli/commands/apply.ts +101 -0
  253. package/src/cli/commands/catalog-export.ts +78 -0
  254. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  255. package/src/cli/commands/declarative-apply.ts +380 -0
  256. package/src/cli/commands/declarative-export.ts +322 -0
  257. package/src/cli/commands/plan.ts +210 -0
  258. package/src/cli/commands/sync.ts +178 -0
  259. package/src/cli/exit-code.test.ts +19 -0
  260. package/src/cli/exit-code.ts +7 -0
  261. package/src/cli/formatters/index.ts +5 -0
  262. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  263. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  264. package/src/cli/formatters/tree/tree.ts +238 -0
  265. package/src/cli/utils/apply-display.test.ts +348 -0
  266. package/src/cli/utils/apply-display.ts +238 -0
  267. package/src/cli/utils/export-display.test.ts +103 -0
  268. package/src/cli/utils/export-display.ts +275 -0
  269. package/src/cli/utils/integrations.test.ts +251 -0
  270. package/src/cli/utils/integrations.ts +170 -0
  271. package/src/cli/utils/resolve-input.test.ts +38 -0
  272. package/src/cli/utils/resolve-input.ts +17 -0
  273. package/src/cli/utils.ts +231 -0
  274. package/src/core/catalog-export/index.ts +20 -0
  275. package/src/core/catalog.diff.ts +247 -0
  276. package/src/core/catalog.model.test.ts +122 -0
  277. package/src/core/catalog.model.ts +510 -0
  278. package/src/core/catalog.snapshot.test.ts +486 -0
  279. package/src/core/catalog.snapshot.ts +289 -0
  280. package/src/core/change-utils.test.ts +61 -0
  281. package/src/core/change-utils.ts +73 -0
  282. package/src/core/change.types.ts +94 -0
  283. package/src/core/context.ts +26 -0
  284. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  285. package/src/core/declarative-apply/discover-sql.ts +107 -0
  286. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  287. package/src/core/declarative-apply/index.test.ts +67 -0
  288. package/src/core/declarative-apply/index.ts +205 -0
  289. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  290. package/src/core/declarative-apply/round-apply.ts +562 -0
  291. package/src/core/depend.ts +1895 -0
  292. package/src/core/expand-replace-dependencies.test.ts +70 -0
  293. package/src/core/expand-replace-dependencies.ts +380 -0
  294. package/src/core/export/file-mapper.test.ts +816 -0
  295. package/src/core/export/file-mapper.ts +579 -0
  296. package/src/core/export/grouper.ts +108 -0
  297. package/src/core/export/index.ts +129 -0
  298. package/src/core/export/types.ts +104 -0
  299. package/src/core/fingerprint.ts +204 -0
  300. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  301. package/src/core/integrations/filter/dsl.test.ts +450 -0
  302. package/src/core/integrations/filter/dsl.ts +305 -0
  303. package/src/core/integrations/filter/filter.types.ts +3 -0
  304. package/src/core/integrations/filter/flatten.test.ts +282 -0
  305. package/src/core/integrations/filter/flatten.ts +150 -0
  306. package/src/core/integrations/integration-dsl.ts +50 -0
  307. package/src/core/integrations/integration.types.ts +7 -0
  308. package/src/core/integrations/merge.test.ts +128 -0
  309. package/src/core/integrations/merge.ts +72 -0
  310. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  311. package/src/core/integrations/serialize/dsl.ts +80 -0
  312. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  313. package/src/core/integrations/supabase.ts +145 -0
  314. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  315. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  316. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  317. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  318. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  319. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  320. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  321. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  322. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  323. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  324. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  325. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  326. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  327. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  328. package/src/core/objects/aggregate/changes/aggregate.types.ts +13 -0
  329. package/src/core/objects/base.change.ts +72 -0
  330. package/src/core/objects/base.default-privileges.ts +204 -0
  331. package/src/core/objects/base.diff.ts +20 -0
  332. package/src/core/objects/base.model.test.ts +43 -0
  333. package/src/core/objects/base.model.ts +85 -0
  334. package/src/core/objects/base.privilege-diff.ts +447 -0
  335. package/src/core/objects/base.privilege.ts +191 -0
  336. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  337. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  338. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  339. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  340. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  341. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  342. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  343. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  344. package/src/core/objects/collation/changes/collation.types.ts +11 -0
  345. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  346. package/src/core/objects/collation/collation.diff.ts +127 -0
  347. package/src/core/objects/collation/collation.model.ts +224 -0
  348. package/src/core/objects/diff-context.ts +16 -0
  349. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  350. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  351. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  352. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  353. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  354. package/src/core/objects/domain/changes/domain.create.ts +140 -0
  355. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  356. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  357. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  358. package/src/core/objects/domain/changes/domain.types.ts +13 -0
  359. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  360. package/src/core/objects/domain/domain.diff.ts +295 -0
  361. package/src/core/objects/domain/domain.model.ts +190 -0
  362. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  363. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  364. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  365. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  366. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  367. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  368. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  369. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  370. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +11 -0
  371. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  372. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  373. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  374. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  375. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  376. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  377. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  378. package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
  379. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  380. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  381. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  382. package/src/core/objects/extension/changes/extension.types.ts +11 -0
  383. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  384. package/src/core/objects/extension/extension.diff.ts +90 -0
  385. package/src/core/objects/extension/extension.model.test.ts +98 -0
  386. package/src/core/objects/extension/extension.model.ts +280 -0
  387. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  388. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  389. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  390. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  391. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  392. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  393. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  394. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  395. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  396. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +13 -0
  397. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  398. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  399. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  400. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +11 -0
  401. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  402. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  403. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  404. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  405. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  406. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  407. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  408. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  409. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  410. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +13 -0
  411. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  412. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  413. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  414. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  415. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  416. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  417. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  418. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  419. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  420. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  421. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  422. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  423. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +13 -0
  424. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  425. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  426. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  427. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  428. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  429. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  430. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  431. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  432. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  433. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  434. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +9 -0
  435. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  436. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  437. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  438. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  439. package/src/core/objects/index/changes/index.alter.ts +144 -0
  440. package/src/core/objects/index/changes/index.base.ts +20 -0
  441. package/src/core/objects/index/changes/index.comment.ts +63 -0
  442. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  443. package/src/core/objects/index/changes/index.create.ts +68 -0
  444. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  445. package/src/core/objects/index/changes/index.drop.ts +34 -0
  446. package/src/core/objects/index/changes/index.types.ts +7 -0
  447. package/src/core/objects/index/changes/utils.ts +16 -0
  448. package/src/core/objects/index/index.diff.test.ts +153 -0
  449. package/src/core/objects/index/index.diff.ts +243 -0
  450. package/src/core/objects/index/index.model.ts +370 -0
  451. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  452. package/src/core/objects/language/changes/language.alter.ts +53 -0
  453. package/src/core/objects/language/changes/language.base.ts +20 -0
  454. package/src/core/objects/language/changes/language.comment.ts +58 -0
  455. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  456. package/src/core/objects/language/changes/language.create.ts +104 -0
  457. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  458. package/src/core/objects/language/changes/language.drop.ts +39 -0
  459. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  460. package/src/core/objects/language/changes/language.types.ts +13 -0
  461. package/src/core/objects/language/language.diff.test.ts +135 -0
  462. package/src/core/objects/language/language.diff.ts +144 -0
  463. package/src/core/objects/language/language.model.ts +150 -0
  464. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  465. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  466. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  467. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  468. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  469. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  470. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  471. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  472. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  473. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +13 -0
  474. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  475. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  476. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  477. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  478. package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
  479. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  480. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  481. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  482. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  483. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  484. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  485. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  486. package/src/core/objects/procedure/changes/procedure.types.ts +13 -0
  487. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  488. package/src/core/objects/procedure/procedure.diff.ts +341 -0
  489. package/src/core/objects/procedure/procedure.model.ts +264 -0
  490. package/src/core/objects/procedure/utils.ts +58 -0
  491. package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
  492. package/src/core/objects/publication/changes/publication.alter.ts +225 -0
  493. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  494. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  495. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  496. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  497. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  498. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  499. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  500. package/src/core/objects/publication/changes/publication.types.ts +25 -0
  501. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  502. package/src/core/objects/publication/publication.diff.ts +247 -0
  503. package/src/core/objects/publication/publication.model.ts +206 -0
  504. package/src/core/objects/publication/utils.ts +55 -0
  505. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
  506. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  507. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  508. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  509. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
  510. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  511. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
  512. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  513. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +11 -0
  514. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  515. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  516. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  517. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  518. package/src/core/objects/role/changes/role.alter.ts +110 -0
  519. package/src/core/objects/role/changes/role.base.ts +24 -0
  520. package/src/core/objects/role/changes/role.comment.ts +55 -0
  521. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  522. package/src/core/objects/role/changes/role.create.ts +102 -0
  523. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  524. package/src/core/objects/role/changes/role.drop.ts +34 -0
  525. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  526. package/src/core/objects/role/changes/role.types.ts +13 -0
  527. package/src/core/objects/role/role.diff.test.ts +279 -0
  528. package/src/core/objects/role/role.diff.ts +499 -0
  529. package/src/core/objects/role/role.model.ts +452 -0
  530. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  531. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  532. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  533. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  534. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  535. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  536. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  537. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  538. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  539. package/src/core/objects/rule/changes/rule.types.ts +13 -0
  540. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  541. package/src/core/objects/rule/rule.diff.ts +79 -0
  542. package/src/core/objects/rule/rule.model.ts +173 -0
  543. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  544. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  545. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  546. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  547. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  548. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  549. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  550. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  551. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  552. package/src/core/objects/schema/changes/schema.types.ts +13 -0
  553. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  554. package/src/core/objects/schema/schema.diff.ts +146 -0
  555. package/src/core/objects/schema/schema.model.ts +107 -0
  556. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  557. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  558. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  559. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  560. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  561. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  562. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  563. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  564. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  565. package/src/core/objects/sequence/changes/sequence.types.ts +13 -0
  566. package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
  567. package/src/core/objects/sequence/sequence.diff.ts +294 -0
  568. package/src/core/objects/sequence/sequence.model.ts +185 -0
  569. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  570. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  571. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  572. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  573. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  574. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  575. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  576. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  577. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  578. package/src/core/objects/subscription/changes/subscription.types.ts +23 -0
  579. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  580. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  581. package/src/core/objects/subscription/subscription.model.ts +190 -0
  582. package/src/core/objects/subscription/utils.ts +156 -0
  583. package/src/core/objects/table/changes/table.alter.test.ts +846 -0
  584. package/src/core/objects/table/changes/table.alter.ts +806 -0
  585. package/src/core/objects/table/changes/table.base.ts +20 -0
  586. package/src/core/objects/table/changes/table.comment.ts +266 -0
  587. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  588. package/src/core/objects/table/changes/table.create.ts +192 -0
  589. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  590. package/src/core/objects/table/changes/table.drop.ts +45 -0
  591. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  592. package/src/core/objects/table/changes/table.types.ts +13 -0
  593. package/src/core/objects/table/table.diff.test.ts +868 -0
  594. package/src/core/objects/table/table.diff.ts +817 -0
  595. package/src/core/objects/table/table.model.ts +460 -0
  596. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  597. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  598. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  599. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  600. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  601. package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
  602. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  603. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  604. package/src/core/objects/trigger/changes/trigger.types.ts +11 -0
  605. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  606. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  607. package/src/core/objects/trigger/trigger.model.ts +264 -0
  608. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  609. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  610. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  611. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  612. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  613. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  614. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  615. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  616. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  617. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +13 -0
  618. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  619. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  620. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  621. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  622. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  623. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  624. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  625. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  626. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  627. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  628. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  629. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  630. package/src/core/objects/type/enum/changes/enum.types.ts +13 -0
  631. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  632. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  633. package/src/core/objects/type/enum/enum.model.ts +194 -0
  634. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  635. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  636. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  637. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  638. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  639. package/src/core/objects/type/range/changes/range.create.ts +155 -0
  640. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  641. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  642. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  643. package/src/core/objects/type/range/changes/range.types.ts +13 -0
  644. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  645. package/src/core/objects/type/range/range.diff.ts +197 -0
  646. package/src/core/objects/type/range/range.model.ts +187 -0
  647. package/src/core/objects/type/type.types.ts +6 -0
  648. package/src/core/objects/utils.ts +171 -0
  649. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  650. package/src/core/objects/view/changes/view.alter.ts +112 -0
  651. package/src/core/objects/view/changes/view.base.ts +20 -0
  652. package/src/core/objects/view/changes/view.comment.ts +59 -0
  653. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  654. package/src/core/objects/view/changes/view.create.ts +73 -0
  655. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  656. package/src/core/objects/view/changes/view.drop.ts +40 -0
  657. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  658. package/src/core/objects/view/changes/view.types.ts +13 -0
  659. package/src/core/objects/view/view.diff.test.ts +269 -0
  660. package/src/core/objects/view/view.diff.ts +230 -0
  661. package/src/core/objects/view/view.model.ts +262 -0
  662. package/src/core/plan/apply.ts +172 -0
  663. package/src/core/plan/create.ts +384 -0
  664. package/src/core/plan/hierarchy.ts +574 -0
  665. package/src/core/plan/index.ts +29 -0
  666. package/src/core/plan/io.ts +20 -0
  667. package/src/core/plan/risk.ts +48 -0
  668. package/src/core/plan/serialize.test.ts +317 -0
  669. package/src/core/plan/serialize.ts +209 -0
  670. package/src/core/plan/sql-format/constants.ts +13 -0
  671. package/src/core/plan/sql-format/fixtures.ts +2803 -0
  672. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  673. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  674. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  675. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  676. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  677. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  678. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  679. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  680. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  681. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  682. package/src/core/plan/sql-format/format-utils.ts +391 -0
  683. package/src/core/plan/sql-format/formatters.ts +921 -0
  684. package/src/core/plan/sql-format/index.ts +149 -0
  685. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  686. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  687. package/src/core/plan/sql-format/protect.test.ts +127 -0
  688. package/src/core/plan/sql-format/protect.ts +337 -0
  689. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  690. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  691. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  692. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  693. package/src/core/plan/sql-format/types.ts +31 -0
  694. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  695. package/src/core/plan/sql-format/wrap.ts +196 -0
  696. package/src/core/plan/sql-format.ts +2 -0
  697. package/src/core/plan/ssl-config.ts +172 -0
  698. package/src/core/plan/statements.ts +22 -0
  699. package/src/core/plan/types.ts +171 -0
  700. package/src/core/postgres-config.ts +293 -0
  701. package/src/core/sort/custom-constraints.ts +161 -0
  702. package/src/core/sort/debug-visualization.ts +239 -0
  703. package/src/core/sort/dependency-filter.ts +224 -0
  704. package/src/core/sort/graph-builder.ts +235 -0
  705. package/src/core/sort/graph-utils.ts +51 -0
  706. package/src/core/sort/logical-sort.test.ts +371 -0
  707. package/src/core/sort/logical-sort.ts +573 -0
  708. package/src/core/sort/sort-changes.ts +234 -0
  709. package/src/core/sort/topological-sort.test.ts +275 -0
  710. package/src/core/sort/topological-sort.ts +184 -0
  711. package/src/core/sort/types.ts +112 -0
  712. package/src/core/sort/utils.ts +69 -0
  713. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  714. package/src/index.ts +41 -0
  715. package/src/typedoc.ts +248 -0
  716. package/dist/core/integrations/filter/extractors.d.ts +0 -12
  717. package/dist/core/integrations/filter/extractors.js +0 -136
@@ -1,7 +1,73 @@
1
1
  /**
2
2
  * Filter DSL - A serializable domain-specific language for change filtering.
3
+ *
4
+ * Uses wildcard-based path matching on flattened change properties.
5
+ * Path patterns as keys, values as matchers. Multiple keys in one object = AND.
6
+ *
7
+ * Path convention:
8
+ * - Top-level change properties are bare keys: `objectType`, `operation`, `scope`, `member`, `grantee`
9
+ * - Model sub-object properties use `<objectType>/<field>`: `table/schema`, `role/name`
10
+ * - Wildcard `*` matches any single path segment: `* /schema` → `table/schema`, `view/schema`, etc.
11
+ * - Separator is `/`
12
+ *
13
+ * Value matching:
14
+ * - string → exact equality
15
+ * - string[] → value must be in array (inclusion)
16
+ * - boolean → exact equality
17
+ * - number → exact equality
18
+ * - { op: "regex", value: string | string[] } → regex test
19
+ *
20
+ * When the flat value is an array (e.g. `requires`), match succeeds if any element satisfies.
21
+ */
22
+ import { compileWildcard, flattenChange } from "./flatten.js";
23
+ // Reserved keys that are not path patterns
24
+ const RESERVED_KEYS = new Set(["and", "or", "not", "cascade"]);
25
+ /**
26
+ * Match a flat value against a value matcher.
27
+ *
28
+ * When the flat value is an array, the match succeeds if any element satisfies.
3
29
  */
4
- import { PROPERTY_EXTRACTORS } from "./extractors.js";
30
+ function matchValue(actual, expected) {
31
+ if (actual === null || actual === undefined) {
32
+ return false;
33
+ }
34
+ // String matcher → exact equality
35
+ if (typeof expected === "string") {
36
+ if (Array.isArray(actual)) {
37
+ return actual.some((v) => v === expected);
38
+ }
39
+ return actual === expected;
40
+ }
41
+ // Boolean matcher → exact equality
42
+ if (typeof expected === "boolean") {
43
+ return actual === expected;
44
+ }
45
+ // Number matcher → exact equality
46
+ if (typeof expected === "number") {
47
+ return actual === expected;
48
+ }
49
+ // Array matcher → inclusion (value must be in array)
50
+ if (Array.isArray(expected)) {
51
+ if (Array.isArray(actual)) {
52
+ return actual.some((v) => expected.includes(v));
53
+ }
54
+ return typeof actual === "string" && expected.includes(actual);
55
+ }
56
+ // Regex operator
57
+ if (typeof expected === "object" &&
58
+ expected !== null &&
59
+ "op" in expected &&
60
+ expected.op === "regex") {
61
+ const patterns = Array.isArray(expected.value)
62
+ ? expected.value
63
+ : [expected.value];
64
+ if (Array.isArray(actual)) {
65
+ return actual.some((a) => patterns.some((p) => new RegExp(p).test(String(a))));
66
+ }
67
+ return patterns.some((p) => new RegExp(p).test(String(actual)));
68
+ }
69
+ return false;
70
+ }
5
71
  /**
6
72
  * Evaluate a pattern against a change.
7
73
  *
@@ -12,76 +78,36 @@ import { PROPERTY_EXTRACTORS } from "./extractors.js";
12
78
  export function evaluatePattern(pattern, change) {
13
79
  // Handle composition operators first (they take precedence)
14
80
  // NOT operator - negate the result
15
- if (pattern.not) {
81
+ if ("not" in pattern && pattern.not) {
16
82
  return !evaluatePattern(pattern.not, change);
17
83
  }
18
84
  // AND operator - all patterns must match
19
- if (pattern.and) {
85
+ if ("and" in pattern && pattern.and) {
20
86
  return pattern.and.every((p) => evaluatePattern(p, change));
21
87
  }
22
88
  // OR operator - any pattern must match
23
- if (pattern.or) {
89
+ if ("or" in pattern && pattern.or) {
24
90
  return pattern.or.some((p) => evaluatePattern(p, change));
25
91
  }
26
- // Evaluate basic pattern matching
27
- // Multiple properties in a pattern are combined with AND (all must match)
28
- // Match objectType
29
- if (pattern.type) {
30
- if (change.objectType !== pattern.type) {
31
- return false;
32
- }
33
- }
34
- // Match operation
35
- if (pattern.operation) {
36
- if (change.operation !== pattern.operation) {
37
- return false;
38
- }
39
- }
40
- // Match scope
41
- if (pattern.scope) {
42
- if (change.scope !== pattern.scope) {
43
- return false;
44
- }
45
- }
46
- // Match extracted properties
47
- for (const [key, value] of Object.entries(pattern)) {
48
- // Skip composition operators and core properties
49
- if (["and", "or", "not", "type", "operation", "scope"].includes(key)) {
92
+ // Path pattern matching: flatten the change, then for each key in the pattern,
93
+ // wildcard-match against flat map paths and compare values.
94
+ const flat = flattenChange(change);
95
+ for (const [patternKey, matcher] of Object.entries(pattern)) {
96
+ if (RESERVED_KEYS.has(patternKey))
50
97
  continue;
51
- }
52
- // Check if this is a registered property extractor
53
- const extractor = PROPERTY_EXTRACTORS[key];
54
- if (!extractor) {
55
- // Unknown property - ignore
56
- continue;
57
- }
58
- // Extract the actual value from the change
59
- const actualValue = extractor(change);
60
- // Property matching rules:
61
- // - String value: exact match
62
- // - Array value: value must be in array
63
- // - Missing properties (null) don't match
64
- if (actualValue === null) {
98
+ const wildcardMatcher = compileWildcard(patternKey);
99
+ // Find all flat keys that match this wildcard pattern
100
+ const matchingKeys = Object.keys(flat).filter((k) => wildcardMatcher(k));
101
+ if (matchingKeys.length === 0) {
102
+ // No flat keys match this wildcard → pattern key not satisfied
65
103
  return false;
66
104
  }
67
- if (typeof value === "string") {
68
- // Exact match
69
- if (actualValue !== value) {
70
- return false;
71
- }
72
- }
73
- else if (Array.isArray(value)) {
74
- // Value must be in array
75
- if (!value.includes(actualValue)) {
76
- return false;
77
- }
78
- }
79
- else {
80
- // Invalid value type - don't match
105
+ // At least one matching key must satisfy the value matcher
106
+ const anyMatch = matchingKeys.some((k) => matchValue(flat[k], matcher));
107
+ if (!anyMatch)
81
108
  return false;
82
- }
83
109
  }
84
- // All checks passed
110
+ // All pattern keys satisfied
85
111
  return true;
86
112
  }
87
113
  /**
@@ -91,17 +117,57 @@ export function evaluatePattern(pattern, change) {
91
117
  * @returns A ChangeFilter function that evaluates the pattern
92
118
  *
93
119
  * @example
94
- * ```ts
120
+ * ```
95
121
  * const filter = compileFilterDSL({
96
122
  * or: [
97
- * { type: "schema", operation: "create" },
98
- * { schema: "public" }
123
+ * { objectType: "schema", operation: "create" },
124
+ * { "table/schema": "public" }
99
125
  * ]
100
126
  * });
101
127
  * ```
102
128
  */
103
129
  export function compileFilterDSL(dsl) {
130
+ validateRegexPatterns(dsl);
104
131
  return (change) => {
105
132
  return evaluatePattern(dsl, change);
106
133
  };
107
134
  }
135
+ /**
136
+ * Walk the pattern tree and validate all regex patterns at compile time.
137
+ * Throws a descriptive error if any regex pattern is invalid.
138
+ */
139
+ function validateRegexPatterns(pattern) {
140
+ if ("not" in pattern && pattern.not) {
141
+ validateRegexPatterns(pattern.not);
142
+ return;
143
+ }
144
+ if ("and" in pattern && pattern.and) {
145
+ for (const p of pattern.and)
146
+ validateRegexPatterns(p);
147
+ return;
148
+ }
149
+ if ("or" in pattern && pattern.or) {
150
+ for (const p of pattern.or)
151
+ validateRegexPatterns(p);
152
+ return;
153
+ }
154
+ for (const [key, value] of Object.entries(pattern)) {
155
+ if (RESERVED_KEYS.has(key))
156
+ continue;
157
+ if (typeof value === "object" &&
158
+ value !== null &&
159
+ !Array.isArray(value) &&
160
+ "op" in value &&
161
+ value.op === "regex") {
162
+ const patterns = Array.isArray(value.value) ? value.value : [value.value];
163
+ for (const p of patterns) {
164
+ try {
165
+ new RegExp(p);
166
+ }
167
+ catch (e) {
168
+ throw new Error(`Invalid regex pattern "${p}" in filter DSL: ${e.message}`);
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Change flattening and wildcard path matching for the filter DSL.
3
+ *
4
+ * Each Change is flattened into a Record<string, FlatValue> where top-level
5
+ * scalar properties become bare keys and model sub-object properties become
6
+ * `<objectType>/<field>` paths. Wildcard patterns (e.g. `* /schema`) match
7
+ * against these flat paths.
8
+ */
9
+ import type { Change } from "../../change.types.ts";
10
+ /**
11
+ * A flat value extracted from a Change: scalar types or arrays of scalars.
12
+ *
13
+ * The filter DSL flattens every {@link Change} into a
14
+ * `Record<string, FlatValue>` before pattern matching. Only these primitive
15
+ * types survive the flattening step; nested objects are expanded into
16
+ * `<objectType>/<field>` paths.
17
+ *
18
+ * @category Filter DSL
19
+ */
20
+ export type FlatValue = string | number | boolean | null | Array<string | number>;
21
+ /**
22
+ * Flatten a Change into a Record<string, FlatValue>.
23
+ *
24
+ * A Change object has two kinds of properties:
25
+ *
26
+ * 1. **Top-level properties** — scalars and arrays directly on the object.
27
+ * These become bare keys in the flat record.
28
+ *
29
+ * 2. **Model sub-object** — a single nested object whose JS property name is
30
+ * given by OBJECT_TYPE_TO_PROPERTY_KEY. Its scalar fields are flattened
31
+ * with an `<objectType>/` prefix.
32
+ *
33
+ * After the main loop, a schema normalization step ensures that
34
+ * `<objectType>/schema` exists for every change that logically belongs to
35
+ * a schema — even when the model stores the schema under a different name.
36
+ *
37
+ * Results are cached per Change instance (WeakMap) so repeated calls are free.
38
+ */
39
+ export declare function flattenChange(change: Change): Record<string, FlatValue>;
40
+ /**
41
+ * Compile a glob pattern string into a matcher function.
42
+ *
43
+ * Uses picomatch for full glob support:
44
+ * - `objectType` matches only `objectType`
45
+ * - `table/schema` matches only `table/schema`
46
+ * - `* /schema` matches `table/schema`, `view/schema`, etc.
47
+ * - `{table,view}/schema` matches `table/schema` and `view/schema`
48
+ * - `table/is_*` matches `table/is_partition`, `table/is_typed`, etc.
49
+ * - `!(role)/schema` matches any objectType's schema except `role`
50
+ */
51
+ export declare function compileWildcard(pattern: string): (path: string) => boolean;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Change flattening and wildcard path matching for the filter DSL.
3
+ *
4
+ * Each Change is flattened into a Record<string, FlatValue> where top-level
5
+ * scalar properties become bare keys and model sub-object properties become
6
+ * `<objectType>/<field>` paths. Wildcard patterns (e.g. `* /schema`) match
7
+ * against these flat paths.
8
+ */
9
+ import picomatch from "picomatch";
10
+ import { OBJECT_TYPE_TO_PROPERTY_KEY } from "../../change.types.js";
11
+ import { getSchema } from "../../change-utils.js";
12
+ /**
13
+ * WeakMap cache to avoid re-flattening the same Change instance.
14
+ */
15
+ const flattenCache = new WeakMap();
16
+ /**
17
+ * Convert an unknown value to a FlatValue if it's a supported type.
18
+ *
19
+ * Supported types (kept in the flat record):
20
+ * - null / undefined → null (missing or explicitly null)
21
+ * - string, number, boolean → as-is
22
+ * - Array where every element is string or number → as-is
23
+ *
24
+ * Anything else (nested objects, arrays of objects, functions, …) is NOT
25
+ * representable as a flat value, so we return `undefined` to signal
26
+ * "skip this entry".
27
+ */
28
+ function toFlatValue(value) {
29
+ if (value === null || value === undefined)
30
+ return null;
31
+ if (typeof value === "string" ||
32
+ typeof value === "number" ||
33
+ typeof value === "boolean")
34
+ return value;
35
+ if (Array.isArray(value) &&
36
+ value.every((v) => typeof v === "string" || typeof v === "number")) {
37
+ return value;
38
+ }
39
+ return undefined;
40
+ }
41
+ /**
42
+ * Flatten a Change into a Record<string, FlatValue>.
43
+ *
44
+ * A Change object has two kinds of properties:
45
+ *
46
+ * 1. **Top-level properties** — scalars and arrays directly on the object.
47
+ * These become bare keys in the flat record.
48
+ *
49
+ * 2. **Model sub-object** — a single nested object whose JS property name is
50
+ * given by OBJECT_TYPE_TO_PROPERTY_KEY. Its scalar fields are flattened
51
+ * with an `<objectType>/` prefix.
52
+ *
53
+ * After the main loop, a schema normalization step ensures that
54
+ * `<objectType>/schema` exists for every change that logically belongs to
55
+ * a schema — even when the model stores the schema under a different name.
56
+ *
57
+ * Results are cached per Change instance (WeakMap) so repeated calls are free.
58
+ */
59
+ export function flattenChange(change) {
60
+ const cached = flattenCache.get(change);
61
+ if (cached)
62
+ return cached;
63
+ const flat = {};
64
+ const modelKey = OBJECT_TYPE_TO_PROPERTY_KEY[change.objectType];
65
+ const prefix = change.objectType;
66
+ for (const [key, value] of Object.entries(change)) {
67
+ if (key === modelKey &&
68
+ value &&
69
+ typeof value === "object" &&
70
+ !Array.isArray(value)) {
71
+ for (const [subKey, subValue] of Object.entries(value)) {
72
+ const flatVal = toFlatValue(subValue);
73
+ if (flatVal !== undefined) {
74
+ flat[`${prefix}/${subKey}`] = flatVal;
75
+ }
76
+ }
77
+ }
78
+ else {
79
+ const flatVal = toFlatValue(value);
80
+ if (flatVal !== undefined) {
81
+ flat[key] = flatVal;
82
+ }
83
+ }
84
+ }
85
+ // requires/creates/drops are prototype getters (not own properties),
86
+ // so Object.entries() above won't see them. Access them explicitly.
87
+ flat.requires = change.requires ?? [];
88
+ flat.creates = change.creates ?? [];
89
+ flat.drops = change.drops ?? [];
90
+ // Schema normalization: ensure <objectType>/schema exists for all changes
91
+ // that have a schema. Handles: schema objects (name→schema), event triggers
92
+ // (function_schema→schema), default_privilege scope (inSchema→schema).
93
+ const schemaKey = `${prefix}/schema`;
94
+ if (!(schemaKey in flat)) {
95
+ const schemaValue = getSchema(change);
96
+ if (schemaValue !== null) {
97
+ flat[schemaKey] = schemaValue;
98
+ }
99
+ }
100
+ flattenCache.set(change, flat);
101
+ return flat;
102
+ }
103
+ /**
104
+ * Compile a glob pattern string into a matcher function.
105
+ *
106
+ * Uses picomatch for full glob support:
107
+ * - `objectType` matches only `objectType`
108
+ * - `table/schema` matches only `table/schema`
109
+ * - `* /schema` matches `table/schema`, `view/schema`, etc.
110
+ * - `{table,view}/schema` matches `table/schema` and `view/schema`
111
+ * - `table/is_*` matches `table/is_partition`, `table/is_typed`, etc.
112
+ * - `!(role)/schema` matches any objectType's schema except `role`
113
+ */
114
+ export function compileWildcard(pattern) {
115
+ return picomatch(pattern, { dot: true });
116
+ }
@@ -3,12 +3,29 @@
3
3
  *
4
4
  * Combines filter and serialization DSLs into a single serializable structure.
5
5
  */
6
+ import type { CatalogSnapshot } from "../catalog.snapshot.ts";
6
7
  import type { FilterDSL } from "./filter/dsl.ts";
7
8
  import type { SerializeDSL } from "./serialize/dsl.ts";
8
9
  /**
9
- * Integration DSL - serializable representation of an integration.
10
+ * Serializable representation of a pg-delta integration.
11
+ *
12
+ * An integration combines a {@link FilterDSL} (which changes to include) with a
13
+ * {@link SerializeDSL} (how to render them as SQL) and an optional baseline
14
+ * catalog snapshot.
15
+ *
16
+ * @category Integration
10
17
  */
11
18
  export type IntegrationDSL = {
19
+ /**
20
+ * Base integration(s) to extend. Filters are AND-combined, serialize rules
21
+ * are concatenated (base rules first, higher priority in first-match-wins),
22
+ * and the most specific emptyCatalog wins.
23
+ *
24
+ * Only core integration names are accepted (e.g., "supabase").
25
+ * Can be a single name or an array of names.
26
+ * Circular extends are detected and rejected.
27
+ */
28
+ extends?: string | string[];
12
29
  /**
13
30
  * Filter DSL - determines which changes to include/exclude.
14
31
  * If not provided, all changes are included.
@@ -19,4 +36,13 @@ export type IntegrationDSL = {
19
36
  * If not provided, changes are serialized with default options.
20
37
  */
21
38
  serialize?: SerializeDSL;
39
+ /**
40
+ * Baseline catalog snapshot for this integration.
41
+ *
42
+ * When `--source` is omitted, this snapshot is deserialized and used as the
43
+ * source catalog instead of `createEmptyCatalog`. This lets integrations
44
+ * define what "empty" means for their platform (e.g. Supabase ships with
45
+ * pre-existing schemas, extensions, and roles).
46
+ */
47
+ emptyCatalog?: CatalogSnapshot;
22
48
  };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Integration merging — combines multiple IntegrationDSL objects.
3
+ *
4
+ * - Filters are AND-combined
5
+ * - Serialize rules are concatenated (earlier integrations first = higher priority)
6
+ * - emptyCatalog: most-specific (last) integration's value wins
7
+ */
8
+ import type { IntegrationDSL } from "./integration-dsl.ts";
9
+ /**
10
+ * Merge an ordered list of integrations into a single IntegrationDSL.
11
+ *
12
+ * Integrations are ordered from base (first) to most-specific (last).
13
+ * - Filters: AND-combined (all must pass)
14
+ * - Serialize: concatenated (base rules first → higher priority, first-match-wins)
15
+ * - emptyCatalog: most-specific non-undefined value wins
16
+ *
17
+ * @param integrations - Ordered list of integrations (base first, most-specific last)
18
+ * @returns A single merged IntegrationDSL
19
+ */
20
+ export declare function mergeIntegrations(integrations: IntegrationDSL[]): IntegrationDSL;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Integration merging — combines multiple IntegrationDSL objects.
3
+ *
4
+ * - Filters are AND-combined
5
+ * - Serialize rules are concatenated (earlier integrations first = higher priority)
6
+ * - emptyCatalog: most-specific (last) integration's value wins
7
+ */
8
+ /**
9
+ * Merge an ordered list of integrations into a single IntegrationDSL.
10
+ *
11
+ * Integrations are ordered from base (first) to most-specific (last).
12
+ * - Filters: AND-combined (all must pass)
13
+ * - Serialize: concatenated (base rules first → higher priority, first-match-wins)
14
+ * - emptyCatalog: most-specific non-undefined value wins
15
+ *
16
+ * @param integrations - Ordered list of integrations (base first, most-specific last)
17
+ * @returns A single merged IntegrationDSL
18
+ */
19
+ export function mergeIntegrations(integrations) {
20
+ if (integrations.length === 0)
21
+ return {};
22
+ if (integrations.length === 1)
23
+ return integrations[0];
24
+ // Collect all filters
25
+ const filters = [];
26
+ for (const integration of integrations) {
27
+ if (integration.filter) {
28
+ filters.push(integration.filter);
29
+ }
30
+ }
31
+ // Collect all serialize rules (base first = higher priority)
32
+ const serializeRules = [];
33
+ for (const integration of integrations) {
34
+ if (integration.serialize) {
35
+ serializeRules.push(...integration.serialize);
36
+ }
37
+ }
38
+ // emptyCatalog: most-specific (last) non-undefined wins
39
+ let emptyCatalog;
40
+ for (let i = integrations.length - 1; i >= 0; i--) {
41
+ if (integrations[i].emptyCatalog !== undefined) {
42
+ emptyCatalog = integrations[i].emptyCatalog;
43
+ break;
44
+ }
45
+ }
46
+ const merged = {};
47
+ if (filters.length === 1) {
48
+ merged.filter = filters[0];
49
+ }
50
+ else if (filters.length > 1) {
51
+ merged.filter = { and: filters };
52
+ }
53
+ if (serializeRules.length > 0) {
54
+ merged.serialize = serializeRules;
55
+ }
56
+ if (emptyCatalog !== undefined) {
57
+ merged.emptyCatalog = emptyCatalog;
58
+ }
59
+ return merged;
60
+ }
@@ -27,8 +27,11 @@ type SerializeRule = {
27
27
  options: SerializeOptions;
28
28
  };
29
29
  /**
30
- * Serialization DSL - array of rules evaluated in order.
31
- * First matching rule's options are applied.
30
+ * Array of serialization rules evaluated in order. The first matching rule's
31
+ * options are passed to `change.serialize()`. If no rule matches, default
32
+ * serialization is used.
33
+ *
34
+ * @category Integration
32
35
  */
33
36
  export type SerializeDSL = SerializeRule[];
34
37
  /**
@@ -45,9 +48,9 @@ export type SerializeDSL = SerializeRule[];
45
48
  * const serializer = compileSerializeDSL([
46
49
  * {
47
50
  * when: {
48
- * type: "schema",
51
+ * objectType: "schema",
49
52
  * operation: "create",
50
- * owner: ["service_role"]
53
+ * "schema/owner": ["service_role"]
51
54
  * },
52
55
  * options: { skipAuthorization: true }
53
56
  * }
@@ -18,9 +18,9 @@ import { evaluatePattern } from "../filter/dsl.js";
18
18
  * const serializer = compileSerializeDSL([
19
19
  * {
20
20
  * when: {
21
- * type: "schema",
21
+ * objectType: "schema",
22
22
  * operation: "create",
23
- * owner: ["service_role"]
23
+ * "schema/owner": ["service_role"]
24
24
  * },
25
25
  * options: { skipAuthorization: true }
26
26
  * }
@@ -7,4 +7,12 @@
7
7
  * - Skips authorization for schema creates owned by Supabase system roles
8
8
  */
9
9
  import type { IntegrationDSL } from "./integration-dsl.ts";
10
+ /**
11
+ * To generate the emptyCatalog snapshot, run catalog-export against a fresh
12
+ * supabase/postgres container:
13
+ *
14
+ * pgdelta catalog-export --target postgres://postgres:postgres@localhost:54322/postgres --output supabase-baseline.json
15
+ *
16
+ * Then import and assign the JSON content to the emptyCatalog field below.
17
+ */
10
18
  export declare const supabase: IntegrationDSL;
@@ -35,6 +35,7 @@ const SUPABASE_SYSTEM_ROLES = [
35
35
  "anon",
36
36
  "authenticated",
37
37
  "authenticator",
38
+ "cli_login_postgres",
38
39
  "dashboard_user",
39
40
  "pgbouncer",
40
41
  "pgsodium_keyholder",
@@ -50,42 +51,67 @@ const SUPABASE_SYSTEM_ROLES = [
50
51
  "supabase_realtime_admin",
51
52
  "supabase_replication_admin",
52
53
  "supabase_storage_admin",
54
+ "supabase_superuser",
53
55
  ];
56
+ /**
57
+ * To generate the emptyCatalog snapshot, run catalog-export against a fresh
58
+ * supabase/postgres container:
59
+ *
60
+ * pgdelta catalog-export --target postgres://postgres:postgres@localhost:54322/postgres --output supabase-baseline.json
61
+ *
62
+ * Then import and assign the JSON content to the emptyCatalog field below.
63
+ */
54
64
  export const supabase = {
65
+ // TODO: emptyCatalog: undefined -- populate by running catalog-export on a clean Supabase container
55
66
  filter: {
56
67
  or: [
68
+ // Include user schema CREATE operations (only schemas not in system list)
57
69
  {
58
70
  and: [
59
71
  {
60
- type: "schema",
72
+ objectType: "schema",
61
73
  operation: "create",
62
74
  scope: "object",
63
75
  },
64
76
  {
65
77
  not: {
66
- schema: [...SUPABASE_SYSTEM_SCHEMAS],
78
+ // Schema objects have name, not schema — use schema/name
79
+ "schema/name": [...SUPABASE_SYSTEM_SCHEMAS],
67
80
  },
68
81
  },
69
82
  ],
70
83
  },
84
+ // Include extension CREATEs
71
85
  {
72
- type: "extension",
86
+ objectType: "extension",
73
87
  operation: "create",
74
88
  scope: "object",
75
89
  },
90
+ // Exclude system objects
76
91
  {
77
92
  not: {
78
93
  or: [
94
+ // Objects in system schemas (*/schema matches table/schema, view/schema, etc.)
95
+ {
96
+ "*/schema": [...SUPABASE_SYSTEM_SCHEMAS],
97
+ },
98
+ // Schema objects whose own name is a system schema
99
+ {
100
+ "schema/name": [...SUPABASE_SYSTEM_SCHEMAS],
101
+ },
102
+ // Objects owned by system roles (*/owner matches table/owner, schema/owner, etc.)
79
103
  {
80
- schema: [...SUPABASE_SYSTEM_SCHEMAS],
104
+ "*/owner": [...SUPABASE_SYSTEM_ROLES],
81
105
  },
106
+ // Role objects whose own name is a system role
82
107
  {
83
- owner: [...SUPABASE_SYSTEM_ROLES],
108
+ "role/name": [...SUPABASE_SYSTEM_ROLES],
84
109
  },
110
+ // Membership changes for system roles
85
111
  {
86
112
  and: [
87
113
  {
88
- type: "role",
114
+ objectType: "role",
89
115
  scope: "membership",
90
116
  },
91
117
  {
@@ -101,10 +127,10 @@ export const supabase = {
101
127
  serialize: [
102
128
  {
103
129
  when: {
104
- type: "schema",
130
+ objectType: "schema",
105
131
  operation: "create",
106
132
  scope: "object",
107
- owner: [...SUPABASE_SYSTEM_ROLES],
133
+ "schema/owner": [...SUPABASE_SYSTEM_ROLES],
108
134
  },
109
135
  options: {
110
136
  skipAuthorization: true,