@supabase/pg-delta 0.0.0 → 1.0.0-alpha.1
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 +14 -0
- package/dist/cli/utils/integrations.js +44 -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 +15 -0
- package/dist/core/fingerprint.js +174 -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/filter/filter.types.d.ts +2 -0
- package/dist/core/integrations/filter/filter.types.js +1 -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 +6 -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/integrations/serialize/serialize.types.d.ts +2 -0
- package/dist/core/integrations/serialize/serialize.types.js +1 -0
- package/dist/core/integrations/supabase.d.ts +10 -0
- package/dist/core/integrations/supabase.js +114 -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 +18 -0
- package/dist/core/plan/index.js +20 -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 +142 -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 +9 -0
- package/dist/index.js +8 -0
- package/package.json +61 -12
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Catalog } from "./catalog.model.ts";
|
|
2
|
+
import type { Change } from "./change.types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* For objects we are replacing (drop + create), ensure that any dependents are also
|
|
5
|
+
* replaced so that destructive drops succeed. Uses dependency edges from pg_depend
|
|
6
|
+
* (already captured in Catalog.depends) plus change metadata (creates/drops/requires).
|
|
7
|
+
*
|
|
8
|
+
* New changes are appended; ordering is handled later by the sorter.
|
|
9
|
+
*/
|
|
10
|
+
export declare function expandReplaceDependencies({ changes, mainCatalog, branchCatalog, }: {
|
|
11
|
+
changes: Change[];
|
|
12
|
+
mainCatalog: Catalog;
|
|
13
|
+
branchCatalog: Catalog;
|
|
14
|
+
}): Change[];
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { CreateDomain } from "./objects/domain/changes/domain.create.js";
|
|
2
|
+
import { DropDomain } from "./objects/domain/changes/domain.drop.js";
|
|
3
|
+
import { CreateMaterializedView } from "./objects/materialized-view/changes/materialized-view.create.js";
|
|
4
|
+
import { DropMaterializedView } from "./objects/materialized-view/changes/materialized-view.drop.js";
|
|
5
|
+
import { CreateProcedure } from "./objects/procedure/changes/procedure.create.js";
|
|
6
|
+
import { DropProcedure } from "./objects/procedure/changes/procedure.drop.js";
|
|
7
|
+
import { AlterTableAddConstraint, AlterTableValidateConstraint, } from "./objects/table/changes/table.alter.js";
|
|
8
|
+
import { CreateCommentOnConstraint } from "./objects/table/changes/table.comment.js";
|
|
9
|
+
import { CreateTable } from "./objects/table/changes/table.create.js";
|
|
10
|
+
import { DropTable } from "./objects/table/changes/table.drop.js";
|
|
11
|
+
import { CreateCompositeType } from "./objects/type/composite-type/changes/composite-type.create.js";
|
|
12
|
+
import { DropCompositeType } from "./objects/type/composite-type/changes/composite-type.drop.js";
|
|
13
|
+
import { CreateEnum } from "./objects/type/enum/changes/enum.create.js";
|
|
14
|
+
import { DropEnum } from "./objects/type/enum/changes/enum.drop.js";
|
|
15
|
+
import { CreateRange } from "./objects/type/range/changes/range.create.js";
|
|
16
|
+
import { DropRange } from "./objects/type/range/changes/range.drop.js";
|
|
17
|
+
import { CreateView } from "./objects/view/changes/view.create.js";
|
|
18
|
+
import { DropView } from "./objects/view/changes/view.drop.js";
|
|
19
|
+
/**
|
|
20
|
+
* For objects we are replacing (drop + create), ensure that any dependents are also
|
|
21
|
+
* replaced so that destructive drops succeed. Uses dependency edges from pg_depend
|
|
22
|
+
* (already captured in Catalog.depends) plus change metadata (creates/drops/requires).
|
|
23
|
+
*
|
|
24
|
+
* New changes are appended; ordering is handled later by the sorter.
|
|
25
|
+
*/
|
|
26
|
+
export function expandReplaceDependencies({ changes, mainCatalog, branchCatalog, }) {
|
|
27
|
+
const createdIds = new Set();
|
|
28
|
+
const droppedIds = new Set();
|
|
29
|
+
for (const change of changes) {
|
|
30
|
+
for (const id of change.creates ?? [])
|
|
31
|
+
createdIds.add(id);
|
|
32
|
+
for (const id of change.drops ?? [])
|
|
33
|
+
droppedIds.add(id);
|
|
34
|
+
}
|
|
35
|
+
const replaceRoots = new Set();
|
|
36
|
+
for (const id of createdIds) {
|
|
37
|
+
if (droppedIds.has(id)) {
|
|
38
|
+
replaceRoots.add(id);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (replaceRoots.size === 0) {
|
|
42
|
+
return changes;
|
|
43
|
+
}
|
|
44
|
+
// Build referenced -> dependents adjacency from main catalog dependencies.
|
|
45
|
+
const dependentsByReferenced = new Map();
|
|
46
|
+
for (const dep of mainCatalog.depends) {
|
|
47
|
+
let list = dependentsByReferenced.get(dep.referenced_stable_id);
|
|
48
|
+
if (!list) {
|
|
49
|
+
list = new Set();
|
|
50
|
+
dependentsByReferenced.set(dep.referenced_stable_id, list);
|
|
51
|
+
}
|
|
52
|
+
list.add(dep.dependent_stable_id);
|
|
53
|
+
}
|
|
54
|
+
const additions = [];
|
|
55
|
+
const visitedTargets = new Set();
|
|
56
|
+
const visitedRefs = new Set(replaceRoots);
|
|
57
|
+
const queue = [...replaceRoots];
|
|
58
|
+
while (queue.length > 0) {
|
|
59
|
+
const refId = queue.shift();
|
|
60
|
+
const dependents = dependentsByReferenced.get(refId);
|
|
61
|
+
if (!dependents)
|
|
62
|
+
continue;
|
|
63
|
+
for (const dependentRaw of dependents) {
|
|
64
|
+
// Continue traversing the dependency graph from the raw dependent id.
|
|
65
|
+
if (!visitedRefs.has(dependentRaw)) {
|
|
66
|
+
visitedRefs.add(dependentRaw);
|
|
67
|
+
queue.push(dependentRaw);
|
|
68
|
+
}
|
|
69
|
+
const targetId = normalizeDependentId(dependentRaw);
|
|
70
|
+
if (!targetId)
|
|
71
|
+
continue;
|
|
72
|
+
// Also traverse using the normalized owning object id (e.g., table for a column).
|
|
73
|
+
if (!visitedRefs.has(targetId)) {
|
|
74
|
+
visitedRefs.add(targetId);
|
|
75
|
+
queue.push(targetId);
|
|
76
|
+
}
|
|
77
|
+
if (visitedTargets.has(targetId))
|
|
78
|
+
continue;
|
|
79
|
+
visitedTargets.add(targetId);
|
|
80
|
+
// Already handled (either original replace or previously added).
|
|
81
|
+
if (createdIds.has(targetId) && droppedIds.has(targetId))
|
|
82
|
+
continue;
|
|
83
|
+
if (replaceRoots.has(targetId))
|
|
84
|
+
continue;
|
|
85
|
+
const resolved = resolveObjectForStableId(targetId, mainCatalog, branchCatalog);
|
|
86
|
+
if (!resolved)
|
|
87
|
+
continue;
|
|
88
|
+
const hasCreate = createdIds.has(targetId);
|
|
89
|
+
const hasDrop = droppedIds.has(targetId);
|
|
90
|
+
const addDrop = !hasDrop;
|
|
91
|
+
const addCreate = !hasCreate;
|
|
92
|
+
if (!addDrop && !addCreate)
|
|
93
|
+
continue;
|
|
94
|
+
const replacementChanges = buildReplaceChanges(resolved, {
|
|
95
|
+
addDrop,
|
|
96
|
+
addCreate,
|
|
97
|
+
});
|
|
98
|
+
if (!replacementChanges)
|
|
99
|
+
continue;
|
|
100
|
+
additions.push(...replacementChanges);
|
|
101
|
+
// Track new creates/drops so we don't duplicate work for downstream dependents.
|
|
102
|
+
for (const change of replacementChanges) {
|
|
103
|
+
for (const id of change.creates ?? [])
|
|
104
|
+
createdIds.add(id);
|
|
105
|
+
for (const id of change.drops ?? [])
|
|
106
|
+
droppedIds.add(id);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (additions.length === 0) {
|
|
111
|
+
return changes;
|
|
112
|
+
}
|
|
113
|
+
return [...changes, ...additions];
|
|
114
|
+
}
|
|
115
|
+
function normalizeDependentId(dependentId) {
|
|
116
|
+
let id = dependentId;
|
|
117
|
+
while (id.startsWith("comment:")) {
|
|
118
|
+
id = id.slice("comment:".length);
|
|
119
|
+
}
|
|
120
|
+
if (id.startsWith("acl:") ||
|
|
121
|
+
id.startsWith("defacl:") ||
|
|
122
|
+
id.startsWith("membership:") ||
|
|
123
|
+
id.startsWith("role:") ||
|
|
124
|
+
id.startsWith("schema:")) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
if (id.startsWith("column:")) {
|
|
128
|
+
const parts = id.slice("column:".length).split(".");
|
|
129
|
+
if (parts.length >= 2) {
|
|
130
|
+
const [schema, table] = parts;
|
|
131
|
+
return `table:${schema}.${table}`;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
if (id.startsWith("constraint:")) {
|
|
136
|
+
const parts = id.slice("constraint:".length).split(".");
|
|
137
|
+
if (parts.length >= 2) {
|
|
138
|
+
const [schema, table] = parts;
|
|
139
|
+
return `table:${schema}.${table}`;
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
return id;
|
|
144
|
+
}
|
|
145
|
+
function resolveObjectForStableId(stableId, mainCatalog, branchCatalog) {
|
|
146
|
+
if (stableId.startsWith("table:")) {
|
|
147
|
+
const main = mainCatalog.tables[stableId];
|
|
148
|
+
const branch = branchCatalog.tables[stableId];
|
|
149
|
+
return main && branch ? { kind: "table", main, branch } : null;
|
|
150
|
+
}
|
|
151
|
+
if (stableId.startsWith("view:")) {
|
|
152
|
+
const main = mainCatalog.views[stableId];
|
|
153
|
+
const branch = branchCatalog.views[stableId];
|
|
154
|
+
return main && branch ? { kind: "view", main, branch } : null;
|
|
155
|
+
}
|
|
156
|
+
if (stableId.startsWith("materializedView:")) {
|
|
157
|
+
const main = mainCatalog.materializedViews[stableId];
|
|
158
|
+
const branch = branchCatalog.materializedViews[stableId];
|
|
159
|
+
return main && branch ? { kind: "materialized_view", main, branch } : null;
|
|
160
|
+
}
|
|
161
|
+
if (stableId.startsWith("procedure:")) {
|
|
162
|
+
const main = mainCatalog.procedures[stableId];
|
|
163
|
+
const branch = branchCatalog.procedures[stableId];
|
|
164
|
+
return main && branch ? { kind: "procedure", main, branch } : null;
|
|
165
|
+
}
|
|
166
|
+
if (stableId.startsWith("domain:")) {
|
|
167
|
+
const main = mainCatalog.domains[stableId];
|
|
168
|
+
const branch = branchCatalog.domains[stableId];
|
|
169
|
+
return main && branch ? { kind: "domain", main, branch } : null;
|
|
170
|
+
}
|
|
171
|
+
if (stableId.startsWith("type:")) {
|
|
172
|
+
const enumMain = mainCatalog.enums[stableId];
|
|
173
|
+
const enumBranch = branchCatalog.enums[stableId];
|
|
174
|
+
if (enumMain && enumBranch) {
|
|
175
|
+
return { kind: "enum", main: enumMain, branch: enumBranch };
|
|
176
|
+
}
|
|
177
|
+
const rangeMain = mainCatalog.ranges[stableId];
|
|
178
|
+
const rangeBranch = branchCatalog.ranges[stableId];
|
|
179
|
+
if (rangeMain && rangeBranch) {
|
|
180
|
+
return { kind: "range", main: rangeMain, branch: rangeBranch };
|
|
181
|
+
}
|
|
182
|
+
const compositeMain = mainCatalog.compositeTypes[stableId];
|
|
183
|
+
const compositeBranch = branchCatalog.compositeTypes[stableId];
|
|
184
|
+
if (compositeMain && compositeBranch) {
|
|
185
|
+
return {
|
|
186
|
+
kind: "composite_type",
|
|
187
|
+
main: compositeMain,
|
|
188
|
+
branch: compositeBranch,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
function buildReplaceChanges(resolved, options) {
|
|
195
|
+
const { addDrop, addCreate } = options;
|
|
196
|
+
if (!addDrop && !addCreate)
|
|
197
|
+
return null;
|
|
198
|
+
switch (resolved.kind) {
|
|
199
|
+
case "table":
|
|
200
|
+
return [
|
|
201
|
+
...(addDrop ? [new DropTable({ table: resolved.main })] : []),
|
|
202
|
+
...(addCreate
|
|
203
|
+
? [
|
|
204
|
+
new CreateTable({ table: resolved.branch }),
|
|
205
|
+
...(resolved.branch.constraints ?? [])
|
|
206
|
+
.filter((c) => !c.is_partition_clone)
|
|
207
|
+
.flatMap((constraint) => {
|
|
208
|
+
const items = [
|
|
209
|
+
new AlterTableAddConstraint({
|
|
210
|
+
table: resolved.branch,
|
|
211
|
+
constraint,
|
|
212
|
+
}),
|
|
213
|
+
];
|
|
214
|
+
if (!constraint.validated) {
|
|
215
|
+
items.push(new AlterTableValidateConstraint({
|
|
216
|
+
table: resolved.branch,
|
|
217
|
+
constraint,
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
if (constraint.comment !== null &&
|
|
221
|
+
constraint.comment !== undefined) {
|
|
222
|
+
items.push(new CreateCommentOnConstraint({
|
|
223
|
+
table: resolved.branch,
|
|
224
|
+
constraint,
|
|
225
|
+
}));
|
|
226
|
+
}
|
|
227
|
+
return items;
|
|
228
|
+
}),
|
|
229
|
+
]
|
|
230
|
+
: []),
|
|
231
|
+
];
|
|
232
|
+
case "view":
|
|
233
|
+
return [
|
|
234
|
+
...(addDrop ? [new DropView({ view: resolved.main })] : []),
|
|
235
|
+
...(addCreate ? [new CreateView({ view: resolved.branch })] : []),
|
|
236
|
+
];
|
|
237
|
+
case "materialized_view":
|
|
238
|
+
return [
|
|
239
|
+
...(addDrop
|
|
240
|
+
? [new DropMaterializedView({ materializedView: resolved.main })]
|
|
241
|
+
: []),
|
|
242
|
+
...(addCreate
|
|
243
|
+
? [new CreateMaterializedView({ materializedView: resolved.branch })]
|
|
244
|
+
: []),
|
|
245
|
+
];
|
|
246
|
+
case "procedure":
|
|
247
|
+
return [
|
|
248
|
+
...(addDrop ? [new DropProcedure({ procedure: resolved.main })] : []),
|
|
249
|
+
...(addCreate
|
|
250
|
+
? [new CreateProcedure({ procedure: resolved.branch })]
|
|
251
|
+
: []),
|
|
252
|
+
];
|
|
253
|
+
case "enum":
|
|
254
|
+
return [
|
|
255
|
+
...(addDrop ? [new DropEnum({ enum: resolved.main })] : []),
|
|
256
|
+
...(addCreate ? [new CreateEnum({ enum: resolved.branch })] : []),
|
|
257
|
+
];
|
|
258
|
+
case "range":
|
|
259
|
+
return [
|
|
260
|
+
...(addDrop ? [new DropRange({ range: resolved.main })] : []),
|
|
261
|
+
...(addCreate ? [new CreateRange({ range: resolved.branch })] : []),
|
|
262
|
+
];
|
|
263
|
+
case "composite_type":
|
|
264
|
+
return [
|
|
265
|
+
...(addDrop
|
|
266
|
+
? [new DropCompositeType({ compositeType: resolved.main })]
|
|
267
|
+
: []),
|
|
268
|
+
...(addCreate
|
|
269
|
+
? [new CreateCompositeType({ compositeType: resolved.branch })]
|
|
270
|
+
: []),
|
|
271
|
+
];
|
|
272
|
+
case "domain":
|
|
273
|
+
return [
|
|
274
|
+
...(addDrop ? [new DropDomain({ domain: resolved.main })] : []),
|
|
275
|
+
...(addCreate ? [new CreateDomain({ domain: resolved.branch })] : []),
|
|
276
|
+
];
|
|
277
|
+
default:
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Catalog } from "./catalog.model.ts";
|
|
2
|
+
import type { Change } from "./change.types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Build a deterministic fingerprint for the objects actually touched by a plan.
|
|
5
|
+
* Uses the stableIds declared by the changes (creates/requires/drops) and snapshots
|
|
6
|
+
* only the catalog entities that exist for those stableIds (parent objects, no virtuals).
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildPlanScopeFingerprint(catalog: Catalog, changes: Change[]): {
|
|
9
|
+
hash: string;
|
|
10
|
+
stableIds: string[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Compute a fingerprint from a catalog and a set of stableIds.
|
|
14
|
+
*/
|
|
15
|
+
export declare function hashStableIds(catalog: Catalog, stableIds: string[]): string;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Build a deterministic fingerprint for the objects actually touched by a plan.
|
|
4
|
+
* Uses the stableIds declared by the changes (creates/requires/drops) and snapshots
|
|
5
|
+
* only the catalog entities that exist for those stableIds (parent objects, no virtuals).
|
|
6
|
+
*/
|
|
7
|
+
export function buildPlanScopeFingerprint(catalog, changes) {
|
|
8
|
+
const stableIds = collectStableIds(changes);
|
|
9
|
+
const hash = hashStableIds(catalog, stableIds);
|
|
10
|
+
return { hash, stableIds };
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Compute a fingerprint from a catalog and a set of stableIds.
|
|
14
|
+
*/
|
|
15
|
+
export function hashStableIds(catalog, stableIds) {
|
|
16
|
+
const catalogLookup = buildCatalogLookup(catalog);
|
|
17
|
+
const projection = [];
|
|
18
|
+
for (const stableId of stableIds) {
|
|
19
|
+
const record = catalogLookup[stableId];
|
|
20
|
+
if (!record) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
projection.push({
|
|
24
|
+
stableId,
|
|
25
|
+
snapshot: record.stableSnapshot(),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const canonical = stableStringify(projection);
|
|
29
|
+
return sha256(canonical);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Hash a string to hex SHA256.
|
|
33
|
+
*/
|
|
34
|
+
function sha256(input) {
|
|
35
|
+
return crypto.createHash("sha256").update(input).digest("hex");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Collect the union of stableIds referenced by all changes.
|
|
39
|
+
*/
|
|
40
|
+
function collectStableIds(changes) {
|
|
41
|
+
const ids = new Set();
|
|
42
|
+
for (const change of changes) {
|
|
43
|
+
for (const id of getChangeStableIds(change)) {
|
|
44
|
+
ids.add(id);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return Array.from(ids).sort((a, b) => a.localeCompare(b));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Gather the stableIds a change touches (creates/requires/drops) and, when the
|
|
51
|
+
* change has a primary entity with a stableId, include it as well.
|
|
52
|
+
*/
|
|
53
|
+
function getChangeStableIds(change) {
|
|
54
|
+
const ids = [];
|
|
55
|
+
// Dependencies declared on the change.
|
|
56
|
+
ids.push(...change.creates, ...change.requires, ...change.drops);
|
|
57
|
+
// Best-effort primary entity stableId, when available.
|
|
58
|
+
const primary = getPrimaryStableId(change);
|
|
59
|
+
if (primary)
|
|
60
|
+
ids.push(primary);
|
|
61
|
+
return ids;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Extract the primary entity stableId for a change, when it exists.
|
|
65
|
+
*/
|
|
66
|
+
function getPrimaryStableId(change) {
|
|
67
|
+
switch (change.objectType) {
|
|
68
|
+
case "aggregate":
|
|
69
|
+
return change.aggregate.stableId;
|
|
70
|
+
case "collation":
|
|
71
|
+
return change.collation.stableId;
|
|
72
|
+
case "composite_type":
|
|
73
|
+
return change.compositeType.stableId;
|
|
74
|
+
case "domain":
|
|
75
|
+
return change.domain.stableId;
|
|
76
|
+
case "enum":
|
|
77
|
+
return change.enum.stableId;
|
|
78
|
+
case "event_trigger":
|
|
79
|
+
return change.eventTrigger.stableId;
|
|
80
|
+
case "extension":
|
|
81
|
+
return change.extension.stableId;
|
|
82
|
+
case "foreign_data_wrapper":
|
|
83
|
+
return change.foreignDataWrapper.stableId;
|
|
84
|
+
case "foreign_table":
|
|
85
|
+
return change.foreignTable.stableId;
|
|
86
|
+
case "index":
|
|
87
|
+
return change.index.stableId;
|
|
88
|
+
case "language":
|
|
89
|
+
return change.language.stableId;
|
|
90
|
+
case "materialized_view":
|
|
91
|
+
return change.materializedView.stableId;
|
|
92
|
+
case "procedure":
|
|
93
|
+
return change.procedure.stableId;
|
|
94
|
+
case "publication":
|
|
95
|
+
return change.publication.stableId;
|
|
96
|
+
case "range":
|
|
97
|
+
return change.range.stableId;
|
|
98
|
+
case "role":
|
|
99
|
+
return change.role.stableId;
|
|
100
|
+
case "schema":
|
|
101
|
+
return change.schema.stableId;
|
|
102
|
+
case "sequence":
|
|
103
|
+
return change.sequence.stableId;
|
|
104
|
+
case "server":
|
|
105
|
+
return change.server.stableId;
|
|
106
|
+
case "subscription":
|
|
107
|
+
return change.subscription.stableId;
|
|
108
|
+
case "table":
|
|
109
|
+
return change.table.stableId;
|
|
110
|
+
case "trigger":
|
|
111
|
+
return change.trigger.stableId;
|
|
112
|
+
case "rls_policy":
|
|
113
|
+
return change.policy.stableId;
|
|
114
|
+
case "rule":
|
|
115
|
+
return change.rule.stableId;
|
|
116
|
+
case "view":
|
|
117
|
+
return change.view.stableId;
|
|
118
|
+
case "user_mapping":
|
|
119
|
+
return change.userMapping.stableId;
|
|
120
|
+
default:
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Build a flat lookup of catalog objects keyed by stableId.
|
|
126
|
+
*/
|
|
127
|
+
function buildCatalogLookup(catalog) {
|
|
128
|
+
return {
|
|
129
|
+
...catalog.aggregates,
|
|
130
|
+
...catalog.collations,
|
|
131
|
+
...catalog.compositeTypes,
|
|
132
|
+
...catalog.domains,
|
|
133
|
+
...catalog.enums,
|
|
134
|
+
...catalog.extensions,
|
|
135
|
+
...catalog.procedures,
|
|
136
|
+
...catalog.indexes,
|
|
137
|
+
...catalog.materializedViews,
|
|
138
|
+
...catalog.subscriptions,
|
|
139
|
+
...catalog.publications,
|
|
140
|
+
...catalog.rlsPolicies,
|
|
141
|
+
...catalog.roles,
|
|
142
|
+
...catalog.schemas,
|
|
143
|
+
...catalog.sequences,
|
|
144
|
+
...catalog.tables,
|
|
145
|
+
...catalog.triggers,
|
|
146
|
+
...catalog.eventTriggers,
|
|
147
|
+
...catalog.rules,
|
|
148
|
+
...catalog.ranges,
|
|
149
|
+
...catalog.views,
|
|
150
|
+
...catalog.foreignDataWrappers,
|
|
151
|
+
...catalog.servers,
|
|
152
|
+
...catalog.userMappings,
|
|
153
|
+
...catalog.foreignTables,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Deterministic stringify with sorted object keys.
|
|
158
|
+
*/
|
|
159
|
+
function stableStringify(value) {
|
|
160
|
+
if (value === null || typeof value !== "object") {
|
|
161
|
+
if (typeof value === "bigint") {
|
|
162
|
+
return JSON.stringify(value.toString());
|
|
163
|
+
}
|
|
164
|
+
return JSON.stringify(value);
|
|
165
|
+
}
|
|
166
|
+
if (Array.isArray(value)) {
|
|
167
|
+
return `[${value.map(stableStringify).join(",")}]`;
|
|
168
|
+
}
|
|
169
|
+
const entries = Object.entries(value).sort(([a], [b]) => a.localeCompare(b));
|
|
170
|
+
const inner = entries
|
|
171
|
+
.map(([k, v]) => `${JSON.stringify(k)}:${stableStringify(v)}`)
|
|
172
|
+
.join(",");
|
|
173
|
+
return `{${inner}}`;
|
|
174
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter DSL - A serializable domain-specific language for change filtering.
|
|
3
|
+
*/
|
|
4
|
+
import type { Change } from "../../change.types.ts";
|
|
5
|
+
import type { ChangeFilter } from "./filter.types.ts";
|
|
6
|
+
/**
|
|
7
|
+
* Core properties that all changes have.
|
|
8
|
+
*/
|
|
9
|
+
type CoreProperties = {
|
|
10
|
+
type?: Change["objectType"];
|
|
11
|
+
operation?: "create" | "alter" | "drop";
|
|
12
|
+
scope?: Change["scope"];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Extracted properties that are extracted from changes via extractor functions.
|
|
16
|
+
* String value = exact match, Array value = value must be in array
|
|
17
|
+
*/
|
|
18
|
+
type ExtractedProperties = {
|
|
19
|
+
schema?: string | string[];
|
|
20
|
+
owner?: string | string[];
|
|
21
|
+
member?: string | string[];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Property pattern - matches against change properties.
|
|
25
|
+
* Multiple properties are combined with AND (all must match).
|
|
26
|
+
*/
|
|
27
|
+
type PropertyPattern = CoreProperties & ExtractedProperties & {
|
|
28
|
+
and?: never;
|
|
29
|
+
or?: never;
|
|
30
|
+
not?: never;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Composition pattern - combines other patterns using logical operators.
|
|
34
|
+
* Composition operators are exclusive - cannot be mixed with properties.
|
|
35
|
+
*/
|
|
36
|
+
type CompositionPattern = ({
|
|
37
|
+
and: FilterPattern[];
|
|
38
|
+
or?: never;
|
|
39
|
+
not?: never;
|
|
40
|
+
} & {
|
|
41
|
+
[K in keyof CoreProperties]?: never;
|
|
42
|
+
} & {
|
|
43
|
+
[K in keyof ExtractedProperties]?: never;
|
|
44
|
+
}) | ({
|
|
45
|
+
or: FilterPattern[];
|
|
46
|
+
and?: never;
|
|
47
|
+
not?: never;
|
|
48
|
+
} & {
|
|
49
|
+
[K in keyof CoreProperties]?: never;
|
|
50
|
+
} & {
|
|
51
|
+
[K in keyof ExtractedProperties]?: never;
|
|
52
|
+
}) | ({
|
|
53
|
+
not: FilterPattern;
|
|
54
|
+
and?: never;
|
|
55
|
+
or?: never;
|
|
56
|
+
} & {
|
|
57
|
+
[K in keyof CoreProperties]?: never;
|
|
58
|
+
} & {
|
|
59
|
+
[K in keyof ExtractedProperties]?: never;
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* Filter pattern DSL.
|
|
63
|
+
* Either a property pattern (matches against change properties) or
|
|
64
|
+
* a composition pattern (combines other patterns using logical operators).
|
|
65
|
+
* Composition operators are exclusive - cannot be mixed with properties.
|
|
66
|
+
*/
|
|
67
|
+
export type FilterPattern = PropertyPattern | CompositionPattern;
|
|
68
|
+
/**
|
|
69
|
+
* Filter DSL - a single pattern expression.
|
|
70
|
+
*/
|
|
71
|
+
export type FilterDSL = FilterPattern;
|
|
72
|
+
/**
|
|
73
|
+
* Evaluate a pattern against a change.
|
|
74
|
+
*
|
|
75
|
+
* @param pattern - The pattern to evaluate
|
|
76
|
+
* @param change - The change to match against
|
|
77
|
+
* @returns true if the pattern matches, false otherwise
|
|
78
|
+
*/
|
|
79
|
+
export declare function evaluatePattern(pattern: FilterPattern, change: Change): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Compile a Filter DSL to a ChangeFilter function.
|
|
82
|
+
*
|
|
83
|
+
* @param dsl - The filter DSL pattern
|
|
84
|
+
* @returns A ChangeFilter function that evaluates the pattern
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* const filter = compileFilterDSL({
|
|
89
|
+
* or: [
|
|
90
|
+
* { type: "schema", operation: "create" },
|
|
91
|
+
* { schema: "public" }
|
|
92
|
+
* ]
|
|
93
|
+
* });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare function compileFilterDSL(dsl: FilterDSL): ChangeFilter;
|
|
97
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter DSL - A serializable domain-specific language for change filtering.
|
|
3
|
+
*/
|
|
4
|
+
import { PROPERTY_EXTRACTORS } from "./extractors.js";
|
|
5
|
+
/**
|
|
6
|
+
* Evaluate a pattern against a change.
|
|
7
|
+
*
|
|
8
|
+
* @param pattern - The pattern to evaluate
|
|
9
|
+
* @param change - The change to match against
|
|
10
|
+
* @returns true if the pattern matches, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
export function evaluatePattern(pattern, change) {
|
|
13
|
+
// Handle composition operators first (they take precedence)
|
|
14
|
+
// NOT operator - negate the result
|
|
15
|
+
if (pattern.not) {
|
|
16
|
+
return !evaluatePattern(pattern.not, change);
|
|
17
|
+
}
|
|
18
|
+
// AND operator - all patterns must match
|
|
19
|
+
if (pattern.and) {
|
|
20
|
+
return pattern.and.every((p) => evaluatePattern(p, change));
|
|
21
|
+
}
|
|
22
|
+
// OR operator - any pattern must match
|
|
23
|
+
if (pattern.or) {
|
|
24
|
+
return pattern.or.some((p) => evaluatePattern(p, change));
|
|
25
|
+
}
|
|
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)) {
|
|
50
|
+
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) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
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
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// All checks passed
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Compile a Filter DSL to a ChangeFilter function.
|
|
89
|
+
*
|
|
90
|
+
* @param dsl - The filter DSL pattern
|
|
91
|
+
* @returns A ChangeFilter function that evaluates the pattern
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* const filter = compileFilterDSL({
|
|
96
|
+
* or: [
|
|
97
|
+
* { type: "schema", operation: "create" },
|
|
98
|
+
* { schema: "public" }
|
|
99
|
+
* ]
|
|
100
|
+
* });
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export function compileFilterDSL(dsl) {
|
|
104
|
+
return (change) => {
|
|
105
|
+
return evaluatePattern(dsl, change);
|
|
106
|
+
};
|
|
107
|
+
}
|