heroku 11.0.0 → 11.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/analytics.d.ts +2 -1
- package/dist/commands/access/add.js +1 -1
- package/dist/commands/access/index.js +45 -44
- package/dist/commands/access/remove.js +2 -2
- package/dist/commands/access/update.js +1 -1
- package/dist/commands/accounts/add.js +1 -1
- package/dist/commands/accounts/current.js +3 -2
- package/dist/commands/accounts/index.js +2 -2
- package/dist/commands/accounts/remove.js +1 -1
- package/dist/commands/accounts/set.js +1 -1
- package/dist/commands/addons/attach.js +11 -5
- package/dist/commands/addons/create.js +33 -33
- package/dist/commands/addons/destroy.js +2 -1
- package/dist/commands/addons/detach.js +1 -1
- package/dist/commands/addons/docs.js +1 -1
- package/dist/commands/addons/index.d.ts +1 -1
- package/dist/commands/addons/index.js +54 -53
- package/dist/commands/addons/info.js +2 -1
- package/dist/commands/addons/open.d.ts +14 -14
- package/dist/commands/addons/open.js +2 -2
- package/dist/commands/addons/plans.d.ts +5 -5
- package/dist/commands/addons/plans.js +15 -13
- package/dist/commands/addons/rename.js +1 -1
- package/dist/commands/addons/services.js +3 -2
- package/dist/commands/addons/upgrade.js +1 -1
- package/dist/commands/addons/wait.js +2 -2
- package/dist/commands/apps/create.d.ts +1 -1
- package/dist/commands/apps/create.js +107 -105
- package/dist/commands/apps/destroy.js +1 -1
- package/dist/commands/apps/diff.js +73 -73
- package/dist/commands/apps/errors.js +3 -2
- package/dist/commands/apps/favorites/add.js +2 -2
- package/dist/commands/apps/favorites/index.js +3 -2
- package/dist/commands/apps/favorites/remove.js +2 -2
- package/dist/commands/apps/index.js +60 -59
- package/dist/commands/apps/info.js +79 -78
- package/dist/commands/apps/join.js +2 -2
- package/dist/commands/apps/leave.js +2 -2
- package/dist/commands/apps/lock.js +2 -2
- package/dist/commands/apps/open.js +1 -1
- package/dist/commands/apps/rename.js +1 -1
- package/dist/commands/apps/stacks/index.js +9 -8
- package/dist/commands/apps/stacks/set.js +4 -4
- package/dist/commands/apps/transfer.js +1 -1
- package/dist/commands/apps/unlock.js +2 -2
- package/dist/commands/auth/2fa/disable.js +2 -2
- package/dist/commands/auth/2fa/index.js +2 -2
- package/dist/commands/auth/login.js +1 -1
- package/dist/commands/auth/logout.js +1 -1
- package/dist/commands/auth/token.js +2 -2
- package/dist/commands/authorizations/create.d.ts +2 -2
- package/dist/commands/authorizations/create.js +6 -6
- package/dist/commands/authorizations/index.js +3 -2
- package/dist/commands/authorizations/info.d.ts +3 -3
- package/dist/commands/authorizations/info.js +4 -4
- package/dist/commands/authorizations/revoke.js +1 -1
- package/dist/commands/autocomplete/doctor.d.ts +3 -3
- package/dist/commands/autocomplete/doctor.js +4 -4
- package/dist/commands/autocomplete/index.d.ts +1 -1
- package/dist/commands/autocomplete/index.js +3 -2
- package/dist/commands/buildpacks/index.js +2 -1
- package/dist/commands/buildpacks/info.d.ts +1 -1
- package/dist/commands/buildpacks/info.js +8 -8
- package/dist/commands/buildpacks/remove.js +1 -1
- package/dist/commands/buildpacks/search.d.ts +5 -5
- package/dist/commands/buildpacks/search.js +8 -8
- package/dist/commands/buildpacks/versions.d.ts +1 -1
- package/dist/commands/buildpacks/versions.js +15 -16
- package/dist/commands/certs/add.js +5 -4
- package/dist/commands/certs/auto/disable.js +2 -2
- package/dist/commands/certs/auto/enable.js +3 -2
- package/dist/commands/certs/auto/index.js +23 -22
- package/dist/commands/certs/auto/refresh.js +1 -1
- package/dist/commands/certs/index.js +2 -2
- package/dist/commands/certs/info.js +2 -2
- package/dist/commands/certs/remove.js +2 -2
- package/dist/commands/certs/update.js +1 -1
- package/dist/commands/ci/config/get.js +1 -1
- package/dist/commands/ci/config/index.js +4 -3
- package/dist/commands/ci/config/set.js +9 -8
- package/dist/commands/ci/config/unset.js +2 -2
- package/dist/commands/ci/debug.js +1 -1
- package/dist/commands/ci/index.js +1 -1
- package/dist/commands/ci/info.d.ts +4 -4
- package/dist/commands/ci/info.js +5 -5
- package/dist/commands/ci/last.js +2 -2
- package/dist/commands/ci/migrate-manifest.js +2 -2
- package/dist/commands/ci/open.js +1 -1
- package/dist/commands/ci/rerun.js +3 -2
- package/dist/commands/ci/run.js +2 -2
- package/dist/commands/clients/create.d.ts +4 -4
- package/dist/commands/clients/create.js +7 -7
- package/dist/commands/clients/destroy.js +1 -1
- package/dist/commands/clients/index.js +3 -2
- package/dist/commands/clients/info.js +3 -2
- package/dist/commands/clients/rotate.js +2 -1
- package/dist/commands/clients/update.js +1 -1
- package/dist/commands/config/edit.d.ts +1 -1
- package/dist/commands/config/edit.js +46 -45
- package/dist/commands/config/get.js +2 -2
- package/dist/commands/config/index.js +3 -2
- package/dist/commands/config/set.js +3 -2
- package/dist/commands/config/unset.js +2 -2
- package/dist/commands/container/login.js +1 -1
- package/dist/commands/container/logout.js +1 -1
- package/dist/commands/container/pull.js +2 -1
- package/dist/commands/container/push.js +3 -2
- package/dist/commands/container/release.js +2 -2
- package/dist/commands/container/rm.js +2 -2
- package/dist/commands/container/run.js +3 -2
- package/dist/commands/dashboard.js +27 -26
- package/dist/commands/data/maintenances/history.js +4 -1
- package/dist/commands/data/maintenances/index.js +4 -2
- package/dist/commands/data/maintenances/info.js +3 -2
- package/dist/commands/data/maintenances/run.js +4 -3
- package/dist/commands/data/maintenances/schedule.js +3 -2
- package/dist/commands/data/maintenances/wait.js +4 -3
- package/dist/commands/data/maintenances/window/index.js +3 -2
- package/dist/commands/data/maintenances/window/update.js +3 -2
- package/dist/commands/data/pg/attachments/create.js +5 -4
- package/dist/commands/data/pg/attachments/destroy.js +4 -3
- package/dist/commands/data/pg/attachments/index.js +4 -3
- package/dist/commands/data/pg/create.js +5 -4
- package/dist/commands/data/pg/credentials/create.js +5 -4
- package/dist/commands/data/pg/credentials/destroy.js +5 -4
- package/dist/commands/data/pg/credentials/index.js +4 -3
- package/dist/commands/data/pg/credentials/rotate.js +6 -5
- package/dist/commands/data/pg/credentials/url.js +5 -4
- package/dist/commands/data/pg/destroy.js +3 -2
- package/dist/commands/data/pg/docs.js +1 -1
- package/dist/commands/data/pg/fork.js +4 -3
- package/dist/commands/data/pg/info.js +42 -41
- package/dist/commands/data/pg/psql.js +7 -6
- package/dist/commands/data/pg/quotas/index.js +3 -3
- package/dist/commands/data/pg/quotas/update.js +4 -3
- package/dist/commands/data/pg/settings.js +4 -3
- package/dist/commands/data/pg/wait.js +4 -3
- package/dist/commands/domains/add.js +2 -1
- package/dist/commands/domains/clear.js +2 -2
- package/dist/commands/domains/index.js +9 -8
- package/dist/commands/domains/info.d.ts +3 -3
- package/dist/commands/domains/info.js +5 -5
- package/dist/commands/domains/remove.js +1 -1
- package/dist/commands/domains/update.js +1 -1
- package/dist/commands/drains/add.js +1 -1
- package/dist/commands/drains/index.js +9 -8
- package/dist/commands/drains/remove.js +1 -1
- package/dist/commands/features/disable.js +1 -1
- package/dist/commands/features/enable.js +1 -1
- package/dist/commands/features/index.d.ts +1 -1
- package/dist/commands/features/index.js +5 -4
- package/dist/commands/features/info.js +2 -1
- package/dist/commands/git/clone.js +4 -2
- package/dist/commands/git/remote.js +1 -1
- package/dist/commands/keys/add.js +19 -18
- package/dist/commands/keys/clear.js +1 -1
- package/dist/commands/keys/index.js +7 -6
- package/dist/commands/keys/remove.js +1 -1
- package/dist/commands/labs/disable.js +2 -1
- package/dist/commands/labs/enable.js +6 -6
- package/dist/commands/labs/index.js +17 -16
- package/dist/commands/labs/info.js +12 -11
- package/dist/commands/local/index.d.ts +1 -1
- package/dist/commands/local/index.js +4 -2
- package/dist/commands/local/run.d.ts +1 -1
- package/dist/commands/local/run.js +3 -2
- package/dist/commands/local/version.d.ts +1 -1
- package/dist/commands/local/version.js +1 -1
- package/dist/commands/logs.js +2 -2
- package/dist/commands/maintenance/index.js +1 -1
- package/dist/commands/maintenance/off.js +2 -2
- package/dist/commands/maintenance/on.js +2 -2
- package/dist/commands/members/index.js +3 -2
- package/dist/commands/members/remove.js +2 -2
- package/dist/commands/notifications/index.js +16 -15
- package/dist/commands/orgs/open.d.ts +1 -1
- package/dist/commands/orgs/open.js +3 -3
- package/dist/commands/pg/backups/cancel.d.ts +4 -4
- package/dist/commands/pg/backups/cancel.js +9 -9
- package/dist/commands/pg/backups/capture.js +5 -4
- package/dist/commands/pg/backups/delete.js +3 -2
- package/dist/commands/pg/backups/download.js +14 -13
- package/dist/commands/pg/backups/index.js +6 -3
- package/dist/commands/pg/backups/info.js +26 -25
- package/dist/commands/pg/backups/restore.js +16 -15
- package/dist/commands/pg/backups/schedule.d.ts +6 -6
- package/dist/commands/pg/backups/schedule.js +21 -20
- package/dist/commands/pg/backups/schedules.js +5 -4
- package/dist/commands/pg/backups/unschedule.js +7 -6
- package/dist/commands/pg/backups/url.js +4 -3
- package/dist/commands/pg/bloat.d.ts +2 -2
- package/dist/commands/pg/bloat.js +6 -6
- package/dist/commands/pg/blocking.d.ts +2 -2
- package/dist/commands/pg/blocking.js +6 -6
- package/dist/commands/pg/connection-pooling/attach.js +4 -3
- package/dist/commands/pg/copy.js +6 -5
- package/dist/commands/pg/credentials/create.js +4 -3
- package/dist/commands/pg/credentials/destroy.js +4 -3
- package/dist/commands/pg/credentials/repair-default.js +4 -3
- package/dist/commands/pg/credentials/rotate.js +6 -4
- package/dist/commands/pg/credentials/url.js +6 -4
- package/dist/commands/pg/credentials.js +4 -3
- package/dist/commands/pg/diagnose.d.ts +6 -6
- package/dist/commands/pg/diagnose.js +26 -25
- package/dist/commands/pg/info.d.ts +5 -5
- package/dist/commands/pg/info.js +41 -40
- package/dist/commands/pg/kill.d.ts +6 -6
- package/dist/commands/pg/kill.js +13 -11
- package/dist/commands/pg/killall.d.ts +4 -4
- package/dist/commands/pg/killall.js +8 -8
- package/dist/commands/pg/links/create.js +4 -3
- package/dist/commands/pg/links/destroy.js +4 -3
- package/dist/commands/pg/links/index.js +5 -4
- package/dist/commands/pg/locks.d.ts +5 -5
- package/dist/commands/pg/locks.js +9 -9
- package/dist/commands/pg/outliers.d.ts +8 -8
- package/dist/commands/pg/outliers.js +34 -34
- package/dist/commands/pg/promote.d.ts +5 -5
- package/dist/commands/pg/promote.js +21 -20
- package/dist/commands/pg/ps.d.ts +4 -4
- package/dist/commands/pg/ps.js +9 -9
- package/dist/commands/pg/psql.d.ts +6 -6
- package/dist/commands/pg/psql.js +11 -10
- package/dist/commands/pg/pull.d.ts +1 -1
- package/dist/commands/pg/pull.js +8 -8
- package/dist/commands/pg/push.d.ts +1 -1
- package/dist/commands/pg/push.js +5 -4
- package/dist/commands/pg/reset.js +4 -3
- package/dist/commands/pg/settings/index.d.ts +4 -4
- package/dist/commands/pg/settings/index.js +10 -9
- package/dist/commands/pg/unfollow.d.ts +5 -5
- package/dist/commands/pg/unfollow.js +13 -12
- package/dist/commands/pg/upgrade/cancel.js +8 -6
- package/dist/commands/pg/upgrade/dryrun.js +8 -6
- package/dist/commands/pg/upgrade/prepare.js +8 -6
- package/dist/commands/pg/upgrade/run.js +8 -6
- package/dist/commands/pg/upgrade/wait.js +5 -4
- package/dist/commands/pg/vacuum-stats.d.ts +4 -4
- package/dist/commands/pg/vacuum-stats.js +8 -8
- package/dist/commands/pg/wait.d.ts +6 -6
- package/dist/commands/pg/wait.js +13 -12
- package/dist/commands/pipelines/add.js +1 -1
- package/dist/commands/pipelines/connect.js +1 -1
- package/dist/commands/pipelines/create.js +1 -1
- package/dist/commands/pipelines/destroy.js +1 -1
- package/dist/commands/pipelines/diff.js +55 -52
- package/dist/commands/pipelines/index.js +3 -2
- package/dist/commands/pipelines/info.js +2 -1
- package/dist/commands/pipelines/open.js +1 -1
- package/dist/commands/pipelines/promote.js +3 -2
- package/dist/commands/pipelines/remove.js +2 -2
- package/dist/commands/pipelines/rename.js +1 -1
- package/dist/commands/pipelines/setup.js +2 -2
- package/dist/commands/pipelines/transfer.js +2 -1
- package/dist/commands/pipelines/update.js +2 -2
- package/dist/commands/ps/autoscale/disable.js +1 -1
- package/dist/commands/ps/autoscale/enable.js +1 -1
- package/dist/commands/ps/copy.js +1 -1
- package/dist/commands/ps/exec.js +2 -2
- package/dist/commands/ps/forward.js +2 -2
- package/dist/commands/ps/index.js +3 -2
- package/dist/commands/ps/restart.js +1 -1
- package/dist/commands/ps/scale.js +3 -3
- package/dist/commands/ps/socks.js +1 -1
- package/dist/commands/ps/stop.js +1 -1
- package/dist/commands/ps/type.js +3 -2
- package/dist/commands/ps/wait.js +3 -2
- package/dist/commands/rake.js +1 -1
- package/dist/commands/redis/stats-reset.js +1 -1
- package/dist/commands/redis/upgrade.js +1 -1
- package/dist/commands/redis/wait.js +1 -1
- package/dist/commands/regions.js +2 -1
- package/dist/commands/releases/index.js +3 -2
- package/dist/commands/releases/info.js +2 -1
- package/dist/commands/releases/retry.js +2 -2
- package/dist/commands/releases/rollback.js +1 -1
- package/dist/commands/repl.d.ts +1 -1
- package/dist/commands/repl.js +2 -2
- package/dist/commands/reviewapps/disable.js +2 -2
- package/dist/commands/reviewapps/enable.js +2 -2
- package/dist/commands/run/detached.js +2 -2
- package/dist/commands/run/index.js +2 -2
- package/dist/commands/run/inside.js +1 -1
- package/dist/commands/sessions/destroy.js +1 -1
- package/dist/commands/sessions/index.js +3 -2
- package/dist/commands/spaces/create.js +2 -1
- package/dist/commands/spaces/destroy.js +1 -1
- package/dist/commands/spaces/drains/get.js +2 -2
- package/dist/commands/spaces/drains/set.js +1 -1
- package/dist/commands/spaces/index.js +3 -2
- package/dist/commands/spaces/info.js +1 -1
- package/dist/commands/spaces/peerings/accept.js +1 -1
- package/dist/commands/spaces/peerings/destroy.js +1 -1
- package/dist/commands/spaces/peerings/info.js +1 -1
- package/dist/commands/spaces/ps.js +2 -1
- package/dist/commands/spaces/rename.js +2 -2
- package/dist/commands/spaces/topology.js +2 -1
- package/dist/commands/spaces/transfer.js +2 -2
- package/dist/commands/spaces/trusted-ips/add.js +1 -1
- package/dist/commands/spaces/trusted-ips/index.d.ts +6 -6
- package/dist/commands/spaces/trusted-ips/index.js +8 -8
- package/dist/commands/spaces/trusted-ips/remove.js +1 -1
- package/dist/commands/spaces/vpn/config.js +2 -1
- package/dist/commands/spaces/vpn/connect.js +1 -1
- package/dist/commands/spaces/vpn/connections.js +3 -2
- package/dist/commands/spaces/vpn/destroy.js +1 -1
- package/dist/commands/spaces/vpn/info.js +2 -1
- package/dist/commands/spaces/vpn/update.js +1 -1
- package/dist/commands/spaces/vpn/wait.d.ts +6 -6
- package/dist/commands/spaces/vpn/wait.js +14 -14
- package/dist/commands/spaces/wait.js +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.js +5 -2
- package/dist/commands/teams/index.js +2 -1
- package/dist/commands/telemetry/add.js +2 -2
- package/dist/commands/telemetry/index.js +3 -2
- package/dist/commands/telemetry/info.js +1 -1
- package/dist/commands/telemetry/update.js +1 -1
- package/dist/commands/usage/addons.js +4 -3
- package/dist/commands/version/info.d.ts +1 -1
- package/dist/commands/version/info.js +4 -2
- package/dist/commands/webhooks/add.d.ts +3 -3
- package/dist/commands/webhooks/add.js +8 -7
- package/dist/commands/webhooks/deliveries/index.d.ts +1 -1
- package/dist/commands/webhooks/deliveries/index.js +5 -2
- package/dist/commands/webhooks/deliveries/info.d.ts +4 -4
- package/dist/commands/webhooks/deliveries/info.js +9 -6
- package/dist/commands/webhooks/events/index.js +3 -2
- package/dist/commands/webhooks/events/info.js +2 -1
- package/dist/commands/webhooks/index.d.ts +1 -1
- package/dist/commands/webhooks/index.js +7 -4
- package/dist/commands/webhooks/info.d.ts +4 -4
- package/dist/commands/webhooks/info.js +9 -6
- package/dist/commands/webhooks/remove.js +1 -1
- package/dist/commands/webhooks/update.js +1 -1
- package/dist/global_telemetry.d.ts +35 -35
- package/dist/global_telemetry.js +131 -107
- package/dist/hooks/command_not_found/performance_analytics.d.ts +1 -1
- package/dist/hooks/init/performance_analytics.d.ts +1 -1
- package/dist/hooks/init/terms-of-service.d.ts +1 -1
- package/dist/hooks/init/terms-of-service.js +1 -1
- package/dist/hooks/init/version.d.ts +1 -1
- package/dist/hooks/postrun/performance_analytics.d.ts +1 -1
- package/dist/hooks/prerun/analytics.d.ts +1 -1
- package/dist/hooks/preupdate/check-npm-auth.d.ts +1 -1
- package/dist/hooks/preupdate/check-npm-auth.js +2 -2
- package/dist/hooks/update/brew.d.ts +1 -1
- package/dist/hooks/update/completions.d.ts +1 -1
- package/dist/hooks/update/show-version-info.d.ts +1 -1
- package/dist/hooks/update/show-version-info.js +2 -2
- package/dist/hooks/update/tidy.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/addons/addons_wait.js +2 -2
- package/dist/lib/addons/create_addon.js +20 -13
- package/dist/lib/addons/destroy_addon.js +5 -4
- package/dist/lib/addons/util.js +1 -1
- package/dist/lib/apps/app-transfer.js +2 -2
- package/dist/lib/authorizations/authorizations.js +2 -2
- package/dist/lib/buildpacks/buildpacks.d.ts +1 -1
- package/dist/lib/buildpacks/buildpacks.js +13 -13
- package/dist/lib/certs/certificate_details.js +3 -2
- package/dist/lib/certs/display_table.js +5 -5
- package/dist/lib/certs/domains.js +1 -1
- package/dist/lib/ci/pipelines.js +1 -1
- package/dist/lib/ci/test-run.d.ts +2 -2
- package/dist/lib/ci/test-run.js +108 -107
- package/dist/lib/ci/validate.d.ts +1 -1
- package/dist/lib/ci/validate.js +1 -1
- package/dist/lib/confirmCommand.js +3 -2
- package/dist/lib/container/docker_helper.js +1 -1
- package/dist/lib/container/helpers.js +2 -2
- package/dist/lib/data/baseCommand.js +2 -2
- package/dist/lib/data/displayQuota.js +2 -1
- package/dist/lib/data/poolConfig.js +1 -1
- package/dist/lib/data/utils.d.ts +1 -1
- package/dist/lib/data/utils.js +2 -1
- package/dist/lib/domains/domains.d.ts +1 -1
- package/dist/lib/domains/domains.js +33 -32
- package/dist/lib/domains/wait-for-domain.js +3 -2
- package/dist/lib/git/git.js +1 -1
- package/dist/lib/local/env-file-validator.js +1 -1
- package/dist/lib/local/fork-foreman.js +1 -1
- package/dist/lib/members/util.js +2 -2
- package/dist/lib/notify.js +1 -1
- package/dist/lib/npm-auth.js +1 -1
- package/dist/lib/orgs/utils.js +3 -2
- package/dist/lib/pg/backups.js +22 -21
- package/dist/lib/pg/psql.d.ts +5 -5
- package/dist/lib/pg/psql.js +20 -20
- package/dist/lib/pg/push_pull.d.ts +6 -0
- package/dist/lib/pg/push_pull.js +14 -7
- package/dist/lib/pg/setter.d.ts +6 -6
- package/dist/lib/pg/setter.js +10 -10
- package/dist/lib/pipelines/ownership.d.ts +1 -1
- package/dist/lib/pipelines/ownership.js +13 -13
- package/dist/lib/pipelines/render-pipeline.js +3 -2
- package/dist/lib/pipelines/setup/create-apps.js +1 -1
- package/dist/lib/pipelines/setup/get-name-and-repo.js +11 -11
- package/dist/lib/pipelines/setup/get-settings.d.ts +2 -2
- package/dist/lib/pipelines/setup/get-settings.js +4 -4
- package/dist/lib/pipelines/setup/poll-app-setups.js +2 -2
- package/dist/lib/pipelines/setup/setup-pipeline.js +1 -1
- package/dist/lib/ps-exec/exec.js +4 -3
- package/dist/lib/ps-exec/ssh.js +2 -2
- package/dist/lib/redis/api.d.ts +24 -24
- package/dist/lib/redis/api.js +1 -1
- package/dist/lib/repl.d.ts +1 -1
- package/dist/lib/repl.js +1 -1
- package/dist/lib/run/colorize.js +2 -2
- package/dist/lib/run/dyno.js +2 -2
- package/dist/lib/run/helpers.js +1 -1
- package/dist/lib/run/log-displayer.js +2 -2
- package/dist/lib/spaces/format.js +1 -1
- package/dist/lib/spaces/hosts.js +1 -1
- package/dist/lib/spaces/peering.js +1 -1
- package/dist/lib/spaces/spaces.js +3 -2
- package/dist/lib/telemetry/util.js +3 -2
- package/dist/lib/types/completion.d.ts +2 -2
- package/dist/lib/utils/tableUtils.js +1 -1
- package/dist/lib/webhooks/base.d.ts +1 -1
- package/dist/lib/webhooks/base.js +1 -1
- package/dist/user-config.d.ts +1 -1
- package/npm-shrinkwrap.json +2161 -1864
- package/oclif.manifest.json +234 -234
- package/package.json +12 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,38 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
|
|
7
|
+
## [11.0.1-alpha.0](https://github.com/heroku/cli/compare/v11.0.0...v11.0.1-alpha.0) (2026-03-23)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* address linting errors in push_pull.unit.test.ts ([ff757f9](https://github.com/heroku/cli/commit/ff757f92e339ef8e41324519c20ec8af260883f3))
|
|
13
|
+
* address UI issues with confirmation prompts on multiple commands (W-21649376) ([#3602](https://github.com/heroku/cli/issues/3602)) ([7e96152](https://github.com/heroku/cli/commit/7e96152f8789d4580cd30b0e501866d6f01c9079))
|
|
14
|
+
* handle both Unix and Windows line continuation markers in test ([c769487](https://github.com/heroku/cli/commit/c7694877c7dea2a935a57afa4ffd96788c081683))
|
|
15
|
+
* normalize whitespace in pg:copy test to handle line wrapping ([5dce0c0](https://github.com/heroku/cli/commit/5dce0c059c466424831d9a851e5bcd79e18dd4c8))
|
|
16
|
+
* remove line continuation markers (›) from pg:copy test assertion ([60367f9](https://github.com/heroku/cli/commit/60367f9a87f465720d480ccc97f38398a2cffb70))
|
|
17
|
+
* restore correct argument order in pg:kill and column order in pg:backups ([faf96a8](https://github.com/heroku/cli/commit/faf96a8c62ea0a703dc8684b672c2d010995e948))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Performance Improvements
|
|
21
|
+
|
|
22
|
+
* implement lazy initialization in global_telemetry.ts ([90e9ed8](https://github.com/heroku/cli/commit/90e9ed8d6773269fa2c1a551594571d629bac911)), closes [#1](https://github.com/heroku/cli/issues/1)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Reverts
|
|
26
|
+
|
|
27
|
+
* change hux imports back to original format ([fc4efcb](https://github.com/heroku/cli/commit/fc4efcb619f20fcbd53cdbec7fad9f720403e839))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Code Refactoring
|
|
31
|
+
|
|
32
|
+
* migrate additional oclif/core imports to granular paths ([b00f611](https://github.com/heroku/cli/commit/b00f61171cb9842b2b3af175d5720b58656aa513))
|
|
33
|
+
* migrate hux imports to granular module paths ([7b96538](https://github.com/heroku/cli/commit/7b965385324cb033363e74b9ef2e84af69834006))
|
|
34
|
+
* migrate pg utility imports to granular module paths ([f8cb197](https://github.com/heroku/cli/commit/f8cb1971c14d02450027a8a33aaffae44bd1ad26))
|
|
35
|
+
* migrate ux imports to granular @oclif/core/ux module ([ea91d6c](https://github.com/heroku/cli/commit/ea91d6c970486d893059d2c67d4b8afa9d4f9ce6))
|
|
36
|
+
* use granular imports from heroku-cli-util beta ([22bb780](https://github.com/heroku/cli/commit/22bb78078b1bb44f59b6f2f64f60a43ff5c424e7))
|
|
37
|
+
|
|
6
38
|
## [11.0.0](https://github.com/heroku/cli/compare/v10.17.0...v11.0.0) (2026-03-18)
|
|
7
39
|
|
|
8
40
|
### Summary
|
package/dist/analytics.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import { getOwner, isTeamApp } from '../../lib/teamUtils.js';
|
|
5
5
|
export default class AccessAdd extends Command {
|
|
@@ -1,51 +1,10 @@
|
|
|
1
|
-
import { color, hux } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
3
2
|
import { HerokuAPIError } from '@heroku-cli/command/lib/api-client.js';
|
|
4
|
-
import
|
|
3
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
4
|
+
import { hux } from '@heroku/heroku-cli-util';
|
|
5
|
+
import { ux } from '@oclif/core/ux';
|
|
5
6
|
import _ from 'lodash';
|
|
6
7
|
import { getOwner, isTeamApp } from '../../lib/teamUtils.js';
|
|
7
|
-
function printJSON(collaborators) {
|
|
8
|
-
ux.stdout(JSON.stringify(collaborators, null, 2));
|
|
9
|
-
}
|
|
10
|
-
function buildTableColumns(showPermissions) {
|
|
11
|
-
const baseColumns = {
|
|
12
|
-
email: {
|
|
13
|
-
get: ({ email }) => color.user(email),
|
|
14
|
-
},
|
|
15
|
-
role: {
|
|
16
|
-
get: ({ role }) => color.info(role),
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
if (showPermissions) {
|
|
20
|
-
return {
|
|
21
|
-
...baseColumns,
|
|
22
|
-
permissions: {},
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
return baseColumns;
|
|
26
|
-
}
|
|
27
|
-
function printAccess(app, collaborators) {
|
|
28
|
-
const showPermissions = isTeamApp(app.owner?.email);
|
|
29
|
-
collaborators = _.chain(collaborators)
|
|
30
|
-
.sortBy(c => c.email || c.user.email)
|
|
31
|
-
.reject(c => /herokumanager\.com$/.test(c.user.email))
|
|
32
|
-
.map(collab => {
|
|
33
|
-
const { email } = collab.user;
|
|
34
|
-
const { permissions, role } = collab;
|
|
35
|
-
const data = { email, role: role || 'collaborator' };
|
|
36
|
-
if (showPermissions) {
|
|
37
|
-
data.permissions = _.map(_.sortBy(permissions, 'name'), 'name').join(', ');
|
|
38
|
-
}
|
|
39
|
-
return data;
|
|
40
|
-
})
|
|
41
|
-
.value();
|
|
42
|
-
const tableColumns = buildTableColumns(showPermissions);
|
|
43
|
-
hux.table(collaborators, tableColumns);
|
|
44
|
-
}
|
|
45
|
-
function buildCollaboratorsArray(collaboratorsRaw, admins) {
|
|
46
|
-
const collaboratorsNoAdmins = _.reject(collaboratorsRaw, { role: 'admin' });
|
|
47
|
-
return _.union(collaboratorsNoAdmins, admins);
|
|
48
|
-
}
|
|
49
8
|
export default class AccessIndex extends Command {
|
|
50
9
|
static description = 'list who has access to an app';
|
|
51
10
|
static flags = {
|
|
@@ -83,3 +42,45 @@ export default class AccessIndex extends Command {
|
|
|
83
42
|
printAccess(app, collaborators);
|
|
84
43
|
}
|
|
85
44
|
}
|
|
45
|
+
function buildCollaboratorsArray(collaboratorsRaw, admins) {
|
|
46
|
+
const collaboratorsNoAdmins = _.reject(collaboratorsRaw, { role: 'admin' });
|
|
47
|
+
return _.union(collaboratorsNoAdmins, admins);
|
|
48
|
+
}
|
|
49
|
+
function buildTableColumns(showPermissions) {
|
|
50
|
+
const baseColumns = {
|
|
51
|
+
email: {
|
|
52
|
+
get: ({ email }) => color.user(email),
|
|
53
|
+
},
|
|
54
|
+
role: {
|
|
55
|
+
get: ({ role }) => color.info(role),
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
if (showPermissions) {
|
|
59
|
+
return {
|
|
60
|
+
...baseColumns,
|
|
61
|
+
permissions: {},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return baseColumns;
|
|
65
|
+
}
|
|
66
|
+
function printAccess(app, collaborators) {
|
|
67
|
+
const showPermissions = isTeamApp(app.owner?.email);
|
|
68
|
+
collaborators = _.chain(collaborators)
|
|
69
|
+
.sortBy(c => c.email || c.user.email)
|
|
70
|
+
.reject(c => /herokumanager\.com$/.test(c.user.email))
|
|
71
|
+
.map(collab => {
|
|
72
|
+
const { email } = collab.user;
|
|
73
|
+
const { permissions, role } = collab;
|
|
74
|
+
const data = { email, role: role || 'collaborator' };
|
|
75
|
+
if (showPermissions) {
|
|
76
|
+
data.permissions = _.map(_.sortBy(permissions, 'name'), 'name').join(', ');
|
|
77
|
+
}
|
|
78
|
+
return data;
|
|
79
|
+
})
|
|
80
|
+
.value();
|
|
81
|
+
const tableColumns = buildTableColumns(showPermissions);
|
|
82
|
+
hux.table(collaborators, tableColumns);
|
|
83
|
+
}
|
|
84
|
+
function printJSON(collaborators) {
|
|
85
|
+
ux.stdout(JSON.stringify(collaborators, null, 2));
|
|
86
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
3
|
-
import
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
|
+
import { ux } from '@oclif/core/ux';
|
|
4
4
|
export default class AccessRemove extends Command {
|
|
5
5
|
static description = 'remove users from a team app';
|
|
6
6
|
static example = `${color.command('heroku access:remove user@email.com --app APP')}`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import { isTeamApp } from '../../lib/teamUtils.js';
|
|
5
5
|
export default class Update extends Command {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import AccountsModule from '../../lib/accounts/accounts.js';
|
|
5
5
|
export default class Add extends Command {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { color, hux } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command } from '@heroku-cli/command';
|
|
3
|
-
import
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
|
+
import { hux } from '@heroku/heroku-cli-util';
|
|
4
|
+
import { ux } from '@oclif/core/ux';
|
|
4
5
|
import AccountsModule from '../../lib/accounts/accounts.js';
|
|
5
6
|
export default class Current extends Command {
|
|
6
7
|
static baseFlags = Command.baseFlagsWithoutPrompt();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command } from '@heroku-cli/command';
|
|
3
|
-
import
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
|
+
import { ux } from '@oclif/core/ux';
|
|
4
4
|
import accountsModule from '../../lib/accounts/accounts.js';
|
|
5
5
|
export default class AccountsIndex extends Command {
|
|
6
6
|
static baseFlags = Command.baseFlagsWithoutPrompt();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import AccountsModule from '../../lib/accounts/accounts.js';
|
|
5
5
|
export default class Remove extends Command {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import AccountsModule from '../../lib/accounts/accounts.js';
|
|
5
5
|
export default class Set extends Command {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import { trapConfirmationRequired } from '../../lib/addons/util.js';
|
|
5
5
|
export default class Attach extends Command {
|
|
@@ -27,10 +27,16 @@ export default class Attach extends Command {
|
|
|
27
27
|
const body = {
|
|
28
28
|
addon: { name: addon.name }, app: { name: app }, confirm: confirmed, name: as, namespace,
|
|
29
29
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
try {
|
|
31
|
+
ux.action.start(`Attaching ${credential ? color.name(credential) + ' of ' : ''}${color.datastore(addon.name || '')}${as ? ' as ' + color.attachment(as) : ''} to ${color.app(app)}`);
|
|
32
|
+
const { body: attachment } = await this.heroku.post('/addon-attachments', { body });
|
|
33
|
+
ux.action.stop();
|
|
34
|
+
return attachment;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
ux.action.stop(color.red('!'));
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
34
40
|
};
|
|
35
41
|
if (credential && credential !== 'default') {
|
|
36
42
|
const { body: credentialConfig } = await this.heroku.get(`/addons/${addon.name}/config/credential:${encodeURIComponent(credential)}`);
|
|
@@ -1,42 +1,10 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import tsheredoc from 'tsheredoc';
|
|
5
5
|
import createAddon from '../../lib/addons/create_addon.js';
|
|
6
6
|
import notify from '../../lib/notify.js';
|
|
7
7
|
const heredoc = tsheredoc.default;
|
|
8
|
-
function parseConfig(args) {
|
|
9
|
-
const config = {};
|
|
10
|
-
while (args.length > 0) {
|
|
11
|
-
let key = args.shift();
|
|
12
|
-
if (!key.startsWith('--'))
|
|
13
|
-
throw new Error(`Unexpected argument ${key}`);
|
|
14
|
-
key = key.replace(/^--/, '');
|
|
15
|
-
let val;
|
|
16
|
-
if (key.includes('=')) {
|
|
17
|
-
[key, ...val] = key.split('=');
|
|
18
|
-
val = val.join('=');
|
|
19
|
-
if (val === 'true') {
|
|
20
|
-
val = true;
|
|
21
|
-
}
|
|
22
|
-
config[key] = val;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
val = args.shift();
|
|
26
|
-
if (!val) {
|
|
27
|
-
config[key] = true;
|
|
28
|
-
}
|
|
29
|
-
else if (val.startsWith('--')) {
|
|
30
|
-
config[key] = true;
|
|
31
|
-
args.unshift(val);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
config[key] = val;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return config;
|
|
39
|
-
}
|
|
40
8
|
export default class Create extends Command {
|
|
41
9
|
static args = {
|
|
42
10
|
'service:plan': Args.string({ description: 'unique identifier or unique name of the add-on service plan', required: true }),
|
|
@@ -98,3 +66,35 @@ export default class Create extends Command {
|
|
|
98
66
|
ux.stdout(`Run ${color.code('heroku addons:docs ' + addon?.addon_service?.name || '')} to view documentation.`);
|
|
99
67
|
}
|
|
100
68
|
}
|
|
69
|
+
function parseConfig(args) {
|
|
70
|
+
const config = {};
|
|
71
|
+
while (args.length > 0) {
|
|
72
|
+
let key = args.shift();
|
|
73
|
+
if (!key.startsWith('--'))
|
|
74
|
+
throw new Error(`Unexpected argument ${key}`);
|
|
75
|
+
key = key.replace(/^--/, '');
|
|
76
|
+
let val;
|
|
77
|
+
if (key.includes('=')) {
|
|
78
|
+
[key, ...val] = key.split('=');
|
|
79
|
+
val = val.join('=');
|
|
80
|
+
if (val === 'true') {
|
|
81
|
+
val = true;
|
|
82
|
+
}
|
|
83
|
+
config[key] = val;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
val = args.shift();
|
|
87
|
+
if (!val) {
|
|
88
|
+
config[key] = true;
|
|
89
|
+
}
|
|
90
|
+
else if (val.startsWith('--')) {
|
|
91
|
+
config[key] = true;
|
|
92
|
+
args.unshift(val);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
config[key] = val;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return config;
|
|
100
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { color, utils } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import { color } from '@heroku/heroku-cli-util';
|
|
3
|
+
import * as utils from '@heroku/heroku-cli-util/utils';
|
|
3
4
|
import { Args } from '@oclif/core';
|
|
4
5
|
import _ from 'lodash';
|
|
5
6
|
import destroyAddon from '../../lib/addons/destroy_addon.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
export default class Detach extends Command {
|
|
5
5
|
static args = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
3
|
import { Args, ux } from '@oclif/core';
|
|
4
4
|
import open from 'open';
|
|
5
5
|
import { resolveAddon } from '../../lib/addons/resolve.js';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
2
|
import * as Heroku from '@heroku-cli/schema';
|
|
3
|
-
export declare function renderAttachment(attachment: Heroku.AddOnAttachment, app: string, isLast?: boolean): string;
|
|
4
3
|
export default class Addons extends Command {
|
|
5
4
|
static description: string;
|
|
6
5
|
static examples: string[];
|
|
@@ -14,3 +13,4 @@ export default class Addons extends Command {
|
|
|
14
13
|
static usage: string;
|
|
15
14
|
run(): Promise<void>;
|
|
16
15
|
}
|
|
16
|
+
export declare function renderAttachment(attachment: Heroku.AddOnAttachment, app: string, isLast?: boolean): string;
|
|
@@ -1,9 +1,54 @@
|
|
|
1
|
-
import { color, hux } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
3
|
-
import
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
|
+
import { hux } from '@heroku/heroku-cli-util';
|
|
4
|
+
import { ux } from '@oclif/core/ux';
|
|
4
5
|
import _ from 'lodash';
|
|
5
6
|
import { formatPrice, formatState, grandfatheredPrice } from '../../lib/addons/util.js';
|
|
6
7
|
const topic = 'addons';
|
|
8
|
+
export default class Addons extends Command {
|
|
9
|
+
static description = `Lists your add-ons and attachments.
|
|
10
|
+
|
|
11
|
+
The default filter applied depends on whether you are in a Heroku app
|
|
12
|
+
directory. If so, the --app flag is implied. If not, the default of --all
|
|
13
|
+
is implied. Explicitly providing either flag overrides the default
|
|
14
|
+
behavior.
|
|
15
|
+
`;
|
|
16
|
+
static examples = [
|
|
17
|
+
`${color.command(`heroku ${topic} --all`)}`,
|
|
18
|
+
`${color.command(`heroku ${topic} --app acme-inc-www`)}`,
|
|
19
|
+
];
|
|
20
|
+
static flags = {
|
|
21
|
+
all: flags.boolean({ char: 'A', description: 'show add-ons and attachments for all accessible apps' }),
|
|
22
|
+
app: flags.app(),
|
|
23
|
+
json: flags.boolean({ description: 'return add-ons in json format' }),
|
|
24
|
+
remote: flags.remote(),
|
|
25
|
+
};
|
|
26
|
+
static topic = topic;
|
|
27
|
+
static usage = 'addons [--all|--app APP]';
|
|
28
|
+
async run() {
|
|
29
|
+
const { flags } = await this.parse(Addons);
|
|
30
|
+
const { all, app, json } = flags;
|
|
31
|
+
if (!all && app) {
|
|
32
|
+
const addons = await addonGetter(this.heroku, app);
|
|
33
|
+
if (json)
|
|
34
|
+
displayJSON(addons);
|
|
35
|
+
else
|
|
36
|
+
displayForApp(app, addons);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const addons = await addonGetter(this.heroku);
|
|
40
|
+
if (json)
|
|
41
|
+
displayJSON(addons);
|
|
42
|
+
else
|
|
43
|
+
displayAll(addons);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function renderAttachment(attachment, app, isLast = false) {
|
|
48
|
+
const line = isLast ? '\u2514\u2500' : '\u251C\u2500';
|
|
49
|
+
const attName = formatAttachment(attachment, attachment.app?.name !== app);
|
|
50
|
+
return ` ${color.dim(line)} ${attName}`;
|
|
51
|
+
}
|
|
7
52
|
async function addonGetter(api, app) {
|
|
8
53
|
let attachmentsResponse = null;
|
|
9
54
|
let addonsResponse;
|
|
@@ -126,20 +171,6 @@ function displayAll(addons) {
|
|
|
126
171
|
});
|
|
127
172
|
/* eslint-enable perfectionist/sort-objects */
|
|
128
173
|
}
|
|
129
|
-
function formatAttachment(attachment, showApp = true) {
|
|
130
|
-
const attName = color.attachment(attachment.name || '');
|
|
131
|
-
const output = [color.dim('as'), attName];
|
|
132
|
-
if (showApp) {
|
|
133
|
-
const appInfo = `on ${color.app(attachment.app?.name || '')} app`;
|
|
134
|
-
output.push(color.dim(appInfo));
|
|
135
|
-
}
|
|
136
|
-
return output.join(' ');
|
|
137
|
-
}
|
|
138
|
-
export function renderAttachment(attachment, app, isLast = false) {
|
|
139
|
-
const line = isLast ? '\u2514\u2500' : '\u251C\u2500';
|
|
140
|
-
const attName = formatAttachment(attachment, attachment.app?.name !== app);
|
|
141
|
-
return ` ${color.dim(line)} ${attName}`;
|
|
142
|
-
}
|
|
143
174
|
function displayForApp(app, addons) {
|
|
144
175
|
if (addons.length === 0) {
|
|
145
176
|
ux.stdout(`No add-ons for app ${app}.`);
|
|
@@ -199,42 +230,12 @@ function displayForApp(app, addons) {
|
|
|
199
230
|
function displayJSON(addons) {
|
|
200
231
|
ux.stdout(JSON.stringify(addons, null, 2));
|
|
201
232
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
behavior.
|
|
209
|
-
`;
|
|
210
|
-
static examples = [
|
|
211
|
-
`${color.command(`heroku ${topic} --all`)}`,
|
|
212
|
-
`${color.command(`heroku ${topic} --app acme-inc-www`)}`,
|
|
213
|
-
];
|
|
214
|
-
static flags = {
|
|
215
|
-
all: flags.boolean({ char: 'A', description: 'show add-ons and attachments for all accessible apps' }),
|
|
216
|
-
app: flags.app(),
|
|
217
|
-
json: flags.boolean({ description: 'return add-ons in json format' }),
|
|
218
|
-
remote: flags.remote(),
|
|
219
|
-
};
|
|
220
|
-
static topic = topic;
|
|
221
|
-
static usage = 'addons [--all|--app APP]';
|
|
222
|
-
async run() {
|
|
223
|
-
const { flags } = await this.parse(Addons);
|
|
224
|
-
const { all, app, json } = flags;
|
|
225
|
-
if (!all && app) {
|
|
226
|
-
const addons = await addonGetter(this.heroku, app);
|
|
227
|
-
if (json)
|
|
228
|
-
displayJSON(addons);
|
|
229
|
-
else
|
|
230
|
-
displayForApp(app, addons);
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
const addons = await addonGetter(this.heroku);
|
|
234
|
-
if (json)
|
|
235
|
-
displayJSON(addons);
|
|
236
|
-
else
|
|
237
|
-
displayAll(addons);
|
|
238
|
-
}
|
|
233
|
+
function formatAttachment(attachment, showApp = true) {
|
|
234
|
+
const attName = color.attachment(attachment.name || '');
|
|
235
|
+
const output = [color.dim('as'), attName];
|
|
236
|
+
if (showApp) {
|
|
237
|
+
const appInfo = `on ${color.app(attachment.app?.name || '')} app`;
|
|
238
|
+
output.push(color.dim(appInfo));
|
|
239
239
|
}
|
|
240
|
+
return output.join(' ');
|
|
240
241
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { color, hux } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
|
+
import { hux } from '@heroku/heroku-cli-util';
|
|
3
4
|
import { Args } from '@oclif/core';
|
|
4
5
|
import { resolveAddon } from '../../lib/addons/resolve.js';
|
|
5
6
|
import { formatPrice, formatState, grandfatheredPrice } from '../../lib/addons/util.js';
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
|
+
export interface AddonSso {
|
|
3
|
+
/**
|
|
4
|
+
* URL of the SSO request
|
|
5
|
+
*/
|
|
6
|
+
action: string;
|
|
7
|
+
/**
|
|
8
|
+
* SSO request method
|
|
9
|
+
*/
|
|
10
|
+
method: 'get' | 'post';
|
|
11
|
+
/**
|
|
12
|
+
* SSO params for POST request
|
|
13
|
+
*/
|
|
14
|
+
params?: SsoParams;
|
|
15
|
+
}
|
|
2
16
|
export interface SsoParams {
|
|
3
17
|
/**
|
|
4
18
|
* billing app name
|
|
@@ -41,20 +55,6 @@ export interface SsoParams {
|
|
|
41
55
|
*/
|
|
42
56
|
user_id: string;
|
|
43
57
|
}
|
|
44
|
-
export interface AddonSso {
|
|
45
|
-
/**
|
|
46
|
-
* URL of the SSO request
|
|
47
|
-
*/
|
|
48
|
-
action: string;
|
|
49
|
-
/**
|
|
50
|
-
* SSO request method
|
|
51
|
-
*/
|
|
52
|
-
method: 'get' | 'post';
|
|
53
|
-
/**
|
|
54
|
-
* SSO params for POST request
|
|
55
|
-
*/
|
|
56
|
-
params?: SsoParams;
|
|
57
|
-
}
|
|
58
58
|
export default class Open extends Command {
|
|
59
59
|
static args: {
|
|
60
60
|
addon: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { color } from '@heroku/heroku-cli-util';
|
|
2
|
-
import { HTTPError } from '@heroku/http-call';
|
|
3
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
|
+
import { HTTPError } from '@heroku/http-call';
|
|
4
4
|
import { Args, ux } from '@oclif/core';
|
|
5
5
|
import fs from 'node:fs/promises';
|
|
6
6
|
import os from 'node:os';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Command } from '@heroku-cli/command';
|
|
2
2
|
export default class Plans extends Command {
|
|
3
|
-
static
|
|
3
|
+
static args: {
|
|
4
|
+
service: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
5
|
+
};
|
|
4
6
|
static description: string;
|
|
5
7
|
static flags: {
|
|
6
8
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
9
|
};
|
|
8
|
-
static
|
|
9
|
-
service: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
10
|
-
};
|
|
11
|
-
private printMeteredPricingURL;
|
|
10
|
+
static topic: string;
|
|
12
11
|
run(): Promise<void>;
|
|
12
|
+
private printMeteredPricingURL;
|
|
13
13
|
}
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
2
|
-
import { Args } from '@oclif/core';
|
|
3
2
|
import { hux } from '@heroku/heroku-cli-util';
|
|
4
|
-
import {
|
|
3
|
+
import { Args } from '@oclif/core';
|
|
5
4
|
import _ from 'lodash';
|
|
6
5
|
import printf from 'printf';
|
|
6
|
+
import { formatPrice } from '../../lib/addons/util.js';
|
|
7
7
|
export default class Plans extends Command {
|
|
8
|
-
static
|
|
8
|
+
static args = {
|
|
9
|
+
service: Args.string({ description: 'unique identifier or globally unique name of the add-on', required: true }),
|
|
10
|
+
};
|
|
9
11
|
static description = 'list all available plans for an add-on service';
|
|
10
12
|
static flags = {
|
|
11
13
|
json: flags.boolean({ description: 'output in json format' }),
|
|
12
14
|
};
|
|
13
|
-
static
|
|
14
|
-
service: Args.string({ required: true, description: 'unique identifier or globally unique name of the add-on' }),
|
|
15
|
-
};
|
|
16
|
-
printMeteredPricingURL(service) {
|
|
17
|
-
return printf(`https://elements.heroku.com/addons/${service}#pricing`);
|
|
18
|
-
}
|
|
15
|
+
static topic = 'addons';
|
|
19
16
|
async run() {
|
|
20
|
-
const {
|
|
17
|
+
const { args, flags } = await this.parse(Plans);
|
|
21
18
|
const { service } = args;
|
|
22
19
|
let { body: plans } = await this.heroku.get(`/addon-services/${service}/plans`, {
|
|
23
20
|
headers: {
|
|
@@ -29,10 +26,11 @@ export default class Plans extends Command {
|
|
|
29
26
|
hux.styledJSON(plans);
|
|
30
27
|
}
|
|
31
28
|
else {
|
|
29
|
+
/* eslint-disable perfectionist/sort-objects */
|
|
32
30
|
hux.table(plans, {
|
|
33
31
|
default: {
|
|
34
|
-
header: ' ',
|
|
35
32
|
get: (plan) => plan.default ? 'default' : '',
|
|
33
|
+
header: ' ', // <- This space is necessary to prevent the table header from rendering as "default"
|
|
36
34
|
},
|
|
37
35
|
name: {
|
|
38
36
|
header: 'Slug',
|
|
@@ -41,14 +39,18 @@ export default class Plans extends Command {
|
|
|
41
39
|
header: 'Name',
|
|
42
40
|
},
|
|
43
41
|
price: {
|
|
42
|
+
get: (plan) => formatPrice({ hourly: true, price: plan.price }),
|
|
44
43
|
header: 'Price',
|
|
45
|
-
get: (plan) => formatPrice({ price: plan.price, hourly: true }),
|
|
46
44
|
},
|
|
47
45
|
max_price: {
|
|
46
|
+
get: (plan) => plan.price.metered ? this.printMeteredPricingURL(service) : formatPrice({ hourly: false, price: plan.price }),
|
|
48
47
|
header: 'Max Price',
|
|
49
|
-
get: (plan) => plan.price.metered ? this.printMeteredPricingURL(service) : formatPrice({ price: plan.price, hourly: false }),
|
|
50
48
|
},
|
|
51
49
|
});
|
|
50
|
+
/* eslint-enable perfectionist/sort-objects */
|
|
52
51
|
}
|
|
53
52
|
}
|
|
53
|
+
printMeteredPricingURL(service) {
|
|
54
|
+
return printf(`https://elements.heroku.com/addons/${service}#pricing`);
|
|
55
|
+
}
|
|
54
56
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { color, hux } from '@heroku/heroku-cli-util';
|
|
2
1
|
import { Command, flags } from '@heroku-cli/command';
|
|
3
|
-
import
|
|
2
|
+
import * as color from '@heroku/heroku-cli-util/color';
|
|
3
|
+
import { hux } from '@heroku/heroku-cli-util';
|
|
4
|
+
import { ux } from '@oclif/core/ux';
|
|
4
5
|
export default class Services extends Command {
|
|
5
6
|
static description = 'list all available add-on services';
|
|
6
7
|
static flags = {
|