@cloudbase/cli 2.0.0 → 2.0.1

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 (206) 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 +6 -4
  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/lib/run/service/deployPackage.js +6 -4
  16. package/lib/utils/net/http-request.js +4 -4
  17. package/lib/utils/tcbrApi/tcbr-cloud-api/request.js +3 -3
  18. package/package.json +16 -16
  19. package/post-install.js +61 -61
  20. package/runtime/nodejs/bootstrap.js +255 -255
  21. package/runtime/nodejs/runtime.js +183 -183
  22. package/src/auth/index.ts +1 -1
  23. package/src/auth/login.ts +91 -91
  24. package/src/auth/logout.ts +7 -7
  25. package/src/commands/account/index.ts +2 -2
  26. package/src/commands/account/login.ts +192 -192
  27. package/src/commands/account/logout.ts +24 -24
  28. package/src/commands/common.ts +246 -246
  29. package/src/commands/env/base.ts +90 -90
  30. package/src/commands/env/create.ts +92 -92
  31. package/src/commands/env/domain.ts +186 -186
  32. package/src/commands/env/index.ts +4 -4
  33. package/src/commands/env/login.ts +235 -235
  34. package/src/commands/framework/index.ts +124 -124
  35. package/src/commands/functions/alias/getRoute.ts +76 -76
  36. package/src/commands/functions/alias/index.ts +2 -2
  37. package/src/commands/functions/alias/setRoute.ts +82 -82
  38. package/src/commands/functions/code-download.ts +100 -100
  39. package/src/commands/functions/code-update.ts +62 -62
  40. package/src/commands/functions/concurrency/delete.ts +45 -45
  41. package/src/commands/functions/concurrency/index.ts +2 -2
  42. package/src/commands/functions/concurrency/list.ts +58 -58
  43. package/src/commands/functions/concurrency/set.ts +47 -47
  44. package/src/commands/functions/config-update.ts +76 -76
  45. package/src/commands/functions/copy.ts +62 -62
  46. package/src/commands/functions/delete.ts +79 -79
  47. package/src/commands/functions/deploy.ts +293 -293
  48. package/src/commands/functions/detail.ts +138 -138
  49. package/src/commands/functions/index.ts +16 -16
  50. package/src/commands/functions/invoke.ts +121 -121
  51. package/src/commands/functions/layer/bind.ts +182 -182
  52. package/src/commands/functions/layer/common.ts +8 -8
  53. package/src/commands/functions/layer/create.ts +49 -49
  54. package/src/commands/functions/layer/delete.ts +73 -73
  55. package/src/commands/functions/layer/download.ts +92 -92
  56. package/src/commands/functions/layer/index.ts +7 -7
  57. package/src/commands/functions/layer/list.ts +94 -94
  58. package/src/commands/functions/layer/sort.ts +76 -76
  59. package/src/commands/functions/list.ts +68 -68
  60. package/src/commands/functions/log.ts +148 -148
  61. package/src/commands/functions/run.ts +249 -249
  62. package/src/commands/functions/trigger-create.ts +79 -79
  63. package/src/commands/functions/trigger-delete.ts +105 -105
  64. package/src/commands/functions/version/index.ts +1 -1
  65. package/src/commands/functions/version/list.ts +73 -73
  66. package/src/commands/functions/version/publish.ts +43 -43
  67. package/src/commands/gateway/create.ts +109 -109
  68. package/src/commands/gateway/delete.ts +81 -81
  69. package/src/commands/gateway/domain.ts +159 -159
  70. package/src/commands/gateway/index.ts +5 -5
  71. package/src/commands/gateway/list.ts +76 -76
  72. package/src/commands/gateway/switch.ts +107 -107
  73. package/src/commands/helpers/index.ts +2 -2
  74. package/src/commands/helpers/init.ts +431 -431
  75. package/src/commands/helpers/new.ts +117 -117
  76. package/src/commands/helpers/open.ts +67 -67
  77. package/src/commands/hosting/hosting.ts +360 -360
  78. package/src/commands/index.ts +13 -13
  79. package/src/commands/lowcode/app.ts +34 -34
  80. package/src/commands/lowcode/comps.ts +322 -322
  81. package/src/commands/lowcode/index.ts +1 -1
  82. package/src/commands/lowcode/utils.ts +24 -24
  83. package/src/commands/run/image/index.ts +4 -4
  84. package/src/commands/run/standalonegateway/common.ts +7 -7
  85. package/src/commands/run/standalonegateway/create.ts +85 -85
  86. package/src/commands/run/standalonegateway/destroy.ts +59 -59
  87. package/src/commands/run/standalonegateway/index.ts +4 -4
  88. package/src/commands/run/standalonegateway/list.ts +53 -53
  89. package/src/commands/run/standalonegateway/package.ts +62 -62
  90. package/src/commands/run/standalonegateway/turn.ts +63 -63
  91. package/src/commands/run/version/index.ts +4 -4
  92. package/src/commands/smart.ts +132 -132
  93. package/src/commands/storage/storage.ts +464 -464
  94. package/src/commands/third/thirdAttach.ts +49 -49
  95. package/src/completion/index.ts +13 -13
  96. package/src/decorators/captureError.ts +25 -25
  97. package/src/decorators/constants.ts +12 -12
  98. package/src/decorators/deprecate.ts +25 -25
  99. package/src/decorators/guard.ts +42 -42
  100. package/src/decorators/index.ts +7 -7
  101. package/src/decorators/injectParams.ts +54 -54
  102. package/src/decorators/params/common.ts +28 -28
  103. package/src/decorators/params/index.ts +35 -35
  104. package/src/env/domain.ts +33 -33
  105. package/src/env/index.ts +63 -63
  106. package/src/env/login.ts +80 -80
  107. package/src/error.ts +36 -36
  108. package/src/function/alias.ts +43 -43
  109. package/src/function/base.ts +253 -253
  110. package/src/function/code.ts +55 -55
  111. package/src/function/concurrency.ts +57 -57
  112. package/src/function/create.ts +78 -78
  113. package/src/function/delete.ts +42 -42
  114. package/src/function/index.ts +10 -10
  115. package/src/function/layer/attach.ts +68 -68
  116. package/src/function/layer/create.ts +63 -63
  117. package/src/function/layer/delete.ts +21 -21
  118. package/src/function/layer/download.ts +54 -54
  119. package/src/function/layer/index.ts +7 -7
  120. package/src/function/layer/list.ts +32 -32
  121. package/src/function/layer/sort.ts +24 -24
  122. package/src/function/trigger.ts +97 -97
  123. package/src/function/update.ts +35 -35
  124. package/src/function/version.ts +38 -38
  125. package/src/function/vpc.ts +22 -22
  126. package/src/gateway/index.ts +137 -137
  127. package/src/hosting.ts +212 -212
  128. package/src/index.ts +13 -13
  129. package/src/logger.ts +17 -17
  130. package/src/run/create.ts +23 -23
  131. package/src/run/delete.ts +15 -15
  132. package/src/run/image/build.ts +36 -36
  133. package/src/run/image/delete.ts +13 -13
  134. package/src/run/image/index.ts +3 -3
  135. package/src/run/image/info.ts +26 -26
  136. package/src/run/list.ts +29 -29
  137. package/src/run/repo.ts +24 -24
  138. package/src/run/service/deployPackage.ts +6 -4
  139. package/src/run/standalonegateway/create.ts +24 -24
  140. package/src/run/standalonegateway/destroy.ts +19 -19
  141. package/src/run/standalonegateway/index.ts +4 -4
  142. package/src/run/standalonegateway/list.ts +74 -74
  143. package/src/run/standalonegateway/package/list.ts +24 -24
  144. package/src/run/standalonegateway/turn/index.ts +1 -1
  145. package/src/run/standalonegateway/turn/off.ts +19 -19
  146. package/src/run/standalonegateway/turn/on.ts +19 -19
  147. package/src/run/version/create.ts +68 -68
  148. package/src/run/version/delete.ts +15 -15
  149. package/src/run/version/index.ts +5 -5
  150. package/src/run/version/list.ts +16 -16
  151. package/src/run/version/modify.ts +16 -16
  152. package/src/run/version/repo.ts +27 -27
  153. package/src/run/version/update.ts +58 -58
  154. package/src/storage.ts +114 -114
  155. package/src/third/index.ts +12 -12
  156. package/src/utils/auth.ts +15 -15
  157. package/src/utils/cli-table.ts +23 -23
  158. package/src/utils/config.ts +39 -39
  159. package/src/utils/env.ts +244 -244
  160. package/src/utils/fs/del.ts +5 -5
  161. package/src/utils/fs/index.ts +71 -71
  162. package/src/utils/function-packer.ts +97 -97
  163. package/src/utils/log.ts +81 -81
  164. package/src/utils/net/cloud-api-request.ts +62 -62
  165. package/src/utils/net/credential.ts +53 -53
  166. package/src/utils/net/http-request.ts +84 -84
  167. package/src/utils/net/index.ts +4 -4
  168. package/src/utils/net/manager-service.ts +36 -36
  169. package/src/utils/net/proxy.ts +6 -6
  170. package/src/utils/notice.ts +28 -28
  171. package/src/utils/output/highlight.ts +5 -5
  172. package/src/utils/output/index.ts +2 -2
  173. package/src/utils/output/link.ts +10 -10
  174. package/src/utils/output/loading.ts +82 -82
  175. package/src/utils/parallel.ts +82 -82
  176. package/src/utils/platform/index.ts +2 -2
  177. package/src/utils/platform/mac.ts +21 -21
  178. package/src/utils/platform/os.ts +64 -64
  179. package/src/utils/platform/port.ts +10 -10
  180. package/src/utils/progress-bar.ts +38 -38
  181. package/src/utils/prompt/select.ts +59 -59
  182. package/src/utils/reporter/agree.ts +20 -20
  183. package/src/utils/reporter/download.ts +26 -26
  184. package/src/utils/reporter/index.ts +3 -3
  185. package/src/utils/reporter/usage.ts +20 -20
  186. package/src/utils/store/auth.ts +49 -49
  187. package/src/utils/store/common.ts +8 -8
  188. package/src/utils/store/db.ts +68 -68
  189. package/src/utils/store/index.ts +4 -4
  190. package/src/utils/store/usage.ts +12 -12
  191. package/src/utils/tcbrApi/tcbr-cloud-api/request.ts +13 -13
  192. package/src/utils/template.ts +170 -170
  193. package/src/utils/tools/encoding.ts +8 -8
  194. package/src/utils/tools/index.ts +4 -4
  195. package/src/utils/tools/object.ts +33 -33
  196. package/src/utils/tools/time.ts +38 -38
  197. package/src/utils/tools/uid.ts +19 -19
  198. package/templates/html/loginFail.html +90 -90
  199. package/templates/html/loginSuccess.html +86 -86
  200. package/templates/server/node/_gitignore +54 -54
  201. package/templates/server/node/cloudbaserc.json +10 -10
  202. package/templates/server/node/index.js +5 -5
  203. package/templates/server/node/package.json +9 -9
  204. package/tsconfig.json +19 -19
  205. package/tsconfig.test.json +13 -13
  206. package/.vscode/settings.json +0 -3
@@ -1,21 +1,21 @@
1
- import fs from 'fs'
2
- import path from 'path'
3
- import { CloudBaseError } from '../../error'
4
- import { CloudApiService } from '../../utils'
5
-
6
- const scfService = new CloudApiService('scf')
7
-
8
- export interface ILayerDeleteOptions {
9
- name: string
10
- version: number
11
- }
12
-
13
- // 创建文件层
14
- export async function deleteLayer(options: ILayerDeleteOptions): Promise<void> {
15
- const { name, version } = options
16
-
17
- return scfService.request('DeleteLayerVersion', {
18
- LayerName: name,
19
- LayerVersion: version
20
- })
21
- }
1
+ import fs from 'fs'
2
+ import path from 'path'
3
+ import { CloudBaseError } from '../../error'
4
+ import { CloudApiService } from '../../utils'
5
+
6
+ const scfService = new CloudApiService('scf')
7
+
8
+ export interface ILayerDeleteOptions {
9
+ name: string
10
+ version: number
11
+ }
12
+
13
+ // 创建文件层
14
+ export async function deleteLayer(options: ILayerDeleteOptions): Promise<void> {
15
+ const { name, version } = options
16
+
17
+ return scfService.request('DeleteLayerVersion', {
18
+ LayerName: name,
19
+ LayerVersion: version
20
+ })
21
+ }
@@ -1,54 +1,54 @@
1
- import fs from 'fs'
2
- import path from 'path'
3
- import unzipper from 'unzipper'
4
- import { CloudApiService, fetchStream, checkFullAccess, delSync } from '../../utils'
5
- import { CloudBaseError } from '../../error'
6
-
7
- const scfService = new CloudApiService('scf')
8
-
9
- export interface ILayerDownloadOptions {
10
- name: string
11
- version: number
12
- destPath: string
13
- force?: boolean
14
- unzip?: boolean
15
- }
16
-
17
- // 下载文件层 ZIP 文件
18
- export async function downloadLayer(options: ILayerDownloadOptions): Promise<void> {
19
- const { name, version, destPath, unzip = false } = options
20
- const res = await scfService.request('GetLayerVersion', {
21
- LayerName: name,
22
- LayerVersion: version
23
- })
24
- const url = res?.Location
25
- const zipPath = path.join(destPath, `${name}-${version}.zip`)
26
- if (checkFullAccess(zipPath)) {
27
- throw new CloudBaseError(`文件已存在:${zipPath}`)
28
- }
29
-
30
- // 下载文件
31
- const streamRes = await fetchStream(url)
32
- const dest = fs.createWriteStream(zipPath)
33
- streamRes.body.pipe(dest)
34
- return new Promise(resolve => {
35
- // 解压文件
36
- dest.on('close', () => {
37
- // 不解压 ZIP 文件
38
- if (!unzip) {
39
- resolve()
40
- return
41
- }
42
-
43
- const unzipStream = unzipper.Extract({
44
- path: destPath
45
- })
46
- fs.createReadStream(zipPath).pipe(unzipStream)
47
- unzipStream.on('close', () => {
48
- // 删除 ZIP 文件
49
- delSync([zipPath])
50
- resolve()
51
- })
52
- })
53
- })
54
- }
1
+ import fs from 'fs'
2
+ import path from 'path'
3
+ import unzipper from 'unzipper'
4
+ import { CloudApiService, fetchStream, checkFullAccess, delSync } from '../../utils'
5
+ import { CloudBaseError } from '../../error'
6
+
7
+ const scfService = new CloudApiService('scf')
8
+
9
+ export interface ILayerDownloadOptions {
10
+ name: string
11
+ version: number
12
+ destPath: string
13
+ force?: boolean
14
+ unzip?: boolean
15
+ }
16
+
17
+ // 下载文件层 ZIP 文件
18
+ export async function downloadLayer(options: ILayerDownloadOptions): Promise<void> {
19
+ const { name, version, destPath, unzip = false } = options
20
+ const res = await scfService.request('GetLayerVersion', {
21
+ LayerName: name,
22
+ LayerVersion: version
23
+ })
24
+ const url = res?.Location
25
+ const zipPath = path.join(destPath, `${name}-${version}.zip`)
26
+ if (checkFullAccess(zipPath)) {
27
+ throw new CloudBaseError(`文件已存在:${zipPath}`)
28
+ }
29
+
30
+ // 下载文件
31
+ const streamRes = await fetchStream(url)
32
+ const dest = fs.createWriteStream(zipPath)
33
+ streamRes.body.pipe(dest)
34
+ return new Promise(resolve => {
35
+ // 解压文件
36
+ dest.on('close', () => {
37
+ // 不解压 ZIP 文件
38
+ if (!unzip) {
39
+ resolve()
40
+ return
41
+ }
42
+
43
+ const unzipStream = unzipper.Extract({
44
+ path: destPath
45
+ })
46
+ fs.createReadStream(zipPath).pipe(unzipStream)
47
+ unzipStream.on('close', () => {
48
+ // 删除 ZIP 文件
49
+ delSync([zipPath])
50
+ resolve()
51
+ })
52
+ })
53
+ })
54
+ }
@@ -1,7 +1,7 @@
1
- export * from './list'
2
- export * from './attach'
3
- export * from './delete'
4
- export * from './create'
5
- export * from './download'
6
- export * from './list'
7
- export * from './sort'
1
+ export * from './list'
2
+ export * from './attach'
3
+ export * from './delete'
4
+ export * from './create'
5
+ export * from './download'
6
+ export * from './list'
7
+ export * from './sort'
@@ -1,32 +1,32 @@
1
- import { CloudApiService } from '../../utils'
2
-
3
- const scfService = new CloudApiService('scf')
4
-
5
- export interface ILayerListOptions {
6
- offset: number
7
- limit: number
8
- }
9
-
10
- export interface IVersionListOptions {
11
- name: string
12
- }
13
-
14
- // 列出文件层
15
- export async function listLayers(options: ILayerListOptions): Promise<any> {
16
- const { offset, limit } = options
17
-
18
- const res = await scfService.request('ListLayers', {
19
- Offset: offset,
20
- Limit: limit
21
- })
22
- return res?.Layers || []
23
- }
24
-
25
- // 获取文件层的版本列表
26
- export async function listLayerVersions(options: IVersionListOptions): Promise<any> {
27
- const { name } = options
28
- const res = await scfService.request('ListLayerVersions', {
29
- LayerName: name
30
- })
31
- return res?.LayerVersions || []
32
- }
1
+ import { CloudApiService } from '../../utils'
2
+
3
+ const scfService = new CloudApiService('scf')
4
+
5
+ export interface ILayerListOptions {
6
+ offset: number
7
+ limit: number
8
+ }
9
+
10
+ export interface IVersionListOptions {
11
+ name: string
12
+ }
13
+
14
+ // 列出文件层
15
+ export async function listLayers(options: ILayerListOptions): Promise<any> {
16
+ const { offset, limit } = options
17
+
18
+ const res = await scfService.request('ListLayers', {
19
+ Offset: offset,
20
+ Limit: limit
21
+ })
22
+ return res?.Layers || []
23
+ }
24
+
25
+ // 获取文件层的版本列表
26
+ export async function listLayerVersions(options: IVersionListOptions): Promise<any> {
27
+ const { name } = options
28
+ const res = await scfService.request('ListLayerVersions', {
29
+ LayerName: name
30
+ })
31
+ return res?.LayerVersions || []
32
+ }
@@ -1,24 +1,24 @@
1
- import { CloudApiService } from '../../utils'
2
-
3
- const scfService = new CloudApiService('scf')
4
-
5
- export interface ILayer {
6
- LayerName: string
7
- LayerVersion: number
8
- }
9
-
10
- export interface ISortOptions {
11
- envId: string
12
- functionName: string
13
- layers: ILayer[]
14
- }
15
-
16
- // 函数文件层排序
17
- export async function sortLayer(options: ISortOptions): Promise<void> {
18
- const { envId, functionName, layers } = options
19
- return scfService.request('UpdateFunctionConfiguration', {
20
- Layers: layers,
21
- Namespace: envId,
22
- FunctionName: functionName
23
- })
24
- }
1
+ import { CloudApiService } from '../../utils'
2
+
3
+ const scfService = new CloudApiService('scf')
4
+
5
+ export interface ILayer {
6
+ LayerName: string
7
+ LayerVersion: number
8
+ }
9
+
10
+ export interface ISortOptions {
11
+ envId: string
12
+ functionName: string
13
+ layers: ILayer[]
14
+ }
15
+
16
+ // 函数文件层排序
17
+ export async function sortLayer(options: ISortOptions): Promise<void> {
18
+ const { envId, functionName, layers } = options
19
+ return scfService.request('UpdateFunctionConfiguration', {
20
+ Layers: layers,
21
+ Namespace: envId,
22
+ FunctionName: functionName
23
+ })
24
+ }
@@ -1,97 +1,97 @@
1
- import { CloudApiService } from '../utils'
2
- import { successLog } from '../logger'
3
- import { IFunctionTriggerOptions, IFunctionBatchOptions } from '../types'
4
- import { CloudBaseError } from '../error'
5
-
6
- const scfService = CloudApiService.getInstance('scf')
7
-
8
- // 创建函数触发器
9
- export async function createFunctionTriggers(options: IFunctionTriggerOptions): Promise<void> {
10
- const { functionName, triggers = [], envId } = options
11
-
12
- const parsedTriggers = triggers.map(item => {
13
- if (item.type !== 'timer') {
14
- throw new CloudBaseError(
15
- `不支持的触发器类型 [${item.type}],目前仅支持定时触发器(timer)!`
16
- )
17
- }
18
- return {
19
- TriggerName: item.name,
20
- Type: item.type,
21
- TriggerDesc: item.config
22
- }
23
- })
24
-
25
- try {
26
- await scfService.request('BatchCreateTrigger', {
27
- FunctionName: functionName,
28
- Namespace: envId,
29
- Triggers: JSON.stringify(parsedTriggers),
30
- Count: parsedTriggers.length
31
- })
32
- } catch (e) {
33
- throw new CloudBaseError(`[${functionName}] 创建触发器失败:${e.message}`, {
34
- action: e.action,
35
- code: e.code
36
- })
37
- }
38
- }
39
-
40
- // 批量部署函数触发器
41
- export async function batchCreateTriggers(options: IFunctionBatchOptions): Promise<void> {
42
- const { functions, envId } = options
43
-
44
- const promises = functions.map(func =>
45
- (async () => {
46
- try {
47
- await createFunctionTriggers({
48
- functionName: func.name,
49
- triggers: func.triggers,
50
- envId
51
- })
52
- successLog(`[${func.name}] 创建云函数触发器成功!`)
53
- } catch (e) {
54
- throw new CloudBaseError(e.message)
55
- }
56
- })()
57
- )
58
-
59
- await Promise.all(promises)
60
- }
61
-
62
- // 删除函数触发器
63
- export async function deleteFunctionTrigger(options: IFunctionTriggerOptions): Promise<void> {
64
- const { functionName, triggerName, envId } = options
65
- try {
66
- await scfService.request('DeleteTrigger', {
67
- FunctionName: functionName,
68
- Namespace: envId,
69
- TriggerName: triggerName,
70
- Type: 'timer'
71
- })
72
- successLog(`[${functionName}] 删除云函数触发器 ${triggerName} 成功!`)
73
- } catch (e) {
74
- throw new CloudBaseError(`[${functionName}] 删除触发器失败:${e.message}`)
75
- }
76
- }
77
-
78
- export async function batchDeleteTriggers(options: IFunctionBatchOptions): Promise<void> {
79
- const { functions, envId } = options
80
- const promises = functions.map(func =>
81
- (async () => {
82
- try {
83
- func.triggers.forEach(async trigger => {
84
- await deleteFunctionTrigger({
85
- functionName: func.name,
86
- triggerName: trigger.name,
87
- envId
88
- })
89
- })
90
- } catch (e) {
91
- throw new CloudBaseError(e.message)
92
- }
93
- })()
94
- )
95
-
96
- await Promise.all(promises)
97
- }
1
+ import { CloudApiService } from '../utils'
2
+ import { successLog } from '../logger'
3
+ import { IFunctionTriggerOptions, IFunctionBatchOptions } from '../types'
4
+ import { CloudBaseError } from '../error'
5
+
6
+ const scfService = CloudApiService.getInstance('scf')
7
+
8
+ // 创建函数触发器
9
+ export async function createFunctionTriggers(options: IFunctionTriggerOptions): Promise<void> {
10
+ const { functionName, triggers = [], envId } = options
11
+
12
+ const parsedTriggers = triggers.map(item => {
13
+ if (item.type !== 'timer') {
14
+ throw new CloudBaseError(
15
+ `不支持的触发器类型 [${item.type}],目前仅支持定时触发器(timer)!`
16
+ )
17
+ }
18
+ return {
19
+ TriggerName: item.name,
20
+ Type: item.type,
21
+ TriggerDesc: item.config
22
+ }
23
+ })
24
+
25
+ try {
26
+ await scfService.request('BatchCreateTrigger', {
27
+ FunctionName: functionName,
28
+ Namespace: envId,
29
+ Triggers: JSON.stringify(parsedTriggers),
30
+ Count: parsedTriggers.length
31
+ })
32
+ } catch (e) {
33
+ throw new CloudBaseError(`[${functionName}] 创建触发器失败:${e.message}`, {
34
+ action: e.action,
35
+ code: e.code
36
+ })
37
+ }
38
+ }
39
+
40
+ // 批量部署函数触发器
41
+ export async function batchCreateTriggers(options: IFunctionBatchOptions): Promise<void> {
42
+ const { functions, envId } = options
43
+
44
+ const promises = functions.map(func =>
45
+ (async () => {
46
+ try {
47
+ await createFunctionTriggers({
48
+ functionName: func.name,
49
+ triggers: func.triggers,
50
+ envId
51
+ })
52
+ successLog(`[${func.name}] 创建云函数触发器成功!`)
53
+ } catch (e) {
54
+ throw new CloudBaseError(e.message)
55
+ }
56
+ })()
57
+ )
58
+
59
+ await Promise.all(promises)
60
+ }
61
+
62
+ // 删除函数触发器
63
+ export async function deleteFunctionTrigger(options: IFunctionTriggerOptions): Promise<void> {
64
+ const { functionName, triggerName, envId } = options
65
+ try {
66
+ await scfService.request('DeleteTrigger', {
67
+ FunctionName: functionName,
68
+ Namespace: envId,
69
+ TriggerName: triggerName,
70
+ Type: 'timer'
71
+ })
72
+ successLog(`[${functionName}] 删除云函数触发器 ${triggerName} 成功!`)
73
+ } catch (e) {
74
+ throw new CloudBaseError(`[${functionName}] 删除触发器失败:${e.message}`)
75
+ }
76
+ }
77
+
78
+ export async function batchDeleteTriggers(options: IFunctionBatchOptions): Promise<void> {
79
+ const { functions, envId } = options
80
+ const promises = functions.map(func =>
81
+ (async () => {
82
+ try {
83
+ func.triggers.forEach(async trigger => {
84
+ await deleteFunctionTrigger({
85
+ functionName: func.name,
86
+ triggerName: trigger.name,
87
+ envId
88
+ })
89
+ })
90
+ } catch (e) {
91
+ throw new CloudBaseError(e.message)
92
+ }
93
+ })()
94
+ )
95
+
96
+ await Promise.all(promises)
97
+ }
@@ -1,35 +1,35 @@
1
- import { CloudBaseError } from '../error'
2
- import { ICreateFunctionOptions } from '../types'
3
- import { getFunctionService } from './base'
4
-
5
- // 更新云函数代码
6
- export async function updateFunctionCode(options: ICreateFunctionOptions) {
7
- const { functionRootPath = '', envId, base64Code = '', codeSecret } = options
8
- // 兼容处理 config
9
- const func = {
10
- ...options?.func?.config,
11
- ...options.func
12
- }
13
-
14
- const funcName = func.name
15
-
16
- // 校验 CodeSecret 格式
17
- if (codeSecret && !/^[A-Za-z0-9+=/]{1,160}$/.test(codeSecret)) {
18
- throw new CloudBaseError('CodeSecret 格式错误,格式为 1-160 位大小字母,数字+=/')
19
- }
20
-
21
- const scfService = await getFunctionService(envId)
22
-
23
- try {
24
- await scfService.updateFunctionCode({
25
- func,
26
- functionRootPath,
27
- base64Code,
28
- codeSecret
29
- })
30
- } catch (e) {
31
- throw new CloudBaseError(`[${funcName}] 函数代码更新失败: ${e.message}`, {
32
- code: e.code
33
- })
34
- }
35
- }
1
+ import { CloudBaseError } from '../error'
2
+ import { ICreateFunctionOptions } from '../types'
3
+ import { getFunctionService } from './base'
4
+
5
+ // 更新云函数代码
6
+ export async function updateFunctionCode(options: ICreateFunctionOptions) {
7
+ const { functionRootPath = '', envId, base64Code = '', codeSecret } = options
8
+ // 兼容处理 config
9
+ const func = {
10
+ ...options?.func?.config,
11
+ ...options.func
12
+ }
13
+
14
+ const funcName = func.name
15
+
16
+ // 校验 CodeSecret 格式
17
+ if (codeSecret && !/^[A-Za-z0-9+=/]{1,160}$/.test(codeSecret)) {
18
+ throw new CloudBaseError('CodeSecret 格式错误,格式为 1-160 位大小字母,数字+=/')
19
+ }
20
+
21
+ const scfService = await getFunctionService(envId)
22
+
23
+ try {
24
+ await scfService.updateFunctionCode({
25
+ func,
26
+ functionRootPath,
27
+ base64Code,
28
+ codeSecret
29
+ })
30
+ } catch (e) {
31
+ throw new CloudBaseError(`[${funcName}] 函数代码更新失败: ${e.message}`, {
32
+ code: e.code
33
+ })
34
+ }
35
+ }
@@ -1,39 +1,39 @@
1
- import { CloudBaseError } from '../error'
2
- import { IPublishVersionParams, IListFunctionVersionParams, IFunctionVersionsRes } from '../types'
3
- import { getFunctionService } from './base'
4
-
5
- // 发布云函数新版本
6
- export async function publishVersion(options: IPublishVersionParams) {
7
- const { envId, functionName, description = '' } = options
8
-
9
- const scfService = await getFunctionService(envId)
10
-
11
- try {
12
- await scfService.publishVersion({
13
- functionName,
14
- description
15
- })
16
- } catch (e) {
17
- throw new CloudBaseError(`[${functionName}] 函数发布新版本失败: ${e.message}`, {
18
- code: e.code
19
- })
20
- }
21
- }
22
-
23
- // 查看函数所有版本
24
- export async function listFunctionVersions(options: IListFunctionVersionParams): Promise<IFunctionVersionsRes> {
25
- const { envId, functionName, offset = 0, limit = 20 } = options
26
- const scfService = await getFunctionService(envId)
27
-
28
- try {
29
- return scfService.listVersionByFunction({
30
- functionName,
31
- offset,
32
- limit
33
- })
34
- } catch (e) {
35
- throw new CloudBaseError(`[${functionName}] 查看寒函数版本列表失败: ${e.message}`, {
36
- code: e.code
37
- })
38
- }
1
+ import { CloudBaseError } from '../error'
2
+ import { IPublishVersionParams, IListFunctionVersionParams, IFunctionVersionsRes } from '../types'
3
+ import { getFunctionService } from './base'
4
+
5
+ // 发布云函数新版本
6
+ export async function publishVersion(options: IPublishVersionParams) {
7
+ const { envId, functionName, description = '' } = options
8
+
9
+ const scfService = await getFunctionService(envId)
10
+
11
+ try {
12
+ await scfService.publishVersion({
13
+ functionName,
14
+ description
15
+ })
16
+ } catch (e) {
17
+ throw new CloudBaseError(`[${functionName}] 函数发布新版本失败: ${e.message}`, {
18
+ code: e.code
19
+ })
20
+ }
21
+ }
22
+
23
+ // 查看函数所有版本
24
+ export async function listFunctionVersions(options: IListFunctionVersionParams): Promise<IFunctionVersionsRes> {
25
+ const { envId, functionName, offset = 0, limit = 20 } = options
26
+ const scfService = await getFunctionService(envId)
27
+
28
+ try {
29
+ return scfService.listVersionByFunction({
30
+ functionName,
31
+ offset,
32
+ limit
33
+ })
34
+ } catch (e) {
35
+ throw new CloudBaseError(`[${functionName}] 查看寒函数版本列表失败: ${e.message}`, {
36
+ code: e.code
37
+ })
38
+ }
39
39
  }
@@ -1,22 +1,22 @@
1
- import { CloudApiService } from '../utils'
2
-
3
- const vpcService = CloudApiService.getInstance('vpc')
4
-
5
- // 获取 vpc 信息
6
- export async function getVpcs() {
7
- const { VpcSet } = await vpcService.request('DescribeVpcs')
8
- return VpcSet
9
- }
10
-
11
- // 获取子网
12
- export async function getSubnets(vpcId: string) {
13
- const { SubnetSet } = await vpcService.request('DescribeSubnets', {
14
- Filters: [
15
- {
16
- Name: 'vpc-id',
17
- Values: [vpcId]
18
- }
19
- ]
20
- })
21
- return SubnetSet
22
- }
1
+ import { CloudApiService } from '../utils'
2
+
3
+ const vpcService = CloudApiService.getInstance('vpc')
4
+
5
+ // 获取 vpc 信息
6
+ export async function getVpcs() {
7
+ const { VpcSet } = await vpcService.request('DescribeVpcs')
8
+ return VpcSet
9
+ }
10
+
11
+ // 获取子网
12
+ export async function getSubnets(vpcId: string) {
13
+ const { SubnetSet } = await vpcService.request('DescribeSubnets', {
14
+ Filters: [
15
+ {
16
+ Name: 'vpc-id',
17
+ Values: [vpcId]
18
+ }
19
+ ]
20
+ })
21
+ return SubnetSet
22
+ }