heroku 9.0.0-dev.0 → 9.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -11
- package/lib/commands/access/add.d.ts +14 -0
- package/lib/commands/access/add.js +55 -0
- package/lib/commands/access/index.d.ts +11 -0
- package/lib/commands/access/index.js +86 -0
- package/lib/commands/access/remove.d.ts +12 -0
- package/lib/commands/access/remove.js +25 -0
- package/lib/commands/access/update.d.ts +14 -0
- package/lib/commands/access/update.js +39 -0
- package/lib/commands/addons/attach.d.ts +16 -0
- package/lib/commands/addons/attach.js +51 -0
- package/lib/commands/addons/create.d.ts +20 -0
- package/lib/commands/addons/create.js +96 -0
- package/lib/commands/addons/destroy.d.ts +19 -0
- package/lib/commands/addons/destroy.js +61 -0
- package/lib/commands/addons/detach.d.ts +13 -0
- package/lib/commands/addons/detach.js +31 -0
- package/lib/commands/addons/docs.d.ts +14 -0
- package/lib/commands/addons/docs.js +36 -0
- package/lib/commands/addons/index.d.ts +16 -0
- package/lib/commands/addons/index.js +246 -0
- package/lib/commands/addons/info.d.ts +14 -0
- package/lib/commands/addons/info.js +44 -0
- package/lib/commands/addons/open.d.ts +75 -0
- package/lib/commands/addons/open.js +87 -0
- package/lib/commands/addons/plans.d.ts +12 -0
- package/lib/commands/addons/plans.js +47 -0
- package/lib/commands/addons/rename.d.ts +10 -0
- package/lib/commands/addons/rename.js +20 -0
- package/lib/commands/addons/services.d.ts +9 -0
- package/lib/commands/addons/services.js +34 -0
- package/lib/commands/addons/upgrade.d.ts +28 -0
- package/lib/commands/addons/upgrade.js +145 -0
- package/lib/commands/addons/wait.d.ts +14 -0
- package/lib/commands/addons/wait.js +70 -0
- package/lib/commands/apps/create.d.ts +28 -0
- package/lib/commands/apps/create.js +201 -0
- package/lib/commands/apps/destroy.d.ts +15 -0
- package/lib/commands/apps/destroy.js +47 -0
- package/lib/commands/apps/errors.d.ts +13 -0
- package/lib/commands/apps/errors.js +120 -0
- package/lib/commands/apps/favorites/add.d.ts +2 -1
- package/lib/commands/apps/favorites/add.js +1 -0
- package/lib/commands/apps/favorites/remove.d.ts +2 -1
- package/lib/commands/apps/favorites/remove.js +1 -0
- package/lib/commands/apps/index.d.ts +16 -0
- package/lib/commands/apps/index.js +119 -0
- package/lib/commands/apps/info.d.ts +19 -0
- package/lib/commands/apps/info.js +162 -0
- package/lib/commands/apps/join.d.ts +11 -0
- package/lib/commands/apps/join.js +25 -0
- package/lib/commands/apps/leave.d.ts +12 -0
- package/lib/commands/apps/leave.js +25 -0
- package/lib/commands/apps/lock.d.ts +11 -0
- package/lib/commands/apps/lock.js +30 -0
- package/lib/commands/apps/open.d.ts +15 -0
- package/lib/commands/apps/open.js +30 -0
- package/lib/commands/apps/rename.d.ts +16 -0
- package/lib/commands/apps/rename.js +51 -0
- package/lib/commands/apps/stacks/index.d.ts +3 -2
- package/lib/commands/apps/stacks/index.js +2 -1
- package/lib/commands/apps/stacks/set.d.ts +4 -4
- package/lib/commands/apps/stacks/set.js +1 -1
- package/lib/commands/apps/transfer.d.ts +17 -0
- package/lib/commands/apps/transfer.js +91 -0
- package/lib/commands/apps/unlock.d.ts +11 -0
- package/lib/commands/apps/unlock.js +30 -0
- package/lib/commands/auth/token.js +2 -1
- package/lib/commands/authorizations/create.d.ts +3 -3
- package/lib/commands/authorizations/create.js +5 -1
- package/lib/commands/authorizations/info.d.ts +1 -1
- package/lib/commands/authorizations/info.js +5 -1
- package/lib/commands/authorizations/revoke.d.ts +1 -1
- package/lib/commands/authorizations/revoke.js +5 -1
- package/lib/commands/authorizations/rotate.d.ts +1 -1
- package/lib/commands/authorizations/rotate.js +5 -1
- package/lib/commands/authorizations/update.d.ts +4 -4
- package/lib/commands/authorizations/update.js +5 -1
- package/lib/commands/autocomplete/doctor.js +2 -2
- package/lib/commands/autocomplete/options.d.ts +2 -2
- package/lib/commands/autocomplete/options.js +2 -2
- package/lib/commands/autocomplete/script.d.ts +1 -1
- package/lib/commands/buildpacks/add.d.ts +4 -4
- package/lib/commands/buildpacks/clear.d.ts +2 -2
- package/lib/commands/buildpacks/index.d.ts +2 -2
- package/lib/commands/buildpacks/info.d.ts +1 -1
- package/lib/commands/buildpacks/remove.d.ts +4 -4
- package/lib/commands/buildpacks/search.d.ts +4 -4
- package/lib/commands/buildpacks/set.d.ts +4 -4
- package/lib/commands/buildpacks/versions.d.ts +1 -1
- package/lib/commands/certs/add.d.ts +16 -0
- package/lib/commands/certs/add.js +98 -0
- package/lib/commands/certs/auto/disable.d.ts +11 -0
- package/lib/commands/certs/auto/disable.js +34 -0
- package/lib/commands/certs/auto/enable.d.ts +11 -0
- package/lib/commands/certs/auto/enable.js +51 -0
- package/lib/commands/certs/auto/index.d.ts +12 -0
- package/lib/commands/certs/auto/index.js +94 -0
- package/lib/commands/certs/auto/refresh.d.ts +10 -0
- package/lib/commands/certs/auto/refresh.js +19 -0
- package/lib/commands/certs/generate.d.ts +26 -0
- package/lib/commands/certs/generate.js +111 -0
- package/lib/commands/certs/index.d.ts +10 -0
- package/lib/commands/certs/index.js +26 -0
- package/lib/commands/certs/info.d.ts +13 -0
- package/lib/commands/certs/info.js +43 -0
- package/lib/commands/certs/remove.d.ts +13 -0
- package/lib/commands/certs/remove.js +32 -0
- package/lib/commands/certs/update.d.ts +18 -0
- package/lib/commands/certs/update.js +54 -0
- package/lib/commands/ci/config/get.d.ts +4 -3
- package/lib/commands/ci/config/get.js +3 -2
- package/lib/commands/ci/config/index.d.ts +3 -2
- package/lib/commands/ci/config/index.js +3 -2
- package/lib/commands/ci/config/set.d.ts +3 -2
- package/lib/commands/ci/config/set.js +2 -1
- package/lib/commands/ci/config/unset.d.ts +3 -3
- package/lib/commands/ci/config/unset.js +3 -3
- package/lib/commands/ci/debug.d.ts +2 -2
- package/lib/commands/ci/index.d.ts +3 -2
- package/lib/commands/ci/index.js +1 -0
- package/lib/commands/ci/info.d.ts +5 -4
- package/lib/commands/ci/info.js +1 -0
- package/lib/commands/ci/last.d.ts +4 -3
- package/lib/commands/ci/last.js +1 -0
- package/lib/commands/ci/open.d.ts +3 -2
- package/lib/commands/ci/open.js +1 -0
- package/lib/commands/ci/rerun.d.ts +4 -3
- package/lib/commands/ci/rerun.js +1 -0
- package/lib/commands/ci/run.d.ts +2 -2
- package/lib/commands/clients/create.d.ts +2 -2
- package/lib/commands/clients/destroy.d.ts +1 -1
- package/lib/commands/clients/info.d.ts +1 -1
- package/lib/commands/clients/rotate.d.ts +1 -1
- package/lib/commands/clients/update.d.ts +3 -3
- package/lib/commands/config/edit.d.ts +3 -3
- package/lib/commands/config/get.d.ts +3 -3
- package/lib/commands/config/index.d.ts +2 -2
- package/lib/commands/config/set.d.ts +12 -0
- package/lib/commands/config/set.js +60 -0
- package/lib/commands/config/unset.d.ts +2 -2
- package/lib/commands/console.d.ts +4 -4
- package/lib/commands/container/index.d.ts +6 -0
- package/lib/commands/container/index.js +13 -0
- package/lib/commands/container/login.d.ts +9 -0
- package/lib/commands/container/login.js +57 -0
- package/lib/commands/container/logout.d.ts +9 -0
- package/lib/commands/container/logout.js +37 -0
- package/lib/commands/container/pull.d.ts +14 -0
- package/lib/commands/container/pull.js +43 -0
- package/lib/commands/container/push.d.ts +16 -0
- package/lib/commands/container/push.js +103 -0
- package/lib/commands/container/release.d.ts +14 -0
- package/lib/commands/container/release.js +91 -0
- package/lib/commands/container/rm.d.ts +13 -0
- package/lib/commands/container/rm.js +39 -0
- package/lib/commands/container/run.d.ts +15 -0
- package/lib/commands/container/run.js +66 -0
- package/lib/commands/dashboard.d.ts +7 -0
- package/lib/commands/dashboard.js +164 -0
- package/lib/commands/domains/add.d.ts +4 -4
- package/lib/commands/domains/clear.d.ts +2 -2
- package/lib/commands/domains/index.d.ts +14 -10
- package/lib/commands/domains/index.js +47 -3
- package/lib/commands/domains/info.d.ts +3 -3
- package/lib/commands/domains/remove.d.ts +3 -3
- package/lib/commands/domains/update.d.ts +4 -4
- package/lib/commands/domains/wait.d.ts +3 -3
- package/lib/commands/drains/add.d.ts +12 -0
- package/lib/commands/drains/add.js +23 -0
- package/lib/commands/drains/index.d.ts +11 -0
- package/lib/commands/drains/index.js +50 -0
- package/lib/commands/drains/remove.d.ts +13 -0
- package/lib/commands/drains/remove.js +22 -0
- package/lib/commands/features/disable.d.ts +12 -0
- package/lib/commands/features/disable.js +30 -0
- package/lib/commands/features/enable.d.ts +12 -0
- package/lib/commands/features/enable.js +29 -0
- package/lib/commands/features/index.d.ts +10 -0
- package/lib/commands/features/index.js +37 -0
- package/lib/commands/features/info.d.ts +13 -0
- package/lib/commands/features/info.js +33 -0
- package/lib/commands/git/clone.d.ts +3 -3
- package/lib/commands/git/credentials.d.ts +1 -1
- package/lib/commands/git/remote.d.ts +2 -2
- package/lib/commands/keys/add.d.ts +14 -0
- package/lib/commands/keys/add.js +101 -0
- package/lib/commands/keys/clear.d.ts +5 -0
- package/lib/commands/keys/clear.js +17 -0
- package/lib/commands/keys/index.d.ts +9 -0
- package/lib/commands/keys/index.js +36 -0
- package/lib/commands/keys/remove.d.ts +9 -0
- package/lib/commands/keys/remove.js +29 -0
- package/lib/commands/labs/enable.d.ts +13 -0
- package/lib/commands/labs/enable.js +47 -0
- package/lib/commands/labs/index.d.ts +11 -0
- package/lib/commands/labs/index.js +71 -0
- package/lib/commands/labs/info.d.ts +14 -0
- package/lib/commands/labs/info.js +49 -0
- package/lib/commands/local/index.d.ts +5 -5
- package/lib/commands/local/index.js +8 -3
- package/lib/commands/local/run.d.ts +2 -2
- package/lib/commands/local/run.js +8 -3
- package/lib/commands/logs.d.ts +6 -6
- package/lib/commands/maintenance/index.d.ts +10 -0
- package/lib/commands/maintenance/index.js +19 -0
- package/lib/commands/maintenance/off.d.ts +10 -0
- package/lib/commands/maintenance/off.js +20 -0
- package/lib/commands/maintenance/on.d.ts +10 -0
- package/lib/commands/maintenance/on.js +20 -0
- package/lib/commands/members/add.d.ts +13 -0
- package/lib/commands/members/add.js +33 -0
- package/lib/commands/members/index.d.ts +12 -0
- package/lib/commands/members/index.js +76 -0
- package/lib/commands/members/remove.d.ts +10 -0
- package/lib/commands/members/remove.js +58 -0
- package/lib/commands/members/set.d.ts +11 -0
- package/lib/commands/members/set.js +21 -0
- package/lib/commands/notifications/index.d.ts +13 -0
- package/lib/commands/notifications/index.js +62 -0
- package/lib/commands/orgs/index.d.ts +11 -0
- package/lib/commands/orgs/index.js +27 -0
- package/lib/commands/orgs/open.d.ts +10 -0
- package/lib/commands/orgs/open.js +24 -0
- package/lib/commands/pg/backups/cancel.d.ts +15 -0
- package/lib/commands/pg/backups/cancel.js +49 -0
- package/lib/commands/pg/backups/capture.d.ts +15 -0
- package/lib/commands/pg/backups/capture.js +65 -0
- package/lib/commands/pg/backups/delete.d.ts +15 -0
- package/lib/commands/pg/backups/delete.js +38 -0
- package/lib/commands/pg/backups/download.d.ts +14 -0
- package/lib/commands/pg/backups/download.js +58 -0
- package/lib/commands/pg/backups/index.d.ts +20 -0
- package/lib/commands/pg/backups/index.js +129 -0
- package/lib/commands/pg/backups/info.d.ts +17 -0
- package/lib/commands/pg/backups/info.js +92 -0
- package/lib/commands/pg/backups/restore.d.ts +19 -0
- package/lib/commands/pg/backups/restore.js +107 -0
- package/lib/commands/pg/backups/schedule.d.ts +21 -0
- package/lib/commands/pg/backups/schedule.js +82 -0
- package/lib/commands/pg/backups/schedules.d.ts +10 -0
- package/lib/commands/pg/backups/schedules.js +31 -0
- package/lib/commands/pg/backups/unschedule.d.ts +13 -0
- package/lib/commands/pg/backups/unschedule.js +44 -0
- package/lib/commands/pg/backups/url.d.ts +13 -0
- package/lib/commands/pg/backups/url.js +41 -0
- package/lib/commands/pg/bloat.d.ts +13 -0
- package/lib/commands/pg/bloat.js +87 -0
- package/lib/commands/pg/blocking.d.ts +13 -0
- package/lib/commands/pg/blocking.js +42 -0
- package/lib/commands/pg/connection-pooling/attach.d.ts +15 -0
- package/lib/commands/pg/connection-pooling/attach.js +41 -0
- package/lib/commands/pg/copy.d.ts +18 -0
- package/lib/commands/pg/copy.js +86 -0
- package/lib/commands/pg/credentials/create.d.ts +14 -0
- package/lib/commands/pg/credentials/create.js +40 -0
- package/lib/commands/pg/credentials/destroy.d.ts +16 -0
- package/lib/commands/pg/credentials/destroy.js +48 -0
- package/lib/commands/pg/credentials/repair-default.d.ts +15 -0
- package/lib/commands/pg/credentials/repair-default.js +39 -0
- package/lib/commands/pg/credentials/rotate.d.ts +16 -0
- package/lib/commands/pg/credentials/rotate.js +82 -0
- package/lib/commands/pg/credentials/url.d.ts +14 -0
- package/lib/commands/pg/credentials/url.js +64 -0
- package/lib/commands/pg/credentials.d.ts +16 -0
- package/lib/commands/pg/credentials.js +61 -0
- package/lib/commands/pg/diagnose.d.ts +18 -0
- package/lib/commands/pg/diagnose.js +109 -0
- package/lib/commands/pg/info.d.ts +14 -0
- package/lib/commands/pg/info.js +92 -0
- package/lib/commands/pg/kill.d.ts +15 -0
- package/lib/commands/pg/kill.js +32 -0
- package/lib/commands/pg/killall.d.ts +13 -0
- package/lib/commands/pg/killall.js +26 -0
- package/lib/commands/pg/links/create.d.ts +15 -0
- package/lib/commands/pg/links/create.js +58 -0
- package/lib/commands/pg/links/destroy.d.ts +16 -0
- package/lib/commands/pg/links/destroy.js +42 -0
- package/lib/commands/pg/links/index.d.ts +13 -0
- package/lib/commands/pg/links/index.js +59 -0
- package/lib/commands/pg/locks.d.ts +15 -0
- package/lib/commands/pg/locks.js +53 -0
- package/lib/commands/pg/maintenance/index.d.ts +13 -0
- package/lib/commands/pg/maintenance/index.js +29 -0
- package/lib/commands/pg/maintenance/run.d.ts +14 -0
- package/lib/commands/pg/maintenance/run.js +37 -0
- package/lib/commands/pg/maintenance/window.d.ts +15 -0
- package/lib/commands/pg/maintenance/window.js +41 -0
- package/lib/commands/pg/outliers.d.ts +19 -0
- package/lib/commands/pg/outliers.js +97 -0
- package/lib/commands/pg/promote.d.ts +14 -0
- package/lib/commands/pg/promote.js +169 -0
- package/lib/commands/pg/ps.d.ts +14 -0
- package/lib/commands/pg/ps.js +52 -0
- package/lib/commands/pg/psql.d.ts +16 -0
- package/lib/commands/pg/psql.js +49 -0
- package/lib/commands/pg/pull.d.ts +18 -0
- package/lib/commands/pg/pull.js +87 -0
- package/lib/commands/pg/push.d.ts +18 -0
- package/lib/commands/pg/push.js +84 -0
- package/lib/commands/pg/reset.d.ts +15 -0
- package/lib/commands/pg/reset.js +44 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-analyze.js +32 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-buffers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.d.ts +16 -0
- package/lib/commands/pg/settings/auto-explain/log-min-duration.js +33 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.d.ts +12 -0
- package/lib/commands/pg/settings/auto-explain/log-nested-statements.js +25 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.d.ts +13 -0
- package/lib/commands/pg/settings/auto-explain/log-triggers.js +30 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.d.ts +17 -0
- package/lib/commands/pg/settings/auto-explain/log-verbose.js +33 -0
- package/lib/commands/pg/settings/auto-explain.d.ts +18 -0
- package/lib/commands/pg/settings/auto-explain.js +38 -0
- package/lib/commands/pg/settings/index.d.ts +13 -0
- package/lib/commands/pg/settings/index.js +34 -0
- package/lib/commands/pg/settings/log-connections.d.ts +17 -0
- package/lib/commands/pg/settings/log-connections.js +34 -0
- package/lib/commands/pg/settings/log-lock-waits.d.ts +13 -0
- package/lib/commands/pg/settings/log-lock-waits.js +31 -0
- package/lib/commands/pg/settings/log-min-duration-statement.d.ts +15 -0
- package/lib/commands/pg/settings/log-min-duration-statement.js +33 -0
- package/lib/commands/pg/settings/log-statement.d.ts +12 -0
- package/lib/commands/pg/settings/log-statement.js +30 -0
- package/lib/commands/pg/settings/track-functions.d.ts +12 -0
- package/lib/commands/pg/settings/track-functions.js +29 -0
- package/lib/commands/pg/unfollow.d.ts +14 -0
- package/lib/commands/pg/unfollow.js +40 -0
- package/lib/commands/pg/upgrade.d.ts +15 -0
- package/lib/commands/pg/upgrade.js +58 -0
- package/lib/commands/pg/vacuum-stats.d.ts +13 -0
- package/lib/commands/pg/vacuum-stats.js +65 -0
- package/lib/commands/pg/wait.d.ts +15 -0
- package/lib/commands/pg/wait.js +79 -0
- package/lib/commands/pipelines/add.d.ts +4 -4
- package/lib/commands/pipelines/connect.d.ts +2 -2
- package/lib/commands/pipelines/connect.js +1 -1
- package/lib/commands/pipelines/create.d.ts +5 -5
- package/lib/commands/pipelines/destroy.d.ts +1 -1
- package/lib/commands/pipelines/diff.d.ts +2 -2
- package/lib/commands/pipelines/diff.js +1 -1
- package/lib/commands/pipelines/info.d.ts +1 -1
- package/lib/commands/pipelines/open.d.ts +1 -1
- package/lib/commands/pipelines/promote.d.ts +3 -3
- package/lib/commands/pipelines/remove.d.ts +2 -2
- package/lib/commands/pipelines/rename.d.ts +2 -2
- package/lib/commands/pipelines/setup.d.ts +3 -3
- package/lib/commands/pipelines/transfer.d.ts +3 -3
- package/lib/commands/pipelines/update.d.ts +3 -3
- package/lib/commands/ps/autoscale/disable.d.ts +2 -2
- package/lib/commands/ps/autoscale/enable.d.ts +5 -5
- package/lib/commands/ps/index.d.ts +15 -0
- package/lib/commands/ps/index.js +195 -0
- package/lib/commands/ps/restart.d.ts +17 -0
- package/lib/commands/ps/restart.js +38 -0
- package/lib/commands/ps/scale.d.ts +13 -0
- package/lib/commands/ps/scale.js +108 -0
- package/lib/commands/ps/stop.d.ts +17 -0
- package/lib/commands/ps/stop.js +33 -0
- package/lib/commands/ps/type.d.ts +12 -0
- package/lib/commands/ps/type.js +163 -0
- package/lib/commands/ps/wait.d.ts +4 -4
- package/lib/commands/rake.d.ts +4 -4
- package/lib/commands/redis/cli.d.ts +15 -0
- package/lib/commands/redis/cli.js +204 -0
- package/lib/commands/redis/credentials.d.ts +14 -0
- package/lib/commands/redis/credentials.js +32 -0
- package/lib/commands/redis/info.d.ts +15 -0
- package/lib/commands/redis/info.js +25 -0
- package/lib/commands/redis/keyspace-notifications.d.ts +14 -0
- package/lib/commands/redis/keyspace-notifications.js +47 -0
- package/lib/commands/redis/maintenance.d.ts +16 -0
- package/lib/commands/redis/maintenance.js +63 -0
- package/lib/commands/redis/maxmemory.d.ts +14 -0
- package/lib/commands/redis/maxmemory.js +40 -0
- package/lib/commands/redis/promote.d.ts +13 -0
- package/lib/commands/redis/promote.js +39 -0
- package/lib/commands/redis/stats-reset.d.ts +14 -0
- package/lib/commands/redis/stats-reset.js +36 -0
- package/lib/commands/redis/timeout.d.ts +14 -0
- package/lib/commands/redis/timeout.js +35 -0
- package/lib/commands/redis/upgrade.d.ts +15 -0
- package/lib/commands/redis/upgrade.js +37 -0
- package/lib/commands/redis/wait.d.ts +14 -0
- package/lib/commands/redis/wait.js +60 -0
- package/lib/commands/releases/index.d.ts +14 -0
- package/lib/commands/releases/index.js +124 -0
- package/lib/commands/releases/info.d.ts +15 -0
- package/lib/commands/releases/info.js +56 -0
- package/lib/commands/releases/output.d.ts +13 -0
- package/lib/commands/releases/output.js +37 -0
- package/lib/commands/releases/rollback.d.ts +14 -0
- package/lib/commands/releases/rollback.js +48 -0
- package/lib/commands/reviewapps/disable.d.ts +3 -3
- package/lib/commands/reviewapps/enable.d.ts +3 -3
- package/lib/commands/run/detached.d.ts +7 -8
- package/lib/commands/run/detached.js +16 -20
- package/lib/commands/run/index.d.ts +10 -11
- package/lib/commands/run/index.js +16 -17
- package/lib/commands/run/inside.d.ts +5 -7
- package/lib/commands/run/inside.js +10 -14
- package/lib/commands/sessions/destroy.d.ts +1 -1
- package/lib/commands/spaces/create.d.ts +22 -0
- package/lib/commands/spaces/create.js +73 -0
- package/lib/commands/spaces/destroy.d.ts +14 -0
- package/lib/commands/spaces/destroy.js +49 -0
- package/lib/commands/spaces/drains/get.d.ts +12 -0
- package/lib/commands/spaces/drains/get.js +27 -0
- package/lib/commands/spaces/drains/set.d.ts +14 -0
- package/lib/commands/spaces/drains/set.js +29 -0
- package/lib/commands/spaces/hosts.d.ts +14 -0
- package/lib/commands/spaces/hosts.js +37 -0
- package/lib/commands/spaces/index.d.ts +16 -0
- package/lib/commands/spaces/index.js +55 -0
- package/lib/commands/spaces/info.d.ts +14 -0
- package/lib/commands/spaces/info.js +47 -0
- package/lib/commands/spaces/peerings/accept.d.ts +15 -0
- package/lib/commands/spaces/peerings/accept.js +36 -0
- package/lib/commands/spaces/peerings/destroy.d.ts +15 -0
- package/lib/commands/spaces/peerings/destroy.js +45 -0
- package/lib/commands/spaces/peerings/index.d.ts +13 -0
- package/lib/commands/spaces/peerings/index.js +33 -0
- package/lib/commands/spaces/peerings/info.d.ts +15 -0
- package/lib/commands/spaces/peerings/info.js +59 -0
- package/lib/commands/spaces/ps.d.ts +15 -0
- package/lib/commands/spaces/ps.js +82 -0
- package/lib/commands/spaces/rename.d.ts +11 -0
- package/lib/commands/spaces/rename.js +26 -0
- package/lib/commands/spaces/topology.d.ts +32 -0
- package/lib/commands/spaces/topology.js +89 -0
- package/lib/commands/spaces/transfer.d.ts +11 -0
- package/lib/commands/spaces/transfer.js +35 -0
- package/lib/commands/spaces/trusted-ips/add.d.ts +16 -0
- package/lib/commands/spaces/trusted-ips/add.js +43 -0
- package/lib/commands/spaces/trusted-ips/index.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/index.js +52 -0
- package/lib/commands/spaces/trusted-ips/remove.d.ts +15 -0
- package/lib/commands/spaces/trusted-ips/remove.js +44 -0
- package/lib/commands/spaces/vpn/config.d.ts +14 -0
- package/lib/commands/spaces/vpn/config.js +54 -0
- package/lib/commands/spaces/vpn/connect.d.ts +15 -0
- package/lib/commands/spaces/vpn/connect.js +48 -0
- package/lib/commands/spaces/vpn/connections.d.ts +17 -0
- package/lib/commands/spaces/vpn/connections.js +57 -0
- package/lib/commands/spaces/vpn/destroy.d.ts +14 -0
- package/lib/commands/spaces/vpn/destroy.js +38 -0
- package/lib/commands/spaces/vpn/info.d.ts +16 -0
- package/lib/commands/spaces/vpn/info.js +82 -0
- package/lib/commands/spaces/vpn/update.d.ts +14 -0
- package/lib/commands/spaces/vpn/update.js +39 -0
- package/lib/commands/spaces/vpn/wait.d.ts +16 -0
- package/lib/commands/spaces/vpn/wait.js +70 -0
- package/lib/commands/spaces/wait.d.ts +17 -0
- package/lib/commands/spaces/wait.js +89 -0
- package/lib/commands/status.js +4 -4
- package/lib/commands/teams/index.d.ts +9 -0
- package/lib/commands/teams/index.js +29 -0
- package/lib/commands/webhooks/add.d.ts +8 -8
- package/lib/commands/webhooks/deliveries/index.d.ts +4 -4
- package/lib/commands/webhooks/deliveries/info.d.ts +4 -4
- package/lib/commands/webhooks/events/index.d.ts +3 -3
- package/lib/commands/webhooks/events/info.d.ts +4 -4
- package/lib/commands/webhooks/index.d.ts +3 -3
- package/lib/commands/webhooks/info.d.ts +4 -4
- package/lib/commands/webhooks/remove.d.ts +4 -4
- package/lib/commands/webhooks/update.d.ts +9 -9
- package/lib/global_telemetry.js +10 -4
- package/lib/hooks/postrun/performance_analytics.js +5 -4
- package/lib/hooks/prerun/analytics.js +3 -0
- package/lib/lib/addons/addons_wait.d.ts +78 -0
- package/lib/lib/addons/addons_wait.js +56 -0
- package/lib/lib/addons/create_addon.d.ts +7 -0
- package/lib/lib/addons/create_addon.js +59 -0
- package/lib/lib/addons/destroy_addon.d.ts +3 -0
- package/lib/lib/addons/destroy_addon.js +48 -0
- package/lib/lib/addons/resolve.d.ts +39 -0
- package/lib/lib/addons/resolve.js +180 -0
- package/lib/lib/addons/util.d.ts +9 -0
- package/lib/lib/addons/util.js +72 -0
- package/lib/lib/apps/app-transfer.d.ts +10 -0
- package/lib/lib/apps/app-transfer.js +35 -0
- package/lib/lib/apps/error_info.d.ts +7 -0
- package/lib/lib/apps/error_info.js +185 -0
- package/lib/lib/autocomplete/base.d.ts +1 -1
- package/lib/lib/autocomplete/completions.d.ts +5 -1
- package/lib/lib/autocomplete/completions.js +6 -1
- package/lib/lib/certs/certificate_details.d.ts +2 -0
- package/lib/lib/certs/certificate_details.js +37 -0
- package/lib/lib/certs/display_table.d.ts +2 -0
- package/lib/lib/certs/display_table.js +51 -0
- package/lib/lib/certs/domains.d.ts +3 -0
- package/lib/lib/certs/domains.js +45 -0
- package/lib/lib/certs/flags.d.ts +7 -0
- package/lib/lib/certs/flags.js +42 -0
- package/lib/lib/certs/format_date.d.ts +1 -0
- package/lib/lib/certs/format_date.js +11 -0
- package/lib/lib/certs/get_cert_and_key.d.ts +9 -0
- package/lib/lib/certs/get_cert_and_key.js +11 -0
- package/lib/lib/ci/git.d.ts +7 -1
- package/lib/lib/ci/git.js +44 -1
- package/lib/lib/ci/interfaces/kolkrabbi.d.ts +1 -1
- package/lib/lib/ci/source.js +3 -3
- package/lib/lib/ci/test-run.js +2 -2
- package/lib/lib/config/quote.js +1 -1
- package/lib/lib/confirmCommand.d.ts +1 -0
- package/lib/lib/confirmCommand.js +23 -0
- package/lib/lib/container/debug.d.ts +2 -0
- package/lib/lib/container/debug.js +5 -0
- package/lib/lib/container/docker_helper.d.ts +24 -0
- package/lib/lib/container/docker_helper.js +168 -0
- package/lib/lib/container/helpers.d.ts +8 -0
- package/lib/lib/container/helpers.js +29 -0
- package/lib/lib/container/streamer.d.ts +1 -0
- package/lib/lib/container/streamer.js +31 -0
- package/lib/lib/domains/domains.d.ts +6 -0
- package/lib/lib/domains/domains.js +104 -0
- package/lib/lib/git/git.d.ts +3 -0
- package/lib/lib/git/git.js +22 -3
- package/lib/lib/local/run-foreman.d.ts +1 -0
- package/lib/lib/local/run-foreman.js +229 -1
- package/lib/lib/members/util.d.ts +3 -0
- package/lib/lib/members/util.js +25 -0
- package/lib/lib/members/utils.d.ts +2 -0
- package/lib/lib/members/utils.js +14 -0
- package/lib/lib/notify.d.ts +1 -0
- package/lib/lib/notify.js +23 -0
- package/lib/lib/orgs/utils.d.ts +5 -0
- package/lib/lib/orgs/utils.js +24 -0
- package/lib/lib/pg/backups.d.ts +17 -0
- package/lib/lib/pg/backups.js +164 -0
- package/lib/lib/pg/bastion.d.ts +29 -0
- package/lib/lib/pg/bastion.js +121 -0
- package/lib/lib/pg/config.d.ts +2 -0
- package/lib/lib/pg/config.js +13 -0
- package/lib/lib/pg/download.d.ts +5 -0
- package/lib/lib/pg/download.js +34 -0
- package/lib/lib/pg/fetcher.d.ts +39 -0
- package/lib/lib/pg/fetcher.js +137 -0
- package/lib/lib/pg/host.d.ts +1 -0
- package/lib/lib/pg/host.js +7 -0
- package/lib/lib/pg/psql.d.ts +48 -0
- package/lib/lib/pg/psql.js +252 -0
- package/lib/lib/pg/push_pull.d.ts +13 -0
- package/lib/lib/pg/push_pull.js +118 -0
- package/lib/lib/pg/setter.d.ts +16 -0
- package/lib/lib/pg/setter.js +65 -0
- package/lib/lib/pg/types.d.ts +230 -0
- package/lib/lib/pg/types.js +2 -0
- package/lib/lib/pg/util.d.ts +36 -0
- package/lib/lib/pg/util.js +183 -0
- package/lib/lib/redis/api.d.ts +65 -0
- package/lib/lib/redis/api.js +122 -0
- package/lib/lib/releases/output.d.ts +1 -0
- package/lib/lib/releases/output.js +14 -0
- package/lib/lib/releases/releases.d.ts +6 -0
- package/lib/lib/releases/releases.js +32 -0
- package/lib/lib/releases/status_helper.d.ts +5 -0
- package/lib/lib/releases/status_helper.js +25 -0
- package/lib/lib/run/dyno.js +2 -2
- package/lib/lib/run/log-displayer.d.ts +1 -1
- package/lib/lib/spaces/format.d.ts +4 -0
- package/lib/lib/spaces/format.js +60 -0
- package/lib/lib/spaces/hosts.d.ts +9 -0
- package/lib/lib/spaces/hosts.js +34 -0
- package/lib/lib/spaces/outbound-rules.d.ts +4 -0
- package/lib/lib/spaces/outbound-rules.js +78 -0
- package/lib/lib/spaces/parsers.d.ts +8 -0
- package/lib/lib/spaces/parsers.js +17 -0
- package/lib/lib/spaces/peering.d.ts +4 -0
- package/lib/lib/spaces/peering.js +53 -0
- package/lib/lib/spaces/spaces.d.ts +4 -0
- package/lib/lib/spaces/spaces.js +37 -0
- package/lib/lib/spaces/vpn-connections.d.ts +2 -0
- package/lib/lib/spaces/vpn-connections.js +22 -0
- package/lib/lib/teamUtils.d.ts +3 -0
- package/lib/lib/teamUtils.js +18 -0
- package/lib/lib/time.d.ts +2 -0
- package/lib/lib/time.js +29 -0
- package/lib/lib/types/app_errors.d.ts +6 -0
- package/lib/lib/types/app_errors.js +2 -0
- package/lib/lib/types/domain.d.ts +61 -0
- package/lib/lib/types/domain.js +5 -0
- package/lib/lib/types/notifications.d.ts +20 -0
- package/lib/lib/types/notifications.js +2 -0
- package/lib/lib/utils/keyValueParser.d.ts +4 -0
- package/lib/lib/utils/keyValueParser.js +9 -0
- package/lib/lib/utils/multisort.d.ts +32 -0
- package/lib/lib/utils/multisort.js +66 -0
- package/lib/lib/utils/paginator.d.ts +2 -0
- package/lib/lib/utils/paginator.js +29 -0
- package/lib/lib/utils/uuid-validate.d.ts +1 -0
- package/lib/lib/utils/uuid-validate.js +7 -0
- package/lib/user-config.js +2 -2
- package/oclif.manifest.json +12684 -2674
- package/package.json +116 -65
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable complexity */
|
|
4
|
+
const color_1 = require("@heroku-cli/color");
|
|
5
|
+
const command_1 = require("@heroku-cli/command");
|
|
6
|
+
const core_1 = require("@oclif/core");
|
|
7
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
8
|
+
const fetcher_1 = require("../../lib/pg/fetcher");
|
|
9
|
+
const host_1 = require("../../lib/pg/host");
|
|
10
|
+
class Promote extends command_1.Command {
|
|
11
|
+
async run() {
|
|
12
|
+
var _a, _b, _c;
|
|
13
|
+
const { flags, args } = await this.parse(Promote);
|
|
14
|
+
const { force, app } = flags;
|
|
15
|
+
const { database } = args;
|
|
16
|
+
const attachment = await (0, fetcher_1.getAttachment)(this.heroku, app, database);
|
|
17
|
+
core_1.ux.action.start(`Ensuring an alternate alias for existing ${color_1.default.green('DATABASE_URL')}`);
|
|
18
|
+
const { body: attachments } = await this.heroku.get(`/apps/${app}/addon-attachments`);
|
|
19
|
+
const current = attachments.find(a => a.name === 'DATABASE');
|
|
20
|
+
if (!current)
|
|
21
|
+
return;
|
|
22
|
+
// eslint-disable-next-line eqeqeq
|
|
23
|
+
if (((_a = current.addon) === null || _a === void 0 ? void 0 : _a.name) === attachment.addon.name && current.namespace == attachment.namespace) {
|
|
24
|
+
if (attachment.namespace) {
|
|
25
|
+
core_1.ux.error(`${color_1.default.cyan(attachment.name)} is already promoted on ${color_1.default.app(app)}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
core_1.ux.error(`${color_1.default.addon(attachment.addon.name)} is already promoted on ${color_1.default.app(app)}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const existing = attachments.filter(a => { var _a, _b; return ((_a = a.addon) === null || _a === void 0 ? void 0 : _a.id) === ((_b = current.addon) === null || _b === void 0 ? void 0 : _b.id) && a.namespace === current.namespace; })
|
|
32
|
+
.find(a => a.name !== 'DATABASE');
|
|
33
|
+
if (existing) {
|
|
34
|
+
core_1.ux.action.stop(color_1.default.green(existing.name + '_URL'));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// The current add-on occupying the DATABASE attachment has no
|
|
38
|
+
// other attachments. In order to promote this database without
|
|
39
|
+
// error, we can create a secondary attachment, just-in-time.
|
|
40
|
+
const { body: backup } = await this.heroku.post('/addon-attachments', {
|
|
41
|
+
body: {
|
|
42
|
+
app: { name: app },
|
|
43
|
+
addon: { name: (_b = current.addon) === null || _b === void 0 ? void 0 : _b.name },
|
|
44
|
+
namespace: current.namespace,
|
|
45
|
+
confirm: app,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
core_1.ux.action.stop(color_1.default.green(backup.name + '_URL'));
|
|
49
|
+
}
|
|
50
|
+
if (!force) {
|
|
51
|
+
const { body: status } = await this.heroku.get(`/client/v11/databases/${attachment.addon.id}/wait_status`, {
|
|
52
|
+
hostname: (0, host_1.default)(),
|
|
53
|
+
});
|
|
54
|
+
if (status['waiting?']) {
|
|
55
|
+
core_1.ux.error((0, tsheredoc_1.default)(`
|
|
56
|
+
Database cannot be promoted while in state: ${status.message}
|
|
57
|
+
|
|
58
|
+
Promoting this database can lead to application errors and outage. Please run ${color_1.default.cmd('heroku pg:wait')} to wait for database to become available.
|
|
59
|
+
|
|
60
|
+
To ignore this error, you can pass the --force flag to promote the database and risk application issues.
|
|
61
|
+
`));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
let promotionMessage;
|
|
65
|
+
if (attachment.namespace) {
|
|
66
|
+
promotionMessage = `Promoting ${color_1.default.cyan(attachment.name)} to ${color_1.default.green('DATABASE_URL')} on ${color_1.default.app(app)}`;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
promotionMessage = `Promoting ${color_1.default.addon(attachment.addon.name)} to ${color_1.default.green('DATABASE_URL')} on ${color_1.default.app(app)}`;
|
|
70
|
+
}
|
|
71
|
+
core_1.ux.action.start(promotionMessage);
|
|
72
|
+
await this.heroku.post('/addon-attachments', {
|
|
73
|
+
body: {
|
|
74
|
+
name: 'DATABASE',
|
|
75
|
+
app: { name: app },
|
|
76
|
+
addon: { name: attachment.addon.name },
|
|
77
|
+
namespace: attachment.namespace || null,
|
|
78
|
+
confirm: app,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
core_1.ux.action.stop();
|
|
82
|
+
const currentPooler = attachments.find(a => { var _a, _b; return a.namespace === 'connection-pooling:default' && ((_a = a.addon) === null || _a === void 0 ? void 0 : _a.id) === ((_b = current.addon) === null || _b === void 0 ? void 0 : _b.id) && a.name === 'DATABASE_CONNECTION_POOL'; });
|
|
83
|
+
if (currentPooler) {
|
|
84
|
+
core_1.ux.action.start('Reattaching pooler to new leader');
|
|
85
|
+
await this.heroku.post('/addon-attachments', {
|
|
86
|
+
body: {
|
|
87
|
+
name: currentPooler.name,
|
|
88
|
+
app: { name: app },
|
|
89
|
+
addon: { name: attachment.addon.name },
|
|
90
|
+
namespace: 'connection-pooling:default',
|
|
91
|
+
confirm: app,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
core_1.ux.action.stop();
|
|
95
|
+
}
|
|
96
|
+
const { body: promotedDatabaseDetails } = await this.heroku.get(`/client/v11/databases/${attachment.addon.id}`, {
|
|
97
|
+
hostname: (0, host_1.default)(),
|
|
98
|
+
});
|
|
99
|
+
if (promotedDatabaseDetails.following) {
|
|
100
|
+
const unfollowLeaderCmd = `heroku pg:unfollow ${attachment.addon.name}`;
|
|
101
|
+
core_1.ux.warn((0, tsheredoc_1.default)(`
|
|
102
|
+
Your database has been promoted but it is currently a follower database in read-only mode.
|
|
103
|
+
|
|
104
|
+
Promoting a database with ${color_1.default.cmd('heroku pg:promote')} doesn't automatically unfollow its leader.
|
|
105
|
+
|
|
106
|
+
Use ${color_1.default.cmd(unfollowLeaderCmd)} to stop this follower from replicating from its leader (${color_1.default.yellow(promotedDatabaseDetails.leader)}) and convert it into a writable database.
|
|
107
|
+
`));
|
|
108
|
+
}
|
|
109
|
+
const { body: formation } = await this.heroku.get(`/apps/${app}/formation`);
|
|
110
|
+
const releasePhase = formation.find(process => process.type === 'release');
|
|
111
|
+
if (releasePhase) {
|
|
112
|
+
core_1.ux.action.start('Checking release phase');
|
|
113
|
+
const { body: releases } = await this.heroku.get(`/apps/${app}/releases`, {
|
|
114
|
+
partial: true,
|
|
115
|
+
headers: {
|
|
116
|
+
Range: 'version ..; max=5, order=desc',
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
const attach = releases.find(release => { var _a; return (_a = release.description) === null || _a === void 0 ? void 0 : _a.includes('Attach DATABASE'); });
|
|
120
|
+
const detach = releases.find(release => { var _a; return (_a = release.description) === null || _a === void 0 ? void 0 : _a.includes('Detach DATABASE'); });
|
|
121
|
+
if (!attach || !detach) {
|
|
122
|
+
core_1.ux.error('Unable to check release phase. Check your Attach DATABASE release for failures.');
|
|
123
|
+
}
|
|
124
|
+
const endTime = Date.now() + 900000; // 15 minutes from now
|
|
125
|
+
const [attachId, detachId] = [attach === null || attach === void 0 ? void 0 : attach.id, detach === null || detach === void 0 ? void 0 : detach.id];
|
|
126
|
+
while (true) {
|
|
127
|
+
const attach = await (0, fetcher_1.getRelease)(this.heroku, app, attachId);
|
|
128
|
+
if (attach && attach.status === 'succeeded') {
|
|
129
|
+
let msg = 'pg:promote succeeded.';
|
|
130
|
+
const detach = await (0, fetcher_1.getRelease)(this.heroku, app, detachId);
|
|
131
|
+
if (detach && detach.status === 'failed') {
|
|
132
|
+
msg += ` It is safe to ignore the failed ${detach.description} release.`;
|
|
133
|
+
}
|
|
134
|
+
core_1.ux.action.stop(msg);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (attach && attach.status === 'failed') {
|
|
138
|
+
let msg = `pg:promote failed because ${attach.description} release was unsuccessful. Your application is currently running `;
|
|
139
|
+
const detach = await (0, fetcher_1.getRelease)(this.heroku, app, detachId);
|
|
140
|
+
if (detach && detach.status === 'succeeded') {
|
|
141
|
+
msg += 'without an attached DATABASE_URL.';
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
msg += `with ${(_c = current.addon) === null || _c === void 0 ? void 0 : _c.name} attached as DATABASE_URL.`;
|
|
145
|
+
}
|
|
146
|
+
msg += ' Check your release phase logs for failure causes.';
|
|
147
|
+
core_1.ux.action.stop(msg);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (Date.now() > endTime) {
|
|
151
|
+
core_1.ux.action.stop('timeout. Check your Attach DATABASE release for failures.');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.default = Promote;
|
|
160
|
+
Promote.topic = 'pg';
|
|
161
|
+
Promote.description = 'sets DATABASE as your DATABASE_URL';
|
|
162
|
+
Promote.flags = {
|
|
163
|
+
force: command_1.flags.boolean({ char: 'f' }),
|
|
164
|
+
app: command_1.flags.app({ required: true }),
|
|
165
|
+
remote: command_1.flags.remote(),
|
|
166
|
+
};
|
|
167
|
+
Promote.args = {
|
|
168
|
+
database: core_1.Args.string({ required: true }),
|
|
169
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Ps extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const command_1 = require("@heroku-cli/command");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
6
|
+
const fetcher_1 = require("../../lib/pg/fetcher");
|
|
7
|
+
const psql_1 = require("../../lib/pg/psql");
|
|
8
|
+
class Ps extends command_1.Command {
|
|
9
|
+
async run() {
|
|
10
|
+
const { flags, args } = await this.parse(Ps);
|
|
11
|
+
const { database: databaseName } = args;
|
|
12
|
+
const { verbose, app } = flags;
|
|
13
|
+
const db = await (0, fetcher_1.database)(this.heroku, app, databaseName);
|
|
14
|
+
const num = Math.random();
|
|
15
|
+
const waitingMarker = `${num}${num}`;
|
|
16
|
+
const waitingQuery = (0, tsheredoc_1.default)(`
|
|
17
|
+
SELECT '${num}' || '${num}'
|
|
18
|
+
WHERE EXISTS
|
|
19
|
+
(SELECT 1
|
|
20
|
+
FROM information_schema.columns
|
|
21
|
+
WHERE table_schema = 'pg_catalog'
|
|
22
|
+
AND TABLE_NAME = 'pg_stat_activity'
|
|
23
|
+
AND COLUMN_NAME = 'waiting')
|
|
24
|
+
`);
|
|
25
|
+
const waitingOutput = await (0, psql_1.exec)(db, waitingQuery);
|
|
26
|
+
const waiting = waitingOutput.includes(waitingMarker) ? 'waiting' : 'wait_event IS NOT NULL AS waiting';
|
|
27
|
+
const query = (0, tsheredoc_1.default)(`SELECT pid,
|
|
28
|
+
state,
|
|
29
|
+
application_name AS SOURCE,
|
|
30
|
+
usename AS username,
|
|
31
|
+
age(now(), xact_start) AS running_for,
|
|
32
|
+
xact_start AS transaction_start, ${waiting}, query
|
|
33
|
+
FROM pg_stat_activity
|
|
34
|
+
WHERE query <> '<insufficient privilege>' ${verbose ? '' : "AND state <> 'idle'"}
|
|
35
|
+
AND pid <> pg_backend_pid()
|
|
36
|
+
ORDER BY query_start DESC
|
|
37
|
+
`);
|
|
38
|
+
const output = await (0, psql_1.exec)(db, query);
|
|
39
|
+
process.stdout.write(output);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.default = Ps;
|
|
43
|
+
Ps.topic = 'pg';
|
|
44
|
+
Ps.description = 'view active queries with execution time';
|
|
45
|
+
Ps.flags = {
|
|
46
|
+
verbose: command_1.flags.boolean({ char: 'v' }),
|
|
47
|
+
app: command_1.flags.app({ required: true }),
|
|
48
|
+
remote: command_1.flags.remote(),
|
|
49
|
+
};
|
|
50
|
+
Ps.args = {
|
|
51
|
+
database: core_1.Args.string(),
|
|
52
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Psql extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
command: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
6
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
credential: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
static args: {
|
|
12
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
13
|
+
};
|
|
14
|
+
static aliases: string[];
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const fetcher_1 = require("../../lib/pg/fetcher");
|
|
7
|
+
const psql_1 = require("../../lib/pg/psql");
|
|
8
|
+
class Psql extends command_1.Command {
|
|
9
|
+
async run() {
|
|
10
|
+
const { flags, args } = await this.parse(Psql);
|
|
11
|
+
const { app, command, credential, file } = flags;
|
|
12
|
+
const namespace = credential ? `credential:${credential}` : undefined;
|
|
13
|
+
let db;
|
|
14
|
+
try {
|
|
15
|
+
db = await (0, fetcher_1.database)(this.heroku, app, args.database, namespace);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (namespace && error instanceof Error && error.message === "Couldn't find that addon.") {
|
|
19
|
+
throw new Error("Credential doesn't match, make sure credential is attached");
|
|
20
|
+
}
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
console.error(`--> Connecting to ${color_1.default.yellow(db.attachment.addon.name)}`);
|
|
24
|
+
if (command) {
|
|
25
|
+
const output = await (0, psql_1.exec)(db, command);
|
|
26
|
+
process.stdout.write(output);
|
|
27
|
+
}
|
|
28
|
+
else if (file) {
|
|
29
|
+
const output = await (0, psql_1.execFile)(db, file);
|
|
30
|
+
process.stdout.write(output);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
await (0, psql_1.interactive)(db);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.default = Psql;
|
|
38
|
+
Psql.description = 'open a psql shell to the database';
|
|
39
|
+
Psql.flags = {
|
|
40
|
+
command: command_1.flags.string({ char: 'c', description: 'SQL command to run' }),
|
|
41
|
+
file: command_1.flags.string({ char: 'f', description: 'SQL file to run' }),
|
|
42
|
+
credential: command_1.flags.string({ description: 'credential to use' }),
|
|
43
|
+
app: command_1.flags.app({ required: true }),
|
|
44
|
+
remote: command_1.flags.remote(),
|
|
45
|
+
};
|
|
46
|
+
Psql.args = {
|
|
47
|
+
database: core_1.Args.string(),
|
|
48
|
+
};
|
|
49
|
+
Psql.aliases = ['psql'];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
import { ConnectionDetails } from '../../lib/pg/util';
|
|
3
|
+
export default class Pull extends Command {
|
|
4
|
+
static topic: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static flags: {
|
|
8
|
+
'exclude-table-data': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
static args: {
|
|
13
|
+
source: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
14
|
+
target: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
protected pull(sourceIn: ConnectionDetails, targetIn: ConnectionDetails, exclusions: string[]): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
7
|
+
const fetcher_1 = require("../../lib/pg/fetcher");
|
|
8
|
+
const util_1 = require("../../lib/pg/util");
|
|
9
|
+
const push_pull_1 = require("../../lib/pg/push_pull");
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const env = process.env;
|
|
12
|
+
class Pull extends command_1.Command {
|
|
13
|
+
async run() {
|
|
14
|
+
const { flags, args } = await this.parse(Pull);
|
|
15
|
+
const { app, 'exclude-table-data': excludeTableData } = flags;
|
|
16
|
+
const exclusions = (0, push_pull_1.parseExclusions)(excludeTableData);
|
|
17
|
+
const source = await (0, fetcher_1.database)(this.heroku, app, args.source);
|
|
18
|
+
const target = (0, util_1.parsePostgresConnectionString)(args.target);
|
|
19
|
+
core_1.ux.log(`Pulling ${color_1.default.cyan(source.attachment.addon.name)} to ${color_1.default.addon(args.target)}`);
|
|
20
|
+
await this.pull(source, target, exclusions);
|
|
21
|
+
core_1.ux.log('Pulling complete.');
|
|
22
|
+
}
|
|
23
|
+
async pull(sourceIn, targetIn, exclusions) {
|
|
24
|
+
await (0, push_pull_1.prepare)(targetIn);
|
|
25
|
+
const source = await (0, push_pull_1.maybeTunnel)(sourceIn);
|
|
26
|
+
const target = await (0, push_pull_1.maybeTunnel)(targetIn);
|
|
27
|
+
const exclude = exclusions.map(function (e) {
|
|
28
|
+
return '--exclude-table-data=' + e;
|
|
29
|
+
}).join(' ');
|
|
30
|
+
const dumpFlags = ['--verbose', '-F', 'c', '-Z', '0', '-N', '_heroku', ...(0, push_pull_1.connArgs)(source, true)];
|
|
31
|
+
if (exclude !== '')
|
|
32
|
+
dumpFlags.push(exclude);
|
|
33
|
+
const dumpOptions = {
|
|
34
|
+
env: Object.assign({ PGSSLMODE: 'prefer' }, env),
|
|
35
|
+
stdio: ['pipe', 'pipe', 2],
|
|
36
|
+
shell: true,
|
|
37
|
+
};
|
|
38
|
+
if (source.password)
|
|
39
|
+
dumpOptions.env.PGPASSWORD = source.password;
|
|
40
|
+
const restoreFlags = ['--verbose', '-F', 'c', '--no-acl', '--no-owner', ...(0, push_pull_1.connArgs)(target)];
|
|
41
|
+
const restoreOptions = {
|
|
42
|
+
env: Object.assign({}, env),
|
|
43
|
+
stdio: ['pipe', 'pipe', 2],
|
|
44
|
+
shell: true,
|
|
45
|
+
};
|
|
46
|
+
if (target.password)
|
|
47
|
+
restoreOptions.env.PGPASSWORD = target.password;
|
|
48
|
+
const pgDump = (0, node_child_process_1.spawn)('pg_dump', dumpFlags, dumpOptions);
|
|
49
|
+
const pgRestore = (0, node_child_process_1.spawn)('pg_restore', restoreFlags, restoreOptions);
|
|
50
|
+
await (0, push_pull_1.spawnPipe)(pgDump, pgRestore);
|
|
51
|
+
if (source._tunnel)
|
|
52
|
+
source._tunnel.close();
|
|
53
|
+
if (target._tunnel)
|
|
54
|
+
target._tunnel.close();
|
|
55
|
+
await (0, push_pull_1.verifyExtensionsMatch)(sourceIn, targetIn);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.default = Pull;
|
|
59
|
+
Pull.topic = 'pg';
|
|
60
|
+
Pull.description = (0, tsheredoc_1.default) `
|
|
61
|
+
pull Heroku database into local or remote database
|
|
62
|
+
Pull from SOURCE into TARGET.
|
|
63
|
+
|
|
64
|
+
TARGET must be one of:
|
|
65
|
+
* a database name (i.e. on a local PostgreSQL server) => TARGET must not exist and will be created
|
|
66
|
+
* a fully qualified URL to a local PostgreSQL server => TARGET must not exist and will be created
|
|
67
|
+
* a fully qualified URL to a remote PostgreSQL server => TARGET must exist and be empty
|
|
68
|
+
|
|
69
|
+
To delete a local database run ${color_1.default.cmd('dropdb TARGET')}.
|
|
70
|
+
To create an empty remote database, run ${color_1.default.cmd('createdb')} with connection command-line options (run ${color_1.default.cmd('createdb --help')} for details).
|
|
71
|
+
`;
|
|
72
|
+
Pull.examples = [(0, tsheredoc_1.default) `
|
|
73
|
+
# pull Heroku DB named postgresql-swimmingly-100 into local DB mylocaldb that must not exist
|
|
74
|
+
$ heroku pg:pull postgresql-swimmingly-100 mylocaldb --app sushi
|
|
75
|
+
`, (0, tsheredoc_1.default) `
|
|
76
|
+
# pull Heroku DB named postgresql-swimmingly-100 into empty remote DB at postgres://myhost/mydb
|
|
77
|
+
$ heroku pg:pull postgresql-swimmingly-100 postgres://myhost/mydb --app sushi
|
|
78
|
+
`];
|
|
79
|
+
Pull.flags = {
|
|
80
|
+
'exclude-table-data': command_1.flags.string({ description: 'tables for which data should be excluded (use \';\' to split multiple names)', hasValue: true }),
|
|
81
|
+
app: command_1.flags.app({ required: true }),
|
|
82
|
+
remote: command_1.flags.remote(),
|
|
83
|
+
};
|
|
84
|
+
Pull.args = {
|
|
85
|
+
source: core_1.Args.string({ required: true }),
|
|
86
|
+
target: core_1.Args.string({ required: true }),
|
|
87
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
import { ConnectionDetails } from '../../lib/pg/util';
|
|
3
|
+
export default class Push extends Command {
|
|
4
|
+
static topic: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static flags: {
|
|
8
|
+
'exclude-table-data': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
static args: {
|
|
13
|
+
source: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
14
|
+
target: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
protected push(sourceIn: ConnectionDetails, targetIn: ConnectionDetails, exclusions: string[]): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
7
|
+
const fetcher_1 = require("../../lib/pg/fetcher");
|
|
8
|
+
const util_1 = require("../../lib/pg/util");
|
|
9
|
+
const push_pull_1 = require("../../lib/pg/push_pull");
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const env = process.env;
|
|
12
|
+
class Push extends command_1.Command {
|
|
13
|
+
async run() {
|
|
14
|
+
const { flags, args } = await this.parse(Push);
|
|
15
|
+
const { app, 'exclude-table-data': excludeTableData } = flags;
|
|
16
|
+
const exclusions = (0, push_pull_1.parseExclusions)(excludeTableData);
|
|
17
|
+
const source = (0, util_1.parsePostgresConnectionString)(args.source);
|
|
18
|
+
const target = await (0, fetcher_1.database)(this.heroku, app, args.target);
|
|
19
|
+
core_1.ux.log(`Pushing ${color_1.default.cyan(args.source)} to ${color_1.default.addon(target.attachment.addon.name)}`);
|
|
20
|
+
await this.push(source, target, exclusions);
|
|
21
|
+
core_1.ux.log('Pushing complete.');
|
|
22
|
+
}
|
|
23
|
+
async push(sourceIn, targetIn, exclusions) {
|
|
24
|
+
await (0, push_pull_1.prepare)(targetIn);
|
|
25
|
+
const source = await (0, push_pull_1.maybeTunnel)(sourceIn);
|
|
26
|
+
const target = await (0, push_pull_1.maybeTunnel)(targetIn);
|
|
27
|
+
const exclude = exclusions.map(function (e) {
|
|
28
|
+
return '--exclude-table-data=' + e;
|
|
29
|
+
}).join(' ');
|
|
30
|
+
const dumpFlags = ['--verbose', '-F', 'c', '-Z', '0', '-N', '_heroku', ...(0, push_pull_1.connArgs)(source, true)];
|
|
31
|
+
if (exclude !== '')
|
|
32
|
+
dumpFlags.push(exclude);
|
|
33
|
+
const dumpOptions = {
|
|
34
|
+
env: Object.assign({ PGSSLMODE: 'prefer' }, env),
|
|
35
|
+
stdio: ['pipe', 'pipe', 2],
|
|
36
|
+
shell: true,
|
|
37
|
+
};
|
|
38
|
+
if (source.password)
|
|
39
|
+
dumpOptions.env.PGPASSWORD = source.password;
|
|
40
|
+
const restoreFlags = ['--verbose', '-F', 'c', '--no-acl', '--no-owner', ...(0, push_pull_1.connArgs)(target)];
|
|
41
|
+
const restoreOptions = {
|
|
42
|
+
env: Object.assign({}, env),
|
|
43
|
+
stdio: ['pipe', 'pipe', 2],
|
|
44
|
+
shell: true,
|
|
45
|
+
};
|
|
46
|
+
if (target.password)
|
|
47
|
+
restoreOptions.env.PGPASSWORD = target.password;
|
|
48
|
+
const pgDump = (0, node_child_process_1.spawn)('pg_dump', dumpFlags, dumpOptions);
|
|
49
|
+
const pgRestore = (0, node_child_process_1.spawn)('pg_restore', restoreFlags, restoreOptions);
|
|
50
|
+
await (0, push_pull_1.spawnPipe)(pgDump, pgRestore);
|
|
51
|
+
if (source._tunnel)
|
|
52
|
+
source._tunnel.close();
|
|
53
|
+
if (target._tunnel)
|
|
54
|
+
target._tunnel.close();
|
|
55
|
+
await (0, push_pull_1.verifyExtensionsMatch)(sourceIn, targetIn);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.default = Push;
|
|
59
|
+
Push.topic = 'pg';
|
|
60
|
+
Push.description = (0, tsheredoc_1.default) `
|
|
61
|
+
push local or remote into Heroku database
|
|
62
|
+
Push from SOURCE into TARGET. TARGET must be empty.
|
|
63
|
+
|
|
64
|
+
To empty a Heroku database for push run ${color_1.default.cmd('heroku pg:reset')}
|
|
65
|
+
|
|
66
|
+
SOURCE must be either the name of a database existing on your localhost or the
|
|
67
|
+
fully qualified URL of a remote database.
|
|
68
|
+
`;
|
|
69
|
+
Push.examples = [(0, tsheredoc_1.default) `
|
|
70
|
+
# push mylocaldb into a Heroku DB named postgresql-swimmingly-100
|
|
71
|
+
$ heroku pg:push mylocaldb postgresql-swimmingly-100 --app sushi
|
|
72
|
+
`, (0, tsheredoc_1.default) `
|
|
73
|
+
# push remote DB at postgres://myhost/mydb into a Heroku DB named postgresql-swimmingly-100
|
|
74
|
+
$ heroku pg:push postgres://myhost/mydb postgresql-swimmingly-100 --app sushi
|
|
75
|
+
`];
|
|
76
|
+
Push.flags = {
|
|
77
|
+
'exclude-table-data': command_1.flags.string({ description: 'tables for which data should be excluded (use \';\' to split multiple names)', hasValue: true }),
|
|
78
|
+
app: command_1.flags.app({ required: true }),
|
|
79
|
+
remote: command_1.flags.remote(),
|
|
80
|
+
};
|
|
81
|
+
Push.args = {
|
|
82
|
+
source: core_1.Args.string({ required: true }),
|
|
83
|
+
target: core_1.Args.string({ required: true }),
|
|
84
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export default class Reset extends Command {
|
|
3
|
+
static topic: string;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
extensions: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
confirm: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
app: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
remote: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
static args: {
|
|
12
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const color_1 = require("@heroku-cli/color");
|
|
4
|
+
const command_1 = require("@heroku-cli/command");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const confirmCommand_1 = require("../../lib/confirmCommand");
|
|
7
|
+
const host_1 = require("../../lib/pg/host");
|
|
8
|
+
const fetcher_1 = require("../../lib/pg/fetcher");
|
|
9
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
10
|
+
class Reset extends command_1.Command {
|
|
11
|
+
async run() {
|
|
12
|
+
const { flags, args } = await this.parse(Reset);
|
|
13
|
+
const { app, confirm, extensions } = flags;
|
|
14
|
+
const db = await (0, fetcher_1.getAddon)(this.heroku, app, args.database);
|
|
15
|
+
let extensionsArray;
|
|
16
|
+
if (extensions) {
|
|
17
|
+
extensionsArray = extensions.split(',')
|
|
18
|
+
.map(ext => ext.trim()
|
|
19
|
+
.toLowerCase())
|
|
20
|
+
.sort();
|
|
21
|
+
}
|
|
22
|
+
await (0, confirmCommand_1.default)(app, confirm, (0, tsheredoc_1.default)(`
|
|
23
|
+
Destructive action
|
|
24
|
+
${color_1.default.addon(db.name)} will lose all of its data
|
|
25
|
+
`));
|
|
26
|
+
core_1.ux.action.start(`Resetting ${color_1.default.addon(db.name)}`);
|
|
27
|
+
await this.heroku.put(`/client/v11/databases/${db.id}/reset`, {
|
|
28
|
+
body: { extensions: extensionsArray }, hostname: (0, host_1.default)(),
|
|
29
|
+
});
|
|
30
|
+
core_1.ux.action.stop();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.default = Reset;
|
|
34
|
+
Reset.topic = 'pg';
|
|
35
|
+
Reset.description = 'delete all data in DATABASE';
|
|
36
|
+
Reset.flags = {
|
|
37
|
+
extensions: command_1.flags.string({ char: 'e', description: 'comma-separated list of extensions to pre-install in the public schema' }),
|
|
38
|
+
confirm: command_1.flags.string({ char: 'c' }),
|
|
39
|
+
app: command_1.flags.app({ required: true }),
|
|
40
|
+
remote: command_1.flags.remote(),
|
|
41
|
+
};
|
|
42
|
+
Reset.args = {
|
|
43
|
+
database: core_1.Args.string(),
|
|
44
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PGSettingsCommand, BooleanAsString } from '../../../../lib/pg/setter';
|
|
2
|
+
import { SettingKey, Setting } from '../../../../lib/pg/types';
|
|
3
|
+
export default class LogAnalyze extends PGSettingsCommand {
|
|
4
|
+
static topic: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static args: {
|
|
7
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
8
|
+
value: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
9
|
+
};
|
|
10
|
+
protected settingKey: SettingKey;
|
|
11
|
+
protected convertValue(val: BooleanAsString): boolean;
|
|
12
|
+
protected explain(setting: Setting<boolean>): "EXPLAIN ANALYZE execution plans will be logged." | "EXPLAIN ANALYZE execution plans will not be logged.";
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const tsheredoc_1 = require("tsheredoc");
|
|
5
|
+
const setter_1 = require("../../../../lib/pg/setter");
|
|
6
|
+
class LogAnalyze extends setter_1.PGSettingsCommand {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.settingKey = 'auto_explain.log_analyze';
|
|
10
|
+
}
|
|
11
|
+
convertValue(val) {
|
|
12
|
+
return (0, setter_1.booleanConverter)(val);
|
|
13
|
+
}
|
|
14
|
+
explain(setting) {
|
|
15
|
+
if (setting.value) {
|
|
16
|
+
return 'EXPLAIN ANALYZE execution plans will be logged.';
|
|
17
|
+
}
|
|
18
|
+
return 'EXPLAIN ANALYZE execution plans will not be logged.';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.default = LogAnalyze;
|
|
22
|
+
LogAnalyze.topic = 'pg';
|
|
23
|
+
LogAnalyze.description = (0, tsheredoc_1.default)(`
|
|
24
|
+
Shows actual run times on the execution plan.
|
|
25
|
+
This is equivalent to calling EXPLAIN ANALYZE.
|
|
26
|
+
|
|
27
|
+
WARNING: EXPLAIN ANALYZE will be run on ALL queries, not just logged queries. This can cause significant performance impacts to your database and should be used with caution.
|
|
28
|
+
`);
|
|
29
|
+
LogAnalyze.args = {
|
|
30
|
+
database: core_1.Args.string(),
|
|
31
|
+
value: core_1.Args.string(),
|
|
32
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BooleanAsString, PGSettingsCommand } from '../../../../lib/pg/setter';
|
|
2
|
+
import { Setting, SettingKey } from '../../../../lib/pg/types';
|
|
3
|
+
export default class LogBuffersWaits extends PGSettingsCommand {
|
|
4
|
+
static topic: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static args: {
|
|
7
|
+
database: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
8
|
+
value: import("@oclif/core/lib/interfaces/parser").Arg<string | undefined, Record<string, unknown>>;
|
|
9
|
+
};
|
|
10
|
+
protected settingKey: SettingKey;
|
|
11
|
+
protected convertValue(val: BooleanAsString): boolean;
|
|
12
|
+
protected explain(setting: Setting<boolean>): "Buffer statistics have been enabled for auto_explain." | "Buffer statistics have been disabled for auto_explain.";
|
|
13
|
+
}
|