@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,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phased dependency-graph sort for ordered schema changes.
|
|
3
|
+
*
|
|
4
|
+
* Changes are split into two execution phases:
|
|
5
|
+
* - `drop`: Destructive operations (executed first, in reverse dependency order)
|
|
6
|
+
* - `create_alter_object`: All remaining changes (executed second, in forward dependency order)
|
|
7
|
+
*
|
|
8
|
+
* Within each phase, changes are sorted using Constraints derived from:
|
|
9
|
+
* - Catalog dependencies (from pg_depend)
|
|
10
|
+
* - Explicit requirements (from Change.requires)
|
|
11
|
+
* - Custom constraints (change-to-change ordering rules)
|
|
12
|
+
*/
|
|
13
|
+
import debug from "debug";
|
|
14
|
+
import { generateCustomConstraints } from "./custom-constraints.js";
|
|
15
|
+
import { printDebugGraph } from "./debug-visualization.js";
|
|
16
|
+
const debugGraph = debug("pg-delta:graph");
|
|
17
|
+
import { filterEdgesForCycleBreaking, getEdgesInCycle, } from "./dependency-filter.js";
|
|
18
|
+
import { buildGraphData, convertCatalogDependenciesToConstraints, convertConstraintsToEdges, convertExplicitRequirementsToConstraints, edgesToPairs, } from "./graph-builder.js";
|
|
19
|
+
import { dedupeEdges } from "./graph-utils.js";
|
|
20
|
+
import { logicalSort } from "./logical-sort.js";
|
|
21
|
+
import { findCycle, formatCycleError, performStableTopologicalSort, } from "./topological-sort.js";
|
|
22
|
+
import { getExecutionPhase } from "./utils.js";
|
|
23
|
+
/**
|
|
24
|
+
* Sort changes using dependency information from catalogs and custom constraints.
|
|
25
|
+
*
|
|
26
|
+
* First applies logical pre-sorting to group related changes together,
|
|
27
|
+
* then applies dependency-based topological sorting to ensure correct execution order.
|
|
28
|
+
*
|
|
29
|
+
* @param catalogs - Main and branch catalogs containing dependency information
|
|
30
|
+
* @param changes - List of Change objects to order
|
|
31
|
+
* @returns Ordered list of Change objects
|
|
32
|
+
*/
|
|
33
|
+
export function sortChanges(catalogs, changes) {
|
|
34
|
+
// Step 1: Apply logical pre-sorting to group changes by object type, stable ID, and scope
|
|
35
|
+
const logicallySorted = logicalSort(changes);
|
|
36
|
+
// Step 2: Apply dependency-based topological sorting
|
|
37
|
+
return sortChangesByPhasedGraph({
|
|
38
|
+
mainCatalog: { depends: catalogs.mainCatalog.depends },
|
|
39
|
+
branchCatalog: { depends: catalogs.branchCatalog.depends },
|
|
40
|
+
}, logicallySorted);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Sort changes by phases, using dependency information in each phase.
|
|
44
|
+
*
|
|
45
|
+
* @param catalogContext - pg_depend rows from the main and branch catalogs
|
|
46
|
+
* @param changeList - list of Change objects to order
|
|
47
|
+
* @returns ordered list of Change objects
|
|
48
|
+
*/
|
|
49
|
+
function sortChangesByPhasedGraph(catalogContext, changeList) {
|
|
50
|
+
const changesByPhase = {
|
|
51
|
+
drop: [],
|
|
52
|
+
create_alter_object: [],
|
|
53
|
+
};
|
|
54
|
+
// Partition changes into execution phases
|
|
55
|
+
for (const changeItem of changeList) {
|
|
56
|
+
const phase = getExecutionPhase(changeItem);
|
|
57
|
+
changesByPhase[phase].push(changeItem);
|
|
58
|
+
}
|
|
59
|
+
// Sort DROP phase: reverse dependency order using main catalog dependencies
|
|
60
|
+
const sortedDropPhase = sortPhaseChanges(changesByPhase.drop, catalogContext.mainCatalog.depends, { invert: true });
|
|
61
|
+
// Sort CREATE/ALTER phase: forward dependency order using branch catalog dependencies
|
|
62
|
+
const sortedCreateAlterPhase = sortPhaseChanges(changesByPhase.create_alter_object, catalogContext.branchCatalog.depends, {});
|
|
63
|
+
return [...sortedDropPhase, ...sortedCreateAlterPhase];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Sort changes within a phase using Constraints derived from all dependency sources.
|
|
67
|
+
*
|
|
68
|
+
* Algorithm:
|
|
69
|
+
* 1. Build graph data (change sets and reverse indexes)
|
|
70
|
+
* 2. Convert all sources to Constraints (catalog, explicit, custom constraints)
|
|
71
|
+
* 3. Convert Constraints to edges
|
|
72
|
+
* 4. Iteratively detect and break cycles (deduplicate edges, detect cycles, filter problematic edges)
|
|
73
|
+
* 5. Perform stable topological sort on the acyclic graph
|
|
74
|
+
*
|
|
75
|
+
* In DROP phase, edges are inverted so drops run in reverse dependency order.
|
|
76
|
+
*/
|
|
77
|
+
function sortPhaseChanges(phaseChanges, dependencyRows, options = {}) {
|
|
78
|
+
if (phaseChanges.length <= 1)
|
|
79
|
+
return phaseChanges;
|
|
80
|
+
// Step 1: Build graph data structures
|
|
81
|
+
const graphData = buildGraphData(phaseChanges, options);
|
|
82
|
+
// Step 2: Convert all sources to Constraints
|
|
83
|
+
const catalogConstraints = convertCatalogDependenciesToConstraints(dependencyRows, graphData);
|
|
84
|
+
const explicitConstraints = convertExplicitRequirementsToConstraints(phaseChanges, graphData);
|
|
85
|
+
const customConstraintObjects = generateCustomConstraints(phaseChanges);
|
|
86
|
+
const allConstraints = [
|
|
87
|
+
...catalogConstraints,
|
|
88
|
+
...explicitConstraints,
|
|
89
|
+
...customConstraintObjects,
|
|
90
|
+
];
|
|
91
|
+
// Step 3: Convert constraints to edges and deduplicate immediately
|
|
92
|
+
let edges = dedupeEdges(convertConstraintsToEdges(allConstraints, options));
|
|
93
|
+
// Step 4: Iteratively detect and break cycles
|
|
94
|
+
// Track cycles we've seen to detect when filtering fails to break a cycle.
|
|
95
|
+
// The only way we loop indefinitely is if we encounter a cycle we've already seen,
|
|
96
|
+
// which means filtering didn't break it. Otherwise, we continue until all cycles are broken.
|
|
97
|
+
const seenCycles = new Set();
|
|
98
|
+
/**
|
|
99
|
+
* Normalize a cycle by rotating it to start with the smallest node index.
|
|
100
|
+
* This allows us to compare cycles regardless of where they start.
|
|
101
|
+
*/
|
|
102
|
+
function normalizeCycle(cycleNodeIndexes) {
|
|
103
|
+
if (cycleNodeIndexes.length === 0)
|
|
104
|
+
return "";
|
|
105
|
+
const minIndex = Math.min(...cycleNodeIndexes);
|
|
106
|
+
const minIndexPos = cycleNodeIndexes.indexOf(minIndex);
|
|
107
|
+
const rotated = [
|
|
108
|
+
...cycleNodeIndexes.slice(minIndexPos),
|
|
109
|
+
...cycleNodeIndexes.slice(0, minIndexPos),
|
|
110
|
+
];
|
|
111
|
+
return rotated.join(",");
|
|
112
|
+
}
|
|
113
|
+
while (true) {
|
|
114
|
+
// Edge deduplication moved outside loop
|
|
115
|
+
const edgePairs = edgesToPairs(edges);
|
|
116
|
+
// Detect cycles
|
|
117
|
+
const cycleNodeIndexes = findCycle(phaseChanges.length, edgePairs);
|
|
118
|
+
if (!cycleNodeIndexes) {
|
|
119
|
+
// No cycles found, we're done
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
// Normalize cycle to check if we've seen it before
|
|
123
|
+
const cycleSignature = normalizeCycle(cycleNodeIndexes);
|
|
124
|
+
if (seenCycles.has(cycleSignature)) {
|
|
125
|
+
// We've seen this cycle before - filtering didn't break it
|
|
126
|
+
// Get edges involved in the cycle for detailed error message
|
|
127
|
+
const cycleEdges = getEdgesInCycle(cycleNodeIndexes, edges);
|
|
128
|
+
throw new Error(formatCycleError(cycleNodeIndexes, phaseChanges, cycleEdges));
|
|
129
|
+
}
|
|
130
|
+
// Track this cycle
|
|
131
|
+
seenCycles.add(cycleSignature);
|
|
132
|
+
// Filter only edges involved in the cycle to break it
|
|
133
|
+
edges = filterEdgesForCycleBreaking(edges, cycleNodeIndexes, phaseChanges, graphData);
|
|
134
|
+
}
|
|
135
|
+
const finalEdgePairs = edgesToPairs(edges);
|
|
136
|
+
// Debug visualization
|
|
137
|
+
if (debugGraph.enabled) {
|
|
138
|
+
printDebugGraph(phaseChanges, graphData, finalEdgePairs, dependencyRows, allConstraints);
|
|
139
|
+
}
|
|
140
|
+
// Step 5: Perform stable topological sort (no cycles, so this will succeed)
|
|
141
|
+
const topologicalOrder = performStableTopologicalSort(phaseChanges.length, finalEdgePairs);
|
|
142
|
+
if (!topologicalOrder || topologicalOrder.length !== phaseChanges.length) {
|
|
143
|
+
// This should never happen if findCycle returned null, but guard anyway
|
|
144
|
+
throw new Error("CycleError: dependency graph contains a cycle");
|
|
145
|
+
}
|
|
146
|
+
return topologicalOrder.map((changeIndex) => phaseChanges[changeIndex]);
|
|
147
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Change } from "../change.types.ts";
|
|
2
|
+
import type { Constraint } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Stable topological sort. If multiple zero-indegree nodes exist, picks the
|
|
5
|
+
* smallest original index first to preserve input order among unconstrained items.
|
|
6
|
+
* Returns null on cycles.
|
|
7
|
+
*/
|
|
8
|
+
export declare function performStableTopologicalSort(nodeCount: number, edges: Array<[number, number]>): number[] | null;
|
|
9
|
+
/**
|
|
10
|
+
* Find one cycle (if any) and return its node indices in order.
|
|
11
|
+
*/
|
|
12
|
+
export declare function findCycle(nodeCount: number, edges: Array<[number, number]>): number[] | null;
|
|
13
|
+
/**
|
|
14
|
+
* Format a cycle error message with details about the changes involved and the edges forming the cycle.
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatCycleError(cycleNodeIndexes: number[], phaseChanges: Change[], cycleEdges?: Array<{
|
|
17
|
+
sourceIndex: number;
|
|
18
|
+
targetIndex: number;
|
|
19
|
+
constraint: Constraint;
|
|
20
|
+
}>): string;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable topological sort. If multiple zero-indegree nodes exist, picks the
|
|
3
|
+
* smallest original index first to preserve input order among unconstrained items.
|
|
4
|
+
* Returns null on cycles.
|
|
5
|
+
*/
|
|
6
|
+
export function performStableTopologicalSort(nodeCount, edges) {
|
|
7
|
+
const adjacencyList = Array.from({ length: nodeCount }, () => new Set());
|
|
8
|
+
const inDegreeCounts = new Array(nodeCount).fill(0);
|
|
9
|
+
for (const [sourceIndex, targetIndex] of edges) {
|
|
10
|
+
if (!adjacencyList[sourceIndex].has(targetIndex)) {
|
|
11
|
+
adjacencyList[sourceIndex].add(targetIndex);
|
|
12
|
+
inDegreeCounts[targetIndex]++;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const candidateQueue = [];
|
|
16
|
+
for (let nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++) {
|
|
17
|
+
if (inDegreeCounts[nodeIndex] === 0)
|
|
18
|
+
candidateQueue.push(nodeIndex);
|
|
19
|
+
}
|
|
20
|
+
candidateQueue.sort((left, right) => left - right);
|
|
21
|
+
const orderedNodeIndexes = [];
|
|
22
|
+
while (candidateQueue.length > 0) {
|
|
23
|
+
const nodeIndex = candidateQueue.shift();
|
|
24
|
+
orderedNodeIndexes.push(nodeIndex);
|
|
25
|
+
for (const neighborIndex of adjacencyList[nodeIndex]) {
|
|
26
|
+
inDegreeCounts[neighborIndex]--;
|
|
27
|
+
if (inDegreeCounts[neighborIndex] === 0) {
|
|
28
|
+
let inserted = false;
|
|
29
|
+
for (let queuePosition = 0; queuePosition < candidateQueue.length; queuePosition++) {
|
|
30
|
+
if (neighborIndex < candidateQueue[queuePosition]) {
|
|
31
|
+
candidateQueue.splice(queuePosition, 0, neighborIndex);
|
|
32
|
+
inserted = true;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!inserted)
|
|
37
|
+
candidateQueue.push(neighborIndex);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (orderedNodeIndexes.length !== nodeCount)
|
|
42
|
+
return null; // cycle detected
|
|
43
|
+
return orderedNodeIndexes;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Find one cycle (if any) and return its node indices in order.
|
|
47
|
+
*/
|
|
48
|
+
export function findCycle(nodeCount, edges) {
|
|
49
|
+
const adjacencyList = Array.from({ length: nodeCount }, () => []);
|
|
50
|
+
for (const [sourceIndex, targetIndex] of edges) {
|
|
51
|
+
adjacencyList[sourceIndex].push(targetIndex);
|
|
52
|
+
}
|
|
53
|
+
// 0 = unvisited, 1 = visiting, 2 = completed
|
|
54
|
+
const visitState = new Array(nodeCount).fill(0);
|
|
55
|
+
const pathStack = [];
|
|
56
|
+
let cycleNodeIndexes = null;
|
|
57
|
+
const depthFirstSearch = (nodeIndex) => {
|
|
58
|
+
if (cycleNodeIndexes)
|
|
59
|
+
return;
|
|
60
|
+
visitState[nodeIndex] = 1;
|
|
61
|
+
pathStack.push(nodeIndex);
|
|
62
|
+
for (const neighborIndex of adjacencyList[nodeIndex]) {
|
|
63
|
+
if (visitState[neighborIndex] === 0) {
|
|
64
|
+
depthFirstSearch(neighborIndex);
|
|
65
|
+
}
|
|
66
|
+
else if (visitState[neighborIndex] === 1) {
|
|
67
|
+
const cycleStartIndex = pathStack.lastIndexOf(neighborIndex);
|
|
68
|
+
if (cycleStartIndex !== -1) {
|
|
69
|
+
cycleNodeIndexes = pathStack.slice(cycleStartIndex);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (cycleNodeIndexes)
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
pathStack.pop();
|
|
77
|
+
visitState[nodeIndex] = 2;
|
|
78
|
+
};
|
|
79
|
+
for (let nodeIndex = 0; nodeIndex < nodeCount && !cycleNodeIndexes; nodeIndex++) {
|
|
80
|
+
if (visitState[nodeIndex] === 0)
|
|
81
|
+
depthFirstSearch(nodeIndex);
|
|
82
|
+
}
|
|
83
|
+
return cycleNodeIndexes;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Format a cycle error message with details about the changes involved and the edges forming the cycle.
|
|
87
|
+
*/
|
|
88
|
+
export function formatCycleError(cycleNodeIndexes, phaseChanges, cycleEdges) {
|
|
89
|
+
const cycleChanges = cycleNodeIndexes.map((idx) => phaseChanges[idx]);
|
|
90
|
+
const changeDescriptions = cycleChanges.map((change, i) => {
|
|
91
|
+
const className = change?.constructor?.name ?? "Change";
|
|
92
|
+
const creates = change.creates.slice(0, 2).join(", ");
|
|
93
|
+
return ` ${i + 1}. [${cycleNodeIndexes[i]}] ${className}${creates ? ` (creates: ${creates}${change.creates.length > 2 ? "..." : ""})` : ""}`;
|
|
94
|
+
});
|
|
95
|
+
let message = `CycleError: dependency graph contains a cycle involving ${cycleNodeIndexes.length} changes:\n${changeDescriptions.join("\n")}`;
|
|
96
|
+
// Add cycle path information if edges are provided
|
|
97
|
+
if (cycleEdges && cycleEdges.length > 0) {
|
|
98
|
+
message += `\n\nCycle path (edges forming the cycle):`;
|
|
99
|
+
for (let i = 0; i < cycleNodeIndexes.length; i++) {
|
|
100
|
+
const sourceIndex = cycleNodeIndexes[i];
|
|
101
|
+
const targetIndex = cycleNodeIndexes[(i + 1) % cycleNodeIndexes.length];
|
|
102
|
+
const edge = cycleEdges.find((e) => e.sourceIndex === sourceIndex && e.targetIndex === targetIndex);
|
|
103
|
+
if (edge) {
|
|
104
|
+
const constraint = edge.constraint;
|
|
105
|
+
let edgeInfo = `\n [${sourceIndex}] → [${targetIndex}] (source: ${constraint.source})`;
|
|
106
|
+
if (constraint.source === "catalog" ||
|
|
107
|
+
constraint.source === "explicit") {
|
|
108
|
+
if (constraint.reason.dependentStableId) {
|
|
109
|
+
edgeInfo += `\n Dependency: ${constraint.reason.dependentStableId} → ${constraint.reason.referencedStableId}`;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
edgeInfo += `\n Requires: ${constraint.reason.referencedStableId}`;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Add why it wasn't filtered
|
|
116
|
+
if (constraint.source === "custom") {
|
|
117
|
+
edgeInfo += `\n Reason: Custom constraint (never filtered)`;
|
|
118
|
+
}
|
|
119
|
+
else if (constraint.source === "explicit" &&
|
|
120
|
+
!constraint.reason.dependentStableId) {
|
|
121
|
+
edgeInfo += `\n Reason: Explicit requirement without created IDs (not filtered)`;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
edgeInfo += `\n Reason: Cycle-breaking filter did not match (edge preserved)`;
|
|
125
|
+
}
|
|
126
|
+
message += edgeInfo;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
message += `\n [${sourceIndex}] → [${targetIndex}] (edge not found)`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
message += `\n\nThis usually indicates a circular dependency in the schema changes that cannot be resolved.`;
|
|
134
|
+
if (cycleEdges && cycleEdges.length > 0) {
|
|
135
|
+
message += `\nThe cycle-breaking filters were unable to break this cycle.`;
|
|
136
|
+
}
|
|
137
|
+
return message;
|
|
138
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pg_depend rows that matter for ordering.
|
|
3
|
+
*
|
|
4
|
+
* These represent dependency relationships extracted from PostgreSQL's pg_depend catalog.
|
|
5
|
+
*/
|
|
6
|
+
export type PgDependRow = {
|
|
7
|
+
/** Object that depends on `referenced_stable_id`. */
|
|
8
|
+
dependent_stable_id: string;
|
|
9
|
+
/** Object being depended upon. */
|
|
10
|
+
referenced_stable_id: string;
|
|
11
|
+
/**
|
|
12
|
+
* Dependency type as defined in PostgreSQL's pg_depend.deptype.
|
|
13
|
+
*
|
|
14
|
+
* - "n" (normal): Ordinary dependency — if the referenced object is dropped, the dependent object is also dropped automatically.
|
|
15
|
+
* - "a" (auto): Automatically created dependency — the dependent object was created as a result of creating the referenced object,
|
|
16
|
+
* and should be dropped automatically when the referenced object is dropped, but not otherwise treated as a strong link.
|
|
17
|
+
* - "i" (internal): Internal dependency — the dependent object is a low-level part of the referenced object.
|
|
18
|
+
*/
|
|
19
|
+
deptype: "n" | "a" | "i";
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Constraint representing that one change must come before another.
|
|
23
|
+
*
|
|
24
|
+
* Unified abstraction for all ordering requirements:
|
|
25
|
+
* - Catalog dependencies (from pg_depend) → Constraints
|
|
26
|
+
* - Explicit requirements (from Change.requires) → Constraints
|
|
27
|
+
* - Custom constraints (change-to-change rules) → Constraints
|
|
28
|
+
*/
|
|
29
|
+
export type Constraint = CatalogConstraint | ExplicitConstraint | CustomConstraint;
|
|
30
|
+
/**
|
|
31
|
+
* Base constraint properties shared by all constraint types.
|
|
32
|
+
*/
|
|
33
|
+
interface BaseConstraint {
|
|
34
|
+
/** Index of the change that must come first */
|
|
35
|
+
sourceChangeIndex: number;
|
|
36
|
+
/** Index of the change that must come after */
|
|
37
|
+
targetChangeIndex: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Constraint from catalog dependencies (pg_depend).
|
|
41
|
+
* Always has both dependent and referenced stable IDs.
|
|
42
|
+
*/
|
|
43
|
+
interface CatalogConstraint extends BaseConstraint {
|
|
44
|
+
source: "catalog";
|
|
45
|
+
/** The stable ID dependency that led to this constraint */
|
|
46
|
+
reason: {
|
|
47
|
+
/** The stable ID that depends on referencedStableId */
|
|
48
|
+
dependentStableId: string;
|
|
49
|
+
/** The stable ID being depended upon */
|
|
50
|
+
referencedStableId: string;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Constraint from explicit requirements (Change.requires).
|
|
55
|
+
* Always has referencedStableId, but dependentStableId is optional
|
|
56
|
+
* if the change doesn't create anything.
|
|
57
|
+
*/
|
|
58
|
+
interface ExplicitConstraint extends BaseConstraint {
|
|
59
|
+
source: "explicit";
|
|
60
|
+
/** The stable ID dependency that led to this constraint */
|
|
61
|
+
reason: {
|
|
62
|
+
/** The stable ID that depends on referencedStableId (undefined if change doesn't create anything) */
|
|
63
|
+
dependentStableId?: string;
|
|
64
|
+
/** The stable ID being depended upon */
|
|
65
|
+
referencedStableId: string;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Constraint from custom constraint functions.
|
|
70
|
+
* No reason field since these are direct change-to-change ordering rules.
|
|
71
|
+
*/
|
|
72
|
+
interface CustomConstraint extends BaseConstraint {
|
|
73
|
+
source: "custom";
|
|
74
|
+
/** Optional description for debugging */
|
|
75
|
+
description?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface PhaseSortOptions {
|
|
78
|
+
/** If true, invert edges so drops run in reverse dependency order. */
|
|
79
|
+
invert?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Edge with its originating constraint for filtering purposes.
|
|
83
|
+
*/
|
|
84
|
+
export interface Edge {
|
|
85
|
+
sourceIndex: number;
|
|
86
|
+
targetIndex: number;
|
|
87
|
+
constraint: Constraint;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Graph data structures for converting dependencies to Constraints.
|
|
91
|
+
*/
|
|
92
|
+
export interface GraphData {
|
|
93
|
+
/** Maps each change index to the set of stable IDs it creates. */
|
|
94
|
+
createdStableIdSets: Array<Set<string>>;
|
|
95
|
+
/** Maps each change index to the set of stable IDs it explicitly requires. */
|
|
96
|
+
explicitRequirementSets: Array<Set<string>>;
|
|
97
|
+
/** Maps a stable ID to the set of change indices that create it. */
|
|
98
|
+
changeIndexesByCreatedId: Map<string, Set<number>>;
|
|
99
|
+
/** Maps a stable ID to the set of change indices that explicitly require it. */
|
|
100
|
+
changeIndexesByExplicitRequirementId: Map<string, Set<number>>;
|
|
101
|
+
}
|
|
102
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Change } from "../change.types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Execution phases for changes.
|
|
4
|
+
*/
|
|
5
|
+
export type Phase = "drop" | "create_alter_object";
|
|
6
|
+
/**
|
|
7
|
+
* Check if a stable ID represents metadata (ACL, default privileges, comments, etc.)
|
|
8
|
+
* rather than an actual database object.
|
|
9
|
+
*
|
|
10
|
+
* Unified check used by both logical sorting and dependency sorting.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isMetadataStableId(stableId: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Determine the execution phase for a change based on its properties.
|
|
15
|
+
*
|
|
16
|
+
* Rules:
|
|
17
|
+
* - DROP operations → drop phase
|
|
18
|
+
* - CREATE operations → create_alter_object phase
|
|
19
|
+
* - ALTER operations with scope="privilege" → create_alter_object phase (metadata changes)
|
|
20
|
+
* - ALTER operations that drop actual objects → drop phase (destructive ALTER)
|
|
21
|
+
* - ALTER operations that don't drop objects → create_alter_object phase (non-destructive ALTER)
|
|
22
|
+
*/
|
|
23
|
+
export declare function getExecutionPhase(change: Change): Phase;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a stable ID represents metadata (ACL, default privileges, comments, etc.)
|
|
3
|
+
* rather than an actual database object.
|
|
4
|
+
*
|
|
5
|
+
* Unified check used by both logical sorting and dependency sorting.
|
|
6
|
+
*/
|
|
7
|
+
export function isMetadataStableId(stableId) {
|
|
8
|
+
return (stableId.startsWith("acl:") ||
|
|
9
|
+
stableId.startsWith("defacl:") ||
|
|
10
|
+
stableId.startsWith("aclcol:") ||
|
|
11
|
+
stableId.startsWith("membership:") ||
|
|
12
|
+
stableId.startsWith("comment:"));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Determine the execution phase for a change based on its properties.
|
|
16
|
+
*
|
|
17
|
+
* Rules:
|
|
18
|
+
* - DROP operations → drop phase
|
|
19
|
+
* - CREATE operations → create_alter_object phase
|
|
20
|
+
* - ALTER operations with scope="privilege" → create_alter_object phase (metadata changes)
|
|
21
|
+
* - ALTER operations that drop actual objects → drop phase (destructive ALTER)
|
|
22
|
+
* - ALTER operations that don't drop objects → create_alter_object phase (non-destructive ALTER)
|
|
23
|
+
*/
|
|
24
|
+
export function getExecutionPhase(change) {
|
|
25
|
+
// DROP operations always go to drop phase
|
|
26
|
+
if (change.operation === "drop") {
|
|
27
|
+
return "drop";
|
|
28
|
+
}
|
|
29
|
+
// CREATE operations always go to create_alter phase
|
|
30
|
+
if (change.operation === "create") {
|
|
31
|
+
return "create_alter_object";
|
|
32
|
+
}
|
|
33
|
+
// For ALTER operations, determine based on what they do
|
|
34
|
+
if (change.operation === "alter") {
|
|
35
|
+
// Privilege changes (metadata) always go to create_alter phase
|
|
36
|
+
if (change.scope === "privilege") {
|
|
37
|
+
return "create_alter_object";
|
|
38
|
+
}
|
|
39
|
+
// Check if this ALTER drops actual objects (not metadata)
|
|
40
|
+
const droppedIds = change.drops ?? [];
|
|
41
|
+
const dropsObjects = droppedIds.some((id) => !isMetadataStableId(id));
|
|
42
|
+
if (dropsObjects) {
|
|
43
|
+
// Destructive ALTER (DROP COLUMN, DROP CONSTRAINT, etc.) → drop phase
|
|
44
|
+
return "drop";
|
|
45
|
+
}
|
|
46
|
+
// Non-destructive ALTER (ADD COLUMN, GRANT, etc.) → create_alter phase
|
|
47
|
+
return "create_alter_object";
|
|
48
|
+
}
|
|
49
|
+
// Safe default
|
|
50
|
+
return "create_alter_object";
|
|
51
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./core/index.ts";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./core/index.js";
|
package/package.json
CHANGED
|
@@ -1,19 +1,65 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supabase/pg-delta",
|
|
3
|
-
"version": "0.0.0",
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.0.0-alpha.0",
|
|
4
|
+
"description": "PostgreSQL migrations made easy",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"exports": "./dist/index.js",
|
|
8
|
+
"bin": {
|
|
9
|
+
"pgdelta": "./dist/cli/bin/cli.js"
|
|
7
10
|
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"pg",
|
|
18
|
+
"postgres",
|
|
19
|
+
"migrations",
|
|
20
|
+
"diff",
|
|
21
|
+
"pg-delta",
|
|
22
|
+
"pgdelta"
|
|
23
|
+
],
|
|
24
|
+
"author": "Supabase",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"homepage": "https://github.com/supabase/pg-delta",
|
|
8
27
|
"repository": {
|
|
9
28
|
"type": "git",
|
|
10
|
-
"url": "
|
|
29
|
+
"url": "https://github.com/supabase/pg-delta.git"
|
|
11
30
|
},
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
"url": "https://github.com/supabase/pg-delta/issues"
|
|
31
|
+
"bugs": "https://github.com/supabase/pg-delta/issues",
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=20.0.0"
|
|
16
34
|
},
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@stricli/core": "^1.2.4",
|
|
37
|
+
"chalk": "^5.6.2",
|
|
38
|
+
"debug": "^4.3.7",
|
|
39
|
+
"postgres": "^3.4.7",
|
|
40
|
+
"zod": "^4.2.1"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@biomejs/biome": "2.3.10",
|
|
44
|
+
"@changesets/cli": "^2.29.8",
|
|
45
|
+
"@tsconfig/node-ts": "^23.6.2",
|
|
46
|
+
"@tsconfig/node24": "^24.0.3",
|
|
47
|
+
"@types/debug": "^4.1.12",
|
|
48
|
+
"@types/node": "^24.10.4",
|
|
49
|
+
"@vitest/coverage-v8": "4.0.16",
|
|
50
|
+
"dedent": "^1.7.1",
|
|
51
|
+
"knip": "^5.75.2",
|
|
52
|
+
"testcontainers": "^11.10.0",
|
|
53
|
+
"typescript": "^5.9.3",
|
|
54
|
+
"vitest": "^4.0.16"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"build": "tsc --project tsconfig.build.json",
|
|
58
|
+
"check-types": "tsc --noEmit",
|
|
59
|
+
"format-and-lint": "biome check . --error-on-warnings",
|
|
60
|
+
"knip": "knip",
|
|
61
|
+
"pgdelta": "node src/cli/bin/cli.ts",
|
|
62
|
+
"test": "vitest",
|
|
63
|
+
"version": "changeset version && pnpm install --no-frozen-lockfile && pnpm format-and-lint --write"
|
|
64
|
+
}
|
|
65
|
+
}
|