@supabase/pg-delta 1.0.0-alpha.3 → 1.0.0-alpha.30
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/README.md +48 -3
- package/dist/cli/app.js +26 -3
- package/dist/cli/bin/cli.js +13 -1
- package/dist/cli/commands/catalog-export.d.ts +5 -0
- package/dist/cli/commands/catalog-export.js +85 -0
- package/dist/cli/commands/declarative-apply.d.ts +6 -0
- package/dist/cli/commands/declarative-apply.js +288 -0
- package/dist/cli/commands/declarative-export.d.ts +5 -0
- package/dist/cli/commands/declarative-export.js +240 -0
- package/dist/cli/commands/plan.js +80 -17
- package/dist/cli/commands/sync.js +8 -12
- package/dist/cli/exit-code.d.ts +2 -0
- package/dist/cli/exit-code.js +7 -0
- package/dist/cli/formatters/tree/tree.js +3 -2
- package/dist/cli/utils/apply-display.d.ts +52 -0
- package/dist/cli/utils/apply-display.js +183 -0
- package/dist/cli/utils/export-display.d.ts +43 -0
- package/dist/cli/utils/export-display.js +202 -0
- package/dist/cli/utils/integrations.d.ts +30 -6
- package/dist/cli/utils/integrations.js +98 -6
- package/dist/cli/utils/resolve-input.d.ts +7 -0
- package/dist/cli/utils/resolve-input.js +13 -0
- package/dist/cli/utils.d.ts +5 -0
- package/dist/cli/utils.js +6 -3
- package/dist/core/catalog-export/index.d.ts +11 -0
- package/dist/core/catalog-export/index.js +10 -0
- package/dist/core/catalog.diff.d.ts +1 -0
- package/dist/core/catalog.diff.js +92 -51
- package/dist/core/catalog.filter.d.ts +17 -0
- package/dist/core/catalog.filter.js +75 -0
- package/dist/core/catalog.model.d.ts +24 -4
- package/dist/core/catalog.model.js +147 -30
- package/dist/core/catalog.snapshot.d.ts +66 -0
- package/dist/core/catalog.snapshot.js +206 -0
- package/dist/core/change-utils.d.ts +9 -0
- package/dist/core/change-utils.js +71 -0
- package/dist/core/change.types.d.ts +22 -0
- package/dist/core/change.types.js +37 -1
- package/dist/core/connection-url.d.ts +32 -0
- package/dist/core/connection-url.js +77 -0
- package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
- package/dist/core/declarative-apply/discover-sql.js +86 -0
- package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
- package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
- package/dist/core/declarative-apply/index.d.ts +49 -0
- package/dist/core/declarative-apply/index.js +134 -0
- package/dist/core/declarative-apply/round-apply.d.ts +100 -0
- package/dist/core/declarative-apply/round-apply.js +378 -0
- package/dist/core/depend.js +25 -0
- package/dist/core/expand-replace-dependencies.d.ts +11 -3
- package/dist/core/expand-replace-dependencies.js +255 -22
- package/dist/core/export/file-mapper.d.ts +71 -0
- package/dist/core/export/file-mapper.js +474 -0
- package/dist/core/export/grouper.d.ts +13 -0
- package/dist/core/export/grouper.js +76 -0
- package/dist/core/export/index.d.ts +45 -0
- package/dist/core/export/index.js +66 -0
- package/dist/core/export/types.d.ts +84 -0
- package/dist/core/export/types.js +25 -0
- package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/dist/core/integrations/filter/dsl.d.ts +82 -41
- package/dist/core/integrations/filter/dsl.js +127 -61
- package/dist/core/integrations/filter/flatten.d.ts +51 -0
- package/dist/core/integrations/filter/flatten.js +129 -0
- package/dist/core/integrations/integration-dsl.d.ts +27 -1
- package/dist/core/integrations/integration.types.d.ts +26 -1
- package/dist/core/integrations/integration.types.js +31 -1
- package/dist/core/integrations/merge.d.ts +20 -0
- package/dist/core/integrations/merge.js +60 -0
- package/dist/core/integrations/serialize/dsl.d.ts +8 -12
- package/dist/core/integrations/serialize/dsl.js +2 -2
- package/dist/core/integrations/serialize/serialize.types.d.ts +31 -0
- package/dist/core/integrations/supabase.d.ts +8 -0
- package/dist/core/integrations/supabase.js +242 -8
- package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
- package/dist/core/objects/aggregate/aggregate.diff.js +32 -70
- package/dist/core/objects/aggregate/aggregate.model.d.ts +18 -8
- package/dist/core/objects/aggregate/aggregate.model.js +20 -2
- package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +2 -1
- package/dist/core/objects/aggregate/changes/aggregate.alter.js +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +3 -2
- package/dist/core/objects/aggregate/changes/aggregate.comment.js +2 -2
- package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +2 -1
- package/dist/core/objects/aggregate/changes/aggregate.create.js +2 -2
- package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +2 -1
- package/dist/core/objects/aggregate/changes/aggregate.drop.js +2 -2
- package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +4 -3
- package/dist/core/objects/aggregate/changes/aggregate.privilege.js +24 -12
- package/dist/core/objects/aggregate/changes/aggregate.security-label.d.ts +28 -0
- package/dist/core/objects/aggregate/changes/aggregate.security-label.js +64 -0
- package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +3 -1
- package/dist/core/objects/base.change.d.ts +63 -3
- package/dist/core/objects/base.change.js +56 -3
- package/dist/core/objects/base.model.d.ts +12 -1
- package/dist/core/objects/base.model.js +7 -2
- package/dist/core/objects/base.privilege-diff.d.ts +38 -13
- package/dist/core/objects/base.privilege-diff.js +104 -22
- package/dist/core/objects/base.privilege.d.ts +1 -0
- package/dist/core/objects/base.privilege.js +9 -2
- package/dist/core/objects/collation/changes/collation.alter.d.ts +3 -2
- package/dist/core/objects/collation/changes/collation.alter.js +2 -2
- package/dist/core/objects/collation/changes/collation.comment.d.ts +3 -2
- package/dist/core/objects/collation/changes/collation.comment.js +2 -2
- package/dist/core/objects/collation/changes/collation.create.d.ts +2 -1
- package/dist/core/objects/collation/changes/collation.create.js +1 -1
- package/dist/core/objects/collation/changes/collation.drop.d.ts +2 -1
- package/dist/core/objects/collation/changes/collation.drop.js +1 -1
- package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
- package/dist/core/objects/collation/collation.diff.d.ts +2 -3
- package/dist/core/objects/diff-context.d.ts +15 -0
- package/dist/core/objects/diff-context.js +1 -0
- package/dist/core/objects/domain/changes/domain.alter.d.ts +9 -8
- package/dist/core/objects/domain/changes/domain.alter.js +8 -8
- package/dist/core/objects/domain/changes/domain.base.d.ts +1 -1
- package/dist/core/objects/domain/changes/domain.comment.d.ts +3 -2
- package/dist/core/objects/domain/changes/domain.comment.js +2 -2
- package/dist/core/objects/domain/changes/domain.create.d.ts +3 -2
- package/dist/core/objects/domain/changes/domain.create.js +12 -4
- package/dist/core/objects/domain/changes/domain.drop.d.ts +2 -1
- package/dist/core/objects/domain/changes/domain.drop.js +1 -1
- package/dist/core/objects/domain/changes/domain.privilege.d.ts +4 -3
- package/dist/core/objects/domain/changes/domain.privilege.js +3 -3
- package/dist/core/objects/domain/changes/domain.security-label.d.ts +28 -0
- package/dist/core/objects/domain/changes/domain.security-label.js +61 -0
- package/dist/core/objects/domain/changes/domain.types.d.ts +3 -1
- package/dist/core/objects/domain/domain.diff.d.ts +2 -8
- package/dist/core/objects/domain/domain.diff.js +32 -77
- package/dist/core/objects/domain/domain.model.d.ts +10 -0
- package/dist/core/objects/domain/domain.model.js +20 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +3 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +2 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +1 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +3 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +2 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +2 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.create.js +1 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +2 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +1 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.security-label.d.ts +28 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.security-label.js +61 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +3 -1
- package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
- package/dist/core/objects/event-trigger/event-trigger.diff.js +16 -0
- package/dist/core/objects/event-trigger/event-trigger.model.d.ts +10 -0
- package/dist/core/objects/event-trigger/event-trigger.model.js +19 -1
- package/dist/core/objects/extension/changes/extension.alter.d.ts +3 -2
- package/dist/core/objects/extension/changes/extension.alter.js +2 -2
- package/dist/core/objects/extension/changes/extension.comment.d.ts +3 -2
- package/dist/core/objects/extension/changes/extension.comment.js +2 -2
- package/dist/core/objects/extension/changes/extension.create.d.ts +2 -1
- package/dist/core/objects/extension/changes/extension.create.js +4 -2
- package/dist/core/objects/extension/changes/extension.drop.d.ts +2 -1
- package/dist/core/objects/extension/changes/extension.drop.js +1 -1
- package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
- package/dist/core/objects/extract-with-retry.d.ts +36 -0
- package/dist/core/objects/extract-with-retry.js +51 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +6 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +7 -4
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +3 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +11 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +13 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +10 -9
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +13 -10
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +1 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +7 -4
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +3 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.d.ts +28 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.js +61 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +3 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +32 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +37 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +60 -4
- package/dist/core/objects/foreign-data-wrapper/sensitive-options.d.ts +32 -0
- package/dist/core/objects/foreign-data-wrapper/sensitive-options.js +129 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +7 -4
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +7 -4
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +3 -3
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
- package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +14 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.model.js +28 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +5 -2
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +7 -4
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +14 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +28 -1
- package/dist/core/objects/index/changes/index.alter.d.ts +4 -3
- package/dist/core/objects/index/changes/index.alter.js +3 -3
- package/dist/core/objects/index/changes/index.comment.d.ts +3 -2
- package/dist/core/objects/index/changes/index.comment.js +2 -2
- package/dist/core/objects/index/changes/index.create.d.ts +2 -1
- package/dist/core/objects/index/changes/index.create.js +1 -1
- package/dist/core/objects/index/changes/index.drop.d.ts +2 -1
- package/dist/core/objects/index/changes/index.drop.js +1 -1
- package/dist/core/objects/index/changes/index.types.d.ts +1 -0
- package/dist/core/objects/index/index.diff.js +0 -1
- package/dist/core/objects/index/index.model.d.ts +2 -3
- package/dist/core/objects/index/index.model.js +26 -5
- package/dist/core/objects/language/changes/language.alter.d.ts +2 -1
- package/dist/core/objects/language/changes/language.alter.js +1 -1
- package/dist/core/objects/language/changes/language.comment.d.ts +3 -2
- package/dist/core/objects/language/changes/language.comment.js +2 -2
- package/dist/core/objects/language/changes/language.create.d.ts +2 -1
- package/dist/core/objects/language/changes/language.create.js +1 -1
- package/dist/core/objects/language/changes/language.drop.d.ts +2 -1
- package/dist/core/objects/language/changes/language.drop.js +1 -1
- package/dist/core/objects/language/changes/language.privilege.d.ts +4 -3
- package/dist/core/objects/language/changes/language.privilege.js +3 -3
- package/dist/core/objects/language/changes/language.types.d.ts +1 -0
- package/dist/core/objects/language/language.diff.d.ts +2 -5
- package/dist/core/objects/language/language.diff.js +7 -39
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +3 -2
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +2 -2
- package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +1 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +5 -4
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +4 -4
- package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +2 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.create.js +1 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +2 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +1 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +4 -3
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +3 -3
- package/dist/core/objects/materialized-view/changes/materialized-view.security-label.d.ts +28 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.security-label.js +61 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +3 -1
- package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +3 -8
- package/dist/core/objects/materialized-view/materialized-view.diff.js +76 -200
- package/dist/core/objects/materialized-view/materialized-view.model.d.ts +27 -4
- package/dist/core/objects/materialized-view/materialized-view.model.js +41 -6
- package/dist/core/objects/procedure/changes/procedure.alter.d.ts +8 -7
- package/dist/core/objects/procedure/changes/procedure.alter.js +19 -19
- package/dist/core/objects/procedure/changes/procedure.base.d.ts +1 -1
- package/dist/core/objects/procedure/changes/procedure.comment.d.ts +3 -2
- package/dist/core/objects/procedure/changes/procedure.comment.js +2 -2
- package/dist/core/objects/procedure/changes/procedure.create.d.ts +2 -1
- package/dist/core/objects/procedure/changes/procedure.create.js +1 -1
- package/dist/core/objects/procedure/changes/procedure.drop.d.ts +2 -1
- package/dist/core/objects/procedure/changes/procedure.drop.js +1 -1
- package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +4 -3
- package/dist/core/objects/procedure/changes/procedure.privilege.js +3 -3
- package/dist/core/objects/procedure/changes/procedure.security-label.d.ts +28 -0
- package/dist/core/objects/procedure/changes/procedure.security-label.js +69 -0
- package/dist/core/objects/procedure/changes/procedure.types.d.ts +3 -1
- package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
- package/dist/core/objects/procedure/procedure.diff.js +73 -97
- package/dist/core/objects/procedure/procedure.model.d.ts +21 -10
- package/dist/core/objects/procedure/procedure.model.js +40 -6
- package/dist/core/objects/publication/changes/publication.alter.d.ts +10 -17
- package/dist/core/objects/publication/changes/publication.alter.js +12 -21
- package/dist/core/objects/publication/changes/publication.base.d.ts +1 -1
- package/dist/core/objects/publication/changes/publication.comment.d.ts +3 -2
- package/dist/core/objects/publication/changes/publication.comment.js +2 -2
- package/dist/core/objects/publication/changes/publication.create.d.ts +2 -1
- package/dist/core/objects/publication/changes/publication.create.js +1 -1
- package/dist/core/objects/publication/changes/publication.drop.d.ts +2 -1
- package/dist/core/objects/publication/changes/publication.drop.js +1 -1
- package/dist/core/objects/publication/changes/publication.security-label.d.ts +28 -0
- package/dist/core/objects/publication/changes/publication.security-label.js +61 -0
- package/dist/core/objects/publication/changes/publication.types.d.ts +4 -2
- package/dist/core/objects/publication/publication.diff.d.ts +2 -3
- package/dist/core/objects/publication/publication.diff.js +24 -13
- package/dist/core/objects/publication/publication.model.d.ts +14 -0
- package/dist/core/objects/publication/publication.model.js +20 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +4 -3
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +6 -6
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +3 -2
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +2 -2
- package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +2 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.create.js +24 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +2 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +1 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
- package/dist/core/objects/rls-policy/rls-policy.diff.js +13 -1
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +51 -2
- package/dist/core/objects/rls-policy/rls-policy.model.js +122 -1
- package/dist/core/objects/role/changes/role.alter.d.ts +3 -2
- package/dist/core/objects/role/changes/role.alter.js +2 -2
- package/dist/core/objects/role/changes/role.base.d.ts +1 -1
- package/dist/core/objects/role/changes/role.comment.d.ts +3 -2
- package/dist/core/objects/role/changes/role.comment.js +2 -2
- package/dist/core/objects/role/changes/role.create.d.ts +2 -1
- package/dist/core/objects/role/changes/role.create.js +1 -1
- package/dist/core/objects/role/changes/role.drop.d.ts +2 -1
- package/dist/core/objects/role/changes/role.drop.js +1 -1
- package/dist/core/objects/role/changes/role.privilege.d.ts +6 -5
- package/dist/core/objects/role/changes/role.privilege.js +5 -5
- package/dist/core/objects/role/changes/role.security-label.d.ts +28 -0
- package/dist/core/objects/role/changes/role.security-label.js +61 -0
- package/dist/core/objects/role/changes/role.types.d.ts +3 -1
- package/dist/core/objects/role/role.diff.js +38 -1
- package/dist/core/objects/role/role.model.d.ts +14 -3
- package/dist/core/objects/role/role.model.js +147 -12
- package/dist/core/objects/rule/changes/rule.alter.d.ts +3 -2
- package/dist/core/objects/rule/changes/rule.alter.js +2 -2
- package/dist/core/objects/rule/changes/rule.comment.d.ts +3 -2
- package/dist/core/objects/rule/changes/rule.comment.js +2 -2
- package/dist/core/objects/rule/changes/rule.create.d.ts +2 -1
- package/dist/core/objects/rule/changes/rule.create.js +1 -1
- package/dist/core/objects/rule/changes/rule.drop.d.ts +2 -1
- package/dist/core/objects/rule/changes/rule.drop.js +1 -1
- package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
- package/dist/core/objects/rule/rule.model.d.ts +3 -2
- package/dist/core/objects/rule/rule.model.js +20 -3
- package/dist/core/objects/schema/changes/schema.alter.d.ts +2 -1
- package/dist/core/objects/schema/changes/schema.alter.js +1 -1
- package/dist/core/objects/schema/changes/schema.base.d.ts +1 -1
- package/dist/core/objects/schema/changes/schema.comment.d.ts +3 -2
- package/dist/core/objects/schema/changes/schema.comment.js +2 -2
- package/dist/core/objects/schema/changes/schema.create.d.ts +3 -5
- package/dist/core/objects/schema/changes/schema.drop.d.ts +2 -1
- package/dist/core/objects/schema/changes/schema.drop.js +1 -1
- package/dist/core/objects/schema/changes/schema.privilege.d.ts +4 -3
- package/dist/core/objects/schema/changes/schema.privilege.js +3 -3
- package/dist/core/objects/schema/changes/schema.security-label.d.ts +28 -0
- package/dist/core/objects/schema/changes/schema.security-label.js +61 -0
- package/dist/core/objects/schema/changes/schema.types.d.ts +3 -1
- package/dist/core/objects/schema/schema.diff.d.ts +2 -8
- package/dist/core/objects/schema/schema.diff.js +40 -78
- package/dist/core/objects/schema/schema.model.d.ts +10 -0
- package/dist/core/objects/schema/schema.model.js +19 -2
- package/dist/core/objects/security-label.types.d.ts +20 -0
- package/dist/core/objects/security-label.types.js +46 -0
- package/dist/core/objects/sequence/changes/sequence.alter.d.ts +3 -2
- package/dist/core/objects/sequence/changes/sequence.alter.js +2 -2
- package/dist/core/objects/sequence/changes/sequence.base.d.ts +1 -1
- package/dist/core/objects/sequence/changes/sequence.comment.d.ts +3 -2
- package/dist/core/objects/sequence/changes/sequence.comment.js +2 -2
- package/dist/core/objects/sequence/changes/sequence.create.d.ts +2 -1
- package/dist/core/objects/sequence/changes/sequence.create.js +1 -1
- package/dist/core/objects/sequence/changes/sequence.drop.d.ts +2 -1
- package/dist/core/objects/sequence/changes/sequence.drop.js +11 -3
- package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +4 -3
- package/dist/core/objects/sequence/changes/sequence.privilege.js +3 -3
- package/dist/core/objects/sequence/changes/sequence.security-label.d.ts +28 -0
- package/dist/core/objects/sequence/changes/sequence.security-label.js +61 -0
- package/dist/core/objects/sequence/changes/sequence.types.d.ts +3 -1
- package/dist/core/objects/sequence/sequence.diff.d.ts +6 -8
- package/dist/core/objects/sequence/sequence.diff.js +99 -94
- package/dist/core/objects/sequence/sequence.model.d.ts +10 -0
- package/dist/core/objects/sequence/sequence.model.js +20 -2
- package/dist/core/objects/subscription/changes/subscription.alter.d.ts +8 -6
- package/dist/core/objects/subscription/changes/subscription.alter.js +11 -6
- package/dist/core/objects/subscription/changes/subscription.base.d.ts +1 -1
- package/dist/core/objects/subscription/changes/subscription.comment.d.ts +3 -2
- package/dist/core/objects/subscription/changes/subscription.comment.js +2 -2
- package/dist/core/objects/subscription/changes/subscription.create.d.ts +2 -1
- package/dist/core/objects/subscription/changes/subscription.create.js +11 -2
- package/dist/core/objects/subscription/changes/subscription.drop.d.ts +3 -1
- package/dist/core/objects/subscription/changes/subscription.drop.js +6 -1
- package/dist/core/objects/subscription/changes/subscription.security-label.d.ts +28 -0
- package/dist/core/objects/subscription/changes/subscription.security-label.js +61 -0
- package/dist/core/objects/subscription/changes/subscription.types.d.ts +3 -1
- package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
- package/dist/core/objects/subscription/subscription.diff.js +16 -0
- package/dist/core/objects/subscription/subscription.model.d.ts +10 -0
- package/dist/core/objects/subscription/subscription.model.js +19 -1
- package/dist/core/objects/table/changes/table.alter.d.ts +82 -23
- package/dist/core/objects/table/changes/table.alter.js +158 -29
- package/dist/core/objects/table/changes/table.base.d.ts +1 -1
- package/dist/core/objects/table/changes/table.comment.d.ts +7 -6
- package/dist/core/objects/table/changes/table.comment.js +6 -6
- package/dist/core/objects/table/changes/table.create.d.ts +2 -1
- package/dist/core/objects/table/changes/table.create.js +4 -1
- package/dist/core/objects/table/changes/table.drop.d.ts +16 -3
- package/dist/core/objects/table/changes/table.drop.js +24 -1
- package/dist/core/objects/table/changes/table.privilege.d.ts +4 -3
- package/dist/core/objects/table/changes/table.privilege.js +3 -3
- package/dist/core/objects/table/changes/table.security-label.d.ts +63 -0
- package/dist/core/objects/table/changes/table.security-label.js +134 -0
- package/dist/core/objects/table/changes/table.types.d.ts +3 -1
- package/dist/core/objects/table/table.diff.d.ts +2 -8
- package/dist/core/objects/table/table.diff.js +213 -198
- package/dist/core/objects/table/table.model.d.ts +65 -23
- package/dist/core/objects/table/table.model.js +97 -17
- package/dist/core/objects/trigger/changes/trigger.alter.d.ts +2 -1
- package/dist/core/objects/trigger/changes/trigger.alter.js +24 -1
- package/dist/core/objects/trigger/changes/trigger.comment.d.ts +3 -2
- package/dist/core/objects/trigger/changes/trigger.comment.js +2 -2
- package/dist/core/objects/trigger/changes/trigger.create.d.ts +2 -1
- package/dist/core/objects/trigger/changes/trigger.create.js +5 -6
- package/dist/core/objects/trigger/changes/trigger.drop.d.ts +2 -1
- package/dist/core/objects/trigger/changes/trigger.drop.js +1 -1
- package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
- package/dist/core/objects/trigger/trigger.diff.js +7 -2
- package/dist/core/objects/trigger/trigger.model.d.ts +12 -2
- package/dist/core/objects/trigger/trigger.model.js +39 -5
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +5 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +4 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +1 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +5 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +4 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +2 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.create.js +1 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +2 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +1 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +4 -3
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +3 -3
- package/dist/core/objects/type/composite-type/changes/composite-type.security-label.d.ts +28 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.security-label.js +61 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +3 -1
- package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
- package/dist/core/objects/type/composite-type/composite-type.diff.js +32 -77
- package/dist/core/objects/type/composite-type/composite-type.model.d.ts +25 -3
- package/dist/core/objects/type/composite-type/composite-type.model.js +24 -3
- package/dist/core/objects/type/enum/changes/enum.alter.d.ts +4 -2
- package/dist/core/objects/type/enum/changes/enum.alter.js +6 -2
- package/dist/core/objects/type/enum/changes/enum.base.d.ts +1 -1
- package/dist/core/objects/type/enum/changes/enum.comment.d.ts +3 -2
- package/dist/core/objects/type/enum/changes/enum.comment.js +2 -2
- package/dist/core/objects/type/enum/changes/enum.create.d.ts +2 -1
- package/dist/core/objects/type/enum/changes/enum.create.js +1 -1
- package/dist/core/objects/type/enum/changes/enum.drop.d.ts +2 -1
- package/dist/core/objects/type/enum/changes/enum.drop.js +1 -1
- package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +4 -3
- package/dist/core/objects/type/enum/changes/enum.privilege.js +3 -3
- package/dist/core/objects/type/enum/changes/enum.security-label.d.ts +28 -0
- package/dist/core/objects/type/enum/changes/enum.security-label.js +61 -0
- package/dist/core/objects/type/enum/changes/enum.types.d.ts +3 -1
- package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
- package/dist/core/objects/type/enum/enum.diff.js +41 -112
- package/dist/core/objects/type/enum/enum.model.d.ts +10 -0
- package/dist/core/objects/type/enum/enum.model.js +21 -2
- package/dist/core/objects/type/range/changes/range.alter.d.ts +2 -1
- package/dist/core/objects/type/range/changes/range.alter.js +1 -1
- package/dist/core/objects/type/range/changes/range.base.d.ts +1 -1
- package/dist/core/objects/type/range/changes/range.comment.d.ts +3 -2
- package/dist/core/objects/type/range/changes/range.comment.js +2 -2
- package/dist/core/objects/type/range/changes/range.create.d.ts +2 -1
- package/dist/core/objects/type/range/changes/range.create.js +7 -4
- package/dist/core/objects/type/range/changes/range.drop.d.ts +2 -1
- package/dist/core/objects/type/range/changes/range.drop.js +1 -1
- package/dist/core/objects/type/range/changes/range.privilege.d.ts +4 -3
- package/dist/core/objects/type/range/changes/range.privilege.js +3 -3
- package/dist/core/objects/type/range/changes/range.security-label.d.ts +28 -0
- package/dist/core/objects/type/range/changes/range.security-label.js +61 -0
- package/dist/core/objects/type/range/changes/range.types.d.ts +3 -1
- package/dist/core/objects/type/range/range.diff.d.ts +2 -8
- package/dist/core/objects/type/range/range.diff.js +32 -77
- package/dist/core/objects/type/range/range.model.d.ts +10 -0
- package/dist/core/objects/type/range/range.model.js +20 -2
- package/dist/core/objects/type/type.types.d.ts +1 -0
- package/dist/core/objects/utils.d.ts +2 -0
- package/dist/core/objects/utils.js +6 -0
- package/dist/core/objects/view/changes/view.alter.d.ts +4 -3
- package/dist/core/objects/view/changes/view.alter.js +3 -3
- package/dist/core/objects/view/changes/view.base.d.ts +1 -1
- package/dist/core/objects/view/changes/view.comment.d.ts +3 -2
- package/dist/core/objects/view/changes/view.comment.js +2 -2
- package/dist/core/objects/view/changes/view.create.d.ts +2 -1
- package/dist/core/objects/view/changes/view.create.js +1 -1
- package/dist/core/objects/view/changes/view.drop.d.ts +2 -1
- package/dist/core/objects/view/changes/view.drop.js +1 -1
- package/dist/core/objects/view/changes/view.privilege.d.ts +4 -3
- package/dist/core/objects/view/changes/view.privilege.js +3 -3
- package/dist/core/objects/view/changes/view.security-label.d.ts +28 -0
- package/dist/core/objects/view/changes/view.security-label.js +61 -0
- package/dist/core/objects/view/changes/view.types.d.ts +3 -1
- package/dist/core/objects/view/view.diff.d.ts +3 -8
- package/dist/core/objects/view/view.diff.js +61 -178
- package/dist/core/objects/view/view.model.d.ts +46 -5
- package/dist/core/objects/view/view.model.js +43 -18
- package/dist/core/plan/apply.d.ts +10 -1
- package/dist/core/plan/apply.js +73 -55
- package/dist/core/plan/create.d.ts +19 -6
- package/dist/core/plan/create.js +160 -201
- package/dist/core/plan/execution.d.ts +21 -0
- package/dist/core/plan/execution.js +76 -0
- package/dist/core/plan/hierarchy.js +4 -4
- package/dist/core/plan/index.d.ts +1 -1
- package/dist/core/plan/index.js +1 -1
- package/dist/core/plan/io.d.ts +2 -1
- package/dist/core/plan/io.js +4 -2
- package/dist/core/plan/normalize.d.ts +11 -0
- package/dist/core/plan/normalize.js +33 -0
- package/dist/core/plan/render.d.ts +32 -0
- package/dist/core/plan/render.js +104 -0
- package/dist/core/plan/serialize.js +16 -4
- package/dist/core/plan/sql-format/constants.d.ts +2 -0
- package/dist/core/plan/sql-format/constants.js +11 -0
- package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
- package/dist/core/plan/sql-format/fixtures.js +2456 -0
- package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
- package/dist/core/plan/sql-format/format-utils.js +274 -0
- package/dist/core/plan/sql-format/formatters.d.ts +20 -0
- package/dist/core/plan/sql-format/formatters.js +737 -0
- package/dist/core/plan/sql-format/index.d.ts +2 -0
- package/dist/core/plan/sql-format/index.js +98 -0
- package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
- package/dist/core/plan/sql-format/keyword-case.js +893 -0
- package/dist/core/plan/sql-format/protect.d.ts +3 -0
- package/dist/core/plan/sql-format/protect.js +269 -0
- package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
- package/dist/core/plan/sql-format/sql-scanner.js +202 -0
- package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
- package/dist/core/plan/sql-format/tokenizer.js +118 -0
- package/dist/core/plan/sql-format/types.d.ts +28 -0
- package/dist/core/plan/sql-format/types.js +1 -0
- package/dist/core/plan/sql-format/wrap.d.ts +2 -0
- package/dist/core/plan/sql-format/wrap.js +165 -0
- package/dist/core/plan/sql-format.d.ts +2 -0
- package/dist/core/plan/sql-format.js +1 -0
- package/dist/core/plan/ssl-config.d.ts +32 -0
- package/dist/core/plan/ssl-config.js +115 -0
- package/dist/core/plan/statements.d.ts +2 -1
- package/dist/core/plan/statements.js +6 -2
- package/dist/core/plan/types.d.ts +64 -9
- package/dist/core/plan/types.js +18 -1
- package/dist/core/post-diff-normalization.d.ts +43 -0
- package/dist/core/post-diff-normalization.js +231 -0
- package/dist/core/postgres-config.d.ts +96 -3
- package/dist/core/postgres-config.js +287 -4
- package/dist/core/sort/custom-constraints.js +65 -1
- package/dist/core/sort/cycle-breakers.d.ts +15 -0
- package/dist/core/sort/cycle-breakers.js +396 -0
- package/dist/core/sort/debug-visualization.js +1 -1
- package/dist/core/sort/graph-builder.js +16 -0
- package/dist/core/sort/logical-sort.js +34 -47
- package/dist/core/sort/sort-changes.js +99 -44
- package/dist/core/sort/topological-sort.js +2 -2
- package/dist/core/sort/unorderable-cycle-error.d.ts +18 -0
- package/dist/core/sort/unorderable-cycle-error.js +20 -0
- package/dist/core/sort/utils.d.ts +10 -0
- package/dist/core/sort/utils.js +28 -0
- package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
- package/dist/core/test-utils/assert-valid-sql.js +19 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.js +10 -1
- package/package.json +76 -38
- package/src/cli/app.ts +52 -0
- package/src/cli/bin/cli.ts +23 -0
- package/src/cli/commands/apply.ts +101 -0
- package/src/cli/commands/catalog-export.ts +103 -0
- package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
- package/src/cli/commands/declarative-apply.ts +380 -0
- package/src/cli/commands/declarative-export.ts +322 -0
- package/src/cli/commands/plan.ts +256 -0
- package/src/cli/commands/sync.ts +178 -0
- package/src/cli/exit-code.test.ts +19 -0
- package/src/cli/exit-code.ts +7 -0
- package/src/cli/formatters/index.ts +5 -0
- package/src/cli/formatters/tree/tree-builder.ts +380 -0
- package/src/cli/formatters/tree/tree-renderer.ts +372 -0
- package/src/cli/formatters/tree/tree.ts +238 -0
- package/src/cli/utils/apply-display.test.ts +348 -0
- package/src/cli/utils/apply-display.ts +238 -0
- package/src/cli/utils/export-display.test.ts +103 -0
- package/src/cli/utils/export-display.ts +275 -0
- package/src/cli/utils/integrations.test.ts +251 -0
- package/src/cli/utils/integrations.ts +170 -0
- package/src/cli/utils/resolve-input.test.ts +38 -0
- package/src/cli/utils/resolve-input.ts +17 -0
- package/src/cli/utils.ts +247 -0
- package/src/core/catalog-export/index.ts +20 -0
- package/src/core/catalog.diff.test.ts +173 -0
- package/src/core/catalog.diff.ts +275 -0
- package/src/core/catalog.filter.ts +96 -0
- package/src/core/catalog.model.test.ts +122 -0
- package/src/core/catalog.model.ts +548 -0
- package/src/core/catalog.snapshot.test.ts +490 -0
- package/src/core/catalog.snapshot.ts +289 -0
- package/src/core/change-utils.test.ts +61 -0
- package/src/core/change-utils.ts +73 -0
- package/src/core/change.types.ts +94 -0
- package/src/core/connection-url.test.ts +142 -0
- package/src/core/connection-url.ts +82 -0
- package/src/core/context.ts +26 -0
- package/src/core/declarative-apply/discover-sql.test.ts +103 -0
- package/src/core/declarative-apply/discover-sql.ts +107 -0
- package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
- package/src/core/declarative-apply/index.test.ts +67 -0
- package/src/core/declarative-apply/index.ts +205 -0
- package/src/core/declarative-apply/round-apply.test.ts +504 -0
- package/src/core/declarative-apply/round-apply.ts +562 -0
- package/src/core/depend.ts +1895 -0
- package/src/core/expand-replace-dependencies.test.ts +980 -0
- package/src/core/expand-replace-dependencies.ts +707 -0
- package/src/core/export/file-mapper.test.ts +816 -0
- package/src/core/export/file-mapper.ts +579 -0
- package/src/core/export/grouper.ts +108 -0
- package/src/core/export/index.ts +138 -0
- package/src/core/export/types.ts +104 -0
- package/src/core/fingerprint.ts +204 -0
- package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/src/core/integrations/filter/dsl.test.ts +477 -0
- package/src/core/integrations/filter/dsl.ts +305 -0
- package/src/core/integrations/filter/filter.types.ts +3 -0
- package/src/core/integrations/filter/flatten.test.ts +282 -0
- package/src/core/integrations/filter/flatten.ts +166 -0
- package/src/core/integrations/integration-dsl.ts +50 -0
- package/src/core/integrations/integration.types.ts +65 -0
- package/src/core/integrations/merge.test.ts +128 -0
- package/src/core/integrations/merge.ts +72 -0
- package/src/core/integrations/serialize/dsl.test.ts +110 -0
- package/src/core/integrations/serialize/dsl.ts +71 -0
- package/src/core/integrations/serialize/serialize.types.ts +40 -0
- package/src/core/integrations/supabase.test.ts +533 -0
- package/src/core/integrations/supabase.ts +355 -0
- package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
- package/src/core/objects/aggregate/aggregate.diff.ts +255 -0
- package/src/core/objects/aggregate/aggregate.model.ts +338 -0
- package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
- package/src/core/objects/aggregate/changes/aggregate.alter.ts +33 -0
- package/src/core/objects/aggregate/changes/aggregate.base.ts +24 -0
- package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
- package/src/core/objects/aggregate/changes/aggregate.comment.ts +63 -0
- package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
- package/src/core/objects/aggregate/changes/aggregate.create.ts +330 -0
- package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
- package/src/core/objects/aggregate/changes/aggregate.drop.ts +33 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +215 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.ts +160 -0
- package/src/core/objects/aggregate/changes/aggregate.security-label.ts +99 -0
- package/src/core/objects/aggregate/changes/aggregate.types.ts +15 -0
- package/src/core/objects/base.change.ts +130 -0
- package/src/core/objects/base.default-privileges.ts +204 -0
- package/src/core/objects/base.diff.ts +20 -0
- package/src/core/objects/base.model.test.ts +43 -0
- package/src/core/objects/base.model.ts +87 -0
- package/src/core/objects/base.privilege-diff.ts +447 -0
- package/src/core/objects/base.privilege.ts +191 -0
- package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
- package/src/core/objects/collation/changes/collation.alter.ts +80 -0
- package/src/core/objects/collation/changes/collation.base.ts +20 -0
- package/src/core/objects/collation/changes/collation.comment.ts +69 -0
- package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
- package/src/core/objects/collation/changes/collation.create.ts +107 -0
- package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
- package/src/core/objects/collation/changes/collation.drop.ts +38 -0
- package/src/core/objects/collation/changes/collation.types.ts +11 -0
- package/src/core/objects/collation/collation.diff.test.ts +97 -0
- package/src/core/objects/collation/collation.diff.ts +127 -0
- package/src/core/objects/collation/collation.model.ts +224 -0
- package/src/core/objects/diff-context.ts +16 -0
- package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
- package/src/core/objects/domain/changes/domain.alter.ts +287 -0
- package/src/core/objects/domain/changes/domain.base.ts +24 -0
- package/src/core/objects/domain/changes/domain.comment.ts +60 -0
- package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
- package/src/core/objects/domain/changes/domain.create.ts +141 -0
- package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
- package/src/core/objects/domain/changes/domain.drop.ts +35 -0
- package/src/core/objects/domain/changes/domain.privilege.ts +172 -0
- package/src/core/objects/domain/changes/domain.security-label.test.ts +56 -0
- package/src/core/objects/domain/changes/domain.security-label.ts +77 -0
- package/src/core/objects/domain/changes/domain.types.ts +15 -0
- package/src/core/objects/domain/domain.diff.test.ts +284 -0
- package/src/core/objects/domain/domain.diff.ts +328 -0
- package/src/core/objects/domain/domain.model.ts +211 -0
- package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
- package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +83 -0
- package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
- package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +67 -0
- package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
- package/src/core/objects/event-trigger/changes/event-trigger.create.ts +73 -0
- package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
- package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +35 -0
- package/src/core/objects/event-trigger/changes/event-trigger.security-label.ts +95 -0
- package/src/core/objects/event-trigger/changes/event-trigger.types.ts +13 -0
- package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
- package/src/core/objects/event-trigger/event-trigger.diff.ts +160 -0
- package/src/core/objects/event-trigger/event-trigger.model.ts +127 -0
- package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
- package/src/core/objects/extension/changes/extension.alter.ts +79 -0
- package/src/core/objects/extension/changes/extension.base.ts +20 -0
- package/src/core/objects/extension/changes/extension.comment.ts +65 -0
- package/src/core/objects/extension/changes/extension.create.test.ts +50 -0
- package/src/core/objects/extension/changes/extension.create.ts +66 -0
- package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
- package/src/core/objects/extension/changes/extension.drop.ts +35 -0
- package/src/core/objects/extension/changes/extension.types.ts +11 -0
- package/src/core/objects/extension/extension.diff.test.ts +42 -0
- package/src/core/objects/extension/extension.diff.ts +90 -0
- package/src/core/objects/extension/extension.model.test.ts +98 -0
- package/src/core/objects/extension/extension.model.ts +280 -0
- package/src/core/objects/extract-with-retry.test.ts +143 -0
- package/src/core/objects/extract-with-retry.ts +87 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +166 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +106 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +73 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +194 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +98 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +37 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +173 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +13 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +160 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +11 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +361 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +346 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +24 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +73 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +264 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +84 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +38 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +182 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.ts +95 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +15 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +376 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +302 -0
- package/src/core/objects/foreign-data-wrapper/sensitive-options.test.ts +98 -0
- package/src/core/objects/foreign-data-wrapper/sensitive-options.ts +133 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +218 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +131 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +61 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +180 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +84 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +35 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +165 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +13 -0
- package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
- package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
- package/src/core/objects/foreign-data-wrapper/server/server.model.ts +160 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +124 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +74 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +132 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +69 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +41 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +9 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +123 -0
- package/src/core/objects/index/changes/index.alter.test.ts +209 -0
- package/src/core/objects/index/changes/index.alter.ts +145 -0
- package/src/core/objects/index/changes/index.base.ts +20 -0
- package/src/core/objects/index/changes/index.comment.ts +64 -0
- package/src/core/objects/index/changes/index.create.test.ts +69 -0
- package/src/core/objects/index/changes/index.create.ts +69 -0
- package/src/core/objects/index/changes/index.drop.test.ts +47 -0
- package/src/core/objects/index/changes/index.drop.ts +35 -0
- package/src/core/objects/index/changes/index.types.ts +7 -0
- package/src/core/objects/index/changes/utils.ts +16 -0
- package/src/core/objects/index/index.diff.test.ts +153 -0
- package/src/core/objects/index/index.diff.ts +242 -0
- package/src/core/objects/index/index.model.test.ts +119 -0
- package/src/core/objects/index/index.model.ts +398 -0
- package/src/core/objects/language/changes/language.alter.test.ts +36 -0
- package/src/core/objects/language/changes/language.alter.ts +54 -0
- package/src/core/objects/language/changes/language.base.ts +20 -0
- package/src/core/objects/language/changes/language.comment.ts +59 -0
- package/src/core/objects/language/changes/language.create.test.ts +30 -0
- package/src/core/objects/language/changes/language.create.ts +105 -0
- package/src/core/objects/language/changes/language.drop.test.ts +28 -0
- package/src/core/objects/language/changes/language.drop.ts +40 -0
- package/src/core/objects/language/changes/language.privilege.ts +173 -0
- package/src/core/objects/language/changes/language.types.ts +13 -0
- package/src/core/objects/language/language.diff.test.ts +135 -0
- package/src/core/objects/language/language.diff.ts +144 -0
- package/src/core/objects/language/language.model.ts +150 -0
- package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
- package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +114 -0
- package/src/core/objects/materialized-view/changes/materialized-view.base.ts +24 -0
- package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +177 -0
- package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
- package/src/core/objects/materialized-view/changes/materialized-view.create.ts +94 -0
- package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
- package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +61 -0
- package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +213 -0
- package/src/core/objects/materialized-view/changes/materialized-view.security-label.test.ts +63 -0
- package/src/core/objects/materialized-view/changes/materialized-view.security-label.ts +95 -0
- package/src/core/objects/materialized-view/changes/materialized-view.types.ts +15 -0
- package/src/core/objects/materialized-view/materialized-view.diff.test.ts +265 -0
- package/src/core/objects/materialized-view/materialized-view.diff.ts +345 -0
- package/src/core/objects/materialized-view/materialized-view.model.test.ts +93 -0
- package/src/core/objects/materialized-view/materialized-view.model.ts +302 -0
- package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
- package/src/core/objects/procedure/changes/procedure.alter.ts +291 -0
- package/src/core/objects/procedure/changes/procedure.base.ts +24 -0
- package/src/core/objects/procedure/changes/procedure.comment.ts +71 -0
- package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
- package/src/core/objects/procedure/changes/procedure.create.ts +93 -0
- package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
- package/src/core/objects/procedure/changes/procedure.drop.ts +50 -0
- package/src/core/objects/procedure/changes/procedure.privilege.ts +189 -0
- package/src/core/objects/procedure/changes/procedure.security-label.ts +105 -0
- package/src/core/objects/procedure/changes/procedure.types.ts +15 -0
- package/src/core/objects/procedure/procedure.diff.test.ts +284 -0
- package/src/core/objects/procedure/procedure.diff.ts +404 -0
- package/src/core/objects/procedure/procedure.model.test.ts +117 -0
- package/src/core/objects/procedure/procedure.model.ts +308 -0
- package/src/core/objects/procedure/utils.ts +58 -0
- package/src/core/objects/publication/changes/publication.alter.test.ts +221 -0
- package/src/core/objects/publication/changes/publication.alter.ts +232 -0
- package/src/core/objects/publication/changes/publication.base.ts +20 -0
- package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
- package/src/core/objects/publication/changes/publication.comment.ts +65 -0
- package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
- package/src/core/objects/publication/changes/publication.create.ts +83 -0
- package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
- package/src/core/objects/publication/changes/publication.drop.ts +30 -0
- package/src/core/objects/publication/changes/publication.security-label.ts +95 -0
- package/src/core/objects/publication/changes/publication.types.ts +27 -0
- package/src/core/objects/publication/publication.diff.test.ts +297 -0
- package/src/core/objects/publication/publication.diff.ts +280 -0
- package/src/core/objects/publication/publication.model.ts +229 -0
- package/src/core/objects/publication/utils.ts +55 -0
- package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +283 -0
- package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +129 -0
- package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
- package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +70 -0
- package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +209 -0
- package/src/core/objects/rls-policy/changes/rls-policy.create.ts +128 -0
- package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +33 -0
- package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +40 -0
- package/src/core/objects/rls-policy/changes/rls-policy.types.ts +11 -0
- package/src/core/objects/rls-policy/rls-policy.diff.test.ts +81 -0
- package/src/core/objects/rls-policy/rls-policy.diff.ts +139 -0
- package/src/core/objects/rls-policy/rls-policy.model.ts +273 -0
- package/src/core/objects/role/changes/role.alter.test.ts +362 -0
- package/src/core/objects/role/changes/role.alter.ts +111 -0
- package/src/core/objects/role/changes/role.base.ts +25 -0
- package/src/core/objects/role/changes/role.comment.ts +56 -0
- package/src/core/objects/role/changes/role.create.test.ts +56 -0
- package/src/core/objects/role/changes/role.create.ts +103 -0
- package/src/core/objects/role/changes/role.drop.test.ts +32 -0
- package/src/core/objects/role/changes/role.drop.ts +35 -0
- package/src/core/objects/role/changes/role.privilege.ts +377 -0
- package/src/core/objects/role/changes/role.security-label.ts +77 -0
- package/src/core/objects/role/changes/role.types.ts +15 -0
- package/src/core/objects/role/role.diff.test.ts +279 -0
- package/src/core/objects/role/role.diff.ts +532 -0
- package/src/core/objects/role/role.model.ts +484 -0
- package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
- package/src/core/objects/rule/changes/rule.alter.ts +73 -0
- package/src/core/objects/rule/changes/rule.base.ts +20 -0
- package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
- package/src/core/objects/rule/changes/rule.comment.ts +63 -0
- package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
- package/src/core/objects/rule/changes/rule.create.ts +43 -0
- package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
- package/src/core/objects/rule/changes/rule.drop.ts +30 -0
- package/src/core/objects/rule/changes/rule.types.ts +13 -0
- package/src/core/objects/rule/rule.diff.test.ts +132 -0
- package/src/core/objects/rule/rule.diff.ts +79 -0
- package/src/core/objects/rule/rule.model.test.ts +99 -0
- package/src/core/objects/rule/rule.model.ts +197 -0
- package/src/core/objects/schema/changes/schema.alter.test.ts +32 -0
- package/src/core/objects/schema/changes/schema.alter.ts +46 -0
- package/src/core/objects/schema/changes/schema.base.ts +24 -0
- package/src/core/objects/schema/changes/schema.comment.ts +57 -0
- package/src/core/objects/schema/changes/schema.create.test.ts +26 -0
- package/src/core/objects/schema/changes/schema.create.ts +47 -0
- package/src/core/objects/schema/changes/schema.drop.test.ts +24 -0
- package/src/core/objects/schema/changes/schema.drop.ts +35 -0
- package/src/core/objects/schema/changes/schema.privilege.ts +176 -0
- package/src/core/objects/schema/changes/schema.security-label.test.ts +76 -0
- package/src/core/objects/schema/changes/schema.security-label.ts +77 -0
- package/src/core/objects/schema/changes/schema.types.ts +15 -0
- package/src/core/objects/schema/schema.diff.test.ts +43 -0
- package/src/core/objects/schema/schema.diff.ts +188 -0
- package/src/core/objects/schema/schema.model.ts +127 -0
- package/src/core/objects/security-label.types.test.ts +106 -0
- package/src/core/objects/security-label.types.ts +61 -0
- package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
- package/src/core/objects/sequence/changes/sequence.alter.ts +116 -0
- package/src/core/objects/sequence/changes/sequence.base.ts +24 -0
- package/src/core/objects/sequence/changes/sequence.comment.ts +61 -0
- package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
- package/src/core/objects/sequence/changes/sequence.create.ts +112 -0
- package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
- package/src/core/objects/sequence/changes/sequence.drop.ts +50 -0
- package/src/core/objects/sequence/changes/sequence.privilege.ts +180 -0
- package/src/core/objects/sequence/changes/sequence.security-label.test.ts +58 -0
- package/src/core/objects/sequence/changes/sequence.security-label.ts +92 -0
- package/src/core/objects/sequence/changes/sequence.types.ts +15 -0
- package/src/core/objects/sequence/sequence.diff.test.ts +521 -0
- package/src/core/objects/sequence/sequence.diff.ts +392 -0
- package/src/core/objects/sequence/sequence.model.ts +206 -0
- package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
- package/src/core/objects/subscription/changes/subscription.alter.ts +117 -0
- package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
- package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
- package/src/core/objects/subscription/changes/subscription.comment.ts +65 -0
- package/src/core/objects/subscription/changes/subscription.create.test.ts +83 -0
- package/src/core/objects/subscription/changes/subscription.create.ts +79 -0
- package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
- package/src/core/objects/subscription/changes/subscription.drop.ts +27 -0
- package/src/core/objects/subscription/changes/subscription.security-label.ts +95 -0
- package/src/core/objects/subscription/changes/subscription.traits.test.ts +83 -0
- package/src/core/objects/subscription/changes/subscription.types.ts +25 -0
- package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
- package/src/core/objects/subscription/subscription.diff.ts +275 -0
- package/src/core/objects/subscription/subscription.model.ts +211 -0
- package/src/core/objects/subscription/utils.ts +156 -0
- package/src/core/objects/table/changes/table.alter.test.ts +902 -0
- package/src/core/objects/table/changes/table.alter.ts +975 -0
- package/src/core/objects/table/changes/table.base.ts +24 -0
- package/src/core/objects/table/changes/table.comment.ts +261 -0
- package/src/core/objects/table/changes/table.create.test.ts +188 -0
- package/src/core/objects/table/changes/table.create.ts +193 -0
- package/src/core/objects/table/changes/table.drop.test.ts +36 -0
- package/src/core/objects/table/changes/table.drop.ts +87 -0
- package/src/core/objects/table/changes/table.privilege.ts +201 -0
- package/src/core/objects/table/changes/table.security-label.test.ts +140 -0
- package/src/core/objects/table/changes/table.security-label.ts +183 -0
- package/src/core/objects/table/changes/table.types.ts +15 -0
- package/src/core/objects/table/table.diff.test.ts +1382 -0
- package/src/core/objects/table/table.diff.ts +1034 -0
- package/src/core/objects/table/table.model.test.ts +209 -0
- package/src/core/objects/table/table.model.ts +555 -0
- package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
- package/src/core/objects/trigger/changes/trigger.alter.ts +74 -0
- package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
- package/src/core/objects/trigger/changes/trigger.comment.ts +65 -0
- package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
- package/src/core/objects/trigger/changes/trigger.create.ts +89 -0
- package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
- package/src/core/objects/trigger/changes/trigger.drop.ts +40 -0
- package/src/core/objects/trigger/changes/trigger.types.ts +11 -0
- package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
- package/src/core/objects/trigger/trigger.diff.ts +121 -0
- package/src/core/objects/trigger/trigger.model.test.ts +113 -0
- package/src/core/objects/trigger/trigger.model.ts +291 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +175 -0
- package/src/core/objects/type/composite-type/changes/composite-type.base.ts +24 -0
- package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +146 -0
- package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
- package/src/core/objects/type/composite-type/changes/composite-type.create.ts +96 -0
- package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
- package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +38 -0
- package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +176 -0
- package/src/core/objects/type/composite-type/changes/composite-type.security-label.ts +95 -0
- package/src/core/objects/type/composite-type/changes/composite-type.types.ts +15 -0
- package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
- package/src/core/objects/type/composite-type/composite-type.diff.ts +343 -0
- package/src/core/objects/type/composite-type/composite-type.model.ts +277 -0
- package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
- package/src/core/objects/type/enum/changes/enum.alter.ts +97 -0
- package/src/core/objects/type/enum/changes/enum.base.ts +24 -0
- package/src/core/objects/type/enum/changes/enum.comment.ts +65 -0
- package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
- package/src/core/objects/type/enum/changes/enum.create.ts +57 -0
- package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
- package/src/core/objects/type/enum/changes/enum.drop.ts +35 -0
- package/src/core/objects/type/enum/changes/enum.privilege.ts +176 -0
- package/src/core/objects/type/enum/changes/enum.security-label.ts +77 -0
- package/src/core/objects/type/enum/changes/enum.types.ts +15 -0
- package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
- package/src/core/objects/type/enum/enum.diff.ts +341 -0
- package/src/core/objects/type/enum/enum.model.ts +218 -0
- package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
- package/src/core/objects/type/range/changes/range.alter.ts +52 -0
- package/src/core/objects/type/range/changes/range.base.ts +24 -0
- package/src/core/objects/type/range/changes/range.comment.ts +65 -0
- package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
- package/src/core/objects/type/range/changes/range.create.ts +156 -0
- package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
- package/src/core/objects/type/range/changes/range.drop.ts +35 -0
- package/src/core/objects/type/range/changes/range.privilege.ts +176 -0
- package/src/core/objects/type/range/changes/range.security-label.ts +77 -0
- package/src/core/objects/type/range/changes/range.types.ts +15 -0
- package/src/core/objects/type/range/range.diff.test.ts +147 -0
- package/src/core/objects/type/range/range.diff.ts +230 -0
- package/src/core/objects/type/range/range.model.ts +208 -0
- package/src/core/objects/type/type.types.ts +6 -0
- package/src/core/objects/utils.ts +177 -0
- package/src/core/objects/view/changes/view.alter.test.ts +115 -0
- package/src/core/objects/view/changes/view.alter.ts +113 -0
- package/src/core/objects/view/changes/view.base.ts +24 -0
- package/src/core/objects/view/changes/view.comment.ts +60 -0
- package/src/core/objects/view/changes/view.create.test.ts +70 -0
- package/src/core/objects/view/changes/view.create.ts +74 -0
- package/src/core/objects/view/changes/view.drop.test.ts +37 -0
- package/src/core/objects/view/changes/view.drop.ts +41 -0
- package/src/core/objects/view/changes/view.privilege.ts +201 -0
- package/src/core/objects/view/changes/view.security-label.test.ts +64 -0
- package/src/core/objects/view/changes/view.security-label.ts +77 -0
- package/src/core/objects/view/changes/view.types.ts +15 -0
- package/src/core/objects/view/view.diff.test.ts +269 -0
- package/src/core/objects/view/view.diff.ts +268 -0
- package/src/core/objects/view/view.model.test.ts +90 -0
- package/src/core/objects/view/view.model.ts +308 -0
- package/src/core/plan/apply.ts +217 -0
- package/src/core/plan/create.ts +329 -0
- package/src/core/plan/execution.test.ts +231 -0
- package/src/core/plan/execution.ts +115 -0
- package/src/core/plan/hierarchy.ts +574 -0
- package/src/core/plan/index.ts +29 -0
- package/src/core/plan/io.ts +22 -0
- package/src/core/plan/normalize.test.ts +69 -0
- package/src/core/plan/normalize.ts +40 -0
- package/src/core/plan/render.test.ts +134 -0
- package/src/core/plan/render.ts +153 -0
- package/src/core/plan/risk.ts +48 -0
- package/src/core/plan/serialize.test.ts +317 -0
- package/src/core/plan/serialize.ts +209 -0
- package/src/core/plan/sql-format/constants.ts +13 -0
- package/src/core/plan/sql-format/fixtures.ts +2812 -0
- package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
- package/src/core/plan/sql-format/format-functions.test.ts +127 -0
- package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
- package/src/core/plan/sql-format/format-off.test.ts +806 -0
- package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1062 -0
- package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1281 -0
- package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1058 -0
- package/src/core/plan/sql-format/format-pretty-upper.test.ts +1049 -0
- package/src/core/plan/sql-format/format-stress.test.ts +616 -0
- package/src/core/plan/sql-format/format-utils.test.ts +91 -0
- package/src/core/plan/sql-format/format-utils.ts +391 -0
- package/src/core/plan/sql-format/formatters.ts +921 -0
- package/src/core/plan/sql-format/index.ts +149 -0
- package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
- package/src/core/plan/sql-format/keyword-case.ts +1120 -0
- package/src/core/plan/sql-format/protect.test.ts +127 -0
- package/src/core/plan/sql-format/protect.ts +337 -0
- package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
- package/src/core/plan/sql-format/sql-scanner.ts +252 -0
- package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
- package/src/core/plan/sql-format/tokenizer.ts +152 -0
- package/src/core/plan/sql-format/types.ts +31 -0
- package/src/core/plan/sql-format/wrap.test.ts +119 -0
- package/src/core/plan/sql-format/wrap.ts +196 -0
- package/src/core/plan/sql-format.ts +2 -0
- package/src/core/plan/ssl-config.ts +172 -0
- package/src/core/plan/statements.ts +22 -0
- package/src/core/plan/types.ts +236 -0
- package/src/core/post-diff-normalization.test.ts +590 -0
- package/src/core/post-diff-normalization.ts +296 -0
- package/src/core/postgres-config.test.ts +374 -0
- package/src/core/postgres-config.ts +474 -0
- package/src/core/sort/custom-constraints.ts +235 -0
- package/src/core/sort/cycle-breakers.test.ts +836 -0
- package/src/core/sort/cycle-breakers.ts +481 -0
- package/src/core/sort/debug-visualization.ts +239 -0
- package/src/core/sort/dependency-filter.ts +224 -0
- package/src/core/sort/graph-builder.ts +241 -0
- package/src/core/sort/graph-utils.ts +51 -0
- package/src/core/sort/logical-sort.test.ts +371 -0
- package/src/core/sort/logical-sort.ts +573 -0
- package/src/core/sort/sort-changes.test.ts +390 -0
- package/src/core/sort/sort-changes.ts +324 -0
- package/src/core/sort/topological-sort.test.ts +275 -0
- package/src/core/sort/topological-sort.ts +184 -0
- package/src/core/sort/types.ts +112 -0
- package/src/core/sort/unorderable-cycle-error.test.ts +60 -0
- package/src/core/sort/unorderable-cycle-error.ts +23 -0
- package/src/core/sort/utils.ts +107 -0
- package/src/core/test-utils/assert-valid-sql.ts +20 -0
- package/src/index.ts +58 -0
- package/src/typedoc.ts +253 -0
- package/dist/core/integrations/filter/extractors.d.ts +0 -12
- package/dist/core/integrations/filter/extractors.js +0 -136
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { CreateIndex } from "./objects/index/changes/index.create.js";
|
|
2
|
+
import { DropIndex } from "./objects/index/changes/index.drop.js";
|
|
3
|
+
import { DropSequence } from "./objects/sequence/changes/sequence.drop.js";
|
|
4
|
+
import { AlterTableAddConstraint, AlterTableDropColumn, AlterTableDropConstraint, AlterTableSetReplicaIdentity, AlterTableValidateConstraint, } from "./objects/table/changes/table.alter.js";
|
|
5
|
+
import { CreateCommentOnConstraint } from "./objects/table/changes/table.comment.js";
|
|
6
|
+
import { stableId } from "./objects/utils.js";
|
|
7
|
+
function constraintStableId(table, constraintName) {
|
|
8
|
+
return stableId.constraint(table.schema, table.name, constraintName);
|
|
9
|
+
}
|
|
10
|
+
function isSupersededByTableReplacement(change, replacedTableIds) {
|
|
11
|
+
if (change instanceof AlterTableDropColumn ||
|
|
12
|
+
change instanceof AlterTableDropConstraint) {
|
|
13
|
+
return replacedTableIds.has(change.table.stableId);
|
|
14
|
+
}
|
|
15
|
+
// `DropSequence(S)` is superseded when S is OWNED BY a column on a table
|
|
16
|
+
// that `expandReplaceDependencies` has promoted to `DropTable + CreateTable`
|
|
17
|
+
// in the same plan. PostgreSQL cascade-drops the OWNED BY sequence as part
|
|
18
|
+
// of the DROP TABLE, so the explicit DROP SEQUENCE is redundant and — more
|
|
19
|
+
// importantly — closes an unbreakable `DropSequence ↔ DropTable` cycle in
|
|
20
|
+
// the drop phase via the bidirectional pg_depend edges between the
|
|
21
|
+
// sequence and its owning column (`column → sequence` for the DEFAULT
|
|
22
|
+
// nextval reference, `sequence → column` for the OWNED BY auto-dependency).
|
|
23
|
+
// The alpha.15 short-circuit in `diffSequences.dropped` only suppresses
|
|
24
|
+
// `DropSequence` when the owning table itself is gone from `branchTables`;
|
|
25
|
+
// here the table survives in branch and the replacement is added later by
|
|
26
|
+
// the expander, so this whole-plan rewrite has to happen post-diff.
|
|
27
|
+
if (change instanceof DropSequence) {
|
|
28
|
+
if (!change.sequence.owned_by_schema ||
|
|
29
|
+
!change.sequence.owned_by_table ||
|
|
30
|
+
!change.sequence.owned_by_column) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const ownedByTableId = stableId.table(change.sequence.owned_by_schema, change.sequence.owned_by_table);
|
|
34
|
+
return replacedTableIds.has(ownedByTableId);
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Drop earlier duplicates of `AlterTableAddConstraint` /
|
|
40
|
+
* `AlterTableValidateConstraint` / `CreateCommentOnConstraint` targeting
|
|
41
|
+
* replaced tables, keeping only the last occurrence of each
|
|
42
|
+
* `(changeType, table.stableId, constraint.name)`.
|
|
43
|
+
*
|
|
44
|
+
* When `expandReplaceDependencies()` promotes a table to a full
|
|
45
|
+
* `DropTable + CreateTable` pair, it also emits one
|
|
46
|
+
* `AlterTableAddConstraint` (plus optional `VALIDATE CONSTRAINT` /
|
|
47
|
+
* `COMMENT ON CONSTRAINT`) per branch constraint. If `diffTables()` already
|
|
48
|
+
* emitted the same change for a shape flip or a new constraint on that
|
|
49
|
+
* table, the plan ends up with two identical `ALTER TABLE ... ADD
|
|
50
|
+
* CONSTRAINT ...` statements and PostgreSQL fails at apply time with
|
|
51
|
+
* `constraint "..." for relation "..." already exists`. Because
|
|
52
|
+
* `expandReplaceDependencies()` appends its additions after the original
|
|
53
|
+
* `diffTables()` output, the last occurrence is the expansion's emission —
|
|
54
|
+
* keeping it preserves correctness while removing the duplicate.
|
|
55
|
+
*/
|
|
56
|
+
function dropReplacedTableDuplicateConstraintChanges(changes, replacedTableIds) {
|
|
57
|
+
if (replacedTableIds.size === 0)
|
|
58
|
+
return changes;
|
|
59
|
+
const keyFor = (change) => {
|
|
60
|
+
if (!(change instanceof AlterTableAddConstraint) &&
|
|
61
|
+
!(change instanceof AlterTableValidateConstraint) &&
|
|
62
|
+
!(change instanceof CreateCommentOnConstraint)) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
if (!replacedTableIds.has(change.table.stableId))
|
|
66
|
+
return null;
|
|
67
|
+
const tag = change instanceof AlterTableAddConstraint
|
|
68
|
+
? "add"
|
|
69
|
+
: change instanceof AlterTableValidateConstraint
|
|
70
|
+
? "validate"
|
|
71
|
+
: "comment";
|
|
72
|
+
return `${tag}:${constraintStableId(change.table, change.constraint.name)}`;
|
|
73
|
+
};
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
const reversedKept = [];
|
|
76
|
+
let mutated = false;
|
|
77
|
+
// Walk backwards: the first encounter of each key corresponds to its LAST
|
|
78
|
+
// occurrence in the original order. `expandReplaceDependencies()` appends
|
|
79
|
+
// additions after the original changes, so "last wins" keeps the
|
|
80
|
+
// expansion's emission and drops the earlier diffTables duplicate.
|
|
81
|
+
for (let i = changes.length - 1; i >= 0; i--) {
|
|
82
|
+
const change = changes[i];
|
|
83
|
+
const key = keyFor(change);
|
|
84
|
+
if (key !== null) {
|
|
85
|
+
if (seen.has(key)) {
|
|
86
|
+
mutated = true;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
seen.add(key);
|
|
90
|
+
}
|
|
91
|
+
reversedKept.push(change);
|
|
92
|
+
}
|
|
93
|
+
return mutated ? reversedKept.reverse() : changes;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Re-emit `ALTER TABLE ... REPLICA IDENTITY USING INDEX <idx>` after any
|
|
97
|
+
* `DropIndex(idx) + CreateIndex(idx)` pair where `idx` is the replica-identity
|
|
98
|
+
* index of a branch table.
|
|
99
|
+
*
|
|
100
|
+
* Background: PostgreSQL silently flips a table's `relreplident` to `'d'`
|
|
101
|
+
* (DEFAULT) when the index it points to is dropped. `CREATE INDEX` cannot
|
|
102
|
+
* restore the marker — only `ALTER TABLE ... REPLICA IDENTITY USING INDEX`
|
|
103
|
+
* can. When both main and branch carry `replica_identity = 'i'` pointing at
|
|
104
|
+
* the same index name, `diffTables()` emits no replica-identity change of its
|
|
105
|
+
* own, so the marker would be lost on apply.
|
|
106
|
+
*
|
|
107
|
+
* This is a whole-plan interaction: `diffTables()` cannot detect it without
|
|
108
|
+
* also looking at index changes. Per the "whole-plan interactions belong in
|
|
109
|
+
* post-diff normalization" rule in the package CLAUDE.md, the restoration
|
|
110
|
+
* lives here.
|
|
111
|
+
*
|
|
112
|
+
* Insertion is idempotent: if `diffTables()` already emitted the same
|
|
113
|
+
* `AlterTableSetReplicaIdentity` for this table (e.g. when the user is also
|
|
114
|
+
* switching the replica-identity index name in the same migration), no
|
|
115
|
+
* duplicate is added.
|
|
116
|
+
*/
|
|
117
|
+
function restoreReplicaIdentityAfterIndexReplace(changes, branchTables) {
|
|
118
|
+
// Build the index-stable-id → owning-table map from branch state. Only
|
|
119
|
+
// tables in 'i' mode contribute, and only those whose configured index name
|
|
120
|
+
// is non-null (the extractor returns null for any other mode).
|
|
121
|
+
const replicaIdentityIndexToTable = new Map();
|
|
122
|
+
for (const table of Object.values(branchTables)) {
|
|
123
|
+
if (table.replica_identity !== "i" || !table.replica_identity_index) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const indexId = stableId.index(table.schema, table.name, table.replica_identity_index);
|
|
127
|
+
replicaIdentityIndexToTable.set(indexId, table);
|
|
128
|
+
}
|
|
129
|
+
if (replicaIdentityIndexToTable.size === 0)
|
|
130
|
+
return changes;
|
|
131
|
+
// Find the indexes that are both dropped AND created in this plan. A pure
|
|
132
|
+
// drop or a pure create is handled by `diffTables()` directly (the table's
|
|
133
|
+
// replica_identity / replica_identity_index fields will have changed). The
|
|
134
|
+
// hole is specifically the drop+create pair that recreates the same name.
|
|
135
|
+
const droppedIndexIds = new Set();
|
|
136
|
+
const createdIndexIds = new Set();
|
|
137
|
+
for (const change of changes) {
|
|
138
|
+
if (change instanceof DropIndex) {
|
|
139
|
+
droppedIndexIds.add(change.index.stableId);
|
|
140
|
+
}
|
|
141
|
+
else if (change instanceof CreateIndex) {
|
|
142
|
+
createdIndexIds.add(change.index.stableId);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const replacedIndexIds = new Set();
|
|
146
|
+
for (const id of droppedIndexIds) {
|
|
147
|
+
if (createdIndexIds.has(id) && replicaIdentityIndexToTable.has(id)) {
|
|
148
|
+
replacedIndexIds.add(id);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (replacedIndexIds.size === 0)
|
|
152
|
+
return changes;
|
|
153
|
+
// Skip tables for which `diffTables()` already emitted a replica-identity
|
|
154
|
+
// setter — re-emitting would produce a redundant ALTER TABLE (harmless on
|
|
155
|
+
// apply, but noisy in plan output).
|
|
156
|
+
const tablesWithExistingReplicaIdentitySetter = new Set();
|
|
157
|
+
for (const change of changes) {
|
|
158
|
+
if (change instanceof AlterTableSetReplicaIdentity) {
|
|
159
|
+
tablesWithExistingReplicaIdentitySetter.add(change.table.stableId);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Insert one `AlterTableSetReplicaIdentity` per replaced index, immediately
|
|
163
|
+
// after the matching `CreateIndex`. The change's `requires` already names
|
|
164
|
+
// both the table and the recreated index, so the topo sort orders it
|
|
165
|
+
// correctly relative to the surrounding DDL.
|
|
166
|
+
const result = [];
|
|
167
|
+
for (const change of changes) {
|
|
168
|
+
result.push(change);
|
|
169
|
+
if (!(change instanceof CreateIndex) ||
|
|
170
|
+
!replacedIndexIds.has(change.index.stableId)) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const table = replicaIdentityIndexToTable.get(change.index.stableId);
|
|
174
|
+
if (!table)
|
|
175
|
+
continue;
|
|
176
|
+
if (tablesWithExistingReplicaIdentitySetter.has(table.stableId))
|
|
177
|
+
continue;
|
|
178
|
+
result.push(new AlterTableSetReplicaIdentity({
|
|
179
|
+
table,
|
|
180
|
+
mode: "i",
|
|
181
|
+
indexName: table.replica_identity_index,
|
|
182
|
+
}));
|
|
183
|
+
// Mark as emitted so a second replaced index on the same table — if that
|
|
184
|
+
// ever arises — doesn't double-emit.
|
|
185
|
+
tablesWithExistingReplicaIdentitySetter.add(table.stableId);
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Apply structural rewrites to the change list that are only obvious once
|
|
191
|
+
* every object diff has been collected. This pass does NOT prevent dependency
|
|
192
|
+
* cycles — that responsibility now lives in the sort phase, where
|
|
193
|
+
* `sortPhaseChanges` invokes `tryBreakCycleByChangeInjection` lazily on cycles
|
|
194
|
+
* that edge filtering can't break (FK SCC of dropped tables,
|
|
195
|
+
* AlterPublicationDropTables ↔ AlterTableDropColumn, …).
|
|
196
|
+
*
|
|
197
|
+
* Concretely, this pass:
|
|
198
|
+
*
|
|
199
|
+
* - Prunes `AlterTableDropColumn(T.*)` / `AlterTableDropConstraint(T.*)`
|
|
200
|
+
* changes that are made redundant by an expansion-emitted
|
|
201
|
+
* `DropTable(T) + CreateTable(T)` pair. Without this, the apply phase
|
|
202
|
+
* would try to drop a column that no longer exists in the freshly
|
|
203
|
+
* recreated table.
|
|
204
|
+
* - Prunes `DropSequence(S)` changes when `S` is `OWNED BY` a column on a
|
|
205
|
+
* table promoted to `DropTable + CreateTable` by the expander. The
|
|
206
|
+
* `DROP TABLE` cascade drops the sequence at apply time; emitting an
|
|
207
|
+
* explicit `DROP SEQUENCE` in the same drop phase both duplicates the
|
|
208
|
+
* cascade and forms an unbreakable `DropSequence ↔ DropTable` cycle on
|
|
209
|
+
* the bidirectional pg_depend edges between the sequence and the
|
|
210
|
+
* owning column.
|
|
211
|
+
* - Dedupes duplicate `AlterTableAddConstraint` /
|
|
212
|
+
* `AlterTableValidateConstraint` / `CreateCommentOnConstraint` changes
|
|
213
|
+
* produced when `diffTables()` and `expandReplaceDependencies()` both
|
|
214
|
+
* emit the same constraint operation for a replaced table. Last write
|
|
215
|
+
* wins so the expansion's emission survives.
|
|
216
|
+
* - Re-emits `ALTER TABLE ... REPLICA IDENTITY USING INDEX <idx>` after any
|
|
217
|
+
* `DropIndex(idx) + CreateIndex(idx)` pair where `idx` is the replica
|
|
218
|
+
* identity index of a branch table — Postgres silently clears the marker
|
|
219
|
+
* when the underlying index is dropped, and `CREATE INDEX` cannot restore
|
|
220
|
+
* it.
|
|
221
|
+
*
|
|
222
|
+
* Object-local PostgreSQL semantics (for example owned-sequence cascades)
|
|
223
|
+
* stay in the corresponding `diff*` function instead of this pass.
|
|
224
|
+
*/
|
|
225
|
+
export function normalizePostDiffChanges({ changes, replacedTableIds = new Set(), branchTables = {}, }) {
|
|
226
|
+
const restoredChanges = restoreReplicaIdentityAfterIndexReplace(changes, branchTables);
|
|
227
|
+
const dedupedChanges = dropReplacedTableDuplicateConstraintChanges(restoredChanges, replacedTableIds);
|
|
228
|
+
if (replacedTableIds.size === 0)
|
|
229
|
+
return dedupedChanges;
|
|
230
|
+
return dedupedChanges.filter((change) => !isSupersededByTableReplacement(change, replacedTableIds));
|
|
231
|
+
}
|
|
@@ -1,14 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PostgreSQL connection configuration with custom type handlers.
|
|
3
3
|
*/
|
|
4
|
-
import type { PoolClient, PoolConfig } from "pg";
|
|
4
|
+
import type { ClientBase, PoolClient, PoolConfig } from "pg";
|
|
5
5
|
import { Pool } from "pg";
|
|
6
|
+
/**
|
|
7
|
+
* Return true when `err` represents a transient connect failure that makes
|
|
8
|
+
* sense to retry with backoff (e.g. refused connections, DNS blips, our own
|
|
9
|
+
* eager-connect timeout wrapper). Returns false for permanent failures such
|
|
10
|
+
* as authentication errors, TLS negotiation errors, and `ENOTFOUND`.
|
|
11
|
+
*
|
|
12
|
+
* Unknown errors are treated as retryable on purpose: transient-by-default
|
|
13
|
+
* is safer here because a duplicated retry is strictly cheaper than a spurious
|
|
14
|
+
* hard failure during catalog extraction.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isRetryableConnectError(err: unknown): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Retry an async `connect` operation with bounded exponential backoff.
|
|
19
|
+
* Stops immediately on a non-retryable error. On exhausted attempts, throws
|
|
20
|
+
* the last observed error.
|
|
21
|
+
*
|
|
22
|
+
* Exposed for testing — production call sites always go through
|
|
23
|
+
* {@link createManagedPool}.
|
|
24
|
+
*/
|
|
25
|
+
export declare function connectWithRetry<T>(opts: {
|
|
26
|
+
connect: (attempt: number) => Promise<T>;
|
|
27
|
+
isRetryable?: (err: unknown) => boolean;
|
|
28
|
+
maxAttempts?: number;
|
|
29
|
+
baseBackoffMs?: number;
|
|
30
|
+
maxBackoffMs?: number;
|
|
31
|
+
sleep?: (ms: number) => Promise<void>;
|
|
32
|
+
}): Promise<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Race `connect()` against a `timeoutMs` rejection and clear the timer when
|
|
35
|
+
* either side wins. If the timer is left running after a fast connect, the
|
|
36
|
+
* pending `setTimeout` keeps the event loop alive and the process hangs for
|
|
37
|
+
* the rest of `timeoutMs`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function connectWithTimeout<T>(connect: () => Promise<T>, timeoutMs: number, label: "source" | "target"): Promise<T>;
|
|
6
40
|
/**
|
|
7
41
|
* Options for creating a Pool with event listeners.
|
|
8
42
|
*/
|
|
9
43
|
interface CreatePoolOptions extends Partial<PoolConfig> {
|
|
10
44
|
/** Called when a new client connects to the pool */
|
|
11
|
-
onConnect?: (client:
|
|
45
|
+
onConnect?: (client: ClientBase) => void | Promise<void>;
|
|
12
46
|
/** Called when an idle client emits an error */
|
|
13
47
|
onError?: (err: Error, client: PoolClient) => void;
|
|
14
48
|
/** Called when a client is acquired from the pool */
|
|
@@ -18,6 +52,65 @@ interface CreatePoolOptions extends Partial<PoolConfig> {
|
|
|
18
52
|
}
|
|
19
53
|
/**
|
|
20
54
|
* Create a Pool with custom type handlers and optional event listeners.
|
|
55
|
+
*
|
|
56
|
+
* `connectionString` may be `undefined` when the caller needs pg to rely on
|
|
57
|
+
* explicit `host`/`port`/`user`/... fields from `options` instead — notably
|
|
58
|
+
* the bracketed-IPv6 workaround in {@link poolConfigFromUrl}, where passing
|
|
59
|
+
* the connection string would cause `pg-connection-string` to re-inject the
|
|
60
|
+
* bracketed host that breaks `getaddrinfo`.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createPool(connectionString: string | undefined, options?: CreatePoolOptions): Pool;
|
|
63
|
+
/**
|
|
64
|
+
* Build a pg {@link PoolConfig} from a cleaned connection URL.
|
|
65
|
+
*
|
|
66
|
+
* For most URLs this just returns `{ connectionString }` and pg does its
|
|
67
|
+
* normal parsing. But for URLs whose hostname is a bracketed IPv6 literal
|
|
68
|
+
* (e.g. `postgresql://user@[::1]:5432/db`, as produced by
|
|
69
|
+
* {@link normalizeConnectionUrl}), we expand the URL into explicit
|
|
70
|
+
* `host`/`port`/`user`/`password`/`database` fields with a **bare** IPv6
|
|
71
|
+
* host — no brackets.
|
|
72
|
+
*
|
|
73
|
+
* This works around a `pg-connection-string` quirk: its parser sets
|
|
74
|
+
* `config.host` to the WHATWG `URL.hostname`, which keeps the surrounding
|
|
75
|
+
* `[...]` for IPv6 literals. That bracketed value is then passed verbatim to
|
|
76
|
+
* `getaddrinfo`, which rejects it with `ENOTFOUND`. Since
|
|
77
|
+
* `pg`'s connection-parameters module does
|
|
78
|
+
* `Object.assign({}, config, parse(connectionString))`, any `host` we pass
|
|
79
|
+
* alongside `connectionString` gets clobbered — so we drop `connectionString`
|
|
80
|
+
* entirely on this path and hand pg the parsed fields directly.
|
|
81
|
+
*
|
|
82
|
+
* Remaining query parameters (e.g. `application_name`, `options`,
|
|
83
|
+
* `connect_timeout`) are forwarded as top-level config keys, mirroring how
|
|
84
|
+
* `pg-connection-string` would normally surface them.
|
|
85
|
+
*/
|
|
86
|
+
export declare function poolConfigFromUrl(cleanedUrl: string): PoolConfig;
|
|
87
|
+
/**
|
|
88
|
+
* End a pool and wait for all client sockets to fully close.
|
|
89
|
+
*
|
|
90
|
+
* pg-pool's `pool.end()` resolves once clients are removed from its
|
|
91
|
+
* internal bookkeeping, but the underlying `client.end()` calls (which
|
|
92
|
+
* close the TCP/TLS sockets) are fired asynchronously *after* that.
|
|
93
|
+
* If the server (e.g. a test container) is stopped right after
|
|
94
|
+
* `pool.end()` resolves, the still-open sockets receive an unexpected
|
|
95
|
+
* RST and emit unhandled "Connection terminated unexpectedly" errors.
|
|
96
|
+
*
|
|
97
|
+
* This helper waits for every `remove` event — which pg-pool emits
|
|
98
|
+
* inside each `client.end()` callback — ensuring all sockets are
|
|
99
|
+
* truly closed before it resolves.
|
|
100
|
+
*/
|
|
101
|
+
/**
|
|
102
|
+
* Create a pool from a connection URL with standard session setup:
|
|
103
|
+
* SSL parsing, search_path isolation, optional SET ROLE, and 57P01 suppression.
|
|
104
|
+
*
|
|
105
|
+
* Returns the pool and a `close` function that properly waits for all sockets
|
|
106
|
+
* to close (via {@link endPool}).
|
|
21
107
|
*/
|
|
22
|
-
export declare function
|
|
108
|
+
export declare function createManagedPool(url: string, options?: {
|
|
109
|
+
role?: string;
|
|
110
|
+
label?: "source" | "target";
|
|
111
|
+
}): Promise<{
|
|
112
|
+
pool: Pool;
|
|
113
|
+
close: () => Promise<void>;
|
|
114
|
+
}>;
|
|
115
|
+
export declare function endPool(pool: Pool): Promise<void>;
|
|
23
116
|
export {};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PostgreSQL connection configuration with custom type handlers.
|
|
3
3
|
*/
|
|
4
|
-
import { Pool, types } from "pg";
|
|
4
|
+
import { escapeIdentifier, Pool, types } from "pg";
|
|
5
|
+
import { normalizeConnectionUrl } from "./connection-url.js";
|
|
6
|
+
import { parseSslConfig } from "./plan/ssl-config.js";
|
|
5
7
|
// ============================================================================
|
|
6
8
|
// Array Parser
|
|
7
9
|
// ============================================================================
|
|
@@ -92,14 +94,170 @@ types.setTypeParser(1005, (val) => parseArray(val, parseIntElement)); // int2[]
|
|
|
92
94
|
types.setTypeParser(1007, (val) => parseArray(val, parseIntElement)); // int4[]
|
|
93
95
|
// @ts-expect-error - pg types expects TypeId but raw OID numbers work fine
|
|
94
96
|
types.setTypeParser(1016, (val) => parseArray(val, parseIntElement)); // int8[]
|
|
97
|
+
const DEFAULT_POOL_MAX = Number(process.env.PGDELTA_POOL_MAX) || 5;
|
|
98
|
+
const DEFAULT_CONNECTION_TIMEOUT_MS = Number(process.env.PGDELTA_CONNECTION_TIMEOUT_MS) || 3_000;
|
|
99
|
+
const DEFAULT_CONNECT_TIMEOUT_MS = Number(process.env.PGDELTA_CONNECT_TIMEOUT_MS) || 2_500;
|
|
100
|
+
const DEFAULT_CONNECT_MAX_ATTEMPTS = Number(process.env.PGDELTA_CONNECT_MAX_ATTEMPTS) || 3;
|
|
101
|
+
const DEFAULT_CONNECT_BASE_BACKOFF_MS = Number(process.env.PGDELTA_CONNECT_BASE_BACKOFF_MS) || 250;
|
|
102
|
+
const DEFAULT_CONNECT_MAX_BACKOFF_MS = Number(process.env.PGDELTA_CONNECT_MAX_BACKOFF_MS) || 1_000;
|
|
103
|
+
// PostgreSQL auth-class SQLSTATE codes: not retryable.
|
|
104
|
+
const NON_RETRYABLE_PG_CODES = new Set([
|
|
105
|
+
"28000", // invalid_authorization_specification
|
|
106
|
+
"28P01", // invalid_password
|
|
107
|
+
"28P02", // pgdelta: alias reserved here to future-proof against new auth codes
|
|
108
|
+
]);
|
|
109
|
+
// Non-retryable TLS/SSL markers. The `pg` driver surfaces TLS failures as
|
|
110
|
+
// either plain Node `Error` instances with a code on `ERR_TLS_*` or error
|
|
111
|
+
// messages that include well-known cert/TLS terminology; we match both
|
|
112
|
+
// because node-pg normalises some of these.
|
|
113
|
+
const TLS_MESSAGE_MARKERS = [
|
|
114
|
+
"self-signed certificate",
|
|
115
|
+
"self signed certificate",
|
|
116
|
+
"unable to verify the first certificate",
|
|
117
|
+
"certificate has expired",
|
|
118
|
+
"tls",
|
|
119
|
+
"ssl",
|
|
120
|
+
];
|
|
121
|
+
/**
|
|
122
|
+
* Return true when `err` represents a transient connect failure that makes
|
|
123
|
+
* sense to retry with backoff (e.g. refused connections, DNS blips, our own
|
|
124
|
+
* eager-connect timeout wrapper). Returns false for permanent failures such
|
|
125
|
+
* as authentication errors, TLS negotiation errors, and `ENOTFOUND`.
|
|
126
|
+
*
|
|
127
|
+
* Unknown errors are treated as retryable on purpose: transient-by-default
|
|
128
|
+
* is safer here because a duplicated retry is strictly cheaper than a spurious
|
|
129
|
+
* hard failure during catalog extraction.
|
|
130
|
+
*/
|
|
131
|
+
export function isRetryableConnectError(err) {
|
|
132
|
+
if (!(err instanceof Error))
|
|
133
|
+
return true;
|
|
134
|
+
const code = err.code;
|
|
135
|
+
if (code && NON_RETRYABLE_PG_CODES.has(code))
|
|
136
|
+
return false;
|
|
137
|
+
if (code === "ENOTFOUND")
|
|
138
|
+
return false;
|
|
139
|
+
if (code && typeof code === "string" && code.startsWith("ERR_TLS")) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
const message = err.message?.toLowerCase() ?? "";
|
|
143
|
+
// Our own eager-connect timeout wrapper is retryable (flaky network).
|
|
144
|
+
if (message.includes("timed out after"))
|
|
145
|
+
return true;
|
|
146
|
+
for (const marker of TLS_MESSAGE_MARKERS) {
|
|
147
|
+
if (message.includes(marker))
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Retry an async `connect` operation with bounded exponential backoff.
|
|
154
|
+
* Stops immediately on a non-retryable error. On exhausted attempts, throws
|
|
155
|
+
* the last observed error.
|
|
156
|
+
*
|
|
157
|
+
* Exposed for testing — production call sites always go through
|
|
158
|
+
* {@link createManagedPool}.
|
|
159
|
+
*/
|
|
160
|
+
export async function connectWithRetry(opts) {
|
|
161
|
+
const maxAttempts = opts.maxAttempts ?? DEFAULT_CONNECT_MAX_ATTEMPTS;
|
|
162
|
+
const baseBackoffMs = opts.baseBackoffMs ?? DEFAULT_CONNECT_BASE_BACKOFF_MS;
|
|
163
|
+
const maxBackoffMs = opts.maxBackoffMs ?? DEFAULT_CONNECT_MAX_BACKOFF_MS;
|
|
164
|
+
const isRetryable = opts.isRetryable ?? isRetryableConnectError;
|
|
165
|
+
const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
166
|
+
let lastError;
|
|
167
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
168
|
+
try {
|
|
169
|
+
return await opts.connect(attempt);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
lastError = err;
|
|
173
|
+
if (attempt >= maxAttempts || !isRetryable(err)) {
|
|
174
|
+
throw err;
|
|
175
|
+
}
|
|
176
|
+
const backoff = Math.min(baseBackoffMs * 2 ** (attempt - 1), maxBackoffMs);
|
|
177
|
+
await sleep(backoff);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Unreachable: loop either returns or throws.
|
|
181
|
+
throw lastError;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Race `connect()` against a `timeoutMs` rejection and clear the timer when
|
|
185
|
+
* either side wins. If the timer is left running after a fast connect, the
|
|
186
|
+
* pending `setTimeout` keeps the event loop alive and the process hangs for
|
|
187
|
+
* the rest of `timeoutMs`.
|
|
188
|
+
*/
|
|
189
|
+
export function connectWithTimeout(connect, timeoutMs, label) {
|
|
190
|
+
let timer;
|
|
191
|
+
return Promise.race([
|
|
192
|
+
connect(),
|
|
193
|
+
new Promise((_, reject) => {
|
|
194
|
+
timer = setTimeout(() => reject(new Error(`Connection to ${label} database timed out after ${timeoutMs}ms. ` +
|
|
195
|
+
`The server may require SSL, use an invalid certificate, or be unreachable.`)), timeoutMs);
|
|
196
|
+
}),
|
|
197
|
+
]).finally(() => {
|
|
198
|
+
clearTimeout(timer);
|
|
199
|
+
});
|
|
200
|
+
}
|
|
95
201
|
/**
|
|
96
202
|
* Create a Pool with custom type handlers and optional event listeners.
|
|
203
|
+
*
|
|
204
|
+
* `connectionString` may be `undefined` when the caller needs pg to rely on
|
|
205
|
+
* explicit `host`/`port`/`user`/... fields from `options` instead — notably
|
|
206
|
+
* the bracketed-IPv6 workaround in {@link poolConfigFromUrl}, where passing
|
|
207
|
+
* the connection string would cause `pg-connection-string` to re-inject the
|
|
208
|
+
* bracketed host that breaks `getaddrinfo`.
|
|
97
209
|
*/
|
|
98
210
|
export function createPool(connectionString, options) {
|
|
99
211
|
const { onConnect, onError, onAcquire, onRemove, ...config } = options ?? {};
|
|
100
|
-
const pool = new Pool({
|
|
101
|
-
|
|
102
|
-
|
|
212
|
+
const pool = new Pool({
|
|
213
|
+
...(connectionString ? { connectionString } : {}),
|
|
214
|
+
max: DEFAULT_POOL_MAX,
|
|
215
|
+
connectionTimeoutMillis: DEFAULT_CONNECTION_TIMEOUT_MS,
|
|
216
|
+
...config,
|
|
217
|
+
});
|
|
218
|
+
if (onConnect) {
|
|
219
|
+
const pendingClientSetup = new WeakMap();
|
|
220
|
+
const waitForClientSetup = async (client) => {
|
|
221
|
+
const setup = pendingClientSetup.get(client);
|
|
222
|
+
if (setup) {
|
|
223
|
+
await setup;
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
throw new Error("Internal error: pool client was acquired before async onConnect setup was registered. This indicates a bug in the pool wrapper logic; please report it with reproduction steps.");
|
|
227
|
+
};
|
|
228
|
+
const originalConnect = pool.connect.bind(pool);
|
|
229
|
+
pool.on("connect", (client) => {
|
|
230
|
+
pendingClientSetup.set(client, Promise.resolve().then(() => onConnect(client)));
|
|
231
|
+
});
|
|
232
|
+
pool.connect = ((callback) => {
|
|
233
|
+
if (!callback) {
|
|
234
|
+
return originalConnect().then(async (client) => {
|
|
235
|
+
try {
|
|
236
|
+
await waitForClientSetup(client);
|
|
237
|
+
return client;
|
|
238
|
+
}
|
|
239
|
+
catch (setupError) {
|
|
240
|
+
client.release?.(setupError);
|
|
241
|
+
throw setupError;
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
return originalConnect(async (err, client, release) => {
|
|
246
|
+
if (err || !client) {
|
|
247
|
+
callback(err, client, release);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
await waitForClientSetup(client);
|
|
252
|
+
callback(err, client, release);
|
|
253
|
+
}
|
|
254
|
+
catch (setupError) {
|
|
255
|
+
release(setupError);
|
|
256
|
+
callback(setupError, undefined, () => { });
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
}
|
|
103
261
|
if (onError)
|
|
104
262
|
pool.on("error", onError);
|
|
105
263
|
if (onAcquire)
|
|
@@ -108,3 +266,128 @@ export function createPool(connectionString, options) {
|
|
|
108
266
|
pool.on("remove", onRemove);
|
|
109
267
|
return pool;
|
|
110
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Build a pg {@link PoolConfig} from a cleaned connection URL.
|
|
271
|
+
*
|
|
272
|
+
* For most URLs this just returns `{ connectionString }` and pg does its
|
|
273
|
+
* normal parsing. But for URLs whose hostname is a bracketed IPv6 literal
|
|
274
|
+
* (e.g. `postgresql://user@[::1]:5432/db`, as produced by
|
|
275
|
+
* {@link normalizeConnectionUrl}), we expand the URL into explicit
|
|
276
|
+
* `host`/`port`/`user`/`password`/`database` fields with a **bare** IPv6
|
|
277
|
+
* host — no brackets.
|
|
278
|
+
*
|
|
279
|
+
* This works around a `pg-connection-string` quirk: its parser sets
|
|
280
|
+
* `config.host` to the WHATWG `URL.hostname`, which keeps the surrounding
|
|
281
|
+
* `[...]` for IPv6 literals. That bracketed value is then passed verbatim to
|
|
282
|
+
* `getaddrinfo`, which rejects it with `ENOTFOUND`. Since
|
|
283
|
+
* `pg`'s connection-parameters module does
|
|
284
|
+
* `Object.assign({}, config, parse(connectionString))`, any `host` we pass
|
|
285
|
+
* alongside `connectionString` gets clobbered — so we drop `connectionString`
|
|
286
|
+
* entirely on this path and hand pg the parsed fields directly.
|
|
287
|
+
*
|
|
288
|
+
* Remaining query parameters (e.g. `application_name`, `options`,
|
|
289
|
+
* `connect_timeout`) are forwarded as top-level config keys, mirroring how
|
|
290
|
+
* `pg-connection-string` would normally surface them.
|
|
291
|
+
*/
|
|
292
|
+
export function poolConfigFromUrl(cleanedUrl) {
|
|
293
|
+
const urlObj = new URL(cleanedUrl);
|
|
294
|
+
if (!urlObj.hostname.startsWith("[")) {
|
|
295
|
+
return { connectionString: cleanedUrl };
|
|
296
|
+
}
|
|
297
|
+
const config = {
|
|
298
|
+
host: urlObj.hostname.slice(1, -1),
|
|
299
|
+
};
|
|
300
|
+
if (urlObj.port)
|
|
301
|
+
config.port = Number(urlObj.port);
|
|
302
|
+
if (urlObj.username)
|
|
303
|
+
config.user = decodeURIComponent(urlObj.username);
|
|
304
|
+
if (urlObj.password)
|
|
305
|
+
config.password = decodeURIComponent(urlObj.password);
|
|
306
|
+
if (urlObj.pathname.length > 1) {
|
|
307
|
+
config.database = decodeURIComponent(urlObj.pathname.slice(1));
|
|
308
|
+
}
|
|
309
|
+
for (const [key, value] of urlObj.searchParams) {
|
|
310
|
+
config[key] = value;
|
|
311
|
+
}
|
|
312
|
+
return config;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* End a pool and wait for all client sockets to fully close.
|
|
316
|
+
*
|
|
317
|
+
* pg-pool's `pool.end()` resolves once clients are removed from its
|
|
318
|
+
* internal bookkeeping, but the underlying `client.end()` calls (which
|
|
319
|
+
* close the TCP/TLS sockets) are fired asynchronously *after* that.
|
|
320
|
+
* If the server (e.g. a test container) is stopped right after
|
|
321
|
+
* `pool.end()` resolves, the still-open sockets receive an unexpected
|
|
322
|
+
* RST and emit unhandled "Connection terminated unexpectedly" errors.
|
|
323
|
+
*
|
|
324
|
+
* This helper waits for every `remove` event — which pg-pool emits
|
|
325
|
+
* inside each `client.end()` callback — ensuring all sockets are
|
|
326
|
+
* truly closed before it resolves.
|
|
327
|
+
*/
|
|
328
|
+
/**
|
|
329
|
+
* Create a pool from a connection URL with standard session setup:
|
|
330
|
+
* SSL parsing, search_path isolation, optional SET ROLE, and 57P01 suppression.
|
|
331
|
+
*
|
|
332
|
+
* Returns the pool and a `close` function that properly waits for all sockets
|
|
333
|
+
* to close (via {@link endPool}).
|
|
334
|
+
*/
|
|
335
|
+
export async function createManagedPool(url, options) {
|
|
336
|
+
// Normalize percent-encoded IPv6 hosts (e.g. `2406%3A...%3Ab3c9`) into the
|
|
337
|
+
// canonical bracketed form before the URL reaches `parseSslConfig` or pg.
|
|
338
|
+
// Non-IPv6 hosts are returned unchanged.
|
|
339
|
+
const normalizedUrl = normalizeConnectionUrl(url);
|
|
340
|
+
const sslConfig = await parseSslConfig(normalizedUrl, options?.label ?? "target");
|
|
341
|
+
// Expand bracketed-IPv6 URLs into explicit pg fields so the brackets never
|
|
342
|
+
// reach `getaddrinfo` — see `poolConfigFromUrl` for the full rationale.
|
|
343
|
+
const connectionConfig = poolConfigFromUrl(sslConfig.cleanedUrl);
|
|
344
|
+
const pool = createPool(connectionConfig.connectionString, {
|
|
345
|
+
...connectionConfig,
|
|
346
|
+
...(sslConfig.ssl !== undefined ? { ssl: sslConfig.ssl } : {}),
|
|
347
|
+
onError: (err) => {
|
|
348
|
+
if (err.code !== "57P01") {
|
|
349
|
+
console.error("Pool error:", err);
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
onConnect: async (client) => {
|
|
353
|
+
await client.query("SET search_path = ''");
|
|
354
|
+
if (options?.role) {
|
|
355
|
+
await client.query(`SET ROLE ${escapeIdentifier(options.role)}`);
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
});
|
|
359
|
+
// Eagerly validate connectivity so SSL/auth failures surface immediately
|
|
360
|
+
// instead of hanging on the first real query. node-pg's connectionTimeoutMillis
|
|
361
|
+
// is not reliably enforced under Bun when SSL negotiation hangs. Transient
|
|
362
|
+
// failures (refused connections, flaky DNS, our own timeout wrapper) are
|
|
363
|
+
// retried with bounded exponential backoff; auth/TLS/ENOTFOUND fail fast.
|
|
364
|
+
const label = options?.label ?? "target";
|
|
365
|
+
const timeoutMs = DEFAULT_CONNECT_TIMEOUT_MS;
|
|
366
|
+
try {
|
|
367
|
+
const client = await connectWithRetry({
|
|
368
|
+
connect: () => connectWithTimeout(() => pool.connect(), timeoutMs, label),
|
|
369
|
+
});
|
|
370
|
+
client.release();
|
|
371
|
+
}
|
|
372
|
+
catch (err) {
|
|
373
|
+
await pool.end().catch(() => { });
|
|
374
|
+
throw err;
|
|
375
|
+
}
|
|
376
|
+
return { pool, close: () => endPool(pool) };
|
|
377
|
+
}
|
|
378
|
+
export function endPool(pool) {
|
|
379
|
+
const clientCount = pool.totalCount;
|
|
380
|
+
if (clientCount === 0) {
|
|
381
|
+
return pool.end();
|
|
382
|
+
}
|
|
383
|
+
return new Promise((resolve, reject) => {
|
|
384
|
+
let removed = 0;
|
|
385
|
+
pool.on("remove", function onRemove() {
|
|
386
|
+
if (++removed >= clientCount) {
|
|
387
|
+
pool.removeListener("remove", onRemove);
|
|
388
|
+
resolve();
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
pool.end().catch(reject);
|
|
392
|
+
});
|
|
393
|
+
}
|