@cloudbase/cli 2.0.12 → 2.1.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/.history/.gitignore_20220624162613 +84 -0
- package/.history/.gitignore_20220627114054 +86 -0
- package/.history/package_20220711204706.json +88 -0
- package/.history/package_20220711204818.json +88 -0
- package/.history/package_20220712151717.json +88 -0
- package/.history/package_20220712212537.json +88 -0
- package/.history/package_20220722205058.json +88 -0
- package/.history/package_20220726110155.json +88 -0
- package/.history/package_20220726110201.json +88 -0
- package/.history/package_20220728110905.json +88 -0
- package/.history/package_20220728110936.json +88 -0
- package/.history/package_20220728111531.json +89 -0
- package/.history/package_20220728111810.json +89 -0
- package/.history/src/commands/lowcode/app_20220728111717.ts +52 -0
- package/{src/commands/lowcode/app.ts → .history/src/commands/lowcode/app_20220728112031.ts} +2 -2
- package/{src/index.ts → .history/src/index_20220624162613.ts} +0 -0
- package/.history/src/index_20220627113609.ts +15 -0
- package/.history/src/index_20220627114102.ts +13 -0
- package/.vscode/launch.json +10 -0
- package/bin/cloudbase.js +0 -0
- package/bin/tcb.js +5 -5
- package/lib/commands/account/login.js +3 -6
- package/lib/commands/env/index.js +0 -1
- package/lib/commands/lowcode/app.js +1 -1
- package/lib/commands/run/index.js +0 -1
- package/lib/commands/run/service/deploy.js +6 -1
- package/lib/commands/run/service/index.js +0 -1
- package/lib/commands/run/service/update.js +4 -0
- package/lib/constant.js +15 -1
- package/lib/env/index.js +1 -11
- package/lib/run/index.js +0 -1
- package/lib/run/service/common.js +20 -7
- package/lib/run/service/config.js +2 -3
- package/lib/run/service/deployPackage.js +2 -9
- package/lib/run/service/index.js +0 -1
- package/lib/run/service/update.js +1 -1
- package/lib/utils/debug-logger.js +30 -0
- package/lib/utils/net/cloud-api-request.js +7 -1
- package/lib/utils/net/http-request.js +16 -5
- package/package.json +2 -2
- package/types/commands/env/index.d.ts +0 -1
- package/types/commands/run/index.d.ts +0 -1
- package/types/commands/run/service/index.d.ts +0 -1
- package/types/env/index.d.ts +0 -6
- package/types/run/index.d.ts +0 -1
- package/types/run/service/common.d.ts +8 -1
- package/types/run/service/index.d.ts +0 -1
- package/types/types.d.ts +4 -0
- package/types/utils/debug-logger.d.ts +1 -0
- package/types/utils/net/http-request.d.ts +6 -2
- package/lib/commands/env/create.js +0 -115
- package/lib/commands/run/create.js +0 -162
- package/lib/commands/run/service/create.js +0 -144
- package/lib/run/create.js +0 -19
- package/lib/run/service/create.js +0 -67
- package/src/auth/index.ts +0 -2
- package/src/auth/login.ts +0 -91
- package/src/auth/logout.ts +0 -7
- package/src/commands/account/index.ts +0 -2
- package/src/commands/account/login.ts +0 -192
- package/src/commands/account/logout.ts +0 -24
- package/src/commands/common.ts +0 -246
- package/src/commands/env/base.ts +0 -90
- package/src/commands/env/create.ts +0 -92
- package/src/commands/env/domain.ts +0 -186
- package/src/commands/env/index.ts +0 -4
- package/src/commands/env/login.ts +0 -235
- package/src/commands/framework/index.ts +0 -124
- package/src/commands/functions/alias/getRoute.ts +0 -76
- package/src/commands/functions/alias/index.ts +0 -2
- package/src/commands/functions/alias/setRoute.ts +0 -82
- package/src/commands/functions/code-download.ts +0 -100
- package/src/commands/functions/code-update.ts +0 -62
- package/src/commands/functions/concurrency/delete.ts +0 -45
- package/src/commands/functions/concurrency/index.ts +0 -3
- package/src/commands/functions/concurrency/list.ts +0 -58
- package/src/commands/functions/concurrency/set.ts +0 -47
- package/src/commands/functions/config-update.ts +0 -76
- package/src/commands/functions/copy.ts +0 -62
- package/src/commands/functions/delete.ts +0 -79
- package/src/commands/functions/deploy.ts +0 -293
- package/src/commands/functions/detail.ts +0 -138
- package/src/commands/functions/index.ts +0 -16
- package/src/commands/functions/invoke.ts +0 -121
- package/src/commands/functions/layer/bind.ts +0 -182
- package/src/commands/functions/layer/common.ts +0 -8
- package/src/commands/functions/layer/create.ts +0 -49
- package/src/commands/functions/layer/delete.ts +0 -73
- package/src/commands/functions/layer/download.ts +0 -92
- package/src/commands/functions/layer/index.ts +0 -7
- package/src/commands/functions/layer/list.ts +0 -94
- package/src/commands/functions/layer/sort.ts +0 -76
- package/src/commands/functions/list.ts +0 -68
- package/src/commands/functions/log.ts +0 -148
- package/src/commands/functions/run.ts +0 -249
- package/src/commands/functions/trigger-create.ts +0 -79
- package/src/commands/functions/trigger-delete.ts +0 -105
- package/src/commands/functions/version/index.ts +0 -2
- package/src/commands/functions/version/list.ts +0 -73
- package/src/commands/functions/version/publish.ts +0 -43
- package/src/commands/gateway/create.ts +0 -109
- package/src/commands/gateway/delete.ts +0 -81
- package/src/commands/gateway/domain.ts +0 -159
- package/src/commands/gateway/index.ts +0 -5
- package/src/commands/gateway/list.ts +0 -76
- package/src/commands/gateway/switch.ts +0 -107
- package/src/commands/helpers/index.ts +0 -3
- package/src/commands/helpers/init.ts +0 -431
- package/src/commands/helpers/new.ts +0 -117
- package/src/commands/helpers/open.ts +0 -67
- package/src/commands/hosting/hosting.ts +0 -360
- package/src/commands/hosting/index.ts +0 -1
- package/src/commands/index.ts +0 -13
- package/src/commands/lowcode/comps.ts +0 -325
- package/src/commands/lowcode/index.ts +0 -2
- package/src/commands/lowcode/utils.ts +0 -25
- package/src/commands/run/create.ts +0 -153
- package/src/commands/run/delete.ts +0 -77
- package/src/commands/run/image/common.ts +0 -8
- package/src/commands/run/image/delete.ts +0 -68
- package/src/commands/run/image/download.ts +0 -68
- package/src/commands/run/image/index.ts +0 -5
- package/src/commands/run/image/list.ts +0 -84
- package/src/commands/run/image/upload.ts +0 -76
- package/src/commands/run/index.ts +0 -7
- package/src/commands/run/list.ts +0 -83
- package/src/commands/run/service/config.ts +0 -81
- package/src/commands/run/service/create.ts +0 -122
- package/src/commands/run/service/deploy.ts +0 -125
- package/src/commands/run/service/index.ts +0 -5
- package/src/commands/run/service/list.ts +0 -94
- package/src/commands/run/service/update.ts +0 -108
- package/src/commands/run/standalonegateway/common.ts +0 -8
- package/src/commands/run/standalonegateway/create.ts +0 -85
- package/src/commands/run/standalonegateway/destroy.ts +0 -59
- package/src/commands/run/standalonegateway/index.ts +0 -5
- package/src/commands/run/standalonegateway/list.ts +0 -53
- package/src/commands/run/standalonegateway/package.ts +0 -62
- package/src/commands/run/standalonegateway/turn.ts +0 -63
- package/src/commands/run/version/common.ts +0 -8
- package/src/commands/run/version/create.ts +0 -369
- package/src/commands/run/version/delete.ts +0 -64
- package/src/commands/run/version/index.ts +0 -5
- package/src/commands/run/version/list.ts +0 -91
- package/src/commands/run/version/modify.ts +0 -137
- package/src/commands/run/version/update.ts +0 -398
- package/src/commands/smart.ts +0 -132
- package/src/commands/storage/index.ts +0 -1
- package/src/commands/storage/storage.ts +0 -464
- package/src/commands/third/index.ts +0 -1
- package/src/commands/third/thirdAttach.ts +0 -49
- package/src/completion/index.ts +0 -13
- package/src/constant.ts +0 -154
- package/src/decorators/captureError.ts +0 -25
- package/src/decorators/constants.ts +0 -12
- package/src/decorators/deprecate.ts +0 -25
- package/src/decorators/guard.ts +0 -42
- package/src/decorators/index.ts +0 -7
- package/src/decorators/injectParams.ts +0 -54
- package/src/decorators/params/common.ts +0 -28
- package/src/decorators/params/index.ts +0 -35
- package/src/env/domain.ts +0 -33
- package/src/env/index.ts +0 -63
- package/src/env/login.ts +0 -80
- package/src/error.ts +0 -36
- package/src/function/alias.ts +0 -43
- package/src/function/base.ts +0 -253
- package/src/function/code.ts +0 -55
- package/src/function/concurrency.ts +0 -57
- package/src/function/create.ts +0 -78
- package/src/function/delete.ts +0 -42
- package/src/function/index.ts +0 -11
- package/src/function/layer/attach.ts +0 -68
- package/src/function/layer/create.ts +0 -63
- package/src/function/layer/delete.ts +0 -21
- package/src/function/layer/download.ts +0 -54
- package/src/function/layer/index.ts +0 -7
- package/src/function/layer/list.ts +0 -32
- package/src/function/layer/sort.ts +0 -24
- package/src/function/trigger.ts +0 -97
- package/src/function/update.ts +0 -35
- package/src/function/version.ts +0 -39
- package/src/function/vpc.ts +0 -22
- package/src/gateway/index.ts +0 -137
- package/src/help.ts +0 -50
- package/src/hosting.ts +0 -212
- package/src/logger.ts +0 -17
- package/src/run/create.ts +0 -23
- package/src/run/delete.ts +0 -15
- package/src/run/image/build.ts +0 -36
- package/src/run/image/delete.ts +0 -14
- package/src/run/image/index.ts +0 -4
- package/src/run/image/info.ts +0 -27
- package/src/run/image/list.ts +0 -23
- package/src/run/index.ts +0 -8
- package/src/run/list.ts +0 -30
- package/src/run/repo.ts +0 -25
- package/src/run/service/common.ts +0 -311
- package/src/run/service/config.ts +0 -77
- package/src/run/service/create.ts +0 -52
- package/src/run/service/deployPackage.ts +0 -65
- package/src/run/service/index.ts +0 -7
- package/src/run/service/list.ts +0 -29
- package/src/run/service/showLogs.ts +0 -98
- package/src/run/service/update.ts +0 -82
- package/src/run/standalonegateway/create.ts +0 -24
- package/src/run/standalonegateway/destroy.ts +0 -19
- package/src/run/standalonegateway/index.ts +0 -5
- package/src/run/standalonegateway/list.ts +0 -74
- package/src/run/standalonegateway/package/index.ts +0 -1
- package/src/run/standalonegateway/package/list.ts +0 -24
- package/src/run/standalonegateway/turn/index.ts +0 -2
- package/src/run/standalonegateway/turn/off.ts +0 -19
- package/src/run/standalonegateway/turn/on.ts +0 -19
- package/src/run/version/create.ts +0 -68
- package/src/run/version/delete.ts +0 -16
- package/src/run/version/index.ts +0 -6
- package/src/run/version/list.ts +0 -17
- package/src/run/version/modify.ts +0 -17
- package/src/run/version/repo.ts +0 -28
- package/src/run/version/update.ts +0 -59
- package/src/storage.ts +0 -114
- package/src/third/index.ts +0 -13
- package/src/types.ts +0 -672
- package/src/utils/auth.ts +0 -15
- package/src/utils/checkTcbrEnv.ts +0 -69
- package/src/utils/cli-table.ts +0 -23
- package/src/utils/commonParamsCheck.ts +0 -65
- package/src/utils/config.ts +0 -39
- package/src/utils/env.ts +0 -244
- package/src/utils/fs/del.ts +0 -5
- package/src/utils/fs/index.ts +0 -71
- package/src/utils/function-packer.ts +0 -97
- package/src/utils/index.ts +0 -25
- package/src/utils/log.ts +0 -82
- package/src/utils/net/cloud-api-request.ts +0 -62
- package/src/utils/net/credential.ts +0 -53
- package/src/utils/net/http-request.ts +0 -84
- package/src/utils/net/index.ts +0 -5
- package/src/utils/net/manager-service.ts +0 -36
- package/src/utils/net/proxy.ts +0 -6
- package/src/utils/notice.ts +0 -28
- package/src/utils/output/highlight.ts +0 -5
- package/src/utils/output/index.ts +0 -3
- package/src/utils/output/link.ts +0 -10
- package/src/utils/output/loading.ts +0 -82
- package/src/utils/parallel.ts +0 -82
- package/src/utils/platform/index.ts +0 -3
- package/src/utils/platform/mac.ts +0 -21
- package/src/utils/platform/os.ts +0 -64
- package/src/utils/platform/port.ts +0 -10
- package/src/utils/progress-bar.ts +0 -38
- package/src/utils/prompt/index.ts +0 -1
- package/src/utils/prompt/select.ts +0 -60
- package/src/utils/reporter/agree.ts +0 -20
- package/src/utils/reporter/download.ts +0 -26
- package/src/utils/reporter/index.ts +0 -3
- package/src/utils/reporter/usage.ts +0 -20
- package/src/utils/store/auth.ts +0 -49
- package/src/utils/store/common.ts +0 -8
- package/src/utils/store/db.ts +0 -68
- package/src/utils/store/index.ts +0 -5
- package/src/utils/store/usage.ts +0 -12
- package/src/utils/tcbrApi/callTcbrApi.ts +0 -28
- package/src/utils/tcbrApi/index.ts +0 -1
- package/src/utils/template.ts +0 -170
- package/src/utils/tools/encoding.ts +0 -8
- package/src/utils/tools/index.ts +0 -4
- package/src/utils/tools/object.ts +0 -33
- package/src/utils/tools/time.ts +0 -38
- package/src/utils/tools/uid.ts +0 -19
- package/src/utils/validator.ts +0 -65
- package/types/commands/env/create.d.ts +0 -12
- package/types/commands/run/create.d.ts +0 -13
- package/types/commands/run/service/create.d.ts +0 -13
- package/types/run/create.d.ts +0 -2
- package/types/run/service/create.d.ts +0 -7
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import _ from 'lodash'
|
|
2
|
-
import chalk from 'chalk'
|
|
3
|
-
import inquirer from 'inquirer'
|
|
4
|
-
import { Command, ICommand } from '../common'
|
|
5
|
-
import { login } from '../../auth'
|
|
6
|
-
import { listEnvs } from '../../env'
|
|
7
|
-
import { CloudBaseError } from '../../error'
|
|
8
|
-
import { InjectParams, ArgsOptions, Log, Logger } from '../../decorators'
|
|
9
|
-
import {
|
|
10
|
-
loadingFactory,
|
|
11
|
-
usageStore,
|
|
12
|
-
collectAgree,
|
|
13
|
-
genClickableLink,
|
|
14
|
-
checkAndGetCredential
|
|
15
|
-
} from '../../utils'
|
|
16
|
-
|
|
17
|
-
function printSuggestion() {
|
|
18
|
-
const tips = `可使用下面命令继续操作:
|
|
19
|
-
|
|
20
|
-
${chalk.gray('–')} 创建免费环境
|
|
21
|
-
|
|
22
|
-
${chalk.cyan('$ tcb env create envName')}
|
|
23
|
-
|
|
24
|
-
${chalk.gray('–')} 初始化云开发项目
|
|
25
|
-
|
|
26
|
-
${chalk.cyan('$ tcb new')}
|
|
27
|
-
|
|
28
|
-
${chalk.gray('–')} 部署云函数
|
|
29
|
-
|
|
30
|
-
${chalk.cyan('$ tcb fn deploy')}
|
|
31
|
-
|
|
32
|
-
${chalk.gray('–')} 查看命令使用介绍
|
|
33
|
-
|
|
34
|
-
${chalk.cyan('$ tcb -h')}
|
|
35
|
-
|
|
36
|
-
Tips:可以使用简写命令 tcb 代替 cloudbase`
|
|
37
|
-
console.log(tips)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async function askForCollectDataConfirm() {
|
|
41
|
-
const agree = await usageStore.get('agreeCollect')
|
|
42
|
-
if (agree) return
|
|
43
|
-
// 询问
|
|
44
|
-
const { confirm } = await inquirer.prompt({
|
|
45
|
-
type: 'confirm',
|
|
46
|
-
name: 'confirm',
|
|
47
|
-
message: '是否同意 Cloudbase CLI 收集您的使用数据以改进产品?',
|
|
48
|
-
default: true
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
if (confirm) {
|
|
52
|
-
await usageStore.set('agreeCollect', true)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
await collectAgree(confirm)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
@ICommand()
|
|
59
|
-
export class LoginCommand extends Command {
|
|
60
|
-
get options() {
|
|
61
|
-
return {
|
|
62
|
-
cmd: 'login',
|
|
63
|
-
options: [
|
|
64
|
-
{
|
|
65
|
-
flags: '-k, --key',
|
|
66
|
-
desc: '使用永久密钥登录'
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
flags: '--apiKeyId <apiKeyId>',
|
|
70
|
-
desc: '腾讯云 API 秘钥 Id'
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
flags: '--apiKey <apiKey>',
|
|
74
|
-
desc: '腾讯云 API 秘钥 Key'
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
flags: '--token [token]',
|
|
78
|
-
desc: '腾讯云 API 临时秘钥 Token'
|
|
79
|
-
}
|
|
80
|
-
],
|
|
81
|
-
desc: '登录腾讯云账号',
|
|
82
|
-
requiredEnvId: false,
|
|
83
|
-
withoutAuth: true
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
@InjectParams()
|
|
88
|
-
async execute(@ArgsOptions() options, @Log() log: Logger) {
|
|
89
|
-
log.verbose(options)
|
|
90
|
-
const { apiKeyId, apiKey, token } = options
|
|
91
|
-
const loading = loadingFactory()
|
|
92
|
-
loading.start('检验登录状态')
|
|
93
|
-
|
|
94
|
-
const credential = await checkAndGetCredential()
|
|
95
|
-
|
|
96
|
-
if (!_.isEmpty(credential)) {
|
|
97
|
-
loading.succeed('您已登录,无需再次登录!')
|
|
98
|
-
return
|
|
99
|
-
} else {
|
|
100
|
-
loading.stop()
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// 通过参数传入 API Key,适用于 CI 场景
|
|
104
|
-
if (apiKey && apiKeyId) {
|
|
105
|
-
loading.start('正在验证腾讯云密钥...')
|
|
106
|
-
|
|
107
|
-
const res = await login({
|
|
108
|
-
token,
|
|
109
|
-
key: true,
|
|
110
|
-
secretKey: apiKey,
|
|
111
|
-
secretId: apiKeyId
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
if (res.code === 'SUCCESS') {
|
|
115
|
-
loading.succeed('登录成功!')
|
|
116
|
-
printSuggestion()
|
|
117
|
-
} else {
|
|
118
|
-
loading.fail('腾讯云密钥验证失败,请检查密钥是否正确或终端网络是否可用!')
|
|
119
|
-
return process.exit(1)
|
|
120
|
-
}
|
|
121
|
-
} else if (options.key) {
|
|
122
|
-
// 兼容临时密钥和永久密钥登录
|
|
123
|
-
const clickableLink = genClickableLink('https://console.cloud.tencent.com/cam/capi')
|
|
124
|
-
console.log(`您可以访问 ${clickableLink} 获取 API 秘钥`)
|
|
125
|
-
|
|
126
|
-
// 使用永久密钥登录
|
|
127
|
-
const { secretId } = await inquirer.prompt({
|
|
128
|
-
type: 'input',
|
|
129
|
-
name: 'secretId',
|
|
130
|
-
message: '请输入腾讯云 SecretID:'
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
const { secretKey } = await inquirer.prompt({
|
|
134
|
-
type: 'input',
|
|
135
|
-
name: 'secretKey',
|
|
136
|
-
message: '请输入腾讯云 SecretKey:'
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
if (!secretId || !secretKey) {
|
|
140
|
-
throw new CloudBaseError('SecretID 或 SecretKey 不能为空')
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
loading.start('正在验证腾讯云密钥...')
|
|
144
|
-
|
|
145
|
-
const res = await login({
|
|
146
|
-
key: true,
|
|
147
|
-
secretId,
|
|
148
|
-
secretKey
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
if (res.code === 'SUCCESS') {
|
|
152
|
-
loading.succeed('登录成功!')
|
|
153
|
-
await askForCollectDataConfirm()
|
|
154
|
-
printSuggestion()
|
|
155
|
-
} else {
|
|
156
|
-
loading.fail('腾讯云密钥验证失败,请检查密钥是否正确或终端网络是否可用!')
|
|
157
|
-
return process.exit(1)
|
|
158
|
-
}
|
|
159
|
-
} else {
|
|
160
|
-
// 使用临时密钥登录-支持自动续期
|
|
161
|
-
loading.start('获取授权中...')
|
|
162
|
-
const res = await login()
|
|
163
|
-
|
|
164
|
-
if (res.code === 'SUCCESS') {
|
|
165
|
-
loading.succeed('登录成功!')
|
|
166
|
-
await askForCollectDataConfirm()
|
|
167
|
-
printSuggestion()
|
|
168
|
-
} else {
|
|
169
|
-
loading.fail(res.msg)
|
|
170
|
-
console.log('Web 授权登录失败,秘钥校验失败!')
|
|
171
|
-
return process.exit(1)
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// 检测用户是否存在,不存在则初始化
|
|
176
|
-
try {
|
|
177
|
-
const envs = await listEnvs()
|
|
178
|
-
if (!envs.length) {
|
|
179
|
-
log.warn('您还没有可用的环境,请使用 cloudbase env:create $name 创建环境')
|
|
180
|
-
}
|
|
181
|
-
} catch (e) {
|
|
182
|
-
// 用户不存在
|
|
183
|
-
// 主账户可以直接使用 env:create 完成初始化工作
|
|
184
|
-
if (e.code === 'ResourceNotFound.UserNotExists') {
|
|
185
|
-
log.error('您还没有可用的环境,请使用 cloudbase env:create $name 创建环境!')
|
|
186
|
-
} else {
|
|
187
|
-
console.error(e)
|
|
188
|
-
throw e
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { ICommand, Command } from '../common'
|
|
2
|
-
|
|
3
|
-
import { logout } from '../../auth'
|
|
4
|
-
import { InjectParams, Log, Logger } from '../../decorators'
|
|
5
|
-
|
|
6
|
-
@ICommand()
|
|
7
|
-
export class LogoutCommand extends Command {
|
|
8
|
-
get options() {
|
|
9
|
-
return {
|
|
10
|
-
cmd: 'logout',
|
|
11
|
-
options: [],
|
|
12
|
-
desc: '登出腾讯云账号',
|
|
13
|
-
requiredEnvId: false,
|
|
14
|
-
withoutAuth: true
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@InjectParams()
|
|
19
|
-
async execute(@Log() log: Logger) {
|
|
20
|
-
await logout()
|
|
21
|
-
|
|
22
|
-
log.success('注销登录成功!')
|
|
23
|
-
}
|
|
24
|
-
}
|
package/src/commands/common.ts
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
import * as Sentry from '@sentry/node'
|
|
3
|
-
import { EventEmitter } from 'events'
|
|
4
|
-
import { program, Command as Commander, Option } from 'commander'
|
|
5
|
-
import { CloudBaseError } from '../error'
|
|
6
|
-
import { ICommandContext } from '../types'
|
|
7
|
-
import {
|
|
8
|
-
usageStore,
|
|
9
|
-
collectUsage,
|
|
10
|
-
loadingFactory,
|
|
11
|
-
getNotification,
|
|
12
|
-
getCloudBaseConfig,
|
|
13
|
-
authSupevisor
|
|
14
|
-
} from '../utils'
|
|
15
|
-
|
|
16
|
-
interface ICommandOption {
|
|
17
|
-
flags: string
|
|
18
|
-
desc: string
|
|
19
|
-
hideHelp?: boolean
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface ICommandOptions {
|
|
23
|
-
// 废弃的命令
|
|
24
|
-
deprecateCmd?: string
|
|
25
|
-
// 基础资源命令
|
|
26
|
-
cmd: string
|
|
27
|
-
// 嵌套子命令
|
|
28
|
-
childCmd?:
|
|
29
|
-
| string
|
|
30
|
-
| {
|
|
31
|
-
cmd: string
|
|
32
|
-
desc: string
|
|
33
|
-
}
|
|
34
|
-
childSubCmd?: string
|
|
35
|
-
// 命令选项
|
|
36
|
-
options: ICommandOption[]
|
|
37
|
-
// 命令描述
|
|
38
|
-
desc: string
|
|
39
|
-
// 使用命令时是否必须要传入 EnvId
|
|
40
|
-
requiredEnvId?: boolean
|
|
41
|
-
// 多数命令都需要登陆,不需要登陆的命令需要特别声明
|
|
42
|
-
withoutAuth?: boolean
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
type CommandConstructor = new () => Command
|
|
46
|
-
|
|
47
|
-
const registrableCommands: CommandConstructor[] = []
|
|
48
|
-
const cmdMap = new Map()
|
|
49
|
-
|
|
50
|
-
// 装饰器收集命令
|
|
51
|
-
export function ICommand(): ClassDecorator {
|
|
52
|
-
return (target: any) => {
|
|
53
|
-
registrableCommands.push(target)
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// 注册命令
|
|
58
|
-
export function registerCommands() {
|
|
59
|
-
registrableCommands.forEach((Command) => {
|
|
60
|
-
const command = new Command()
|
|
61
|
-
command.init()
|
|
62
|
-
})
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// 命令基类
|
|
66
|
-
export abstract class Command extends EventEmitter {
|
|
67
|
-
on(
|
|
68
|
-
event: 'preHandle' | 'afterHandle',
|
|
69
|
-
listener: (ctx: ICommandContext, args: any[]) => void
|
|
70
|
-
): this
|
|
71
|
-
|
|
72
|
-
// eslint-disable-next-line
|
|
73
|
-
on(event: string, listener: (ctx: ICommandContext, args: any[]) => void): this {
|
|
74
|
-
super.on(event, listener)
|
|
75
|
-
return this
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// 初始化命令
|
|
79
|
-
public init() {
|
|
80
|
-
const { cmd, childCmd, childSubCmd, deprecateCmd } = this.options
|
|
81
|
-
|
|
82
|
-
// 不能使用 new Commander 重复声明同一个命令,需要缓存 cmd 实例
|
|
83
|
-
let instance: Commander
|
|
84
|
-
|
|
85
|
-
// 子命令
|
|
86
|
-
if (cmdMap.has(cmd)) {
|
|
87
|
-
instance = cmdMap.get(cmd)
|
|
88
|
-
} else {
|
|
89
|
-
// 新命令或原有的旧命令格式
|
|
90
|
-
instance = program.command(cmd) as Commander
|
|
91
|
-
// @ts-expect-error 这里是用来自定义commander fallback 帮助信息
|
|
92
|
-
instance._helpDescription = '输出帮助信息'
|
|
93
|
-
instance.addHelpCommand('help [command]', '查看命令帮助信息')
|
|
94
|
-
cmdMap.set(cmd, instance)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (childCmd) {
|
|
98
|
-
let cmdKey: string
|
|
99
|
-
let cmdName: string
|
|
100
|
-
let desc: string
|
|
101
|
-
|
|
102
|
-
if (typeof childCmd === 'string') {
|
|
103
|
-
cmdKey = `${cmd}-${childCmd}`
|
|
104
|
-
cmdName = childCmd
|
|
105
|
-
} else {
|
|
106
|
-
cmdKey = `${cmd}-${childCmd.cmd}`
|
|
107
|
-
cmdName = childCmd.cmd
|
|
108
|
-
desc = childCmd.desc
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (cmdMap.has(cmdKey)) {
|
|
112
|
-
instance = cmdMap.get(cmdKey)
|
|
113
|
-
} else {
|
|
114
|
-
instance = instance.command(cmdName) as Commander
|
|
115
|
-
// @ts-expect-error 这里是用来自定义commander fallback 帮助信息
|
|
116
|
-
instance._helpDescription = '查看命令帮助信息'
|
|
117
|
-
desc && instance.description(desc)
|
|
118
|
-
cmdMap.set(cmdKey, instance)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (childSubCmd) {
|
|
122
|
-
instance = instance.command(childSubCmd) as Commander
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
this.createProgram(instance, false)
|
|
127
|
-
|
|
128
|
-
if (deprecateCmd) {
|
|
129
|
-
// 构建新的命令提示
|
|
130
|
-
const newCmd = [cmd, childCmd, childSubCmd]
|
|
131
|
-
.filter((_) => _)
|
|
132
|
-
.map((item) => {
|
|
133
|
-
if (typeof item === 'string') return item
|
|
134
|
-
return item.cmd
|
|
135
|
-
})
|
|
136
|
-
.join(' ')
|
|
137
|
-
this.createProgram(program.command(deprecateCmd) as Commander, true, newCmd)
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
private createProgram(instance: Commander, deprecate: boolean, newCmd?: string) {
|
|
142
|
-
const { cmd, desc, options, requiredEnvId = true, withoutAuth = false } = this.options
|
|
143
|
-
instance.storeOptionsAsProperties(false)
|
|
144
|
-
options.forEach((option) => {
|
|
145
|
-
|
|
146
|
-
const { hideHelp } = option
|
|
147
|
-
if(hideHelp) {
|
|
148
|
-
instance.addOption(new Option(option.flags, option.desc).hideHelp())
|
|
149
|
-
} else {
|
|
150
|
-
instance.option(option.flags, option.desc)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
instance.description(desc)
|
|
156
|
-
|
|
157
|
-
// tcb <cmd> params options
|
|
158
|
-
instance.action(async (...args) => {
|
|
159
|
-
// 命令的参数
|
|
160
|
-
const params = args.slice(0, -1)
|
|
161
|
-
const cmdOptions = instance.opts()
|
|
162
|
-
const parentOptions = program.opts()
|
|
163
|
-
|
|
164
|
-
const config = await getCloudBaseConfig(parentOptions?.configFile)
|
|
165
|
-
const envId = cmdOptions?.envId || config?.envId
|
|
166
|
-
|
|
167
|
-
const loginState = await authSupevisor.getLoginState()
|
|
168
|
-
|
|
169
|
-
// 校验登陆态
|
|
170
|
-
if (!withoutAuth && !loginState) {
|
|
171
|
-
throw new CloudBaseError('无有效身份信息,请使用 cloudbase login 登录')
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (!envId && requiredEnvId) {
|
|
175
|
-
throw new CloudBaseError(
|
|
176
|
-
'未识别到有效的环境 Id,请使用 cloudbaserc 配置文件进行操作或通过 -e 参数指定环境 Id'
|
|
177
|
-
)
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
const ctx: ICommandContext = {
|
|
181
|
-
cmd,
|
|
182
|
-
envId,
|
|
183
|
-
config,
|
|
184
|
-
params,
|
|
185
|
-
options: cmdOptions
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// 处理前
|
|
189
|
-
this.emit('preHandle', ctx, args.slice(0, -1))
|
|
190
|
-
await this.preHandle()
|
|
191
|
-
|
|
192
|
-
// 废弃警告
|
|
193
|
-
if (deprecate) {
|
|
194
|
-
console.log(
|
|
195
|
-
chalk.bold.yellowBright(
|
|
196
|
-
'\n',
|
|
197
|
-
`⚠️ 此命令将被废弃,请使用新的命令 tcb ${newCmd} 代替`
|
|
198
|
-
),
|
|
199
|
-
'\n'
|
|
200
|
-
)
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// 命令处理
|
|
204
|
-
await this.execute(ctx)
|
|
205
|
-
|
|
206
|
-
this.emit('afterHandle', ctx, args)
|
|
207
|
-
// 上报数据
|
|
208
|
-
this.afterHandle(ctx)
|
|
209
|
-
})
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
private async preHandle() {
|
|
213
|
-
const loading = loadingFactory()
|
|
214
|
-
try {
|
|
215
|
-
loading.start('数据加载中...')
|
|
216
|
-
const res = await getNotification()
|
|
217
|
-
loading.stop()
|
|
218
|
-
if (!res) return
|
|
219
|
-
const { title, content } = res
|
|
220
|
-
console.log(chalk.bold.cyan(title))
|
|
221
|
-
console.log(content, '\n')
|
|
222
|
-
} catch (e) {
|
|
223
|
-
loading.stop()
|
|
224
|
-
Sentry.captureException(e)
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
private async afterHandle(ctx) {
|
|
229
|
-
try {
|
|
230
|
-
const { cmd } = ctx
|
|
231
|
-
const agree = await usageStore.get('agreeCollect')
|
|
232
|
-
// 不同意上报、不上报使用数据
|
|
233
|
-
if (!agree) return
|
|
234
|
-
await collectUsage(cmd)
|
|
235
|
-
} catch (e) {
|
|
236
|
-
// 上报错误
|
|
237
|
-
Sentry.captureException(e)
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// 执行命令
|
|
242
|
-
abstract execute(...args: any[]): void
|
|
243
|
-
|
|
244
|
-
// 获取命令参数
|
|
245
|
-
abstract get options(): ICommandOptions
|
|
246
|
-
}
|
package/src/commands/env/base.ts
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Command, ICommand } from '../common'
|
|
2
|
-
import { CloudBaseError } from '../../error'
|
|
3
|
-
import { listEnvs, updateEnvInfo } from '../../env'
|
|
4
|
-
import { InjectParams, EnvId, ArgsParams, Log, Logger } from '../../decorators'
|
|
5
|
-
import { printHorizontalTable, loadingFactory } from '../../utils'
|
|
6
|
-
|
|
7
|
-
@ICommand()
|
|
8
|
-
export class EnvListCommand extends Command {
|
|
9
|
-
get options() {
|
|
10
|
-
return {
|
|
11
|
-
cmd: 'env',
|
|
12
|
-
childCmd: 'list',
|
|
13
|
-
deprecateCmd: 'env:list',
|
|
14
|
-
options: [],
|
|
15
|
-
desc: '展示云开发环境信息',
|
|
16
|
-
requiredEnvId: false
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@InjectParams()
|
|
21
|
-
async execute(@Log() log: Logger) {
|
|
22
|
-
const loading = loadingFactory()
|
|
23
|
-
loading.start('数据加载中...')
|
|
24
|
-
const data = await listEnvs()
|
|
25
|
-
loading.stop()
|
|
26
|
-
const head = ['名称', '环境 Id', '套餐版本', '来源', '创建时间', '环境状态']
|
|
27
|
-
|
|
28
|
-
const sortData = data.sort((prev, next) => {
|
|
29
|
-
if (prev.Alias > next.Alias) {
|
|
30
|
-
return 1
|
|
31
|
-
}
|
|
32
|
-
if (prev.Alias < next.Alias) {
|
|
33
|
-
return -1
|
|
34
|
-
}
|
|
35
|
-
return 0
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
const tableData = sortData.map((item) => [
|
|
39
|
-
item.Alias,
|
|
40
|
-
item.EnvId,
|
|
41
|
-
item.PackageName || '按量计费',
|
|
42
|
-
item.Source === 'miniapp' ? '小程序' : '云开发',
|
|
43
|
-
item.CreateTime,
|
|
44
|
-
item.Status === 'NORMAL' ? '正常' : '不可用'
|
|
45
|
-
])
|
|
46
|
-
|
|
47
|
-
printHorizontalTable(head, tableData)
|
|
48
|
-
// 不可用环境警告
|
|
49
|
-
const unavailableEnv = data.find((item) => item.Status === 'UNAVAILABLE')
|
|
50
|
-
if (unavailableEnv) {
|
|
51
|
-
log.warn(`您的环境中存在不可用的环境:[${unavailableEnv.EnvId}],请留意!`)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@ICommand()
|
|
57
|
-
export class EnvRenameCommand extends Command {
|
|
58
|
-
get options() {
|
|
59
|
-
return {
|
|
60
|
-
cmd: 'env',
|
|
61
|
-
childCmd: 'rename <name>',
|
|
62
|
-
deprecateCmd: 'env:rename <name>',
|
|
63
|
-
options: [
|
|
64
|
-
{
|
|
65
|
-
flags: '-e, --envId <envId>',
|
|
66
|
-
desc: '环境 Id'
|
|
67
|
-
}
|
|
68
|
-
],
|
|
69
|
-
desc: '修改云开发环境别名',
|
|
70
|
-
requiredEnvId: false
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
@InjectParams()
|
|
75
|
-
async execute(@EnvId() envId, @ArgsParams() params, @Log() log: Logger) {
|
|
76
|
-
log.verbose(params)
|
|
77
|
-
|
|
78
|
-
const name = params?.[0]
|
|
79
|
-
if (!name) {
|
|
80
|
-
throw new CloudBaseError('环境别名不能为空!')
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
await updateEnvInfo({
|
|
84
|
-
envId: envId,
|
|
85
|
-
alias: name
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
log.success('更新环境别名成功 !')
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import inquirer from 'inquirer'
|
|
2
|
-
import { createEnv, getEnvLimit } from '../../env'
|
|
3
|
-
import { loadingFactory, genClickableLink } from '../../utils'
|
|
4
|
-
import { CloudBaseError } from '../../error'
|
|
5
|
-
import { Command, ICommand } from '../common'
|
|
6
|
-
import { InjectParams, ArgsParams } from '../../decorators'
|
|
7
|
-
|
|
8
|
-
@ICommand()
|
|
9
|
-
export class CreateCommand extends Command {
|
|
10
|
-
get options() {
|
|
11
|
-
return {
|
|
12
|
-
cmd: 'env',
|
|
13
|
-
childCmd: 'create <alias>',
|
|
14
|
-
deprecateCmd: 'env:create <alias>',
|
|
15
|
-
options: [],
|
|
16
|
-
desc: '创建云开发免费环境',
|
|
17
|
-
requiredEnvId: false
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@InjectParams()
|
|
22
|
-
async execute(@ArgsParams() params) {
|
|
23
|
-
const alias = params?.[0]
|
|
24
|
-
if (!alias) {
|
|
25
|
-
throw new CloudBaseError('环境名称不能为空!')
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const loading = loadingFactory()
|
|
29
|
-
|
|
30
|
-
// 检查环境限制数量
|
|
31
|
-
loading.start('检查中...')
|
|
32
|
-
const { CurrentFreeEnvNum, MaxFreeEnvNum, CurrentEnvNum, MaxEnvNum } = await getEnvLimit()
|
|
33
|
-
loading.stop()
|
|
34
|
-
|
|
35
|
-
if (+CurrentFreeEnvNum >= +MaxFreeEnvNum) {
|
|
36
|
-
const link = genClickableLink('https://console.cloud.tencent.com/tcb')
|
|
37
|
-
throw new CloudBaseError(
|
|
38
|
-
`免费环境数量已达上限,无法创建免费的环境,请到云开发-控制台中创建付费环境\n👉 ${link}`
|
|
39
|
-
)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (+CurrentEnvNum >= +MaxEnvNum) {
|
|
43
|
-
throw new CloudBaseError('环境数量已达上限,无法创建新的环境!')
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const { payment } = await inquirer.prompt({
|
|
47
|
-
type: 'list',
|
|
48
|
-
name: 'payment',
|
|
49
|
-
choices: [
|
|
50
|
-
{
|
|
51
|
-
name: '按量计费(免费配额)',
|
|
52
|
-
value: 'postpay'
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
name: '包年包月(免费版本)',
|
|
56
|
-
value: 'prepay'
|
|
57
|
-
}
|
|
58
|
-
],
|
|
59
|
-
message: '请选择环境计费模式:',
|
|
60
|
-
default: 'postpay'
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
// 通过控制台授权登录的用户无订单支付权限
|
|
64
|
-
const { confirm } = await inquirer.prompt({
|
|
65
|
-
type: 'confirm',
|
|
66
|
-
name: 'confirm',
|
|
67
|
-
message:
|
|
68
|
-
'因支付权限问题,仅支持通过 API 秘钥登录的主账户使用 CLI 创建包年包月免费环境,其他用户需要登录控制台支付相关订单才能完成环境创建,是否继续?',
|
|
69
|
-
default: false
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
if (!confirm) {
|
|
73
|
-
throw new CloudBaseError('创建环境流程终止')
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
loading.start('环境创建中...')
|
|
77
|
-
try {
|
|
78
|
-
const res = await createEnv({
|
|
79
|
-
alias,
|
|
80
|
-
paymentMode: payment
|
|
81
|
-
})
|
|
82
|
-
} catch (e) {
|
|
83
|
-
if (e.code === 'ResourceInsufficient') {
|
|
84
|
-
throw new CloudBaseError('环境数量已达上限,无法创建新的环境!')
|
|
85
|
-
}
|
|
86
|
-
throw e
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
loading.succeed('创建环境成功,初始化预计需要花费 3 分钟')
|
|
90
|
-
console.log('你可以使用 cloudbase init 创建云开发项目')
|
|
91
|
-
}
|
|
92
|
-
}
|