@cloudbase/cli 2.0.3 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +9 -9
- package/.eslintignore +7 -7
- package/.eslintrc +35 -35
- package/.prettierrc.js +29 -29
- package/.vscode/launch.json +16 -16
- package/LICENSE +5 -5
- package/README.md +35 -35
- package/bin/cloudbase.js +5 -5
- package/changelog.md +6 -6
- package/jest.config.js +17 -17
- package/lib/commands/account/login.js +18 -18
- package/lib/commands/run/list.js +2 -3
- package/lib/commands/storage/storage.js +1 -1
- package/lib/env/login.js +7 -7
- package/lib/utils/tcbrApi/callTcbrApi.js +2 -2
- package/package.json +3 -3
- package/post-install.js +61 -61
- package/runtime/nodejs/bootstrap.js +255 -255
- package/runtime/nodejs/runtime.js +183 -183
- package/src/auth/index.ts +1 -1
- package/src/auth/login.ts +91 -91
- package/src/auth/logout.ts +7 -7
- package/src/commands/account/index.ts +2 -2
- package/src/commands/account/login.ts +192 -192
- package/src/commands/account/logout.ts +24 -24
- package/src/commands/env/base.ts +90 -90
- package/src/commands/env/create.ts +92 -92
- package/src/commands/env/domain.ts +186 -186
- package/src/commands/env/index.ts +4 -4
- package/src/commands/env/login.ts +235 -235
- package/src/commands/framework/index.ts +124 -124
- package/src/commands/functions/alias/getRoute.ts +76 -76
- package/src/commands/functions/alias/index.ts +2 -2
- package/src/commands/functions/alias/setRoute.ts +82 -82
- package/src/commands/functions/code-download.ts +100 -100
- package/src/commands/functions/code-update.ts +62 -62
- package/src/commands/functions/concurrency/delete.ts +45 -45
- package/src/commands/functions/concurrency/index.ts +2 -2
- package/src/commands/functions/concurrency/list.ts +58 -58
- package/src/commands/functions/concurrency/set.ts +47 -47
- package/src/commands/functions/config-update.ts +76 -76
- package/src/commands/functions/copy.ts +62 -62
- package/src/commands/functions/delete.ts +79 -79
- package/src/commands/functions/deploy.ts +293 -293
- package/src/commands/functions/detail.ts +138 -138
- package/src/commands/functions/index.ts +16 -16
- package/src/commands/functions/invoke.ts +121 -121
- package/src/commands/functions/layer/bind.ts +182 -182
- package/src/commands/functions/layer/common.ts +8 -8
- package/src/commands/functions/layer/create.ts +49 -49
- package/src/commands/functions/layer/delete.ts +73 -73
- package/src/commands/functions/layer/download.ts +92 -92
- package/src/commands/functions/layer/index.ts +7 -7
- package/src/commands/functions/layer/list.ts +94 -94
- package/src/commands/functions/layer/sort.ts +76 -76
- package/src/commands/functions/list.ts +68 -68
- package/src/commands/functions/log.ts +148 -148
- package/src/commands/functions/run.ts +249 -249
- package/src/commands/functions/trigger-create.ts +79 -79
- package/src/commands/functions/trigger-delete.ts +105 -105
- package/src/commands/functions/version/index.ts +1 -1
- package/src/commands/functions/version/list.ts +73 -73
- package/src/commands/functions/version/publish.ts +43 -43
- package/src/commands/gateway/create.ts +109 -109
- package/src/commands/gateway/delete.ts +81 -81
- package/src/commands/gateway/domain.ts +159 -159
- package/src/commands/gateway/index.ts +5 -5
- package/src/commands/gateway/list.ts +76 -76
- package/src/commands/gateway/switch.ts +107 -107
- package/src/commands/helpers/index.ts +2 -2
- package/src/commands/helpers/init.ts +431 -431
- package/src/commands/helpers/new.ts +117 -117
- package/src/commands/helpers/open.ts +67 -67
- package/src/commands/hosting/hosting.ts +360 -360
- package/src/commands/index.ts +13 -13
- package/src/commands/lowcode/app.ts +34 -34
- package/src/commands/lowcode/comps.ts +322 -322
- package/src/commands/lowcode/index.ts +1 -1
- package/src/commands/lowcode/utils.ts +24 -24
- package/src/commands/run/image/index.ts +4 -4
- package/src/commands/run/list.ts +2 -3
- package/src/commands/run/standalonegateway/common.ts +7 -7
- package/src/commands/run/standalonegateway/create.ts +85 -85
- package/src/commands/run/standalonegateway/destroy.ts +59 -59
- package/src/commands/run/standalonegateway/index.ts +4 -4
- package/src/commands/run/standalonegateway/list.ts +53 -53
- package/src/commands/run/standalonegateway/package.ts +62 -62
- package/src/commands/run/standalonegateway/turn.ts +63 -63
- package/src/commands/run/version/index.ts +4 -4
- package/src/commands/smart.ts +132 -132
- package/src/commands/storage/storage.ts +464 -464
- package/src/commands/third/thirdAttach.ts +49 -49
- package/src/completion/index.ts +13 -13
- package/src/decorators/captureError.ts +25 -25
- package/src/decorators/constants.ts +12 -12
- package/src/decorators/deprecate.ts +25 -25
- package/src/decorators/guard.ts +42 -42
- package/src/decorators/index.ts +7 -7
- package/src/decorators/injectParams.ts +54 -54
- package/src/decorators/params/common.ts +28 -28
- package/src/decorators/params/index.ts +35 -35
- package/src/env/domain.ts +33 -33
- package/src/env/index.ts +63 -63
- package/src/env/login.ts +80 -80
- package/src/error.ts +36 -36
- package/src/function/alias.ts +43 -43
- package/src/function/base.ts +253 -253
- package/src/function/code.ts +55 -55
- package/src/function/concurrency.ts +57 -57
- package/src/function/create.ts +78 -78
- package/src/function/delete.ts +42 -42
- package/src/function/index.ts +10 -10
- package/src/function/layer/attach.ts +68 -68
- package/src/function/layer/create.ts +63 -63
- package/src/function/layer/delete.ts +21 -21
- package/src/function/layer/download.ts +54 -54
- package/src/function/layer/index.ts +7 -7
- package/src/function/layer/list.ts +32 -32
- package/src/function/layer/sort.ts +24 -24
- package/src/function/trigger.ts +97 -97
- package/src/function/update.ts +35 -35
- package/src/function/version.ts +38 -38
- package/src/function/vpc.ts +22 -22
- package/src/gateway/index.ts +137 -137
- package/src/hosting.ts +212 -212
- package/src/index.ts +13 -13
- package/src/logger.ts +17 -17
- package/src/run/create.ts +23 -23
- package/src/run/delete.ts +15 -15
- package/src/run/image/build.ts +36 -36
- package/src/run/image/delete.ts +13 -13
- package/src/run/image/index.ts +3 -3
- package/src/run/image/info.ts +26 -26
- package/src/run/list.ts +29 -29
- package/src/run/repo.ts +24 -24
- package/src/run/standalonegateway/create.ts +24 -24
- package/src/run/standalonegateway/destroy.ts +19 -19
- package/src/run/standalonegateway/index.ts +4 -4
- package/src/run/standalonegateway/list.ts +74 -74
- package/src/run/standalonegateway/package/list.ts +24 -24
- package/src/run/standalonegateway/turn/index.ts +1 -1
- package/src/run/standalonegateway/turn/off.ts +19 -19
- package/src/run/standalonegateway/turn/on.ts +19 -19
- package/src/run/version/create.ts +68 -68
- package/src/run/version/delete.ts +15 -15
- package/src/run/version/index.ts +5 -5
- package/src/run/version/list.ts +16 -16
- package/src/run/version/modify.ts +16 -16
- package/src/run/version/repo.ts +27 -27
- package/src/run/version/update.ts +58 -58
- package/src/storage.ts +114 -114
- package/src/third/index.ts +12 -12
- package/src/utils/auth.ts +15 -15
- package/src/utils/cli-table.ts +23 -23
- package/src/utils/config.ts +39 -39
- package/src/utils/env.ts +244 -244
- package/src/utils/fs/del.ts +5 -5
- package/src/utils/fs/index.ts +71 -71
- package/src/utils/function-packer.ts +97 -97
- package/src/utils/log.ts +81 -81
- package/src/utils/net/cloud-api-request.ts +62 -62
- package/src/utils/net/credential.ts +53 -53
- package/src/utils/net/index.ts +4 -4
- package/src/utils/net/manager-service.ts +36 -36
- package/src/utils/net/proxy.ts +6 -6
- package/src/utils/notice.ts +28 -28
- package/src/utils/output/highlight.ts +5 -5
- package/src/utils/output/index.ts +2 -2
- package/src/utils/output/link.ts +10 -10
- package/src/utils/output/loading.ts +82 -82
- package/src/utils/parallel.ts +82 -82
- package/src/utils/platform/index.ts +2 -2
- package/src/utils/platform/mac.ts +21 -21
- package/src/utils/platform/os.ts +64 -64
- package/src/utils/platform/port.ts +10 -10
- package/src/utils/progress-bar.ts +38 -38
- package/src/utils/prompt/select.ts +59 -59
- package/src/utils/reporter/agree.ts +20 -20
- package/src/utils/reporter/download.ts +26 -26
- package/src/utils/reporter/index.ts +3 -3
- package/src/utils/reporter/usage.ts +20 -20
- package/src/utils/store/auth.ts +49 -49
- package/src/utils/store/common.ts +8 -8
- package/src/utils/store/db.ts +68 -68
- package/src/utils/store/index.ts +4 -4
- package/src/utils/store/usage.ts +12 -12
- package/src/utils/tcbrApi/callTcbrApi.ts +1 -1
- package/src/utils/template.ts +170 -170
- package/src/utils/tools/encoding.ts +8 -8
- package/src/utils/tools/index.ts +4 -4
- package/src/utils/tools/object.ts +33 -33
- package/src/utils/tools/time.ts +38 -38
- package/src/utils/tools/uid.ts +19 -19
- package/templates/html/loginFail.html +90 -90
- package/templates/html/loginSuccess.html +86 -86
- package/templates/server/node/_gitignore +54 -54
- package/templates/server/node/cloudbaserc.json +10 -10
- package/templates/server/node/index.js +5 -5
- package/templates/server/node/package.json +9 -9
- package/tsconfig.json +19 -19
- package/tsconfig.test.json +13 -13
- package/.vscode/settings.json +0 -3
- package/lib/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.js +0 -268
- package/lib/utils/tcbrApi/tcbr-cloud-api/error.js +0 -17
- package/lib/utils/tcbrApi/tcbr-cloud-api/index.js +0 -17
- package/lib/utils/tcbrApi/tcbr-cloud-api/request.js +0 -40
- package/lib/utils/tcbrApi/tcbr-cloud-api-request.js +0 -61
- package/src/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.ts +0 -363
- package/src/utils/tcbrApi/tcbr-cloud-api/error.ts +0 -30
- package/src/utils/tcbrApi/tcbr-cloud-api/index.ts +0 -1
- package/src/utils/tcbrApi/tcbr-cloud-api/request.ts +0 -28
- package/src/utils/tcbrApi/tcbr-cloud-api-request.ts +0 -66
- package/types/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.d.ts +0 -51
- package/types/utils/tcbrApi/tcbr-cloud-api/error.d.ts +0 -20
- package/types/utils/tcbrApi/tcbr-cloud-api/index.d.ts +0 -1
- package/types/utils/tcbrApi/tcbr-cloud-api/request.d.ts +0 -4
- package/types/utils/tcbrApi/tcbr-cloud-api-request.d.ts +0 -9
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import { CloudBaseError } from '../error'
|
|
2
|
-
import { ISetProvisionedConcurrencyConfig, IGetProvisionedConcurrencyConfig, IGetProvisionedConcurrencyRes, IFunctionVersionsRes } from '../types'
|
|
3
|
-
import { getFunctionService } from './base'
|
|
4
|
-
|
|
5
|
-
// 设置函数预置并发
|
|
6
|
-
export async function setProvisionedConcurrencyConfig(options: ISetProvisionedConcurrencyConfig) {
|
|
7
|
-
const { envId, functionName, qualifier, versionProvisionedConcurrencyNum } = options
|
|
8
|
-
|
|
9
|
-
const scfService = await getFunctionService(envId)
|
|
10
|
-
|
|
11
|
-
try {
|
|
12
|
-
await scfService.setProvisionedConcurrencyConfig({
|
|
13
|
-
functionName,
|
|
14
|
-
qualifier,
|
|
15
|
-
versionProvisionedConcurrencyNum
|
|
16
|
-
})
|
|
17
|
-
} catch (e) {
|
|
18
|
-
throw new CloudBaseError(`[${functionName}] 设置函数预置并发失败: ${e.message}`, {
|
|
19
|
-
code: e.code
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// 查看函数预置并发
|
|
25
|
-
export async function getProvisionedConcurrencyConfig(options: IGetProvisionedConcurrencyConfig): Promise<IGetProvisionedConcurrencyRes> {
|
|
26
|
-
const { envId, functionName, qualifier } = options
|
|
27
|
-
const scfService = await getFunctionService(envId)
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
return scfService.getProvisionedConcurrencyConfig({
|
|
31
|
-
functionName,
|
|
32
|
-
qualifier,
|
|
33
|
-
})
|
|
34
|
-
} catch (e) {
|
|
35
|
-
throw new CloudBaseError(`[${functionName}] 查看函数预置并发信息失败: ${e.message}`, {
|
|
36
|
-
code: e.code
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// 删除函数预置并发
|
|
42
|
-
export async function deleteProvisionedConcurrencyConfig(options: IGetProvisionedConcurrencyConfig): Promise<void> {
|
|
43
|
-
const { envId, functionName, qualifier } = options
|
|
44
|
-
const scfService = await getFunctionService(envId)
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
await scfService.deleteProvisionedConcurrencyConfig({
|
|
48
|
-
functionName,
|
|
49
|
-
qualifier
|
|
50
|
-
})
|
|
51
|
-
} catch (e) {
|
|
52
|
-
throw new CloudBaseError(`[${functionName}] 删除函数预置并发失败: ${e.message}`, {
|
|
53
|
-
code: e.code
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
1
|
+
import { CloudBaseError } from '../error'
|
|
2
|
+
import { ISetProvisionedConcurrencyConfig, IGetProvisionedConcurrencyConfig, IGetProvisionedConcurrencyRes, IFunctionVersionsRes } from '../types'
|
|
3
|
+
import { getFunctionService } from './base'
|
|
4
|
+
|
|
5
|
+
// 设置函数预置并发
|
|
6
|
+
export async function setProvisionedConcurrencyConfig(options: ISetProvisionedConcurrencyConfig) {
|
|
7
|
+
const { envId, functionName, qualifier, versionProvisionedConcurrencyNum } = options
|
|
8
|
+
|
|
9
|
+
const scfService = await getFunctionService(envId)
|
|
10
|
+
|
|
11
|
+
try {
|
|
12
|
+
await scfService.setProvisionedConcurrencyConfig({
|
|
13
|
+
functionName,
|
|
14
|
+
qualifier,
|
|
15
|
+
versionProvisionedConcurrencyNum
|
|
16
|
+
})
|
|
17
|
+
} catch (e) {
|
|
18
|
+
throw new CloudBaseError(`[${functionName}] 设置函数预置并发失败: ${e.message}`, {
|
|
19
|
+
code: e.code
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// 查看函数预置并发
|
|
25
|
+
export async function getProvisionedConcurrencyConfig(options: IGetProvisionedConcurrencyConfig): Promise<IGetProvisionedConcurrencyRes> {
|
|
26
|
+
const { envId, functionName, qualifier } = options
|
|
27
|
+
const scfService = await getFunctionService(envId)
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
return scfService.getProvisionedConcurrencyConfig({
|
|
31
|
+
functionName,
|
|
32
|
+
qualifier,
|
|
33
|
+
})
|
|
34
|
+
} catch (e) {
|
|
35
|
+
throw new CloudBaseError(`[${functionName}] 查看函数预置并发信息失败: ${e.message}`, {
|
|
36
|
+
code: e.code
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// 删除函数预置并发
|
|
42
|
+
export async function deleteProvisionedConcurrencyConfig(options: IGetProvisionedConcurrencyConfig): Promise<void> {
|
|
43
|
+
const { envId, functionName, qualifier } = options
|
|
44
|
+
const scfService = await getFunctionService(envId)
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
await scfService.deleteProvisionedConcurrencyConfig({
|
|
48
|
+
functionName,
|
|
49
|
+
qualifier
|
|
50
|
+
})
|
|
51
|
+
} catch (e) {
|
|
52
|
+
throw new CloudBaseError(`[${functionName}] 删除函数预置并发失败: ${e.message}`, {
|
|
53
|
+
code: e.code
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
package/src/function/create.ts
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { loadingFactory } from '../utils'
|
|
2
|
-
import { CloudBaseError } from '../error'
|
|
3
|
-
import { getFunctionService } from './base'
|
|
4
|
-
import { ICreateFunctionOptions, ICloudFunction } from '../types'
|
|
5
|
-
|
|
6
|
-
// 创建云函数
|
|
7
|
-
export async function createFunction(options: ICreateFunctionOptions): Promise<void> {
|
|
8
|
-
const {
|
|
9
|
-
envId,
|
|
10
|
-
accessPath,
|
|
11
|
-
codeSecret,
|
|
12
|
-
force = false,
|
|
13
|
-
functionPath,
|
|
14
|
-
base64Code = '',
|
|
15
|
-
functionRootPath = ''
|
|
16
|
-
} = options
|
|
17
|
-
|
|
18
|
-
// 兼容处理 config
|
|
19
|
-
const func: ICloudFunction & { path?: string } = {
|
|
20
|
-
...options?.func?.config,
|
|
21
|
-
...options.func
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// 覆盖默认的路径
|
|
25
|
-
accessPath && (func.path = accessPath)
|
|
26
|
-
|
|
27
|
-
const funcName = func.name
|
|
28
|
-
|
|
29
|
-
const scfService = await getFunctionService(envId)
|
|
30
|
-
|
|
31
|
-
func.isWaitInstall = true
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
await scfService.createFunction({
|
|
35
|
-
func,
|
|
36
|
-
force,
|
|
37
|
-
base64Code,
|
|
38
|
-
codeSecret,
|
|
39
|
-
functionPath,
|
|
40
|
-
functionRootPath
|
|
41
|
-
})
|
|
42
|
-
} catch (e) {
|
|
43
|
-
// 不强制覆盖,抛出错误
|
|
44
|
-
if (e.message && !force) {
|
|
45
|
-
throw new CloudBaseError(`[${funcName}] 部署失败,${e.message}`, {
|
|
46
|
-
code: e.code,
|
|
47
|
-
original: e
|
|
48
|
-
})
|
|
49
|
-
}
|
|
50
|
-
throw e
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// 批量创建云函数
|
|
55
|
-
export async function batchCreateFunctions(options: ICreateFunctionOptions): Promise<void> {
|
|
56
|
-
const { functions, functionRootPath = '', envId, force, codeSecret, log = false } = options
|
|
57
|
-
const promises = functions.map((func) =>
|
|
58
|
-
(async () => {
|
|
59
|
-
const loading = loadingFactory()
|
|
60
|
-
try {
|
|
61
|
-
log && loading.start(`[${func.name}] 函数部署中...`)
|
|
62
|
-
await createFunction({
|
|
63
|
-
func,
|
|
64
|
-
envId,
|
|
65
|
-
force,
|
|
66
|
-
codeSecret,
|
|
67
|
-
functionRootPath
|
|
68
|
-
})
|
|
69
|
-
log && loading.succeed(`[${func.name}] 函数部署成功`)
|
|
70
|
-
} catch (e) {
|
|
71
|
-
log && loading.fail(`[${func.name}] 函数部署失败`)
|
|
72
|
-
throw new CloudBaseError(e.message)
|
|
73
|
-
}
|
|
74
|
-
})()
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
await Promise.all(promises)
|
|
78
|
-
}
|
|
1
|
+
import { loadingFactory } from '../utils'
|
|
2
|
+
import { CloudBaseError } from '../error'
|
|
3
|
+
import { getFunctionService } from './base'
|
|
4
|
+
import { ICreateFunctionOptions, ICloudFunction } from '../types'
|
|
5
|
+
|
|
6
|
+
// 创建云函数
|
|
7
|
+
export async function createFunction(options: ICreateFunctionOptions): Promise<void> {
|
|
8
|
+
const {
|
|
9
|
+
envId,
|
|
10
|
+
accessPath,
|
|
11
|
+
codeSecret,
|
|
12
|
+
force = false,
|
|
13
|
+
functionPath,
|
|
14
|
+
base64Code = '',
|
|
15
|
+
functionRootPath = ''
|
|
16
|
+
} = options
|
|
17
|
+
|
|
18
|
+
// 兼容处理 config
|
|
19
|
+
const func: ICloudFunction & { path?: string } = {
|
|
20
|
+
...options?.func?.config,
|
|
21
|
+
...options.func
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// 覆盖默认的路径
|
|
25
|
+
accessPath && (func.path = accessPath)
|
|
26
|
+
|
|
27
|
+
const funcName = func.name
|
|
28
|
+
|
|
29
|
+
const scfService = await getFunctionService(envId)
|
|
30
|
+
|
|
31
|
+
func.isWaitInstall = true
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
await scfService.createFunction({
|
|
35
|
+
func,
|
|
36
|
+
force,
|
|
37
|
+
base64Code,
|
|
38
|
+
codeSecret,
|
|
39
|
+
functionPath,
|
|
40
|
+
functionRootPath
|
|
41
|
+
})
|
|
42
|
+
} catch (e) {
|
|
43
|
+
// 不强制覆盖,抛出错误
|
|
44
|
+
if (e.message && !force) {
|
|
45
|
+
throw new CloudBaseError(`[${funcName}] 部署失败,${e.message}`, {
|
|
46
|
+
code: e.code,
|
|
47
|
+
original: e
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
throw e
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// 批量创建云函数
|
|
55
|
+
export async function batchCreateFunctions(options: ICreateFunctionOptions): Promise<void> {
|
|
56
|
+
const { functions, functionRootPath = '', envId, force, codeSecret, log = false } = options
|
|
57
|
+
const promises = functions.map((func) =>
|
|
58
|
+
(async () => {
|
|
59
|
+
const loading = loadingFactory()
|
|
60
|
+
try {
|
|
61
|
+
log && loading.start(`[${func.name}] 函数部署中...`)
|
|
62
|
+
await createFunction({
|
|
63
|
+
func,
|
|
64
|
+
envId,
|
|
65
|
+
force,
|
|
66
|
+
codeSecret,
|
|
67
|
+
functionRootPath
|
|
68
|
+
})
|
|
69
|
+
log && loading.succeed(`[${func.name}] 函数部署成功`)
|
|
70
|
+
} catch (e) {
|
|
71
|
+
log && loading.fail(`[${func.name}] 函数部署失败`)
|
|
72
|
+
throw new CloudBaseError(e.message)
|
|
73
|
+
}
|
|
74
|
+
})()
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
await Promise.all(promises)
|
|
78
|
+
}
|
package/src/function/delete.ts
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { successLog } from '../logger'
|
|
2
|
-
import { CloudBaseError } from '../error'
|
|
3
|
-
import { CloudApiService } from '../utils'
|
|
4
|
-
import { queryGateway, deleteGateway } from '../gateway'
|
|
5
|
-
|
|
6
|
-
const scfService = CloudApiService.getInstance('scf')
|
|
7
|
-
|
|
8
|
-
// 删除函数
|
|
9
|
-
export async function deleteFunction({ functionName, envId }): Promise<void> {
|
|
10
|
-
// 检测是否绑定了 API 网关
|
|
11
|
-
const res = await queryGateway({
|
|
12
|
-
envId,
|
|
13
|
-
name: functionName
|
|
14
|
-
})
|
|
15
|
-
// 删除绑定的 API 网关
|
|
16
|
-
if (res?.APISet?.length > 0) {
|
|
17
|
-
await deleteGateway({
|
|
18
|
-
envId,
|
|
19
|
-
name: functionName
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
await scfService.request('DeleteFunction', {
|
|
23
|
-
FunctionName: functionName,
|
|
24
|
-
Namespace: envId
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// 批量删除云函数
|
|
29
|
-
export async function batchDeleteFunctions({ names, envId }): Promise<void> {
|
|
30
|
-
const promises = names.map(name =>
|
|
31
|
-
(async () => {
|
|
32
|
-
try {
|
|
33
|
-
await deleteFunction({ functionName: name, envId })
|
|
34
|
-
successLog(`[${name}] 函数删除成功!`)
|
|
35
|
-
} catch (e) {
|
|
36
|
-
throw new CloudBaseError(e.message)
|
|
37
|
-
}
|
|
38
|
-
})()
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
await Promise.all(promises)
|
|
42
|
-
}
|
|
1
|
+
import { successLog } from '../logger'
|
|
2
|
+
import { CloudBaseError } from '../error'
|
|
3
|
+
import { CloudApiService } from '../utils'
|
|
4
|
+
import { queryGateway, deleteGateway } from '../gateway'
|
|
5
|
+
|
|
6
|
+
const scfService = CloudApiService.getInstance('scf')
|
|
7
|
+
|
|
8
|
+
// 删除函数
|
|
9
|
+
export async function deleteFunction({ functionName, envId }): Promise<void> {
|
|
10
|
+
// 检测是否绑定了 API 网关
|
|
11
|
+
const res = await queryGateway({
|
|
12
|
+
envId,
|
|
13
|
+
name: functionName
|
|
14
|
+
})
|
|
15
|
+
// 删除绑定的 API 网关
|
|
16
|
+
if (res?.APISet?.length > 0) {
|
|
17
|
+
await deleteGateway({
|
|
18
|
+
envId,
|
|
19
|
+
name: functionName
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
await scfService.request('DeleteFunction', {
|
|
23
|
+
FunctionName: functionName,
|
|
24
|
+
Namespace: envId
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// 批量删除云函数
|
|
29
|
+
export async function batchDeleteFunctions({ names, envId }): Promise<void> {
|
|
30
|
+
const promises = names.map(name =>
|
|
31
|
+
(async () => {
|
|
32
|
+
try {
|
|
33
|
+
await deleteFunction({ functionName: name, envId })
|
|
34
|
+
successLog(`[${name}] 函数删除成功!`)
|
|
35
|
+
} catch (e) {
|
|
36
|
+
throw new CloudBaseError(e.message)
|
|
37
|
+
}
|
|
38
|
+
})()
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
await Promise.all(promises)
|
|
42
|
+
}
|
package/src/function/index.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from './create'
|
|
2
|
-
export * from './trigger'
|
|
3
|
-
export * from './code'
|
|
4
|
-
export * from './base'
|
|
5
|
-
export * from './delete'
|
|
6
|
-
export * from './update'
|
|
7
|
-
export * from './layer'
|
|
8
|
-
export * from './vpc'
|
|
9
|
-
export * from './version'
|
|
10
|
-
export * from './concurrency'
|
|
1
|
+
export * from './create'
|
|
2
|
+
export * from './trigger'
|
|
3
|
+
export * from './code'
|
|
4
|
+
export * from './base'
|
|
5
|
+
export * from './delete'
|
|
6
|
+
export * from './update'
|
|
7
|
+
export * from './layer'
|
|
8
|
+
export * from './vpc'
|
|
9
|
+
export * from './version'
|
|
10
|
+
export * from './concurrency'
|
|
11
11
|
export * from './alias'
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import _ from 'lodash'
|
|
2
|
-
import { getFunctionDetail } from '../base'
|
|
3
|
-
import { CloudApiService } from '../../utils'
|
|
4
|
-
import { CloudBaseError } from '../../error'
|
|
5
|
-
|
|
6
|
-
const scfService = new CloudApiService('scf')
|
|
7
|
-
|
|
8
|
-
export interface IAttachOptions {
|
|
9
|
-
envId: string
|
|
10
|
-
layerName: string
|
|
11
|
-
layerVersion: number
|
|
12
|
-
functionName: string
|
|
13
|
-
codeSecret?: string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 函数绑定文件层
|
|
17
|
-
export async function attachLayer(options: IAttachOptions): Promise<void> {
|
|
18
|
-
const { envId, functionName, layerName, layerVersion, codeSecret } = options
|
|
19
|
-
|
|
20
|
-
let { Layers } = await getFunctionDetail({
|
|
21
|
-
envId,
|
|
22
|
-
codeSecret,
|
|
23
|
-
functionName
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
Layers = Layers.map(item => _.pick(item, ['LayerName', 'LayerVersion']))
|
|
27
|
-
// 新加的文件层添加到最后
|
|
28
|
-
Layers.push({
|
|
29
|
-
LayerName: layerName,
|
|
30
|
-
LayerVersion: layerVersion
|
|
31
|
-
})
|
|
32
|
-
const res = await scfService.request('UpdateFunctionConfiguration', {
|
|
33
|
-
Layers,
|
|
34
|
-
Namespace: envId,
|
|
35
|
-
FunctionName: functionName
|
|
36
|
-
})
|
|
37
|
-
return res
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// 函数解绑文件层
|
|
41
|
-
export async function unAttachLayer(options: IAttachOptions): Promise<void> {
|
|
42
|
-
const { envId, functionName, layerName, layerVersion, codeSecret } = options
|
|
43
|
-
|
|
44
|
-
let { Layers } = await getFunctionDetail({
|
|
45
|
-
envId,
|
|
46
|
-
codeSecret,
|
|
47
|
-
functionName
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
Layers = Layers.map(item => _.pick(item, ['LayerName', 'LayerVersion']))
|
|
51
|
-
|
|
52
|
-
const index = Layers.findIndex(
|
|
53
|
-
item => item.LayerName === layerName && item.LayerVersion === layerVersion
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
if (index === -1) {
|
|
57
|
-
throw new CloudBaseError('层不存在')
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// 删除指定的层
|
|
61
|
-
Layers.splice(index, 1)
|
|
62
|
-
|
|
63
|
-
return scfService.request('UpdateFunctionConfiguration', {
|
|
64
|
-
Layers,
|
|
65
|
-
Namespace: envId,
|
|
66
|
-
FunctionName: functionName
|
|
67
|
-
})
|
|
68
|
-
}
|
|
1
|
+
import _ from 'lodash'
|
|
2
|
+
import { getFunctionDetail } from '../base'
|
|
3
|
+
import { CloudApiService } from '../../utils'
|
|
4
|
+
import { CloudBaseError } from '../../error'
|
|
5
|
+
|
|
6
|
+
const scfService = new CloudApiService('scf')
|
|
7
|
+
|
|
8
|
+
export interface IAttachOptions {
|
|
9
|
+
envId: string
|
|
10
|
+
layerName: string
|
|
11
|
+
layerVersion: number
|
|
12
|
+
functionName: string
|
|
13
|
+
codeSecret?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// 函数绑定文件层
|
|
17
|
+
export async function attachLayer(options: IAttachOptions): Promise<void> {
|
|
18
|
+
const { envId, functionName, layerName, layerVersion, codeSecret } = options
|
|
19
|
+
|
|
20
|
+
let { Layers } = await getFunctionDetail({
|
|
21
|
+
envId,
|
|
22
|
+
codeSecret,
|
|
23
|
+
functionName
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
Layers = Layers.map(item => _.pick(item, ['LayerName', 'LayerVersion']))
|
|
27
|
+
// 新加的文件层添加到最后
|
|
28
|
+
Layers.push({
|
|
29
|
+
LayerName: layerName,
|
|
30
|
+
LayerVersion: layerVersion
|
|
31
|
+
})
|
|
32
|
+
const res = await scfService.request('UpdateFunctionConfiguration', {
|
|
33
|
+
Layers,
|
|
34
|
+
Namespace: envId,
|
|
35
|
+
FunctionName: functionName
|
|
36
|
+
})
|
|
37
|
+
return res
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 函数解绑文件层
|
|
41
|
+
export async function unAttachLayer(options: IAttachOptions): Promise<void> {
|
|
42
|
+
const { envId, functionName, layerName, layerVersion, codeSecret } = options
|
|
43
|
+
|
|
44
|
+
let { Layers } = await getFunctionDetail({
|
|
45
|
+
envId,
|
|
46
|
+
codeSecret,
|
|
47
|
+
functionName
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
Layers = Layers.map(item => _.pick(item, ['LayerName', 'LayerVersion']))
|
|
51
|
+
|
|
52
|
+
const index = Layers.findIndex(
|
|
53
|
+
item => item.LayerName === layerName && item.LayerVersion === layerVersion
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
if (index === -1) {
|
|
57
|
+
throw new CloudBaseError('层不存在')
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// 删除指定的层
|
|
61
|
+
Layers.splice(index, 1)
|
|
62
|
+
|
|
63
|
+
return scfService.request('UpdateFunctionConfiguration', {
|
|
64
|
+
Layers,
|
|
65
|
+
Namespace: envId,
|
|
66
|
+
FunctionName: functionName
|
|
67
|
+
})
|
|
68
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import { CloudBaseError, zipDir } from '@cloudbase/toolbox'
|
|
4
|
-
import { CloudApiService, checkFullAccess, isDirectory, delSync } from '../../utils'
|
|
5
|
-
|
|
6
|
-
const scfService = new CloudApiService('scf')
|
|
7
|
-
|
|
8
|
-
export interface IFunctionLayerOptions {
|
|
9
|
-
contentPath?: string
|
|
10
|
-
base64Content?: string
|
|
11
|
-
layerName: string
|
|
12
|
-
// 支持的运行时
|
|
13
|
-
runtimes: string[]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 创建文件层
|
|
17
|
-
export async function createLayer(options: IFunctionLayerOptions): Promise<void> {
|
|
18
|
-
const { contentPath = '', layerName, base64Content = '', runtimes = [] } = options
|
|
19
|
-
|
|
20
|
-
checkFullAccess(contentPath)
|
|
21
|
-
|
|
22
|
-
const validRuntime = ['Nodejs8.9', 'Php7', 'Java8']
|
|
23
|
-
if (runtimes.some(item => validRuntime.indexOf(item) === -1)) {
|
|
24
|
-
throw new CloudBaseError(
|
|
25
|
-
`Invalid runtime value. Now only support: ${validRuntime.join(', ')}`
|
|
26
|
-
)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
let base64
|
|
30
|
-
|
|
31
|
-
if (base64Content) {
|
|
32
|
-
base64 = base64Content
|
|
33
|
-
} else if (isDirectory(contentPath)) {
|
|
34
|
-
// 压缩文件夹
|
|
35
|
-
const dirName = path.parse(contentPath).name
|
|
36
|
-
const dest = path.join(process.cwd(), `cli-${dirName}.zip`)
|
|
37
|
-
// ZIP 文件存在,删除 ZIP 文件
|
|
38
|
-
if (checkFullAccess(dest)) {
|
|
39
|
-
delSync(dest)
|
|
40
|
-
}
|
|
41
|
-
await zipDir(contentPath, dest)
|
|
42
|
-
// 转换成 base64
|
|
43
|
-
const fileBuffer = await fs.promises.readFile(dest)
|
|
44
|
-
base64 = fileBuffer.toString('base64')
|
|
45
|
-
delSync(dest)
|
|
46
|
-
} else {
|
|
47
|
-
const fileType = path.extname(contentPath)
|
|
48
|
-
if (fileType !== '.zip') {
|
|
49
|
-
throw new CloudBaseError('文件类型不正确,目前只支持 ZIP 文件!')
|
|
50
|
-
}
|
|
51
|
-
const fileBuffer = await fs.promises.readFile(contentPath)
|
|
52
|
-
base64 = fileBuffer.toString('base64')
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return scfService.request('PublishLayerVersion', {
|
|
56
|
-
LayerName: layerName,
|
|
57
|
-
CompatibleRuntimes: runtimes,
|
|
58
|
-
Content: {
|
|
59
|
-
// 最大支持 20M
|
|
60
|
-
ZipFile: base64
|
|
61
|
-
}
|
|
62
|
-
})
|
|
63
|
-
}
|
|
1
|
+
import fs from 'fs'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import { CloudBaseError, zipDir } from '@cloudbase/toolbox'
|
|
4
|
+
import { CloudApiService, checkFullAccess, isDirectory, delSync } from '../../utils'
|
|
5
|
+
|
|
6
|
+
const scfService = new CloudApiService('scf')
|
|
7
|
+
|
|
8
|
+
export interface IFunctionLayerOptions {
|
|
9
|
+
contentPath?: string
|
|
10
|
+
base64Content?: string
|
|
11
|
+
layerName: string
|
|
12
|
+
// 支持的运行时
|
|
13
|
+
runtimes: string[]
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// 创建文件层
|
|
17
|
+
export async function createLayer(options: IFunctionLayerOptions): Promise<void> {
|
|
18
|
+
const { contentPath = '', layerName, base64Content = '', runtimes = [] } = options
|
|
19
|
+
|
|
20
|
+
checkFullAccess(contentPath)
|
|
21
|
+
|
|
22
|
+
const validRuntime = ['Nodejs8.9', 'Php7', 'Java8']
|
|
23
|
+
if (runtimes.some(item => validRuntime.indexOf(item) === -1)) {
|
|
24
|
+
throw new CloudBaseError(
|
|
25
|
+
`Invalid runtime value. Now only support: ${validRuntime.join(', ')}`
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let base64
|
|
30
|
+
|
|
31
|
+
if (base64Content) {
|
|
32
|
+
base64 = base64Content
|
|
33
|
+
} else if (isDirectory(contentPath)) {
|
|
34
|
+
// 压缩文件夹
|
|
35
|
+
const dirName = path.parse(contentPath).name
|
|
36
|
+
const dest = path.join(process.cwd(), `cli-${dirName}.zip`)
|
|
37
|
+
// ZIP 文件存在,删除 ZIP 文件
|
|
38
|
+
if (checkFullAccess(dest)) {
|
|
39
|
+
delSync(dest)
|
|
40
|
+
}
|
|
41
|
+
await zipDir(contentPath, dest)
|
|
42
|
+
// 转换成 base64
|
|
43
|
+
const fileBuffer = await fs.promises.readFile(dest)
|
|
44
|
+
base64 = fileBuffer.toString('base64')
|
|
45
|
+
delSync(dest)
|
|
46
|
+
} else {
|
|
47
|
+
const fileType = path.extname(contentPath)
|
|
48
|
+
if (fileType !== '.zip') {
|
|
49
|
+
throw new CloudBaseError('文件类型不正确,目前只支持 ZIP 文件!')
|
|
50
|
+
}
|
|
51
|
+
const fileBuffer = await fs.promises.readFile(contentPath)
|
|
52
|
+
base64 = fileBuffer.toString('base64')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return scfService.request('PublishLayerVersion', {
|
|
56
|
+
LayerName: layerName,
|
|
57
|
+
CompatibleRuntimes: runtimes,
|
|
58
|
+
Content: {
|
|
59
|
+
// 最大支持 20M
|
|
60
|
+
ZipFile: base64
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
}
|