@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,138 +1,138 @@
1
- import chalk from 'chalk'
2
- import { Command, ICommand } from '../common'
3
- import { CloudBaseError } from '../../error'
4
- import { getFunctionDetail } from '../../function'
5
- import { loadingFactory, printHorizontalTable } from '../../utils'
6
- import { InjectParams, ArgsParams, CmdContext, Log, Logger } from '../../decorators'
7
-
8
- const StatusMap = {
9
- Active: '部署完成',
10
- Creating: '创建中',
11
- CreateFailed: '创建失败',
12
- Updating: '更新中',
13
- UpdateFailed: '更新失败'
14
- }
15
-
16
- @ICommand()
17
- export class FunctionDetail extends Command {
18
- get options() {
19
- return {
20
- cmd: 'fn',
21
- childCmd: 'detail <name>',
22
- deprecateCmd: 'functions:detail <name>',
23
- options: [
24
- {
25
- flags: '-e, --envId <envId>',
26
- desc: '环境 Id'
27
- },
28
- {
29
- flags: '--code-secret <codeSecret>',
30
- desc: '代码加密的函数的 CodeSecret'
31
- }
32
- ],
33
- desc: '获取云函数信息'
34
- }
35
- }
36
-
37
- @InjectParams()
38
- async execute(@CmdContext() ctx, @ArgsParams() params) {
39
- const { envId, options } = ctx
40
- const { codeSecret } = options
41
- const name = params?.[0]
42
-
43
- if (!name) {
44
- throw new CloudBaseError('请指定云函数名称!')
45
- }
46
-
47
- const loading = loadingFactory()
48
- loading.start('获取函数信息中...')
49
-
50
- try {
51
- const data = await getFunctionDetail({
52
- envId,
53
- functionName: name,
54
- codeSecret
55
- })
56
-
57
- loading.stop()
58
- this.logDetail(data, name)
59
- } catch (e) {
60
- if (e.code === 'ResourceNotFound.FunctionName') {
61
- throw new CloudBaseError(`[${name}] 函数不存在`)
62
- }
63
- throw e
64
- } finally {
65
- loading.stop()
66
- }
67
- }
68
-
69
- @InjectParams()
70
- logDetail(info, name, @Log() log?: Logger) {
71
- const ResMap = {
72
- Namespace: '环境 Id',
73
- FunctionName: '函数名称',
74
- Status: '状态',
75
- CodeSize: '代码大小(B)',
76
- Environment: '环境变量(key=value)',
77
- Handler: '执行方法',
78
- MemorySize: '内存配置(MB)',
79
- Runtime: '运行环境',
80
- Timeout: '超时时间(S)',
81
- VpcConfig: '网络配置',
82
- Triggers: '触发器',
83
- ModTime: '修改时间',
84
- InstallDependency: '自动安装依赖'
85
- }
86
-
87
- const head = ['信息', '值']
88
-
89
- const tableData = Object.keys(ResMap).map((key) => {
90
- if (key === 'Status') {
91
- return [ResMap[key], StatusMap[info[key]]]
92
- }
93
- // 将环境变量数组转换成 key=value 的形式
94
- if (key === 'Environment') {
95
- const data =
96
- info[key].Variables.map((item) => `${item.Key}=${item.Value}`).join('; ') ||
97
- '无'
98
- return [ResMap[key], data]
99
- }
100
-
101
- if (key === 'Triggers') {
102
- let data = info[key]
103
- .map((item) => `${item.TriggerName}:${item.TriggerDesc}`)
104
- .join('\n')
105
- data = data.length ? `${data}\n` : '无'
106
- return [ResMap[key], data]
107
- }
108
-
109
- if (key === 'VpcConfig') {
110
- const { vpc, subnet }: any = info[key]
111
- if (typeof vpc === 'string') {
112
- return [ResMap[key], `${vpc}/${subnet}`]
113
- } else if (vpc && subnet) {
114
- const data = `${vpc.VpcId}(${vpc.VpcName} | ${subnet.CidrBlock}) / ${subnet.SubnetId}(${subnet.SubnetName})`
115
-
116
- return [ResMap[key], data]
117
- } else {
118
- return [ResMap[key], '无']
119
- }
120
- }
121
-
122
- if (key === 'CodeInfo') {
123
- return [ResMap[key], info[key]]
124
- }
125
-
126
- return [ResMap[key], info[key]]
127
- })
128
-
129
- if (info.StatusDesc) {
130
- tableData.push(['状态描述', info.StatusDesc])
131
- }
132
-
133
- log.info(chalk.green(`云函数 [${name}] 详情:`))
134
- printHorizontalTable(head, tableData)
135
- log.info('函数代码(Java 函数以及入口大于 1 M 的函数不会显示)\n')
136
- log.log(info['CodeInfo'])
137
- }
138
- }
1
+ import chalk from 'chalk'
2
+ import { Command, ICommand } from '../common'
3
+ import { CloudBaseError } from '../../error'
4
+ import { getFunctionDetail } from '../../function'
5
+ import { loadingFactory, printHorizontalTable } from '../../utils'
6
+ import { InjectParams, ArgsParams, CmdContext, Log, Logger } from '../../decorators'
7
+
8
+ const StatusMap = {
9
+ Active: '部署完成',
10
+ Creating: '创建中',
11
+ CreateFailed: '创建失败',
12
+ Updating: '更新中',
13
+ UpdateFailed: '更新失败'
14
+ }
15
+
16
+ @ICommand()
17
+ export class FunctionDetail extends Command {
18
+ get options() {
19
+ return {
20
+ cmd: 'fn',
21
+ childCmd: 'detail <name>',
22
+ deprecateCmd: 'functions:detail <name>',
23
+ options: [
24
+ {
25
+ flags: '-e, --envId <envId>',
26
+ desc: '环境 Id'
27
+ },
28
+ {
29
+ flags: '--code-secret <codeSecret>',
30
+ desc: '代码加密的函数的 CodeSecret'
31
+ }
32
+ ],
33
+ desc: '获取云函数信息'
34
+ }
35
+ }
36
+
37
+ @InjectParams()
38
+ async execute(@CmdContext() ctx, @ArgsParams() params) {
39
+ const { envId, options } = ctx
40
+ const { codeSecret } = options
41
+ const name = params?.[0]
42
+
43
+ if (!name) {
44
+ throw new CloudBaseError('请指定云函数名称!')
45
+ }
46
+
47
+ const loading = loadingFactory()
48
+ loading.start('获取函数信息中...')
49
+
50
+ try {
51
+ const data = await getFunctionDetail({
52
+ envId,
53
+ functionName: name,
54
+ codeSecret
55
+ })
56
+
57
+ loading.stop()
58
+ this.logDetail(data, name)
59
+ } catch (e) {
60
+ if (e.code === 'ResourceNotFound.FunctionName') {
61
+ throw new CloudBaseError(`[${name}] 函数不存在`)
62
+ }
63
+ throw e
64
+ } finally {
65
+ loading.stop()
66
+ }
67
+ }
68
+
69
+ @InjectParams()
70
+ logDetail(info, name, @Log() log?: Logger) {
71
+ const ResMap = {
72
+ Namespace: '环境 Id',
73
+ FunctionName: '函数名称',
74
+ Status: '状态',
75
+ CodeSize: '代码大小(B)',
76
+ Environment: '环境变量(key=value)',
77
+ Handler: '执行方法',
78
+ MemorySize: '内存配置(MB)',
79
+ Runtime: '运行环境',
80
+ Timeout: '超时时间(S)',
81
+ VpcConfig: '网络配置',
82
+ Triggers: '触发器',
83
+ ModTime: '修改时间',
84
+ InstallDependency: '自动安装依赖'
85
+ }
86
+
87
+ const head = ['信息', '值']
88
+
89
+ const tableData = Object.keys(ResMap).map((key) => {
90
+ if (key === 'Status') {
91
+ return [ResMap[key], StatusMap[info[key]]]
92
+ }
93
+ // 将环境变量数组转换成 key=value 的形式
94
+ if (key === 'Environment') {
95
+ const data =
96
+ info[key].Variables.map((item) => `${item.Key}=${item.Value}`).join('; ') ||
97
+ '无'
98
+ return [ResMap[key], data]
99
+ }
100
+
101
+ if (key === 'Triggers') {
102
+ let data = info[key]
103
+ .map((item) => `${item.TriggerName}:${item.TriggerDesc}`)
104
+ .join('\n')
105
+ data = data.length ? `${data}\n` : '无'
106
+ return [ResMap[key], data]
107
+ }
108
+
109
+ if (key === 'VpcConfig') {
110
+ const { vpc, subnet }: any = info[key]
111
+ if (typeof vpc === 'string') {
112
+ return [ResMap[key], `${vpc}/${subnet}`]
113
+ } else if (vpc && subnet) {
114
+ const data = `${vpc.VpcId}(${vpc.VpcName} | ${subnet.CidrBlock}) / ${subnet.SubnetId}(${subnet.SubnetName})`
115
+
116
+ return [ResMap[key], data]
117
+ } else {
118
+ return [ResMap[key], '无']
119
+ }
120
+ }
121
+
122
+ if (key === 'CodeInfo') {
123
+ return [ResMap[key], info[key]]
124
+ }
125
+
126
+ return [ResMap[key], info[key]]
127
+ })
128
+
129
+ if (info.StatusDesc) {
130
+ tableData.push(['状态描述', info.StatusDesc])
131
+ }
132
+
133
+ log.info(chalk.green(`云函数 [${name}] 详情:`))
134
+ printHorizontalTable(head, tableData)
135
+ log.info('函数代码(Java 函数以及入口大于 1 M 的函数不会显示)\n')
136
+ log.log(info['CodeInfo'])
137
+ }
138
+ }
@@ -1,16 +1,16 @@
1
- export * from './deploy'
2
- export * from './list'
3
- export * from './delete'
4
- export * from './config-update'
5
- export * from './invoke'
6
- export * from './log'
7
- export * from './detail'
8
- export * from './copy'
9
- export * from './run'
10
- export * from './trigger-create'
11
- export * from './trigger-delete'
12
- export * from './code-update'
13
- export * from './code-download'
14
- export * from './version'
15
- export * from './concurrency'
16
- export * from './alias'
1
+ export * from './deploy'
2
+ export * from './list'
3
+ export * from './delete'
4
+ export * from './config-update'
5
+ export * from './invoke'
6
+ export * from './log'
7
+ export * from './detail'
8
+ export * from './copy'
9
+ export * from './run'
10
+ export * from './trigger-create'
11
+ export * from './trigger-delete'
12
+ export * from './code-update'
13
+ export * from './code-download'
14
+ export * from './version'
15
+ export * from './concurrency'
16
+ export * from './alias'
@@ -1,121 +1,121 @@
1
- import chalk from 'chalk'
2
- import inquirer from 'inquirer'
3
- import { Command, ICommand } from '../common'
4
- import { CloudBaseError } from '../../error'
5
- import { batchInvokeFunctions, invokeFunction } from '../../function'
6
- import { InjectParams, CmdContext, ArgsParams, Log, Logger } from '../../decorators'
7
-
8
- @ICommand()
9
- export class InvokeFunction extends Command {
10
- get options() {
11
- return {
12
- cmd: 'fn',
13
- childCmd: 'invoke [name]',
14
- deprecateCmd: 'functions:invoke [name]',
15
- options: [
16
- {
17
- flags: '-e, --envId <envId>',
18
- desc: '环境 Id'
19
- },
20
- {
21
- flags: '--params <params>',
22
- desc: '调用函数的入参,JSON 字符串形式'
23
- }
24
- ],
25
- desc: '触发云端部署的云函数'
26
- }
27
- }
28
-
29
- @InjectParams()
30
- async execute(@CmdContext() ctx, @ArgsParams() argsParams, @Log() log: Logger) {
31
- const {
32
- envId,
33
- config: { functions },
34
- options
35
- } = ctx
36
- const name = argsParams?.[0]
37
- let isBatchInvoke = false
38
-
39
- // 不指定云函数名称,触发配置文件中的所有函数
40
- if (!name) {
41
- const { isBatch } = await inquirer.prompt({
42
- type: 'confirm',
43
- name: 'isBatch',
44
- message: '无云函数名称,是否需要触发配置文件中的全部云函数?',
45
- default: false
46
- })
47
-
48
- isBatchInvoke = isBatch
49
-
50
- if (!isBatchInvoke) {
51
- throw new CloudBaseError('请指定云函数名称!')
52
- }
53
- }
54
-
55
- let params
56
- const jsonStringParams = options.params
57
- if (jsonStringParams) {
58
- try {
59
- params = JSON.parse(jsonStringParams)
60
- } catch (e) {
61
- console.log(e)
62
- throw new CloudBaseError('jsonStringParams 参数不是正确的 JSON 字符串')
63
- }
64
- }
65
-
66
- if (isBatchInvoke) {
67
- return batchInvokeFunctions({
68
- envId,
69
- functions,
70
- log: true
71
- })
72
- }
73
-
74
- const func = functions.find((item) => item.name === name)
75
-
76
- const configParams = func?.params ? func.params : undefined
77
-
78
- const result = await invokeFunction({
79
- envId,
80
- functionName: name,
81
- params: params || configParams
82
- })
83
-
84
- if (result.InvokeResult === 0) {
85
- log.success(`[${name}] 调用成功\n`)
86
- } else {
87
- log.error(`[${name}] 调用失败\n`)
88
- }
89
-
90
- const ResMap = {
91
- Duration: '运行时间',
92
- MemUsage: '内存占用',
93
- BillDuration: '计费时间',
94
- FunctionRequestId: '请求 Id ',
95
- RetMsg: '返回结果',
96
- ErrMsg: '错误信息',
97
- Log: '调用日志'
98
- }
99
-
100
- const formatInfo = {
101
- ...result,
102
- Duration: Number(result.Duration).toFixed(2) + 'ms',
103
- MemUsage: Number(Number(result.MemUsage) / Math.pow(1024, 2)).toFixed(2) + 'MB',
104
- BillDuration: result.BillDuration + 'ms'
105
- }
106
-
107
- const logInfo = Object.keys(ResMap)
108
- .map((key) => {
109
- if (key === 'Log') {
110
- return `${chalk.bold.cyan(ResMap[key])}:\n${formatInfo[key]}`
111
- } else if (result.InvokeResult === 0 && key === 'ErrMsg') {
112
- return false
113
- } else {
114
- return `${chalk.bold.cyan(ResMap[key])}:${formatInfo[key]}`
115
- }
116
- })
117
- .filter((item) => item)
118
- .join('\n')
119
- console.log(logInfo)
120
- }
121
- }
1
+ import chalk from 'chalk'
2
+ import inquirer from 'inquirer'
3
+ import { Command, ICommand } from '../common'
4
+ import { CloudBaseError } from '../../error'
5
+ import { batchInvokeFunctions, invokeFunction } from '../../function'
6
+ import { InjectParams, CmdContext, ArgsParams, Log, Logger } from '../../decorators'
7
+
8
+ @ICommand()
9
+ export class InvokeFunction extends Command {
10
+ get options() {
11
+ return {
12
+ cmd: 'fn',
13
+ childCmd: 'invoke [name]',
14
+ deprecateCmd: 'functions:invoke [name]',
15
+ options: [
16
+ {
17
+ flags: '-e, --envId <envId>',
18
+ desc: '环境 Id'
19
+ },
20
+ {
21
+ flags: '--params <params>',
22
+ desc: '调用函数的入参,JSON 字符串形式'
23
+ }
24
+ ],
25
+ desc: '触发云端部署的云函数'
26
+ }
27
+ }
28
+
29
+ @InjectParams()
30
+ async execute(@CmdContext() ctx, @ArgsParams() argsParams, @Log() log: Logger) {
31
+ const {
32
+ envId,
33
+ config: { functions },
34
+ options
35
+ } = ctx
36
+ const name = argsParams?.[0]
37
+ let isBatchInvoke = false
38
+
39
+ // 不指定云函数名称,触发配置文件中的所有函数
40
+ if (!name) {
41
+ const { isBatch } = await inquirer.prompt({
42
+ type: 'confirm',
43
+ name: 'isBatch',
44
+ message: '无云函数名称,是否需要触发配置文件中的全部云函数?',
45
+ default: false
46
+ })
47
+
48
+ isBatchInvoke = isBatch
49
+
50
+ if (!isBatchInvoke) {
51
+ throw new CloudBaseError('请指定云函数名称!')
52
+ }
53
+ }
54
+
55
+ let params
56
+ const jsonStringParams = options.params
57
+ if (jsonStringParams) {
58
+ try {
59
+ params = JSON.parse(jsonStringParams)
60
+ } catch (e) {
61
+ console.log(e)
62
+ throw new CloudBaseError('jsonStringParams 参数不是正确的 JSON 字符串')
63
+ }
64
+ }
65
+
66
+ if (isBatchInvoke) {
67
+ return batchInvokeFunctions({
68
+ envId,
69
+ functions,
70
+ log: true
71
+ })
72
+ }
73
+
74
+ const func = functions.find((item) => item.name === name)
75
+
76
+ const configParams = func?.params ? func.params : undefined
77
+
78
+ const result = await invokeFunction({
79
+ envId,
80
+ functionName: name,
81
+ params: params || configParams
82
+ })
83
+
84
+ if (result.InvokeResult === 0) {
85
+ log.success(`[${name}] 调用成功\n`)
86
+ } else {
87
+ log.error(`[${name}] 调用失败\n`)
88
+ }
89
+
90
+ const ResMap = {
91
+ Duration: '运行时间',
92
+ MemUsage: '内存占用',
93
+ BillDuration: '计费时间',
94
+ FunctionRequestId: '请求 Id ',
95
+ RetMsg: '返回结果',
96
+ ErrMsg: '错误信息',
97
+ Log: '调用日志'
98
+ }
99
+
100
+ const formatInfo = {
101
+ ...result,
102
+ Duration: Number(result.Duration).toFixed(2) + 'ms',
103
+ MemUsage: Number(Number(result.MemUsage) / Math.pow(1024, 2)).toFixed(2) + 'MB',
104
+ BillDuration: result.BillDuration + 'ms'
105
+ }
106
+
107
+ const logInfo = Object.keys(ResMap)
108
+ .map((key) => {
109
+ if (key === 'Log') {
110
+ return `${chalk.bold.cyan(ResMap[key])}:\n${formatInfo[key]}`
111
+ } else if (result.InvokeResult === 0 && key === 'ErrMsg') {
112
+ return false
113
+ } else {
114
+ return `${chalk.bold.cyan(ResMap[key])}:${formatInfo[key]}`
115
+ }
116
+ })
117
+ .filter((item) => item)
118
+ .join('\n')
119
+ console.log(logInfo)
120
+ }
121
+ }