@cloudbase/cli 2.0.3 → 2.0.4-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.
Files changed (199) hide show
  1. package/.editorconfig +9 -9
  2. package/.eslintignore +7 -7
  3. package/.eslintrc +35 -35
  4. package/.prettierrc.js +29 -29
  5. package/.vscode/launch.json +16 -16
  6. package/LICENSE +5 -5
  7. package/README.md +35 -35
  8. package/bin/cloudbase.js +5 -5
  9. package/bin/tcb.js +0 -0
  10. package/changelog.md +6 -6
  11. package/jest.config.js +17 -17
  12. package/lib/commands/account/login.js +18 -18
  13. package/lib/commands/storage/storage.js +1 -1
  14. package/lib/env/login.js +7 -7
  15. package/package.json +2 -2
  16. package/post-install.js +61 -61
  17. package/runtime/nodejs/bootstrap.js +255 -255
  18. package/runtime/nodejs/runtime.js +183 -183
  19. package/src/auth/index.ts +1 -1
  20. package/src/auth/login.ts +91 -91
  21. package/src/auth/logout.ts +7 -7
  22. package/src/commands/account/index.ts +2 -2
  23. package/src/commands/account/login.ts +192 -192
  24. package/src/commands/account/logout.ts +24 -24
  25. package/src/commands/env/base.ts +90 -90
  26. package/src/commands/env/create.ts +92 -92
  27. package/src/commands/env/domain.ts +186 -186
  28. package/src/commands/env/index.ts +4 -4
  29. package/src/commands/env/login.ts +235 -235
  30. package/src/commands/framework/index.ts +124 -124
  31. package/src/commands/functions/alias/getRoute.ts +76 -76
  32. package/src/commands/functions/alias/index.ts +2 -2
  33. package/src/commands/functions/alias/setRoute.ts +82 -82
  34. package/src/commands/functions/code-download.ts +100 -100
  35. package/src/commands/functions/code-update.ts +62 -62
  36. package/src/commands/functions/concurrency/delete.ts +45 -45
  37. package/src/commands/functions/concurrency/index.ts +2 -2
  38. package/src/commands/functions/concurrency/list.ts +58 -58
  39. package/src/commands/functions/concurrency/set.ts +47 -47
  40. package/src/commands/functions/config-update.ts +76 -76
  41. package/src/commands/functions/copy.ts +62 -62
  42. package/src/commands/functions/delete.ts +79 -79
  43. package/src/commands/functions/deploy.ts +293 -293
  44. package/src/commands/functions/detail.ts +138 -138
  45. package/src/commands/functions/index.ts +16 -16
  46. package/src/commands/functions/invoke.ts +121 -121
  47. package/src/commands/functions/layer/bind.ts +182 -182
  48. package/src/commands/functions/layer/common.ts +8 -8
  49. package/src/commands/functions/layer/create.ts +49 -49
  50. package/src/commands/functions/layer/delete.ts +73 -73
  51. package/src/commands/functions/layer/download.ts +92 -92
  52. package/src/commands/functions/layer/index.ts +7 -7
  53. package/src/commands/functions/layer/list.ts +94 -94
  54. package/src/commands/functions/layer/sort.ts +76 -76
  55. package/src/commands/functions/list.ts +68 -68
  56. package/src/commands/functions/log.ts +148 -148
  57. package/src/commands/functions/run.ts +249 -249
  58. package/src/commands/functions/trigger-create.ts +79 -79
  59. package/src/commands/functions/trigger-delete.ts +105 -105
  60. package/src/commands/functions/version/index.ts +1 -1
  61. package/src/commands/functions/version/list.ts +73 -73
  62. package/src/commands/functions/version/publish.ts +43 -43
  63. package/src/commands/gateway/create.ts +109 -109
  64. package/src/commands/gateway/delete.ts +81 -81
  65. package/src/commands/gateway/domain.ts +159 -159
  66. package/src/commands/gateway/index.ts +5 -5
  67. package/src/commands/gateway/list.ts +76 -76
  68. package/src/commands/gateway/switch.ts +107 -107
  69. package/src/commands/helpers/index.ts +2 -2
  70. package/src/commands/helpers/init.ts +431 -431
  71. package/src/commands/helpers/new.ts +117 -117
  72. package/src/commands/helpers/open.ts +67 -67
  73. package/src/commands/hosting/hosting.ts +360 -360
  74. package/src/commands/index.ts +13 -13
  75. package/src/commands/lowcode/app.ts +34 -34
  76. package/src/commands/lowcode/comps.ts +322 -322
  77. package/src/commands/lowcode/index.ts +1 -1
  78. package/src/commands/lowcode/utils.ts +24 -24
  79. package/src/commands/run/image/index.ts +4 -4
  80. package/src/commands/run/standalonegateway/common.ts +7 -7
  81. package/src/commands/run/standalonegateway/create.ts +85 -85
  82. package/src/commands/run/standalonegateway/destroy.ts +59 -59
  83. package/src/commands/run/standalonegateway/index.ts +4 -4
  84. package/src/commands/run/standalonegateway/list.ts +53 -53
  85. package/src/commands/run/standalonegateway/package.ts +62 -62
  86. package/src/commands/run/standalonegateway/turn.ts +63 -63
  87. package/src/commands/run/version/index.ts +4 -4
  88. package/src/commands/smart.ts +132 -132
  89. package/src/commands/storage/storage.ts +464 -464
  90. package/src/commands/third/thirdAttach.ts +49 -49
  91. package/src/completion/index.ts +13 -13
  92. package/src/decorators/captureError.ts +25 -25
  93. package/src/decorators/constants.ts +12 -12
  94. package/src/decorators/deprecate.ts +25 -25
  95. package/src/decorators/guard.ts +42 -42
  96. package/src/decorators/index.ts +7 -7
  97. package/src/decorators/injectParams.ts +54 -54
  98. package/src/decorators/params/common.ts +28 -28
  99. package/src/decorators/params/index.ts +35 -35
  100. package/src/env/domain.ts +33 -33
  101. package/src/env/index.ts +63 -63
  102. package/src/env/login.ts +80 -80
  103. package/src/error.ts +36 -36
  104. package/src/function/alias.ts +43 -43
  105. package/src/function/base.ts +253 -253
  106. package/src/function/code.ts +55 -55
  107. package/src/function/concurrency.ts +57 -57
  108. package/src/function/create.ts +78 -78
  109. package/src/function/delete.ts +42 -42
  110. package/src/function/index.ts +10 -10
  111. package/src/function/layer/attach.ts +68 -68
  112. package/src/function/layer/create.ts +63 -63
  113. package/src/function/layer/delete.ts +21 -21
  114. package/src/function/layer/download.ts +54 -54
  115. package/src/function/layer/index.ts +7 -7
  116. package/src/function/layer/list.ts +32 -32
  117. package/src/function/layer/sort.ts +24 -24
  118. package/src/function/trigger.ts +97 -97
  119. package/src/function/update.ts +35 -35
  120. package/src/function/version.ts +38 -38
  121. package/src/function/vpc.ts +22 -22
  122. package/src/gateway/index.ts +137 -137
  123. package/src/hosting.ts +212 -212
  124. package/src/index.ts +13 -13
  125. package/src/logger.ts +17 -17
  126. package/src/run/create.ts +23 -23
  127. package/src/run/delete.ts +15 -15
  128. package/src/run/image/build.ts +36 -36
  129. package/src/run/image/delete.ts +13 -13
  130. package/src/run/image/index.ts +3 -3
  131. package/src/run/image/info.ts +26 -26
  132. package/src/run/list.ts +29 -29
  133. package/src/run/repo.ts +24 -24
  134. package/src/run/standalonegateway/create.ts +24 -24
  135. package/src/run/standalonegateway/destroy.ts +19 -19
  136. package/src/run/standalonegateway/index.ts +4 -4
  137. package/src/run/standalonegateway/list.ts +74 -74
  138. package/src/run/standalonegateway/package/list.ts +24 -24
  139. package/src/run/standalonegateway/turn/index.ts +1 -1
  140. package/src/run/standalonegateway/turn/off.ts +19 -19
  141. package/src/run/standalonegateway/turn/on.ts +19 -19
  142. package/src/run/version/create.ts +68 -68
  143. package/src/run/version/delete.ts +15 -15
  144. package/src/run/version/index.ts +5 -5
  145. package/src/run/version/list.ts +16 -16
  146. package/src/run/version/modify.ts +16 -16
  147. package/src/run/version/repo.ts +27 -27
  148. package/src/run/version/update.ts +58 -58
  149. package/src/storage.ts +114 -114
  150. package/src/third/index.ts +12 -12
  151. package/src/utils/auth.ts +15 -15
  152. package/src/utils/cli-table.ts +23 -23
  153. package/src/utils/config.ts +39 -39
  154. package/src/utils/env.ts +244 -244
  155. package/src/utils/fs/del.ts +5 -5
  156. package/src/utils/fs/index.ts +71 -71
  157. package/src/utils/function-packer.ts +97 -97
  158. package/src/utils/log.ts +81 -81
  159. package/src/utils/net/cloud-api-request.ts +62 -62
  160. package/src/utils/net/credential.ts +53 -53
  161. package/src/utils/net/index.ts +4 -4
  162. package/src/utils/net/manager-service.ts +36 -36
  163. package/src/utils/net/proxy.ts +6 -6
  164. package/src/utils/notice.ts +28 -28
  165. package/src/utils/output/highlight.ts +5 -5
  166. package/src/utils/output/index.ts +2 -2
  167. package/src/utils/output/link.ts +10 -10
  168. package/src/utils/output/loading.ts +82 -82
  169. package/src/utils/parallel.ts +82 -82
  170. package/src/utils/platform/index.ts +2 -2
  171. package/src/utils/platform/mac.ts +21 -21
  172. package/src/utils/platform/os.ts +64 -64
  173. package/src/utils/platform/port.ts +10 -10
  174. package/src/utils/progress-bar.ts +38 -38
  175. package/src/utils/prompt/select.ts +59 -59
  176. package/src/utils/reporter/agree.ts +20 -20
  177. package/src/utils/reporter/download.ts +26 -26
  178. package/src/utils/reporter/index.ts +3 -3
  179. package/src/utils/reporter/usage.ts +20 -20
  180. package/src/utils/store/auth.ts +49 -49
  181. package/src/utils/store/common.ts +8 -8
  182. package/src/utils/store/db.ts +68 -68
  183. package/src/utils/store/index.ts +4 -4
  184. package/src/utils/store/usage.ts +12 -12
  185. package/src/utils/template.ts +170 -170
  186. package/src/utils/tools/encoding.ts +8 -8
  187. package/src/utils/tools/index.ts +4 -4
  188. package/src/utils/tools/object.ts +33 -33
  189. package/src/utils/tools/time.ts +38 -38
  190. package/src/utils/tools/uid.ts +19 -19
  191. package/templates/html/loginFail.html +90 -90
  192. package/templates/html/loginSuccess.html +86 -86
  193. package/templates/server/node/_gitignore +54 -54
  194. package/templates/server/node/cloudbaserc.json +10 -10
  195. package/templates/server/node/index.js +5 -5
  196. package/templates/server/node/package.json +9 -9
  197. package/tsconfig.json +19 -19
  198. package/tsconfig.test.json +13 -13
  199. package/.vscode/settings.json +0 -3
@@ -1,192 +1,192 @@
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
+ 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 +1,24 @@
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
- }
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
+ }
@@ -1,90 +1,90 @@
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
+ 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
+ }