@cloudbase/cli 2.0.12-alpha.3 → 2.0.14

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 (252) hide show
  1. package/.vscode/launch.json +0 -10
  2. package/.vscode/settings.json +3 -0
  3. package/bin/cloudbase.js +0 -0
  4. package/bin/tcb.js +0 -0
  5. package/lib/commands/lowcode/app.js +2 -30
  6. package/lib/commands/run/service/create.js +4 -0
  7. package/lib/commands/run/service/deploy.js +4 -0
  8. package/lib/commands/run/service/update.js +4 -0
  9. package/lib/run/service/common.js +9 -3
  10. package/lib/run/service/deployPackage.js +2 -9
  11. package/lib/utils/checkTcbrEnv.js +5 -4
  12. package/lib/utils/debug-logger.js +30 -0
  13. package/lib/utils/net/cloud-api-request.js +7 -1
  14. package/lib/utils/net/http-request.js +16 -5
  15. package/package.json +5 -4
  16. package/types/commands/lowcode/app.d.ts +0 -10
  17. package/types/run/service/common.d.ts +4 -1
  18. package/types/types.d.ts +4 -0
  19. package/types/utils/debug-logger.d.ts +1 -0
  20. package/types/utils/net/http-request.d.ts +6 -2
  21. package/.history/.gitignore_20220624162613 +0 -84
  22. package/.history/.gitignore_20220627114054 +0 -86
  23. package/.history/package_20220711204706.json +0 -88
  24. package/.history/package_20220711204818.json +0 -88
  25. package/.history/package_20220712151717.json +0 -88
  26. package/.history/package_20220712212537.json +0 -88
  27. package/.history/package_20220722205058.json +0 -88
  28. package/.history/src/commands/lowcode/app_20220624162613.ts +0 -34
  29. package/.history/src/commands/lowcode/app_20220627114205.ts +0 -52
  30. package/.history/src/index_20220624162613.ts +0 -13
  31. package/.history/src/index_20220627113609.ts +0 -15
  32. package/.history/src/index_20220627114102.ts +0 -13
  33. package/src/auth/index.ts +0 -2
  34. package/src/auth/login.ts +0 -91
  35. package/src/auth/logout.ts +0 -7
  36. package/src/commands/account/index.ts +0 -2
  37. package/src/commands/account/login.ts +0 -192
  38. package/src/commands/account/logout.ts +0 -24
  39. package/src/commands/common.ts +0 -246
  40. package/src/commands/env/base.ts +0 -90
  41. package/src/commands/env/create.ts +0 -92
  42. package/src/commands/env/domain.ts +0 -186
  43. package/src/commands/env/index.ts +0 -4
  44. package/src/commands/env/login.ts +0 -235
  45. package/src/commands/framework/index.ts +0 -124
  46. package/src/commands/functions/alias/getRoute.ts +0 -76
  47. package/src/commands/functions/alias/index.ts +0 -2
  48. package/src/commands/functions/alias/setRoute.ts +0 -82
  49. package/src/commands/functions/code-download.ts +0 -100
  50. package/src/commands/functions/code-update.ts +0 -62
  51. package/src/commands/functions/concurrency/delete.ts +0 -45
  52. package/src/commands/functions/concurrency/index.ts +0 -3
  53. package/src/commands/functions/concurrency/list.ts +0 -58
  54. package/src/commands/functions/concurrency/set.ts +0 -47
  55. package/src/commands/functions/config-update.ts +0 -76
  56. package/src/commands/functions/copy.ts +0 -62
  57. package/src/commands/functions/delete.ts +0 -79
  58. package/src/commands/functions/deploy.ts +0 -293
  59. package/src/commands/functions/detail.ts +0 -138
  60. package/src/commands/functions/index.ts +0 -16
  61. package/src/commands/functions/invoke.ts +0 -121
  62. package/src/commands/functions/layer/bind.ts +0 -182
  63. package/src/commands/functions/layer/common.ts +0 -8
  64. package/src/commands/functions/layer/create.ts +0 -49
  65. package/src/commands/functions/layer/delete.ts +0 -73
  66. package/src/commands/functions/layer/download.ts +0 -92
  67. package/src/commands/functions/layer/index.ts +0 -7
  68. package/src/commands/functions/layer/list.ts +0 -94
  69. package/src/commands/functions/layer/sort.ts +0 -76
  70. package/src/commands/functions/list.ts +0 -68
  71. package/src/commands/functions/log.ts +0 -148
  72. package/src/commands/functions/run.ts +0 -249
  73. package/src/commands/functions/trigger-create.ts +0 -79
  74. package/src/commands/functions/trigger-delete.ts +0 -105
  75. package/src/commands/functions/version/index.ts +0 -2
  76. package/src/commands/functions/version/list.ts +0 -73
  77. package/src/commands/functions/version/publish.ts +0 -43
  78. package/src/commands/gateway/create.ts +0 -109
  79. package/src/commands/gateway/delete.ts +0 -81
  80. package/src/commands/gateway/domain.ts +0 -159
  81. package/src/commands/gateway/index.ts +0 -5
  82. package/src/commands/gateway/list.ts +0 -76
  83. package/src/commands/gateway/switch.ts +0 -107
  84. package/src/commands/helpers/index.ts +0 -3
  85. package/src/commands/helpers/init.ts +0 -431
  86. package/src/commands/helpers/new.ts +0 -117
  87. package/src/commands/helpers/open.ts +0 -67
  88. package/src/commands/hosting/hosting.ts +0 -360
  89. package/src/commands/hosting/index.ts +0 -1
  90. package/src/commands/index.ts +0 -13
  91. package/src/commands/lowcode/app.ts +0 -52
  92. package/src/commands/lowcode/comps.ts +0 -325
  93. package/src/commands/lowcode/index.ts +0 -2
  94. package/src/commands/lowcode/utils.ts +0 -25
  95. package/src/commands/run/create.ts +0 -153
  96. package/src/commands/run/delete.ts +0 -77
  97. package/src/commands/run/image/common.ts +0 -8
  98. package/src/commands/run/image/delete.ts +0 -68
  99. package/src/commands/run/image/download.ts +0 -68
  100. package/src/commands/run/image/index.ts +0 -5
  101. package/src/commands/run/image/list.ts +0 -84
  102. package/src/commands/run/image/upload.ts +0 -76
  103. package/src/commands/run/index.ts +0 -7
  104. package/src/commands/run/list.ts +0 -83
  105. package/src/commands/run/service/config.ts +0 -81
  106. package/src/commands/run/service/create.ts +0 -122
  107. package/src/commands/run/service/deploy.ts +0 -125
  108. package/src/commands/run/service/index.ts +0 -5
  109. package/src/commands/run/service/list.ts +0 -94
  110. package/src/commands/run/service/update.ts +0 -108
  111. package/src/commands/run/standalonegateway/common.ts +0 -8
  112. package/src/commands/run/standalonegateway/create.ts +0 -85
  113. package/src/commands/run/standalonegateway/destroy.ts +0 -59
  114. package/src/commands/run/standalonegateway/index.ts +0 -5
  115. package/src/commands/run/standalonegateway/list.ts +0 -53
  116. package/src/commands/run/standalonegateway/package.ts +0 -62
  117. package/src/commands/run/standalonegateway/turn.ts +0 -63
  118. package/src/commands/run/version/common.ts +0 -8
  119. package/src/commands/run/version/create.ts +0 -369
  120. package/src/commands/run/version/delete.ts +0 -64
  121. package/src/commands/run/version/index.ts +0 -5
  122. package/src/commands/run/version/list.ts +0 -91
  123. package/src/commands/run/version/modify.ts +0 -137
  124. package/src/commands/run/version/update.ts +0 -398
  125. package/src/commands/smart.ts +0 -132
  126. package/src/commands/storage/index.ts +0 -1
  127. package/src/commands/storage/storage.ts +0 -464
  128. package/src/commands/third/index.ts +0 -1
  129. package/src/commands/third/thirdAttach.ts +0 -49
  130. package/src/completion/index.ts +0 -13
  131. package/src/constant.ts +0 -154
  132. package/src/decorators/captureError.ts +0 -25
  133. package/src/decorators/constants.ts +0 -12
  134. package/src/decorators/deprecate.ts +0 -25
  135. package/src/decorators/guard.ts +0 -42
  136. package/src/decorators/index.ts +0 -7
  137. package/src/decorators/injectParams.ts +0 -54
  138. package/src/decorators/params/common.ts +0 -28
  139. package/src/decorators/params/index.ts +0 -35
  140. package/src/env/domain.ts +0 -33
  141. package/src/env/index.ts +0 -63
  142. package/src/env/login.ts +0 -80
  143. package/src/error.ts +0 -36
  144. package/src/function/alias.ts +0 -43
  145. package/src/function/base.ts +0 -253
  146. package/src/function/code.ts +0 -55
  147. package/src/function/concurrency.ts +0 -57
  148. package/src/function/create.ts +0 -78
  149. package/src/function/delete.ts +0 -42
  150. package/src/function/index.ts +0 -11
  151. package/src/function/layer/attach.ts +0 -68
  152. package/src/function/layer/create.ts +0 -63
  153. package/src/function/layer/delete.ts +0 -21
  154. package/src/function/layer/download.ts +0 -54
  155. package/src/function/layer/index.ts +0 -7
  156. package/src/function/layer/list.ts +0 -32
  157. package/src/function/layer/sort.ts +0 -24
  158. package/src/function/trigger.ts +0 -97
  159. package/src/function/update.ts +0 -35
  160. package/src/function/version.ts +0 -39
  161. package/src/function/vpc.ts +0 -22
  162. package/src/gateway/index.ts +0 -137
  163. package/src/help.ts +0 -50
  164. package/src/hosting.ts +0 -212
  165. package/src/index.ts +0 -13
  166. package/src/logger.ts +0 -17
  167. package/src/run/create.ts +0 -23
  168. package/src/run/delete.ts +0 -15
  169. package/src/run/image/build.ts +0 -36
  170. package/src/run/image/delete.ts +0 -14
  171. package/src/run/image/index.ts +0 -4
  172. package/src/run/image/info.ts +0 -27
  173. package/src/run/image/list.ts +0 -23
  174. package/src/run/index.ts +0 -8
  175. package/src/run/list.ts +0 -30
  176. package/src/run/repo.ts +0 -25
  177. package/src/run/service/common.ts +0 -311
  178. package/src/run/service/config.ts +0 -77
  179. package/src/run/service/create.ts +0 -52
  180. package/src/run/service/deployPackage.ts +0 -65
  181. package/src/run/service/index.ts +0 -7
  182. package/src/run/service/list.ts +0 -29
  183. package/src/run/service/showLogs.ts +0 -98
  184. package/src/run/service/update.ts +0 -82
  185. package/src/run/standalonegateway/create.ts +0 -24
  186. package/src/run/standalonegateway/destroy.ts +0 -19
  187. package/src/run/standalonegateway/index.ts +0 -5
  188. package/src/run/standalonegateway/list.ts +0 -74
  189. package/src/run/standalonegateway/package/index.ts +0 -1
  190. package/src/run/standalonegateway/package/list.ts +0 -24
  191. package/src/run/standalonegateway/turn/index.ts +0 -2
  192. package/src/run/standalonegateway/turn/off.ts +0 -19
  193. package/src/run/standalonegateway/turn/on.ts +0 -19
  194. package/src/run/version/create.ts +0 -68
  195. package/src/run/version/delete.ts +0 -16
  196. package/src/run/version/index.ts +0 -6
  197. package/src/run/version/list.ts +0 -17
  198. package/src/run/version/modify.ts +0 -17
  199. package/src/run/version/repo.ts +0 -28
  200. package/src/run/version/update.ts +0 -59
  201. package/src/storage.ts +0 -114
  202. package/src/third/index.ts +0 -13
  203. package/src/types.ts +0 -672
  204. package/src/utils/auth.ts +0 -15
  205. package/src/utils/checkTcbrEnv.ts +0 -67
  206. package/src/utils/cli-table.ts +0 -23
  207. package/src/utils/commonParamsCheck.ts +0 -65
  208. package/src/utils/config.ts +0 -39
  209. package/src/utils/env.ts +0 -244
  210. package/src/utils/fs/del.ts +0 -5
  211. package/src/utils/fs/index.ts +0 -71
  212. package/src/utils/function-packer.ts +0 -97
  213. package/src/utils/index.ts +0 -25
  214. package/src/utils/log.ts +0 -82
  215. package/src/utils/net/cloud-api-request.ts +0 -62
  216. package/src/utils/net/credential.ts +0 -53
  217. package/src/utils/net/http-request.ts +0 -84
  218. package/src/utils/net/index.ts +0 -5
  219. package/src/utils/net/manager-service.ts +0 -36
  220. package/src/utils/net/proxy.ts +0 -6
  221. package/src/utils/notice.ts +0 -28
  222. package/src/utils/output/highlight.ts +0 -5
  223. package/src/utils/output/index.ts +0 -3
  224. package/src/utils/output/link.ts +0 -10
  225. package/src/utils/output/loading.ts +0 -82
  226. package/src/utils/parallel.ts +0 -82
  227. package/src/utils/platform/index.ts +0 -3
  228. package/src/utils/platform/mac.ts +0 -21
  229. package/src/utils/platform/os.ts +0 -64
  230. package/src/utils/platform/port.ts +0 -10
  231. package/src/utils/progress-bar.ts +0 -38
  232. package/src/utils/prompt/index.ts +0 -1
  233. package/src/utils/prompt/select.ts +0 -60
  234. package/src/utils/reporter/agree.ts +0 -20
  235. package/src/utils/reporter/download.ts +0 -26
  236. package/src/utils/reporter/index.ts +0 -3
  237. package/src/utils/reporter/usage.ts +0 -20
  238. package/src/utils/store/auth.ts +0 -49
  239. package/src/utils/store/common.ts +0 -8
  240. package/src/utils/store/db.ts +0 -68
  241. package/src/utils/store/index.ts +0 -5
  242. package/src/utils/store/usage.ts +0 -12
  243. package/src/utils/tcbrApi/callTcbrApi.ts +0 -28
  244. package/src/utils/tcbrApi/index.ts +0 -1
  245. package/src/utils/template.ts +0 -170
  246. package/src/utils/tools/encoding.ts +0 -8
  247. package/src/utils/tools/index.ts +0 -4
  248. package/src/utils/tools/object.ts +0 -33
  249. package/src/utils/tools/time.ts +0 -38
  250. package/src/utils/tools/uid.ts +0 -19
  251. package/src/utils/validator.ts +0 -65
  252. package/yarn-error.log +0 -12841
@@ -1,148 +0,0 @@
1
- import chalk from 'chalk'
2
- import { Command, ICommand } from '../common'
3
- import { CloudBaseError } from '../../error'
4
- import { getFunctionLog } from '../../function'
5
- import { InjectParams, CmdContext, ArgsParams, Log, Logger } from '../../decorators'
6
-
7
- @ICommand()
8
- export class FunctionLog extends Command {
9
- get options() {
10
- return {
11
- cmd: 'fn',
12
- childCmd: 'log <name>',
13
- deprecateCmd: 'functions:log <name>',
14
- options: [
15
- {
16
- flags: '-e, --envId <envId>',
17
- desc: '环境 Id'
18
- },
19
- { flags: '-i, --reqId <reqId>', desc: '函数请求 Id' },
20
- {
21
- flags: '-o, --offset <offset>',
22
- desc: '数据的偏移量,Offset + Limit不能大于10000'
23
- },
24
- {
25
- flags: '-l, --limit <limit>',
26
- desc: '返回数据的长度,Offset + Limit不能大于10000'
27
- },
28
- {
29
- flags: '--order <order>',
30
- desc: '以升序还是降序的方式对日志进行排序,可选值 desc 和 asc'
31
- },
32
- {
33
- flags: '--orderBy <orderBy>',
34
- desc:
35
- '根据某个字段排序日志,支持以下字段:function_name, duration, mem_usage, start_time'
36
- },
37
- {
38
- flags: '--startTime <startTime>',
39
- desc: '查询的具体日期,例如:2019-05-16 20:00:00,只能与 endtime 相差一天之内'
40
- },
41
- {
42
- flags: '--endTime <endTime>',
43
- desc: '查询的具体日期,例如:2019-05-16 20:59:59,只能与 startTime 相差一天之内'
44
- },
45
- { flags: '-e, --error', desc: '只返回错误类型的日志' },
46
- { flags: '-s, --success', desc: '只返回正确类型的日志' }
47
- ],
48
- desc: '打印云函数日志'
49
- }
50
- }
51
-
52
- @InjectParams()
53
- async execute(@CmdContext() ctx, @ArgsParams() argsParams, @Log() log: Logger) {
54
- const { envId, options } = ctx
55
- const name = argsParams?.[0]
56
-
57
- let {
58
- offset,
59
- limit,
60
- order,
61
- orderBy,
62
- error,
63
- success,
64
- startTime,
65
- endTime,
66
- reqId: functionRequestId
67
- } = options
68
-
69
- if (!name) {
70
- throw new CloudBaseError('云函数名称不能为空')
71
- }
72
-
73
- // 2019-05-16 20:59:59 时间类型的长度
74
- const TimeLength = 19
75
-
76
- if (
77
- typeof startTime !== 'undefined' &&
78
- typeof endTime !== 'undefined' &&
79
- (startTime.length !== TimeLength || endTime.length !== TimeLength)
80
- ) {
81
- throw new CloudBaseError('时间格式错误,必须为 2019-05-16 20:59:59 类型')
82
- }
83
-
84
- if (new Date(endTime).getTime() < new Date(startTime).getTime()) {
85
- throw new CloudBaseError('开始时间不能晚于结束时间')
86
- }
87
-
88
- const OneDay = 86400000
89
- if (new Date(endTime).getTime() - new Date(startTime).getTime() > OneDay) {
90
- throw new CloudBaseError('endTime 与 startTime 只能相差一天之内')
91
- }
92
-
93
- let params: any = {
94
- order,
95
- orderBy,
96
- startTime,
97
- endTime,
98
- functionRequestId,
99
- offset: Number(offset),
100
- limit: Number(limit)
101
- }
102
-
103
- error && (params.filter = { RetCode: 'not0' })
104
- success && (params.filter = { RetCode: 'is0' })
105
- // 删除值为 undefined 的字段
106
- params = JSON.parse(JSON.stringify(params))
107
-
108
- const logs = await getFunctionLog({
109
- envId,
110
- functionName: name,
111
- ...params
112
- })
113
-
114
- const ResMap = {
115
- StartTime: '请求时间',
116
- FunctionName: '函数名称',
117
- BillDuration: '计费时间(ms)',
118
- Duration: '运行时间(ms)',
119
- InvokeFinished: '调用次数',
120
- MemUsage: '占用内存',
121
- RequestId: '请求 Id',
122
- RetCode: '调用状态',
123
- RetMsg: '返回结果'
124
- }
125
-
126
- log.success(chalk.green(`函数:${name} 调用日志:\n`))
127
-
128
- if (logs.length === 0) {
129
- return log.info('无调用日志')
130
- }
131
-
132
- logs.forEach((log) => {
133
- const info = Object.keys(ResMap)
134
- .map((key) => {
135
- if (key === 'RetCode') {
136
- return `${ResMap[key]}:${Number(log[key]) === 0 ? '成功' : '失败'}\n`
137
- }
138
- if (key === 'MemUsage') {
139
- const str = Number(Number(log[key]) / 1024 / 1024).toFixed(3)
140
- return `${ResMap[key]}:${str} MB\n`
141
- }
142
- return `${ResMap[key]}:${log[key]} \n`
143
- })
144
- .reduce((prev, next) => prev + next)
145
- console.log(info + `日志:\n ${log.Log} \n`)
146
- })
147
- }
148
- }
@@ -1,249 +0,0 @@
1
- import _ from 'lodash'
2
- import path from 'path'
3
- import { spawn, SpawnOptionsWithoutStdio } from 'child_process'
4
- import { Command, ICommand } from '../common'
5
- import { CloudBaseError } from '../../error'
6
- import { ICommandContext } from '../../types'
7
- import { InjectParams, CmdContext } from '../../decorators'
8
- import { checkFullAccess, isDirectory, checkAndGetCredential } from '../../utils'
9
-
10
- // 启动文件
11
- const bootstrapFilePath = path.join(__dirname, '../../../runtime/nodejs/bootstrap.js')
12
-
13
- function checkJSON(data) {
14
- try {
15
- JSON.parse(data)
16
- } catch (e) {
17
- throw new CloudBaseError('非法的 JSON 字符串')
18
- }
19
- }
20
-
21
- function errorLog(msg: string, debug?: boolean) {
22
- throw new CloudBaseError(msg, {
23
- meta: { debug }
24
- })
25
- }
26
-
27
- function getDebugArgs(port = 9229) {
28
- return [
29
- `--inspect-brk=0.0.0.0:${port}`,
30
- '--nolazy',
31
- '--expose-gc',
32
- '--max-semi-space-size=150',
33
- '--max-old-space-size=2707'
34
- ]
35
- }
36
-
37
- // 启动 Node 子进程执行
38
- function spawnNodeProcess(args: string[], options: SpawnOptionsWithoutStdio) {
39
- const commonOptions = {
40
- cwd: path.dirname(bootstrapFilePath),
41
- windowsHide: true
42
- }
43
-
44
- const exec = spawn('node', args, {
45
- ...commonOptions,
46
- ...options
47
- })
48
-
49
- exec.on('error', (e) => {
50
- console.log(`进程执行异常:${e.message}`)
51
- setTimeout(() => {}, 100)
52
- })
53
-
54
- exec.stdout.on('data', (data) => {
55
- console.log(`${data}`)
56
- })
57
-
58
- exec.stderr.on('data', (data) => {
59
- console.log(`${data}`)
60
- })
61
-
62
- exec.on('close', (code) => {
63
- if (code !== 0) {
64
- console.log(`\n云函数执行异常退出,错误码:${code}`)
65
- }
66
- })
67
- }
68
-
69
- async function getSecret() {
70
- const credential = await checkAndGetCredential()
71
- if (_.isEmpty(credential)) {
72
- console.log('未登录,无法直接调用 Node SDK')
73
- return {}
74
- }
75
-
76
- const { secretId, secretKey, token } = credential
77
-
78
- return {
79
- TENCENTCLOUD_SECRETID: secretId,
80
- TENCENTCLOUD_SECRETKEY: secretKey,
81
- TENCENTCLOUD_SESSIONTOKEN: token
82
- }
83
- }
84
-
85
- export async function debugFunctionByPath(functionPath: string, options: Record<string, any>) {
86
- const { params, debug, port } = options
87
- params && checkJSON(params)
88
-
89
- // 检查路径是否存在
90
- const filePath = path.resolve(functionPath)
91
- checkFullAccess(filePath)
92
-
93
- let debugDirname
94
- const isDir = isDirectory(filePath)
95
-
96
- if (isDir) {
97
- const exists = checkFullAccess(path.join(filePath, 'index.js'))
98
- if (!exists) {
99
- errorLog('index.js 文件不存在!', debug)
100
- }
101
- debugDirname = filePath
102
- } else {
103
- const { base, dir } = path.parse(filePath)
104
- if (base !== 'index.js') {
105
- errorLog('index.js 文件不存在!', debug)
106
- }
107
- debugDirname = dir
108
- }
109
-
110
- try {
111
- // eslint-disable-next-line
112
- const fileExports = require(path.join(debugDirname, 'index.js'))
113
- if (!fileExports.main) {
114
- errorLog('main 方法不存在!', debug)
115
- }
116
- } catch (e) {
117
- errorLog(`导入云函数异常:${e.message}`, debug)
118
- }
119
-
120
- // 读取本地 secret 变量
121
- const secret = await getSecret()
122
- const debugArgs = getDebugArgs(port)
123
- const args = debug ? [...debugArgs, bootstrapFilePath] : [bootstrapFilePath]
124
- console.log('> 以默认配置启动 Node 云函数调试')
125
-
126
- spawnNodeProcess(args, {
127
- env: {
128
- ...process.env,
129
- SCF_FUNCTION_HANDLER: 'index.main',
130
- SCF_FUNCTION_NAME: 'main',
131
- GLOBAL_USER_FILE_PATH: path.join(debugDirname, path.sep),
132
- SCF_EVENT_BODY: params || '{}',
133
- ...secret
134
- }
135
- })
136
- }
137
-
138
- export async function debugByConfig(ctx: ICommandContext, name: string) {
139
- const { config, options, envId } = ctx
140
- const { params, debug, port } = options
141
- params && checkJSON(params)
142
-
143
- // 检查路径是否存在
144
- let functionPath = path.resolve(config.functionRoot, name)
145
- const filePath = path.resolve(functionPath)
146
- checkFullAccess(filePath, !debug)
147
-
148
- let debugDirname
149
- const funcConfig = config.functions.find((item) => item.name === name)
150
-
151
- const handlers = (funcConfig?.handler || 'index.main').split('.')
152
- const indexFileName = handlers[0]
153
- const indexFile = `${indexFileName}.js`
154
- const mainFunction = handlers[1]
155
-
156
- const isDir = isDirectory(filePath)
157
-
158
- if (isDir) {
159
- const exists = checkFullAccess(path.join(filePath, indexFile))
160
- if (!exists) {
161
- errorLog(`${indexFile} 文件不存在!`, debug)
162
- }
163
- debugDirname = filePath
164
- } else {
165
- const { base, dir } = path.parse(filePath)
166
- if (base !== indexFile) {
167
- errorLog(`${indexFile} 文件不存在!`, debug)
168
- }
169
- debugDirname = dir
170
- }
171
-
172
- try {
173
- // eslint-disable-next-line
174
- const fileExports = require(path.join(debugDirname, indexFile))
175
- if (!fileExports[mainFunction]) {
176
- errorLog(`handler 中的 ${mainFunction} 方法不存在,请检查你的配置!`, debug)
177
- }
178
- } catch (e) {
179
- errorLog(`导入云函数异常:${e.message}`, debug)
180
- }
181
-
182
- // 读取本地 secret
183
- const secret = await getSecret()
184
- const debugArgs = getDebugArgs(port)
185
- const args = debug ? [...debugArgs, bootstrapFilePath] : [bootstrapFilePath]
186
-
187
- spawnNodeProcess(args, {
188
- env: {
189
- ...process.env,
190
- SCF_NAMESPACE: envId,
191
- SCF_FUNCTION_HANDLER: funcConfig?.handler || 'index.main',
192
- SCF_FUNCTION_NAME: funcConfig?.name || 'main',
193
- GLOBAL_USER_FILE_PATH: path.join(debugDirname, path.sep),
194
- SCF_EVENT_BODY: params || JSON.stringify(funcConfig?.params || {}),
195
- ...funcConfig?.envVariables,
196
- ...secret
197
- }
198
- })
199
- }
200
-
201
- @ICommand()
202
- export class FunctionDebug extends Command {
203
- get options() {
204
- return {
205
- cmd: 'fn',
206
- childCmd: 'run',
207
- deprecateCmd: 'functions:run',
208
- options: [
209
- {
210
- flags: '--path <path>',
211
- desc: '云函数路径,使用默认配置直接调用云函数,无需配置文件'
212
- },
213
- {
214
- flags: '--name <name>',
215
- desc: '指定云函数的名称进行调用,需要配置文件'
216
- },
217
- {
218
- flags: '--params <params>',
219
- desc: '调用函数传入的参数,JSON 字符串格式'
220
- },
221
- {
222
- flags: '--port <port>',
223
- desc: '启动调试时监听的端口号,默认为 9229'
224
- },
225
- {
226
- flags: '--debug',
227
- desc: '启动调试模式'
228
- }
229
- ],
230
- desc: '本地运行云函数(当前仅支持 Node)'
231
- }
232
- }
233
-
234
- @InjectParams()
235
- async execute(@CmdContext() ctx) {
236
- const { options } = ctx
237
- const { path, name } = options
238
- // 指定函数路径,以默认配置运行函数
239
- if (path) {
240
- await debugFunctionByPath(path, options)
241
- } else if (typeof name === 'string') {
242
- await debugByConfig(ctx, name)
243
- } else {
244
- throw new CloudBaseError(
245
- '请指定运行函数的名称或函数的路径\n\n例如 cloudbase functions:run --name app'
246
- )
247
- }
248
- }
249
- }
@@ -1,79 +0,0 @@
1
- import inquirer from 'inquirer'
2
- import { Command, ICommand } from '../common'
3
- import { successLog } from '../../logger'
4
- import { CloudBaseError } from '../../error'
5
- import { createFunctionTriggers, batchCreateTriggers } from '../../function'
6
- import { InjectParams, CmdContext, ArgsParams } from '../../decorators'
7
-
8
- @ICommand()
9
- export class CreateTrigger extends Command {
10
- get options() {
11
- return {
12
- cmd: 'fn',
13
- childCmd: { cmd: 'trigger', desc: '函数触发器操作' },
14
- childSubCmd: 'create [functionName]',
15
- deprecateCmd: 'functions:trigger:create [functionName]',
16
- options: [
17
- {
18
- flags: '-e, --envId <envId>',
19
- desc: '环境 Id'
20
- }
21
- ],
22
- desc: '创建云函数触发器'
23
- }
24
- }
25
-
26
- @InjectParams()
27
- async execute(@CmdContext() ctx, @ArgsParams() params) {
28
- const {
29
- envId,
30
- config: { functions }
31
- } = ctx
32
-
33
- const name = params?.[0]
34
-
35
- let isBatchCreateTrigger = false
36
-
37
- // 不指定云函数名称,创建配置文件中所有函数的所有触发器
38
- if (!name) {
39
- const { isBatch } = await inquirer.prompt({
40
- type: 'confirm',
41
- name: 'isBatch',
42
- message: '无云函数名称,是否需要部署配置文件中的【全部云函数】的全部触发器?',
43
- default: false
44
- })
45
-
46
- isBatchCreateTrigger = isBatch
47
-
48
- if (!isBatchCreateTrigger) {
49
- throw new CloudBaseError('请指定云函数名称!')
50
- }
51
- }
52
-
53
- if (isBatchCreateTrigger) {
54
- return batchCreateTriggers({
55
- envId,
56
- functions
57
- })
58
- }
59
-
60
- const functionItem = functions.find((item) => item.name === name)
61
-
62
- if (!functionItem) {
63
- throw new CloudBaseError('未找到相关函数配置,请检查函数名是否正确')
64
- }
65
-
66
- const { triggers } = functionItem
67
-
68
- if (!triggers || !triggers.length) {
69
- throw new CloudBaseError('触发器配置不能为空')
70
- }
71
-
72
- await createFunctionTriggers({
73
- envId,
74
- functionName: name,
75
- triggers
76
- })
77
- successLog(`[${name}] 创建云函数触发器成功!`)
78
- }
79
- }
@@ -1,105 +0,0 @@
1
- import inquirer from 'inquirer'
2
- import { Command, ICommand } from '../common'
3
- import { CloudBaseError } from '../../error'
4
- import { InjectParams, CmdContext, ArgsParams } from '../../decorators'
5
- import { batchDeleteTriggers, deleteFunctionTrigger } from '../../function'
6
-
7
- @ICommand()
8
- export class DeleteTrigger extends Command {
9
- get options() {
10
- return {
11
- cmd: 'fn',
12
- childCmd: { cmd: 'trigger', desc: '函数触发器操作' },
13
- childSubCmd: 'delete [functionName] [triggerName]',
14
- deprecateCmd: 'functions:trigger:delete [functionName] [triggerName]',
15
- options: [
16
- {
17
- flags: '-e, --envId <envId>',
18
- desc: '环境 Id'
19
- }
20
- ],
21
- desc: '删除云函数触发器'
22
- }
23
- }
24
-
25
- @InjectParams()
26
- async execute(@CmdContext() ctx, @ArgsParams() params) {
27
- const {
28
- envId,
29
- config: { functions }
30
- } = ctx
31
-
32
- const name = params?.[0]
33
- const triggerName = params?.[1]
34
-
35
- let isBatchDeleteTriggers
36
- let isBatchDeleteFunctionTriggers = false
37
-
38
- // 不指定云函数名称,删除配置文件中所有函数的所有触发器
39
- if (!name) {
40
- const answer = await inquirer.prompt({
41
- type: 'confirm',
42
- name: 'isBatch',
43
- message: '无云函数名称,是否需要删除配置文件中的【全部云函数】的全部触发器?',
44
- default: false
45
- })
46
-
47
- // 危险操作,再次确认
48
- if (answer.isBatch) {
49
- const { reConfirm } = await inquirer.prompt({
50
- type: 'confirm',
51
- name: 'reConfirm',
52
- message: '确定要删除配置文件中的【全部云函数】的全部触发器?',
53
- default: false
54
- })
55
- isBatchDeleteTriggers = reConfirm
56
- }
57
-
58
- if (!isBatchDeleteTriggers) {
59
- throw new CloudBaseError('请指定云函数名称以及触发器名称!')
60
- }
61
- }
62
-
63
- if (isBatchDeleteTriggers) {
64
- return batchDeleteTriggers({
65
- envId,
66
- functions
67
- })
68
- }
69
-
70
- // 指定了函数名称,但没有指定触发器名称,删除此函数的所有触发器
71
- if (!triggerName && name) {
72
- const { isBatch } = await inquirer.prompt({
73
- type: 'confirm',
74
- name: 'isBatch',
75
- message: '没有指定触发器名称,是否需要此云函数的全部触发器?',
76
- default: false
77
- })
78
-
79
- isBatchDeleteFunctionTriggers = isBatch
80
-
81
- if (!isBatchDeleteFunctionTriggers) {
82
- throw new CloudBaseError('请指定云函数名称以及触发器名称!')
83
- }
84
- }
85
-
86
- if (isBatchDeleteFunctionTriggers) {
87
- const func = functions.find((item) => item.name === name)
88
- return batchDeleteTriggers({
89
- envId,
90
- functions: [func]
91
- })
92
- }
93
-
94
- if (!triggerName) {
95
- throw new CloudBaseError('触发器名称不能为空')
96
- }
97
-
98
- // 删除指定函数的单个触发器
99
- await deleteFunctionTrigger({
100
- envId,
101
- functionName: name,
102
- triggerName
103
- })
104
- }
105
- }
@@ -1,2 +0,0 @@
1
- export * from './publish'
2
- export * from './list'
@@ -1,73 +0,0 @@
1
-
2
- import { Command, ICommand } from '../../common'
3
- import { CloudBaseError } from '../../../error'
4
- import { loadingFactory, printHorizontalTable } from '../../../utils'
5
- import { listFunctionVersions } from '../../../function'
6
- import { InjectParams, CmdContext, ArgsParams, ArgsOptions } from '../../../decorators'
7
- import { StatusMap } from '../../../constant'
8
-
9
-
10
- @ICommand()
11
- export class ListFunctionVersion extends Command {
12
- get options() {
13
- return {
14
- cmd: 'fn',
15
- childCmd: 'list-function-versions <name>',
16
- options: [
17
- {
18
- flags: '-e, --envId <envId>',
19
- desc: '环境 Id'
20
- },
21
- { flags: '-l, --limit <limit>', desc: '返回数据长度,默认值为 20' },
22
- {
23
- flags: '-o, --offset <offset>',
24
- desc: '数据偏移量,默认值为 0'
25
- }
26
- ],
27
- desc: '展示函数版本列表'
28
- }
29
- }
30
-
31
- @InjectParams()
32
- async execute(@CmdContext() ctx, @ArgsParams() params, @ArgsOptions() options) {
33
- const name = params?.[0]
34
- let { limit = 20, offset = 0 } = options
35
- limit = Number(limit)
36
- offset = Number(offset)
37
- if (!Number.isInteger(limit) || !Number.isInteger(offset)) {
38
- throw new CloudBaseError('limit 和 offset 必须为整数')
39
- }
40
-
41
- if (limit < 0 || offset < 0) {
42
- throw new CloudBaseError('limit 和 offset 必须为大于 0 的整数')
43
- }
44
-
45
- const {
46
- envId
47
- } = ctx
48
-
49
- const loading = loadingFactory()
50
- loading.start(`拉取函数 [${name}] 版本列表中...`)
51
-
52
- const res = await listFunctionVersions({
53
- envId,
54
- functionName: name,
55
- offset,
56
- limit
57
- })
58
-
59
- loading.stop()
60
-
61
- const head: string[] = ['版本', '描述', '创建时间', '修改时间', '状态']
62
-
63
- const tableData = res.Versions.map((item) => [
64
- item.Version,
65
- item.Description,
66
- item.AddTime,
67
- item.ModTime,
68
- StatusMap[item.Status]
69
- ])
70
-
71
- printHorizontalTable(head, tableData)
72
- }
73
- }
@@ -1,43 +0,0 @@
1
-
2
- import { Command, ICommand } from '../../common'
3
- import { CloudBaseError } from '../../../error'
4
- import { loadingFactory } from '../../../utils'
5
- import { publishVersion } from '../../../function'
6
- import { InjectParams, CmdContext, ArgsParams } from '../../../decorators'
7
-
8
- @ICommand()
9
- export class PublishFunctionVersion extends Command {
10
- get options() {
11
- return {
12
- cmd: 'fn',
13
- childCmd: 'publish-version <name> [description]',
14
- options: [
15
- {
16
- flags: '-e, --envId <envId>',
17
- desc: '环境 Id'
18
- }
19
- ],
20
- desc: '发布函数新版本'
21
- }
22
- }
23
-
24
- @InjectParams()
25
- async execute(@CmdContext() ctx, @ArgsParams() params) {
26
- const name = params?.[0]
27
- const description = params?.[1]
28
- const {
29
- envId
30
- } = ctx
31
-
32
- const loading = loadingFactory()
33
- loading.start(`发布函数 [${name}] 新版本中...`)
34
-
35
- await publishVersion({
36
- envId,
37
- functionName: name,
38
- description
39
- })
40
-
41
- loading.succeed(`发布函数 [${name}] 新版本成功!`)
42
- }
43
- }