@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.
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/dist/cli/app.d.ts +1 -0
- package/dist/cli/app.js +26 -0
- package/dist/cli/bin/cli.d.ts +2 -0
- package/dist/cli/bin/cli.js +7 -0
- package/dist/cli/commands/apply.d.ts +5 -0
- package/dist/cli/commands/apply.js +85 -0
- package/dist/cli/commands/plan.d.ts +5 -0
- package/dist/cli/commands/plan.js +137 -0
- package/dist/cli/commands/sync.d.ts +5 -0
- package/dist/cli/commands/sync.js +141 -0
- package/dist/cli/formatters/index.d.ts +4 -0
- package/dist/cli/formatters/index.js +4 -0
- package/dist/cli/formatters/tree/tree-builder.d.ts +10 -0
- package/dist/cli/formatters/tree/tree-builder.js +333 -0
- package/dist/cli/formatters/tree/tree-renderer.d.ts +45 -0
- package/dist/cli/formatters/tree/tree-renderer.js +303 -0
- package/dist/cli/formatters/tree/tree.d.ts +8 -0
- package/dist/cli/formatters/tree/tree.js +161 -0
- package/dist/cli/utils/integrations.d.ts +13 -0
- package/dist/cli/utils/integrations.js +35 -0
- package/dist/cli/utils.d.ts +64 -0
- package/dist/cli/utils.js +160 -0
- package/dist/core/catalog.diff.d.ts +5 -0
- package/dist/core/catalog.diff.js +147 -0
- package/dist/core/catalog.model.d.ts +93 -0
- package/dist/core/catalog.model.js +254 -0
- package/dist/core/change.types.d.ts +22 -0
- package/dist/core/change.types.js +1 -0
- package/dist/core/context.d.ts +11 -0
- package/dist/core/context.js +12 -0
- package/dist/core/depend.d.ts +31 -0
- package/dist/core/depend.js +1833 -0
- package/dist/core/expand-replace-dependencies.d.ts +14 -0
- package/dist/core/expand-replace-dependencies.js +280 -0
- package/dist/core/fingerprint.d.ts +23 -0
- package/dist/core/fingerprint.js +174 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.js +14 -0
- package/dist/core/integrations/filter/dsl.d.ts +97 -0
- package/dist/core/integrations/filter/dsl.js +107 -0
- package/dist/core/integrations/filter/extractors.d.ts +12 -0
- package/dist/core/integrations/filter/extractors.js +136 -0
- package/dist/core/integrations/integration-dsl.d.ts +22 -0
- package/dist/core/integrations/integration-dsl.js +6 -0
- package/dist/core/integrations/integration.types.d.ts +5 -0
- package/dist/core/integrations/integration.types.js +1 -0
- package/dist/core/integrations/serialize/dsl.d.ts +58 -0
- package/dist/core/integrations/serialize/dsl.js +42 -0
- package/dist/core/main.d.ts +5 -0
- package/dist/core/main.js +44 -0
- package/dist/core/objects/aggregate/aggregate.diff.d.ts +10 -0
- package/dist/core/objects/aggregate/aggregate.diff.js +186 -0
- package/dist/core/objects/aggregate/aggregate.model.d.ts +174 -0
- package/dist/core/objects/aggregate/aggregate.model.js +297 -0
- package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +19 -0
- package/dist/core/objects/aggregate/changes/aggregate.alter.js +25 -0
- package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +17 -0
- package/dist/core/objects/aggregate/changes/aggregate.base.js +13 -0
- package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +23 -0
- package/dist/core/objects/aggregate/changes/aggregate.comment.js +44 -0
- package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +19 -0
- package/dist/core/objects/aggregate/changes/aggregate.create.js +228 -0
- package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +17 -0
- package/dist/core/objects/aggregate/changes/aggregate.drop.js +26 -0
- package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +62 -0
- package/dist/core/objects/aggregate/changes/aggregate.privilege.js +102 -0
- package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +6 -0
- package/dist/core/objects/aggregate/changes/aggregate.types.js +1 -0
- package/dist/core/objects/base.change.d.ts +46 -0
- package/dist/core/objects/base.change.js +38 -0
- package/dist/core/objects/base.default-privileges.d.ts +29 -0
- package/dist/core/objects/base.default-privileges.js +167 -0
- package/dist/core/objects/base.diff.d.ts +6 -0
- package/dist/core/objects/base.diff.js +12 -0
- package/dist/core/objects/base.model.d.ts +74 -0
- package/dist/core/objects/base.model.js +47 -0
- package/dist/core/objects/base.privilege-diff.d.ts +54 -0
- package/dist/core/objects/base.privilege-diff.js +216 -0
- package/dist/core/objects/base.privilege.d.ts +27 -0
- package/dist/core/objects/base.privilege.js +169 -0
- package/dist/core/objects/collation/changes/collation.alter.d.ts +45 -0
- package/dist/core/objects/collation/changes/collation.alter.js +52 -0
- package/dist/core/objects/collation/changes/collation.base.d.ts +17 -0
- package/dist/core/objects/collation/changes/collation.base.js +13 -0
- package/dist/core/objects/collation/changes/collation.comment.d.ts +26 -0
- package/dist/core/objects/collation/changes/collation.comment.js +50 -0
- package/dist/core/objects/collation/changes/collation.create.d.ts +32 -0
- package/dist/core/objects/collation/changes/collation.create.js +86 -0
- package/dist/core/objects/collation/changes/collation.drop.d.ts +22 -0
- package/dist/core/objects/collation/changes/collation.drop.js +31 -0
- package/dist/core/objects/collation/changes/collation.types.d.ts +5 -0
- package/dist/core/objects/collation/changes/collation.types.js +1 -0
- package/dist/core/objects/collation/collation.diff.d.ts +13 -0
- package/dist/core/objects/collation/collation.diff.js +85 -0
- package/dist/core/objects/collation/collation.model.d.ts +67 -0
- package/dist/core/objects/collation/collation.model.js +207 -0
- package/dist/core/objects/domain/changes/domain.alter.d.ts +143 -0
- package/dist/core/objects/domain/changes/domain.alter.js +191 -0
- package/dist/core/objects/domain/changes/domain.base.d.ts +17 -0
- package/dist/core/objects/domain/changes/domain.base.js +13 -0
- package/dist/core/objects/domain/changes/domain.comment.d.ts +25 -0
- package/dist/core/objects/domain/changes/domain.comment.js +47 -0
- package/dist/core/objects/domain/changes/domain.create.d.ts +30 -0
- package/dist/core/objects/domain/changes/domain.create.js +92 -0
- package/dist/core/objects/domain/changes/domain.drop.d.ts +22 -0
- package/dist/core/objects/domain/changes/domain.drop.js +28 -0
- package/dist/core/objects/domain/changes/domain.privilege.d.ts +97 -0
- package/dist/core/objects/domain/changes/domain.privilege.js +127 -0
- package/dist/core/objects/domain/changes/domain.types.d.ts +6 -0
- package/dist/core/objects/domain/changes/domain.types.js +1 -0
- package/dist/core/objects/domain/domain.diff.d.ts +18 -0
- package/dist/core/objects/domain/domain.diff.js +244 -0
- package/dist/core/objects/domain/domain.model.d.ts +103 -0
- package/dist/core/objects/domain/domain.model.js +172 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +44 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +51 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +17 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.base.js +13 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +23 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +46 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +25 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.create.js +55 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +22 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +28 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +5 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.types.js +1 -0
- package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +13 -0
- package/dist/core/objects/event-trigger/event-trigger.diff.js +81 -0
- package/dist/core/objects/event-trigger/event-trigger.model.d.ts +45 -0
- package/dist/core/objects/event-trigger/event-trigger.model.js +89 -0
- package/dist/core/objects/extension/changes/extension.alter.d.ts +44 -0
- package/dist/core/objects/extension/changes/extension.alter.js +51 -0
- package/dist/core/objects/extension/changes/extension.base.d.ts +17 -0
- package/dist/core/objects/extension/changes/extension.base.js +13 -0
- package/dist/core/objects/extension/changes/extension.comment.d.ts +26 -0
- package/dist/core/objects/extension/changes/extension.comment.js +46 -0
- package/dist/core/objects/extension/changes/extension.create.d.ts +25 -0
- package/dist/core/objects/extension/changes/extension.create.js +49 -0
- package/dist/core/objects/extension/changes/extension.drop.d.ts +22 -0
- package/dist/core/objects/extension/changes/extension.drop.js +28 -0
- package/dist/core/objects/extension/changes/extension.types.d.ts +5 -0
- package/dist/core/objects/extension/changes/extension.types.js +1 -0
- package/dist/core/objects/extension/extension.diff.d.ts +10 -0
- package/dist/core/objects/extension/extension.diff.js +65 -0
- package/dist/core/objects/extension/extension.model.d.ts +52 -0
- package/dist/core/objects/extension/extension.model.js +268 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +51 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +61 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +26 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +50 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +25 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +78 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +22 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +28 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +97 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +123 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +6 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +18 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +221 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +59 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +128 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +5 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +163 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +248 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +26 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +50 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +25 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +64 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +22 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +31 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +97 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +129 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +6 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +18 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +268 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +117 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +215 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +65 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +84 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +26 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +43 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +24 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +62 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +22 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +28 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +97 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +123 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +6 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +18 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +209 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +62 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.model.js +118 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +37 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +38 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +24 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +52 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +23 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +34 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +4 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.d.ts +10 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.js +77 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +36 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +85 -0
- package/dist/core/objects/index/changes/index.alter.d.ts +76 -0
- package/dist/core/objects/index/changes/index.alter.js +94 -0
- package/dist/core/objects/index/changes/index.base.d.ts +17 -0
- package/dist/core/objects/index/changes/index.base.js +13 -0
- package/dist/core/objects/index/changes/index.comment.d.ts +26 -0
- package/dist/core/objects/index/changes/index.comment.js +50 -0
- package/dist/core/objects/index/changes/index.create.d.ts +30 -0
- package/dist/core/objects/index/changes/index.create.js +53 -0
- package/dist/core/objects/index/changes/index.drop.d.ts +22 -0
- package/dist/core/objects/index/changes/index.drop.js +28 -0
- package/dist/core/objects/index/changes/index.types.d.ts +5 -0
- package/dist/core/objects/index/changes/index.types.js +1 -0
- package/dist/core/objects/index/changes/utils.d.ts +3 -0
- package/dist/core/objects/index/changes/utils.js +6 -0
- package/dist/core/objects/index/index.diff.d.ts +12 -0
- package/dist/core/objects/index/index.diff.js +182 -0
- package/dist/core/objects/index/index.model.d.ts +150 -0
- package/dist/core/objects/index/index.model.js +340 -0
- package/dist/core/objects/language/changes/language.alter.d.ts +32 -0
- package/dist/core/objects/language/changes/language.alter.js +30 -0
- package/dist/core/objects/language/changes/language.base.d.ts +17 -0
- package/dist/core/objects/language/changes/language.base.js +13 -0
- package/dist/core/objects/language/changes/language.comment.d.ts +26 -0
- package/dist/core/objects/language/changes/language.comment.js +45 -0
- package/dist/core/objects/language/changes/language.create.d.ts +25 -0
- package/dist/core/objects/language/changes/language.create.js +76 -0
- package/dist/core/objects/language/changes/language.drop.d.ts +22 -0
- package/dist/core/objects/language/changes/language.drop.js +31 -0
- package/dist/core/objects/language/changes/language.privilege.d.ts +97 -0
- package/dist/core/objects/language/changes/language.privilege.js +128 -0
- package/dist/core/objects/language/changes/language.types.d.ts +6 -0
- package/dist/core/objects/language/changes/language.types.js +1 -0
- package/dist/core/objects/language/language.diff.d.ts +15 -0
- package/dist/core/objects/language/language.diff.js +117 -0
- package/dist/core/objects/language/language.model.d.ts +62 -0
- package/dist/core/objects/language/language.model.js +128 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +67 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +63 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +17 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.base.js +13 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +53 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +112 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +35 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.create.js +71 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +26 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +42 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +105 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +151 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +6 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.types.js +1 -0
- package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +18 -0
- package/dist/core/objects/materialized-view/materialized-view.diff.js +335 -0
- package/dist/core/objects/materialized-view/materialized-view.model.d.ts +152 -0
- package/dist/core/objects/materialized-view/materialized-view.model.js +228 -0
- package/dist/core/objects/procedure/changes/procedure.alter.d.ts +143 -0
- package/dist/core/objects/procedure/changes/procedure.alter.js +207 -0
- package/dist/core/objects/procedure/changes/procedure.base.d.ts +17 -0
- package/dist/core/objects/procedure/changes/procedure.base.js +13 -0
- package/dist/core/objects/procedure/changes/procedure.comment.d.ts +26 -0
- package/dist/core/objects/procedure/changes/procedure.comment.js +52 -0
- package/dist/core/objects/procedure/changes/procedure.create.d.ts +42 -0
- package/dist/core/objects/procedure/changes/procedure.create.js +77 -0
- package/dist/core/objects/procedure/changes/procedure.drop.d.ts +23 -0
- package/dist/core/objects/procedure/changes/procedure.drop.js +37 -0
- package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +98 -0
- package/dist/core/objects/procedure/changes/procedure.privilege.js +144 -0
- package/dist/core/objects/procedure/changes/procedure.types.d.ts +6 -0
- package/dist/core/objects/procedure/changes/procedure.types.js +1 -0
- package/dist/core/objects/procedure/procedure.diff.d.ts +18 -0
- package/dist/core/objects/procedure/procedure.diff.js +282 -0
- package/dist/core/objects/procedure/procedure.model.d.ts +132 -0
- package/dist/core/objects/procedure/procedure.model.js +244 -0
- package/dist/core/objects/procedure/utils.d.ts +14 -0
- package/dist/core/objects/procedure/utils.js +55 -0
- package/dist/core/objects/publication/changes/publication.alter.d.ts +88 -0
- package/dist/core/objects/publication/changes/publication.alter.js +176 -0
- package/dist/core/objects/publication/changes/publication.base.d.ts +17 -0
- package/dist/core/objects/publication/changes/publication.base.js +13 -0
- package/dist/core/objects/publication/changes/publication.comment.d.ts +23 -0
- package/dist/core/objects/publication/changes/publication.comment.js +46 -0
- package/dist/core/objects/publication/changes/publication.create.d.ts +17 -0
- package/dist/core/objects/publication/changes/publication.create.js +61 -0
- package/dist/core/objects/publication/changes/publication.drop.d.ts +17 -0
- package/dist/core/objects/publication/changes/publication.drop.js +23 -0
- package/dist/core/objects/publication/changes/publication.types.d.ts +5 -0
- package/dist/core/objects/publication/changes/publication.types.js +1 -0
- package/dist/core/objects/publication/publication.diff.d.ts +5 -0
- package/dist/core/objects/publication/publication.diff.js +161 -0
- package/dist/core/objects/publication/publication.model.d.ts +96 -0
- package/dist/core/objects/publication/publication.model.js +186 -0
- package/dist/core/objects/publication/utils.d.ts +5 -0
- package/dist/core/objects/publication/utils.js +45 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +62 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +90 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.base.d.ts +17 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.base.js +13 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +23 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +51 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +27 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.create.js +79 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +22 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +33 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +5 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.types.js +1 -0
- package/dist/core/objects/rls-policy/rls-policy.diff.d.ts +10 -0
- package/dist/core/objects/rls-policy/rls-policy.diff.js +80 -0
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +52 -0
- package/dist/core/objects/rls-policy/rls-policy.model.js +127 -0
- package/dist/core/objects/role/changes/role.alter.d.ts +78 -0
- package/dist/core/objects/role/changes/role.alter.js +55 -0
- package/dist/core/objects/role/changes/role.base.d.ts +17 -0
- package/dist/core/objects/role/changes/role.base.js +13 -0
- package/dist/core/objects/role/changes/role.comment.d.ts +23 -0
- package/dist/core/objects/role/changes/role.comment.js +42 -0
- package/dist/core/objects/role/changes/role.create.d.ts +38 -0
- package/dist/core/objects/role/changes/role.create.js +83 -0
- package/dist/core/objects/role/changes/role.drop.d.ts +22 -0
- package/dist/core/objects/role/changes/role.drop.js +28 -0
- package/dist/core/objects/role/changes/role.privilege.d.ts +148 -0
- package/dist/core/objects/role/changes/role.privilege.js +283 -0
- package/dist/core/objects/role/changes/role.types.d.ts +6 -0
- package/dist/core/objects/role/changes/role.types.js +1 -0
- package/dist/core/objects/role/role.diff.d.ts +13 -0
- package/dist/core/objects/role/role.diff.js +386 -0
- package/dist/core/objects/role/role.model.d.ts +89 -0
- package/dist/core/objects/role/role.model.js +312 -0
- package/dist/core/objects/rule/changes/rule.alter.d.ts +22 -0
- package/dist/core/objects/rule/changes/rule.alter.js +58 -0
- package/dist/core/objects/rule/changes/rule.base.d.ts +17 -0
- package/dist/core/objects/rule/changes/rule.base.js +13 -0
- package/dist/core/objects/rule/changes/rule.comment.d.ts +22 -0
- package/dist/core/objects/rule/changes/rule.comment.js +51 -0
- package/dist/core/objects/rule/changes/rule.create.d.ts +14 -0
- package/dist/core/objects/rule/changes/rule.create.js +28 -0
- package/dist/core/objects/rule/changes/rule.drop.d.ts +12 -0
- package/dist/core/objects/rule/changes/rule.drop.js +23 -0
- package/dist/core/objects/rule/changes/rule.types.d.ts +5 -0
- package/dist/core/objects/rule/changes/rule.types.js +1 -0
- package/dist/core/objects/rule/rule.diff.d.ts +3 -0
- package/dist/core/objects/rule/rule.diff.js +53 -0
- package/dist/core/objects/rule/rule.model.d.ts +72 -0
- package/dist/core/objects/rule/rule.model.js +156 -0
- package/dist/core/objects/schema/changes/schema.alter.d.ts +32 -0
- package/dist/core/objects/schema/changes/schema.alter.js +25 -0
- package/dist/core/objects/schema/changes/schema.base.d.ts +17 -0
- package/dist/core/objects/schema/changes/schema.base.js +13 -0
- package/dist/core/objects/schema/changes/schema.comment.d.ts +23 -0
- package/dist/core/objects/schema/changes/schema.comment.js +43 -0
- package/dist/core/objects/schema/changes/schema.create.d.ts +27 -0
- package/dist/core/objects/schema/changes/schema.create.js +38 -0
- package/dist/core/objects/schema/changes/schema.drop.d.ts +22 -0
- package/dist/core/objects/schema/changes/schema.drop.js +28 -0
- package/dist/core/objects/schema/changes/schema.privilege.d.ts +97 -0
- package/dist/core/objects/schema/changes/schema.privilege.js +131 -0
- package/dist/core/objects/schema/changes/schema.types.d.ts +6 -0
- package/dist/core/objects/schema/changes/schema.types.js +1 -0
- package/dist/core/objects/schema/schema.diff.d.ts +18 -0
- package/dist/core/objects/schema/schema.diff.js +142 -0
- package/dist/core/objects/schema/schema.model.d.ts +47 -0
- package/dist/core/objects/schema/schema.model.js +91 -0
- package/dist/core/objects/sequence/changes/sequence.alter.d.ts +59 -0
- package/dist/core/objects/sequence/changes/sequence.alter.js +75 -0
- package/dist/core/objects/sequence/changes/sequence.base.d.ts +17 -0
- package/dist/core/objects/sequence/changes/sequence.base.js +13 -0
- package/dist/core/objects/sequence/changes/sequence.comment.d.ts +23 -0
- package/dist/core/objects/sequence/changes/sequence.comment.js +47 -0
- package/dist/core/objects/sequence/changes/sequence.create.d.ts +25 -0
- package/dist/core/objects/sequence/changes/sequence.create.js +78 -0
- package/dist/core/objects/sequence/changes/sequence.drop.d.ts +22 -0
- package/dist/core/objects/sequence/changes/sequence.drop.js +31 -0
- package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +101 -0
- package/dist/core/objects/sequence/changes/sequence.privilege.js +135 -0
- package/dist/core/objects/sequence/changes/sequence.types.d.ts +6 -0
- package/dist/core/objects/sequence/changes/sequence.types.js +1 -0
- package/dist/core/objects/sequence/sequence.diff.d.ts +20 -0
- package/dist/core/objects/sequence/sequence.diff.js +258 -0
- package/dist/core/objects/sequence/sequence.model.d.ts +76 -0
- package/dist/core/objects/sequence/sequence.model.js +169 -0
- package/dist/core/objects/subscription/changes/subscription.alter.d.ts +56 -0
- package/dist/core/objects/subscription/changes/subscription.alter.js +82 -0
- package/dist/core/objects/subscription/changes/subscription.base.d.ts +17 -0
- package/dist/core/objects/subscription/changes/subscription.base.js +13 -0
- package/dist/core/objects/subscription/changes/subscription.comment.d.ts +23 -0
- package/dist/core/objects/subscription/changes/subscription.comment.js +46 -0
- package/dist/core/objects/subscription/changes/subscription.create.d.ts +12 -0
- package/dist/core/objects/subscription/changes/subscription.create.js +52 -0
- package/dist/core/objects/subscription/changes/subscription.drop.d.ts +11 -0
- package/dist/core/objects/subscription/changes/subscription.drop.js +15 -0
- package/dist/core/objects/subscription/changes/subscription.types.d.ts +5 -0
- package/dist/core/objects/subscription/changes/subscription.types.js +1 -0
- package/dist/core/objects/subscription/subscription.diff.d.ts +5 -0
- package/dist/core/objects/subscription/subscription.diff.js +167 -0
- package/dist/core/objects/subscription/subscription.model.d.ts +80 -0
- package/dist/core/objects/subscription/subscription.model.js +166 -0
- package/dist/core/objects/subscription/utils.d.ts +37 -0
- package/dist/core/objects/subscription/utils.js +112 -0
- package/dist/core/objects/table/changes/table.alter.d.ts +357 -0
- package/dist/core/objects/table/changes/table.alter.js +607 -0
- package/dist/core/objects/table/changes/table.base.d.ts +17 -0
- package/dist/core/objects/table/changes/table.base.js +13 -0
- package/dist/core/objects/table/changes/table.comment.d.ts +106 -0
- package/dist/core/objects/table/changes/table.comment.js +175 -0
- package/dist/core/objects/table/changes/table.create.d.ts +33 -0
- package/dist/core/objects/table/changes/table.create.js +145 -0
- package/dist/core/objects/table/changes/table.drop.d.ts +22 -0
- package/dist/core/objects/table/changes/table.drop.js +35 -0
- package/dist/core/objects/table/changes/table.privilege.d.ts +107 -0
- package/dist/core/objects/table/changes/table.privilege.js +150 -0
- package/dist/core/objects/table/changes/table.types.d.ts +6 -0
- package/dist/core/objects/table/changes/table.types.js +1 -0
- package/dist/core/objects/table/table.diff.d.ts +18 -0
- package/dist/core/objects/table/table.diff.js +668 -0
- package/dist/core/objects/table/table.model.d.ts +341 -0
- package/dist/core/objects/table/table.model.js +426 -0
- package/dist/core/objects/trigger/changes/trigger.alter.d.ts +29 -0
- package/dist/core/objects/trigger/changes/trigger.alter.js +27 -0
- package/dist/core/objects/trigger/changes/trigger.base.d.ts +17 -0
- package/dist/core/objects/trigger/changes/trigger.base.js +13 -0
- package/dist/core/objects/trigger/changes/trigger.comment.d.ts +23 -0
- package/dist/core/objects/trigger/changes/trigger.comment.js +51 -0
- package/dist/core/objects/trigger/changes/trigger.create.d.ts +41 -0
- package/dist/core/objects/trigger/changes/trigger.create.js +61 -0
- package/dist/core/objects/trigger/changes/trigger.drop.d.ts +22 -0
- package/dist/core/objects/trigger/changes/trigger.drop.js +33 -0
- package/dist/core/objects/trigger/changes/trigger.types.d.ts +5 -0
- package/dist/core/objects/trigger/changes/trigger.types.js +1 -0
- package/dist/core/objects/trigger/trigger.diff.d.ts +11 -0
- package/dist/core/objects/trigger/trigger.diff.js +84 -0
- package/dist/core/objects/trigger/trigger.model.d.ts +92 -0
- package/dist/core/objects/trigger/trigger.model.js +235 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +81 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +123 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +17 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.base.js +13 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +53 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +108 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +23 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.create.js +72 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +22 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +31 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +97 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +131 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +6 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.types.js +1 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +18 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.js +250 -0
- package/dist/core/objects/type/composite-type/composite-type.model.d.ts +148 -0
- package/dist/core/objects/type/composite-type/composite-type.model.js +223 -0
- package/dist/core/objects/type/enum/changes/enum.alter.d.ts +52 -0
- package/dist/core/objects/type/enum/changes/enum.alter.js +60 -0
- package/dist/core/objects/type/enum/changes/enum.base.d.ts +17 -0
- package/dist/core/objects/type/enum/changes/enum.base.js +13 -0
- package/dist/core/objects/type/enum/changes/enum.comment.d.ts +26 -0
- package/dist/core/objects/type/enum/changes/enum.comment.js +47 -0
- package/dist/core/objects/type/enum/changes/enum.create.d.ts +22 -0
- package/dist/core/objects/type/enum/changes/enum.create.js +43 -0
- package/dist/core/objects/type/enum/changes/enum.drop.d.ts +22 -0
- package/dist/core/objects/type/enum/changes/enum.drop.js +28 -0
- package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +97 -0
- package/dist/core/objects/type/enum/changes/enum.privilege.js +131 -0
- package/dist/core/objects/type/enum/changes/enum.types.d.ts +6 -0
- package/dist/core/objects/type/enum/changes/enum.types.js +1 -0
- package/dist/core/objects/type/enum/enum.diff.d.ts +18 -0
- package/dist/core/objects/type/enum/enum.diff.js +268 -0
- package/dist/core/objects/type/enum/enum.model.d.ts +66 -0
- package/dist/core/objects/type/enum/enum.model.js +154 -0
- package/dist/core/objects/type/range/changes/range.alter.d.ts +33 -0
- package/dist/core/objects/type/range/changes/range.alter.js +30 -0
- package/dist/core/objects/type/range/changes/range.base.d.ts +17 -0
- package/dist/core/objects/type/range/changes/range.base.js +13 -0
- package/dist/core/objects/type/range/changes/range.comment.d.ts +26 -0
- package/dist/core/objects/type/range/changes/range.comment.js +47 -0
- package/dist/core/objects/type/range/changes/range.create.d.ts +31 -0
- package/dist/core/objects/type/range/changes/range.create.js +113 -0
- package/dist/core/objects/type/range/changes/range.drop.d.ts +22 -0
- package/dist/core/objects/type/range/changes/range.drop.js +28 -0
- package/dist/core/objects/type/range/changes/range.privilege.d.ts +97 -0
- package/dist/core/objects/type/range/changes/range.privilege.js +131 -0
- package/dist/core/objects/type/range/changes/range.types.d.ts +6 -0
- package/dist/core/objects/type/range/changes/range.types.js +1 -0
- package/dist/core/objects/type/range/range.diff.d.ts +18 -0
- package/dist/core/objects/type/range/range.diff.js +172 -0
- package/dist/core/objects/type/range/range.model.d.ts +81 -0
- package/dist/core/objects/type/range/range.model.js +165 -0
- package/dist/core/objects/type/type.types.d.ts +4 -0
- package/dist/core/objects/type/type.types.js +1 -0
- package/dist/core/objects/utils.d.ts +57 -0
- package/dist/core/objects/utils.js +137 -0
- package/dist/core/objects/view/changes/view.alter.d.ts +62 -0
- package/dist/core/objects/view/changes/view.alter.js +75 -0
- package/dist/core/objects/view/changes/view.base.d.ts +17 -0
- package/dist/core/objects/view/changes/view.base.js +13 -0
- package/dist/core/objects/view/changes/view.comment.d.ts +23 -0
- package/dist/core/objects/view/changes/view.comment.js +46 -0
- package/dist/core/objects/view/changes/view.create.d.ts +27 -0
- package/dist/core/objects/view/changes/view.create.js +57 -0
- package/dist/core/objects/view/changes/view.drop.d.ts +17 -0
- package/dist/core/objects/view/changes/view.drop.js +30 -0
- package/dist/core/objects/view/changes/view.privilege.d.ts +107 -0
- package/dist/core/objects/view/changes/view.privilege.js +150 -0
- package/dist/core/objects/view/changes/view.types.d.ts +6 -0
- package/dist/core/objects/view/changes/view.types.js +1 -0
- package/dist/core/objects/view/view.diff.d.ts +18 -0
- package/dist/core/objects/view/view.diff.js +270 -0
- package/dist/core/objects/view/view.model.d.ts +152 -0
- package/dist/core/objects/view/view.model.js +250 -0
- package/dist/core/plan/apply.d.ts +33 -0
- package/dist/core/plan/apply.js +112 -0
- package/dist/core/plan/create.d.ts +22 -0
- package/dist/core/plan/create.js +228 -0
- package/dist/core/plan/hierarchy.d.ts +19 -0
- package/dist/core/plan/hierarchy.js +488 -0
- package/dist/core/plan/index.d.ts +19 -0
- package/dist/core/plan/index.js +21 -0
- package/dist/core/plan/io.d.ts +12 -0
- package/dist/core/plan/io.js +17 -0
- package/dist/core/plan/risk.d.ts +10 -0
- package/dist/core/plan/risk.js +38 -0
- package/dist/core/plan/serialize.d.ts +26 -0
- package/dist/core/plan/serialize.js +176 -0
- package/dist/core/plan/statements.d.ts +8 -0
- package/dist/core/plan/statements.js +13 -0
- package/dist/core/plan/types.d.ts +153 -0
- package/dist/core/plan/types.js +32 -0
- package/dist/core/postgres-config.d.ts +8 -0
- package/dist/core/postgres-config.js +46 -0
- package/dist/core/sort/custom-constraints.d.ts +9 -0
- package/dist/core/sort/custom-constraints.js +133 -0
- package/dist/core/sort/debug-visualization.d.ts +8 -0
- package/dist/core/sort/debug-visualization.js +145 -0
- package/dist/core/sort/dependency-filter.d.ts +19 -0
- package/dist/core/sort/dependency-filter.js +152 -0
- package/dist/core/sort/graph-builder.d.ts +37 -0
- package/dist/core/sort/graph-builder.js +172 -0
- package/dist/core/sort/graph-utils.d.ts +14 -0
- package/dist/core/sort/graph-utils.js +41 -0
- package/dist/core/sort/logical-sort.d.ts +26 -0
- package/dist/core/sort/logical-sort.js +532 -0
- package/dist/core/sort/sort-changes.d.ts +28 -0
- package/dist/core/sort/sort-changes.js +147 -0
- package/dist/core/sort/topological-sort.d.ts +20 -0
- package/dist/core/sort/topological-sort.js +138 -0
- package/dist/core/sort/types.d.ts +102 -0
- package/dist/core/sort/types.js +1 -0
- package/dist/core/sort/utils.d.ts +23 -0
- package/dist/core/sort/utils.js +51 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +58 -12
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps object type names to PostgreSQL default privilege objtype codes.
|
|
3
|
+
* Used to look up default privileges for different object types.
|
|
4
|
+
*/
|
|
5
|
+
function objectTypeToObjtype(objectType) {
|
|
6
|
+
switch (objectType) {
|
|
7
|
+
case "table":
|
|
8
|
+
return "r"; // Relations (tables)
|
|
9
|
+
case "view":
|
|
10
|
+
return "r"; // Views are also relations
|
|
11
|
+
case "materialized_view":
|
|
12
|
+
return "r"; // Materialized views are also relations
|
|
13
|
+
case "sequence":
|
|
14
|
+
return "S"; // Sequences
|
|
15
|
+
case "procedure":
|
|
16
|
+
case "function":
|
|
17
|
+
case "aggregate":
|
|
18
|
+
return "f"; // Functions/routines
|
|
19
|
+
case "type":
|
|
20
|
+
case "domain":
|
|
21
|
+
case "enum":
|
|
22
|
+
case "range":
|
|
23
|
+
case "composite_type":
|
|
24
|
+
return "T"; // Types
|
|
25
|
+
case "schema":
|
|
26
|
+
return "n"; // Schemas
|
|
27
|
+
default:
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Tracks the effective state of default privileges as changes are processed.
|
|
33
|
+
* This allows us to compute what default privileges would be in effect at any point
|
|
34
|
+
* in the migration script, accounting for ALTER DEFAULT PRIVILEGES statements.
|
|
35
|
+
*/
|
|
36
|
+
export class DefaultPrivilegeState {
|
|
37
|
+
state = new Map(); // role -> objtype -> schema -> grantee -> privileges
|
|
38
|
+
constructor(initialRoles) {
|
|
39
|
+
// Initialize state from roles' default_privileges
|
|
40
|
+
for (const [_roleId, role] of Object.entries(initialRoles)) {
|
|
41
|
+
const roleName = role.name;
|
|
42
|
+
if (!this.state.has(roleName)) {
|
|
43
|
+
this.state.set(roleName, new Map());
|
|
44
|
+
}
|
|
45
|
+
// biome-ignore lint/style/noNonNullAssertion: roleName is guaranteed to be in the state
|
|
46
|
+
const roleState = this.state.get(roleName);
|
|
47
|
+
for (const defPriv of role.default_privileges) {
|
|
48
|
+
if (!roleState.has(defPriv.objtype)) {
|
|
49
|
+
roleState.set(defPriv.objtype, new Map());
|
|
50
|
+
}
|
|
51
|
+
// biome-ignore lint/style/noNonNullAssertion: objtype is guaranteed to be in the state
|
|
52
|
+
const objtypeState = roleState.get(defPriv.objtype);
|
|
53
|
+
const schemaKey = defPriv.in_schema ?? null;
|
|
54
|
+
if (!objtypeState.has(schemaKey)) {
|
|
55
|
+
objtypeState.set(schemaKey, new Map());
|
|
56
|
+
}
|
|
57
|
+
// biome-ignore lint/style/noNonNullAssertion: schemaKey is guaranteed to be in the state
|
|
58
|
+
const schemaState = objtypeState.get(schemaKey);
|
|
59
|
+
if (!schemaState.has(defPriv.grantee)) {
|
|
60
|
+
schemaState.set(defPriv.grantee, new Set());
|
|
61
|
+
}
|
|
62
|
+
// biome-ignore lint/style/noNonNullAssertion: grantee is guaranteed to be in the state
|
|
63
|
+
const privileges = schemaState.get(defPriv.grantee);
|
|
64
|
+
for (const priv of defPriv.privileges) {
|
|
65
|
+
const key = `${priv.privilege}:${priv.grantable}`;
|
|
66
|
+
privileges.add(key);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Apply a GrantRoleDefaultPrivileges change to the state.
|
|
73
|
+
*/
|
|
74
|
+
applyGrant(roleName, objtype, inSchema, grantee, privileges) {
|
|
75
|
+
if (!this.state.has(roleName)) {
|
|
76
|
+
this.state.set(roleName, new Map());
|
|
77
|
+
}
|
|
78
|
+
// biome-ignore lint/style/noNonNullAssertion: roleName is guaranteed to be in the state
|
|
79
|
+
const roleState = this.state.get(roleName);
|
|
80
|
+
if (!roleState.has(objtype)) {
|
|
81
|
+
roleState.set(objtype, new Map());
|
|
82
|
+
}
|
|
83
|
+
// biome-ignore lint/style/noNonNullAssertion: objtype is guaranteed to be in the state
|
|
84
|
+
const objtypeState = roleState.get(objtype);
|
|
85
|
+
const schemaKey = inSchema ?? null;
|
|
86
|
+
if (!objtypeState.has(schemaKey)) {
|
|
87
|
+
objtypeState.set(schemaKey, new Map());
|
|
88
|
+
}
|
|
89
|
+
// biome-ignore lint/style/noNonNullAssertion: schemaKey is guaranteed to be in the state
|
|
90
|
+
const schemaState = objtypeState.get(schemaKey);
|
|
91
|
+
if (!schemaState.has(grantee)) {
|
|
92
|
+
schemaState.set(grantee, new Set());
|
|
93
|
+
}
|
|
94
|
+
// biome-ignore lint/style/noNonNullAssertion: grantee is guaranteed to be in the state
|
|
95
|
+
const privilegesSet = schemaState.get(grantee);
|
|
96
|
+
for (const priv of privileges) {
|
|
97
|
+
const key = `${priv.privilege}:${priv.grantable}`;
|
|
98
|
+
privilegesSet.add(key);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Apply a RevokeRoleDefaultPrivileges change to the state.
|
|
103
|
+
*/
|
|
104
|
+
applyRevoke(roleName, objtype, inSchema, grantee, privileges) {
|
|
105
|
+
const roleState = this.state.get(roleName);
|
|
106
|
+
if (!roleState)
|
|
107
|
+
return;
|
|
108
|
+
const objtypeState = roleState.get(objtype);
|
|
109
|
+
if (!objtypeState)
|
|
110
|
+
return;
|
|
111
|
+
const schemaKey = inSchema ?? null;
|
|
112
|
+
const schemaState = objtypeState.get(schemaKey);
|
|
113
|
+
if (!schemaState)
|
|
114
|
+
return;
|
|
115
|
+
const privilegesSet = schemaState.get(grantee);
|
|
116
|
+
if (!privilegesSet)
|
|
117
|
+
return;
|
|
118
|
+
for (const priv of privileges) {
|
|
119
|
+
const key = `${priv.privilege}:${priv.grantable}`;
|
|
120
|
+
privilegesSet.delete(key);
|
|
121
|
+
// Also remove base privilege if grantable was revoked
|
|
122
|
+
if (priv.grantable) {
|
|
123
|
+
const baseKey = `${priv.privilege}:false`;
|
|
124
|
+
privilegesSet.delete(baseKey);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get effective default privileges for a given object creation.
|
|
130
|
+
*/
|
|
131
|
+
getEffectiveDefaults(currentUser, objectType, objectSchema) {
|
|
132
|
+
const objtype = objectTypeToObjtype(objectType);
|
|
133
|
+
if (!objtype)
|
|
134
|
+
return [];
|
|
135
|
+
const roleState = this.state.get(currentUser);
|
|
136
|
+
if (!roleState)
|
|
137
|
+
return [];
|
|
138
|
+
const objtypeState = roleState.get(objtype);
|
|
139
|
+
if (!objtypeState)
|
|
140
|
+
return [];
|
|
141
|
+
const defaultPrivs = [];
|
|
142
|
+
// Check schema-specific first, then global (null schema)
|
|
143
|
+
const schemasToCheck = [objectSchema, null];
|
|
144
|
+
for (const schemaKey of schemasToCheck) {
|
|
145
|
+
const schemaState = objtypeState.get(schemaKey);
|
|
146
|
+
if (!schemaState)
|
|
147
|
+
continue;
|
|
148
|
+
for (const [grantee, privilegesSet] of schemaState.entries()) {
|
|
149
|
+
for (const privKey of privilegesSet) {
|
|
150
|
+
const [privilege, grantableStr] = privKey.split(":");
|
|
151
|
+
const grantable = grantableStr === "true";
|
|
152
|
+
defaultPrivs.push({
|
|
153
|
+
grantee,
|
|
154
|
+
privilege,
|
|
155
|
+
grantable,
|
|
156
|
+
columns: null,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Schema-specific takes precedence, so break after first match
|
|
161
|
+
if (schemaKey === objectSchema && schemaState.size > 0) {
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return defaultPrivs;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function diffObjects(main, branch) {
|
|
2
|
+
const mainIds = new Set(Object.keys(main));
|
|
3
|
+
const branchIds = new Set(Object.keys(branch));
|
|
4
|
+
const created = [...branchIds.difference(mainIds)];
|
|
5
|
+
const dropped = [...mainIds.difference(branchIds)];
|
|
6
|
+
const altered = [...mainIds.intersection(branchIds)].filter((id) => {
|
|
7
|
+
const mainModel = main[id];
|
|
8
|
+
const branchModel = branch[id];
|
|
9
|
+
return !mainModel.equals(branchModel);
|
|
10
|
+
});
|
|
11
|
+
return { created, dropped, altered };
|
|
12
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
export declare const columnPropsSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
position: z.ZodNumber;
|
|
5
|
+
data_type: z.ZodString;
|
|
6
|
+
data_type_str: z.ZodString;
|
|
7
|
+
is_custom_type: z.ZodBoolean;
|
|
8
|
+
custom_type_type: z.ZodNullable<z.ZodString>;
|
|
9
|
+
custom_type_category: z.ZodNullable<z.ZodString>;
|
|
10
|
+
custom_type_schema: z.ZodNullable<z.ZodString>;
|
|
11
|
+
custom_type_name: z.ZodNullable<z.ZodString>;
|
|
12
|
+
not_null: z.ZodBoolean;
|
|
13
|
+
is_identity: z.ZodBoolean;
|
|
14
|
+
is_identity_always: z.ZodBoolean;
|
|
15
|
+
is_generated: z.ZodBoolean;
|
|
16
|
+
collation: z.ZodNullable<z.ZodString>;
|
|
17
|
+
default: z.ZodNullable<z.ZodString>;
|
|
18
|
+
comment: z.ZodNullable<z.ZodString>;
|
|
19
|
+
}, z.z.core.$strip>;
|
|
20
|
+
export type ColumnProps = z.infer<typeof columnPropsSchema>;
|
|
21
|
+
export declare function normalizeColumns(columns: ColumnProps[]): {
|
|
22
|
+
name: string;
|
|
23
|
+
data_type: string;
|
|
24
|
+
data_type_str: string;
|
|
25
|
+
is_custom_type: boolean;
|
|
26
|
+
custom_type_type: string | null;
|
|
27
|
+
custom_type_category: string | null;
|
|
28
|
+
custom_type_schema: string | null;
|
|
29
|
+
custom_type_name: string | null;
|
|
30
|
+
not_null: boolean;
|
|
31
|
+
is_identity: boolean;
|
|
32
|
+
is_identity_always: boolean;
|
|
33
|
+
is_generated: boolean;
|
|
34
|
+
collation: string | null;
|
|
35
|
+
default: string | null;
|
|
36
|
+
comment: string | null;
|
|
37
|
+
}[];
|
|
38
|
+
/**
|
|
39
|
+
* Interface for table-like objects that have columns (tables, views, materialized views).
|
|
40
|
+
* In PostgreSQL, these are relations with relkind in ('r', 'p', 'v', 'm').
|
|
41
|
+
*/
|
|
42
|
+
export interface TableLikeObject {
|
|
43
|
+
readonly columns: ColumnProps[];
|
|
44
|
+
}
|
|
45
|
+
export declare abstract class BasePgModel {
|
|
46
|
+
/**
|
|
47
|
+
* Database-portable stable identifier for dependency resolution.
|
|
48
|
+
* This identifier remains constant across database dumps/restores and
|
|
49
|
+
* is used for cross-database dependency resolution.
|
|
50
|
+
*/
|
|
51
|
+
abstract get stableId(): string;
|
|
52
|
+
/**
|
|
53
|
+
* Get all identity fields and their values.
|
|
54
|
+
* Subclasses should override this to return the identity fields.
|
|
55
|
+
*/
|
|
56
|
+
abstract get identityFields(): Record<string, unknown>;
|
|
57
|
+
/**
|
|
58
|
+
* Get all data fields and their values.
|
|
59
|
+
* Subclasses should override this to return the data fields.
|
|
60
|
+
*/
|
|
61
|
+
abstract get dataFields(): Record<string, unknown>;
|
|
62
|
+
/**
|
|
63
|
+
* Compare this object with another BasePgModel for equality based on stableId and dataFields.
|
|
64
|
+
*/
|
|
65
|
+
equals(other: BasePgModel): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Stable representation used for equality/fingerprints.
|
|
68
|
+
* Subclasses can override to normalize unstable fields.
|
|
69
|
+
*/
|
|
70
|
+
stableSnapshot(): {
|
|
71
|
+
identity: Record<string, unknown>;
|
|
72
|
+
data: Record<string, unknown>;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { deepEqual } from "./utils.js";
|
|
3
|
+
export const columnPropsSchema = z.object({
|
|
4
|
+
name: z.string(),
|
|
5
|
+
position: z.number(),
|
|
6
|
+
data_type: z.string(),
|
|
7
|
+
data_type_str: z.string(),
|
|
8
|
+
is_custom_type: z.boolean(),
|
|
9
|
+
custom_type_type: z.string().nullable(),
|
|
10
|
+
custom_type_category: z.string().nullable(),
|
|
11
|
+
custom_type_schema: z.string().nullable(),
|
|
12
|
+
custom_type_name: z.string().nullable(),
|
|
13
|
+
not_null: z.boolean(),
|
|
14
|
+
is_identity: z.boolean(),
|
|
15
|
+
is_identity_always: z.boolean(),
|
|
16
|
+
is_generated: z.boolean(),
|
|
17
|
+
collation: z.string().nullable(),
|
|
18
|
+
default: z.string().nullable(),
|
|
19
|
+
comment: z.string().nullable(),
|
|
20
|
+
});
|
|
21
|
+
export function normalizeColumns(columns) {
|
|
22
|
+
return columns
|
|
23
|
+
.map((column) => {
|
|
24
|
+
const { position: _position, ...rest } = column;
|
|
25
|
+
return rest;
|
|
26
|
+
})
|
|
27
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
28
|
+
}
|
|
29
|
+
export class BasePgModel {
|
|
30
|
+
/**
|
|
31
|
+
* Compare this object with another BasePgModel for equality based on stableId and dataFields.
|
|
32
|
+
*/
|
|
33
|
+
equals(other) {
|
|
34
|
+
return (this.stableId === other.stableId &&
|
|
35
|
+
deepEqual(this.dataFields, other.dataFields));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Stable representation used for equality/fingerprints.
|
|
39
|
+
* Subclasses can override to normalize unstable fields.
|
|
40
|
+
*/
|
|
41
|
+
stableSnapshot() {
|
|
42
|
+
return {
|
|
43
|
+
identity: this.identityFields,
|
|
44
|
+
data: this.dataFields,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import type { Change } from "../change.types.ts";
|
|
3
|
+
import type { Role } from "./role/role.model.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Privilege properties that all privilege objects share.
|
|
6
|
+
*/
|
|
7
|
+
export declare const privilegePropsSchema: z.ZodObject<{
|
|
8
|
+
grantee: z.ZodString;
|
|
9
|
+
privilege: z.ZodString;
|
|
10
|
+
grantable: z.ZodBoolean;
|
|
11
|
+
columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
12
|
+
}, z.z.core.$strip>;
|
|
13
|
+
export type PrivilegeProps = z.infer<typeof privilegePropsSchema>;
|
|
14
|
+
/**
|
|
15
|
+
* Result of privilege diffing for a single grantee
|
|
16
|
+
*/
|
|
17
|
+
interface PrivilegeDiffResult<T extends PrivilegeProps> {
|
|
18
|
+
grants: T[];
|
|
19
|
+
revokes: T[];
|
|
20
|
+
revokeGrantOption: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Groups privileges by grantable flag for efficient SQL generation
|
|
24
|
+
*/
|
|
25
|
+
export declare function groupPrivilegesByGrantable<T extends PrivilegeProps>(privileges: T[]): Map<boolean, T[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Groups privileges by columns and grantable flag
|
|
28
|
+
*/
|
|
29
|
+
export declare function groupPrivilegesByColumns<T extends PrivilegeProps>(privileges: T[]): Map<string, {
|
|
30
|
+
columns?: string[];
|
|
31
|
+
byGrant: Map<boolean, Set<string>>;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Filters out PUBLIC's built-in default privileges that PostgreSQL automatically grants
|
|
35
|
+
* when creating certain object types. This prevents generating unnecessary GRANT statements
|
|
36
|
+
* for privileges that PostgreSQL grants automatically.
|
|
37
|
+
*
|
|
38
|
+
* Reference: PostgreSQL 17 Documentation, Table 5.2 "Summary of Access Privileges"
|
|
39
|
+
* https://www.postgresql.org/docs/17/ddl-priv.html
|
|
40
|
+
*
|
|
41
|
+
* Objects with default PUBLIC privileges:
|
|
42
|
+
* - Functions/Procedures/Aggregates: EXECUTE
|
|
43
|
+
* - Types/Domains/Enums/Ranges/Composite Types: USAGE
|
|
44
|
+
* - Languages: USAGE
|
|
45
|
+
*
|
|
46
|
+
* Objects WITHOUT default PUBLIC privileges (so we should generate GRANT statements):
|
|
47
|
+
* - Tables, Views, Materialized Views, Sequences, Schemas, etc.
|
|
48
|
+
*/
|
|
49
|
+
export declare function filterPublicBuiltInDefaults<T extends PrivilegeProps>(objectType: Change["objectType"], privileges: T[]): T[];
|
|
50
|
+
/**
|
|
51
|
+
* Generic privilege diffing function that works for any object type
|
|
52
|
+
*/
|
|
53
|
+
export declare function diffPrivileges<T extends PrivilegeProps>(mainPrivileges: T[], branchPrivileges: T[], owner?: string, mainRoles?: Record<string, Role>): Map<string, PrivilegeDiffResult<T>>;
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { stableId } from "./utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Privilege properties that all privilege objects share.
|
|
5
|
+
*/
|
|
6
|
+
export const privilegePropsSchema = z.object({
|
|
7
|
+
grantee: z.string(),
|
|
8
|
+
privilege: z.string(),
|
|
9
|
+
grantable: z.boolean(),
|
|
10
|
+
columns: z.array(z.string()).nullable().optional(),
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Groups privileges by grantee for efficient diffing
|
|
14
|
+
*/
|
|
15
|
+
function groupPrivilegesByGrantee(privileges) {
|
|
16
|
+
const byGrantee = new Map();
|
|
17
|
+
for (const privilege of privileges) {
|
|
18
|
+
const existing = byGrantee.get(privilege.grantee) || [];
|
|
19
|
+
existing.push(privilege);
|
|
20
|
+
byGrantee.set(privilege.grantee, existing);
|
|
21
|
+
}
|
|
22
|
+
return byGrantee;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Diffs privileges for a single grantee between main and branch
|
|
26
|
+
*/
|
|
27
|
+
function diffPrivilegesForGrantee(mainPrivs, branchPrivs) {
|
|
28
|
+
// Create comparison key - always include columns (null for object-level privileges)
|
|
29
|
+
const toKey = (p) => {
|
|
30
|
+
const cols = p.columns || [];
|
|
31
|
+
return `${p.privilege}:${p.grantable}:${cols.sort().join(",")}`;
|
|
32
|
+
};
|
|
33
|
+
// Create key-to-object mappings to retain original data structures
|
|
34
|
+
const mainKeyToObj = new Map(mainPrivs.map((p) => [toKey(p), p]));
|
|
35
|
+
const branchKeyToObj = new Map(branchPrivs.map((p) => [toKey(p), p]));
|
|
36
|
+
const aSet = new Set(mainPrivs.map(toKey));
|
|
37
|
+
const bSet = new Set(branchPrivs.map(toKey));
|
|
38
|
+
const grants = [];
|
|
39
|
+
const revokes = [];
|
|
40
|
+
const revokeGrantOption = [];
|
|
41
|
+
// Find privileges to grant
|
|
42
|
+
for (const key of bSet) {
|
|
43
|
+
if (!aSet.has(key)) {
|
|
44
|
+
const obj = branchKeyToObj.get(key);
|
|
45
|
+
if (obj)
|
|
46
|
+
grants.push(obj);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Find privileges to revoke
|
|
50
|
+
for (const key of aSet) {
|
|
51
|
+
if (!bSet.has(key)) {
|
|
52
|
+
const obj = mainKeyToObj.get(key);
|
|
53
|
+
if (!obj)
|
|
54
|
+
continue;
|
|
55
|
+
const wasGrantable = obj.grantable;
|
|
56
|
+
// Upgrade: base -> with grant option (no base revoke)
|
|
57
|
+
const upgradedKey = key.replace(":false", ":true");
|
|
58
|
+
const upgraded = !wasGrantable && bSet.has(upgradedKey);
|
|
59
|
+
if (upgraded)
|
|
60
|
+
continue;
|
|
61
|
+
// If only grantable flipped from true to false, emit REVOKE GRANT OPTION FOR
|
|
62
|
+
const stillHasBase = checkStillHasBase(branchPrivs, obj.privilege, key);
|
|
63
|
+
if (wasGrantable && stillHasBase) {
|
|
64
|
+
revokeGrantOption.push(obj.privilege);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
revokes.push(obj);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { grants, revokes, revokeGrantOption };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a privilege still exists in the target set
|
|
75
|
+
*/
|
|
76
|
+
function checkStillHasBase(targetPrivs, privilege, key) {
|
|
77
|
+
const [, , columnsStr] = key.split(":");
|
|
78
|
+
return targetPrivs.some((p) => p.privilege === privilege &&
|
|
79
|
+
(p.columns || []).sort().join(",") === columnsStr);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Groups privileges by grantable flag for efficient SQL generation
|
|
83
|
+
*/
|
|
84
|
+
export function groupPrivilegesByGrantable(privileges) {
|
|
85
|
+
const groups = new Map();
|
|
86
|
+
for (const privilege of privileges) {
|
|
87
|
+
const arr = groups.get(privilege.grantable) ?? [];
|
|
88
|
+
arr.push(privilege);
|
|
89
|
+
groups.set(privilege.grantable, arr);
|
|
90
|
+
}
|
|
91
|
+
return groups;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Groups privileges by columns and grantable flag
|
|
95
|
+
*/
|
|
96
|
+
export function groupPrivilegesByColumns(privileges) {
|
|
97
|
+
const groups = new Map();
|
|
98
|
+
for (const privilege of privileges) {
|
|
99
|
+
const key = privilege.columns ? privilege.columns.sort().join(",") : "";
|
|
100
|
+
if (!groups.has(key)) {
|
|
101
|
+
groups.set(key, {
|
|
102
|
+
columns: privilege.columns ? [...privilege.columns] : undefined,
|
|
103
|
+
byGrant: new Map(),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
const group = groups.get(key);
|
|
107
|
+
if (!group)
|
|
108
|
+
continue;
|
|
109
|
+
if (!group.byGrant.has(privilege.grantable)) {
|
|
110
|
+
group.byGrant.set(privilege.grantable, new Set());
|
|
111
|
+
}
|
|
112
|
+
const privSet = group.byGrant.get(privilege.grantable);
|
|
113
|
+
if (!privSet)
|
|
114
|
+
continue;
|
|
115
|
+
privSet.add(privilege.privilege);
|
|
116
|
+
}
|
|
117
|
+
return groups;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Filters out PUBLIC's built-in default privileges that PostgreSQL automatically grants
|
|
121
|
+
* when creating certain object types. This prevents generating unnecessary GRANT statements
|
|
122
|
+
* for privileges that PostgreSQL grants automatically.
|
|
123
|
+
*
|
|
124
|
+
* Reference: PostgreSQL 17 Documentation, Table 5.2 "Summary of Access Privileges"
|
|
125
|
+
* https://www.postgresql.org/docs/17/ddl-priv.html
|
|
126
|
+
*
|
|
127
|
+
* Objects with default PUBLIC privileges:
|
|
128
|
+
* - Functions/Procedures/Aggregates: EXECUTE
|
|
129
|
+
* - Types/Domains/Enums/Ranges/Composite Types: USAGE
|
|
130
|
+
* - Languages: USAGE
|
|
131
|
+
*
|
|
132
|
+
* Objects WITHOUT default PUBLIC privileges (so we should generate GRANT statements):
|
|
133
|
+
* - Tables, Views, Materialized Views, Sequences, Schemas, etc.
|
|
134
|
+
*/
|
|
135
|
+
export function filterPublicBuiltInDefaults(objectType, privileges) {
|
|
136
|
+
// Only filter PUBLIC privileges
|
|
137
|
+
return privileges.filter((priv) => {
|
|
138
|
+
if (priv.grantee !== "PUBLIC") {
|
|
139
|
+
return true; // Keep all non-PUBLIC privileges
|
|
140
|
+
}
|
|
141
|
+
// Check if this is a built-in default privilege for this object type
|
|
142
|
+
switch (objectType) {
|
|
143
|
+
case "procedure":
|
|
144
|
+
case "aggregate":
|
|
145
|
+
// Functions/Procedures/Aggregates: EXECUTE is granted to PUBLIC by default
|
|
146
|
+
// Filter it out so we don't generate unnecessary GRANT EXECUTE TO PUBLIC
|
|
147
|
+
return priv.privilege !== "EXECUTE";
|
|
148
|
+
case "domain":
|
|
149
|
+
case "enum":
|
|
150
|
+
case "range":
|
|
151
|
+
case "composite_type":
|
|
152
|
+
// Types/Domains/Enums/Ranges/Composite Types: USAGE is granted to PUBLIC by default
|
|
153
|
+
// Filter it out so we don't generate unnecessary GRANT USAGE TO PUBLIC
|
|
154
|
+
return priv.privilege !== "USAGE";
|
|
155
|
+
case "language":
|
|
156
|
+
// Languages: USAGE is granted to PUBLIC by default
|
|
157
|
+
// Filter it out so we don't generate unnecessary GRANT USAGE TO PUBLIC
|
|
158
|
+
return priv.privilege !== "USAGE";
|
|
159
|
+
default:
|
|
160
|
+
// For other object types (tables, views, sequences, schemas, etc.),
|
|
161
|
+
// PUBLIC has NO default privileges, so we should keep all PUBLIC privileges
|
|
162
|
+
// and generate GRANT statements for them
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Filter out owner privileges from a privilege list.
|
|
169
|
+
* Owner privileges are implicit (owner always has ALL) and shouldn't be compared.
|
|
170
|
+
*/
|
|
171
|
+
function filterOwnerPrivileges(privileges, owner) {
|
|
172
|
+
return privileges.filter((p) => p.grantee !== owner);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Filter out privileges for superuser roles, as PostgreSQL doesn't store
|
|
176
|
+
* GRANTs to superusers in relacl (they already have all privileges implicitly).
|
|
177
|
+
* Reference: https://www.postgresql.org/docs/current/role-attributes.html
|
|
178
|
+
*/
|
|
179
|
+
function filterSuperuserPrivileges(privileges, mainRoles) {
|
|
180
|
+
if (!mainRoles)
|
|
181
|
+
return privileges;
|
|
182
|
+
return privileges.filter((priv) => {
|
|
183
|
+
const role = mainRoles[stableId.role(priv.grantee)];
|
|
184
|
+
return !role?.is_superuser;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generic privilege diffing function that works for any object type
|
|
189
|
+
*/
|
|
190
|
+
export function diffPrivileges(mainPrivileges, branchPrivileges, owner, mainRoles) {
|
|
191
|
+
// Filter out superuser privileges from branch - PostgreSQL doesn't store GRANTs
|
|
192
|
+
// to superusers in relacl because they already have all privileges implicitly
|
|
193
|
+
const branchPrivilegesFiltered = filterSuperuserPrivileges(branchPrivileges, mainRoles);
|
|
194
|
+
// Filter out owner privileges if owner is provided
|
|
195
|
+
const mainFiltered = owner
|
|
196
|
+
? filterOwnerPrivileges(mainPrivileges, owner)
|
|
197
|
+
: mainPrivileges;
|
|
198
|
+
const branchFiltered = owner
|
|
199
|
+
? filterOwnerPrivileges(branchPrivilegesFiltered, owner)
|
|
200
|
+
: branchPrivilegesFiltered;
|
|
201
|
+
const mainByGrantee = groupPrivilegesByGrantee(mainFiltered);
|
|
202
|
+
const branchByGrantee = groupPrivilegesByGrantee(branchFiltered);
|
|
203
|
+
// Get all grantees
|
|
204
|
+
const allGrantees = new Set([
|
|
205
|
+
...mainByGrantee.keys(),
|
|
206
|
+
...branchByGrantee.keys(),
|
|
207
|
+
]);
|
|
208
|
+
const results = new Map();
|
|
209
|
+
for (const grantee of allGrantees) {
|
|
210
|
+
const mainPrivs = mainByGrantee.get(grantee) || [];
|
|
211
|
+
const branchPrivs = branchByGrantee.get(grantee) || [];
|
|
212
|
+
const result = diffPrivilegesForGrantee(mainPrivs, branchPrivs);
|
|
213
|
+
results.set(grantee, result);
|
|
214
|
+
}
|
|
215
|
+
return results;
|
|
216
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base utilities and helpers for object privilege changes.
|
|
3
|
+
* These functions support GRANT/REVOKE operations across different database objects.
|
|
4
|
+
*/
|
|
5
|
+
import type { PrivilegeProps } from "./base.privilege-diff.ts";
|
|
6
|
+
/**
|
|
7
|
+
* Formats a list of privileges for use in GRANT/REVOKE statements.
|
|
8
|
+
* If the list represents all privileges, returns "ALL", otherwise returns a comma-separated list.
|
|
9
|
+
*
|
|
10
|
+
* @param kind - The PostgreSQL object kind
|
|
11
|
+
* @param list - Array of privilege names to format
|
|
12
|
+
* @param version - The PostgreSQL version number
|
|
13
|
+
* @returns A SQL-formatted privilege list (either "ALL" or "PRIV1, PRIV2, ...")
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatObjectPrivilegeList(kind: string, list: string[], version: number | undefined): string;
|
|
16
|
+
/**
|
|
17
|
+
* Gets the SQL keyword prefix for a given object kind in GRANT/REVOKE statements.
|
|
18
|
+
*
|
|
19
|
+
* @param objectKind - The PostgreSQL object kind
|
|
20
|
+
* @returns The SQL prefix (e.g., "ON SCHEMA", "ON DOMAIN", "ON")
|
|
21
|
+
*/
|
|
22
|
+
export declare function getObjectKindPrefix(objectKind: string): string;
|
|
23
|
+
export declare function normalizePrivileges(privileges: PrivilegeProps[]): {
|
|
24
|
+
grantee: string;
|
|
25
|
+
privilege: string;
|
|
26
|
+
grantable: boolean;
|
|
27
|
+
}[];
|