@cloudbase/cli 2.0.12-alpha.1 → 2.0.13
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/.vscode/launch.json +0 -10
- package/.vscode/settings.json +3 -0
- package/bin/cloudbase.js +0 -0
- package/bin/tcb.js +0 -0
- package/lib/commands/lowcode/app.js +2 -30
- package/lib/run/service/deployPackage.js +2 -9
- package/lib/utils/checkTcbrEnv.js +5 -4
- package/lib/utils/debug-logger.js +30 -0
- package/lib/utils/net/cloud-api-request.js +7 -1
- package/lib/utils/net/http-request.js +16 -5
- package/package.json +5 -4
- package/types/commands/lowcode/app.d.ts +0 -10
- package/types/utils/debug-logger.d.ts +1 -0
- package/types/utils/net/http-request.d.ts +6 -2
- package/.history/.gitignore_20220624162613 +0 -84
- package/.history/.gitignore_20220627114054 +0 -86
- package/.history/package_20220711204706.json +0 -88
- package/.history/package_20220711204818.json +0 -88
- package/.history/package_20220712151717.json +0 -88
- package/.history/src/commands/lowcode/app_20220624162613.ts +0 -34
- package/.history/src/commands/lowcode/app_20220627114205.ts +0 -52
- package/.history/src/index_20220624162613.ts +0 -13
- package/.history/src/index_20220627113609.ts +0 -15
- package/.history/src/index_20220627114102.ts +0 -13
- package/src/auth/index.ts +0 -2
- package/src/auth/login.ts +0 -91
- package/src/auth/logout.ts +0 -7
- package/src/commands/account/index.ts +0 -2
- package/src/commands/account/login.ts +0 -192
- package/src/commands/account/logout.ts +0 -24
- package/src/commands/common.ts +0 -246
- package/src/commands/env/base.ts +0 -90
- package/src/commands/env/create.ts +0 -92
- package/src/commands/env/domain.ts +0 -186
- package/src/commands/env/index.ts +0 -4
- package/src/commands/env/login.ts +0 -235
- package/src/commands/framework/index.ts +0 -124
- package/src/commands/functions/alias/getRoute.ts +0 -76
- package/src/commands/functions/alias/index.ts +0 -2
- package/src/commands/functions/alias/setRoute.ts +0 -82
- package/src/commands/functions/code-download.ts +0 -100
- package/src/commands/functions/code-update.ts +0 -62
- package/src/commands/functions/concurrency/delete.ts +0 -45
- package/src/commands/functions/concurrency/index.ts +0 -3
- package/src/commands/functions/concurrency/list.ts +0 -58
- package/src/commands/functions/concurrency/set.ts +0 -47
- package/src/commands/functions/config-update.ts +0 -76
- package/src/commands/functions/copy.ts +0 -62
- package/src/commands/functions/delete.ts +0 -79
- package/src/commands/functions/deploy.ts +0 -293
- package/src/commands/functions/detail.ts +0 -138
- package/src/commands/functions/index.ts +0 -16
- package/src/commands/functions/invoke.ts +0 -121
- package/src/commands/functions/layer/bind.ts +0 -182
- package/src/commands/functions/layer/common.ts +0 -8
- package/src/commands/functions/layer/create.ts +0 -49
- package/src/commands/functions/layer/delete.ts +0 -73
- package/src/commands/functions/layer/download.ts +0 -92
- package/src/commands/functions/layer/index.ts +0 -7
- package/src/commands/functions/layer/list.ts +0 -94
- package/src/commands/functions/layer/sort.ts +0 -76
- package/src/commands/functions/list.ts +0 -68
- package/src/commands/functions/log.ts +0 -148
- package/src/commands/functions/run.ts +0 -249
- package/src/commands/functions/trigger-create.ts +0 -79
- package/src/commands/functions/trigger-delete.ts +0 -105
- package/src/commands/functions/version/index.ts +0 -2
- package/src/commands/functions/version/list.ts +0 -73
- package/src/commands/functions/version/publish.ts +0 -43
- package/src/commands/gateway/create.ts +0 -109
- package/src/commands/gateway/delete.ts +0 -81
- package/src/commands/gateway/domain.ts +0 -159
- package/src/commands/gateway/index.ts +0 -5
- package/src/commands/gateway/list.ts +0 -76
- package/src/commands/gateway/switch.ts +0 -107
- package/src/commands/helpers/index.ts +0 -3
- package/src/commands/helpers/init.ts +0 -431
- package/src/commands/helpers/new.ts +0 -117
- package/src/commands/helpers/open.ts +0 -67
- package/src/commands/hosting/hosting.ts +0 -360
- package/src/commands/hosting/index.ts +0 -1
- package/src/commands/index.ts +0 -13
- package/src/commands/lowcode/app.ts +0 -52
- package/src/commands/lowcode/comps.ts +0 -325
- package/src/commands/lowcode/index.ts +0 -2
- package/src/commands/lowcode/utils.ts +0 -25
- package/src/commands/run/create.ts +0 -153
- package/src/commands/run/delete.ts +0 -77
- package/src/commands/run/image/common.ts +0 -8
- package/src/commands/run/image/delete.ts +0 -68
- package/src/commands/run/image/download.ts +0 -68
- package/src/commands/run/image/index.ts +0 -5
- package/src/commands/run/image/list.ts +0 -84
- package/src/commands/run/image/upload.ts +0 -76
- package/src/commands/run/index.ts +0 -7
- package/src/commands/run/list.ts +0 -83
- package/src/commands/run/service/config.ts +0 -81
- package/src/commands/run/service/create.ts +0 -122
- package/src/commands/run/service/deploy.ts +0 -125
- package/src/commands/run/service/index.ts +0 -5
- package/src/commands/run/service/list.ts +0 -94
- package/src/commands/run/service/update.ts +0 -108
- package/src/commands/run/standalonegateway/common.ts +0 -8
- package/src/commands/run/standalonegateway/create.ts +0 -85
- package/src/commands/run/standalonegateway/destroy.ts +0 -59
- package/src/commands/run/standalonegateway/index.ts +0 -5
- package/src/commands/run/standalonegateway/list.ts +0 -53
- package/src/commands/run/standalonegateway/package.ts +0 -62
- package/src/commands/run/standalonegateway/turn.ts +0 -63
- package/src/commands/run/version/common.ts +0 -8
- package/src/commands/run/version/create.ts +0 -369
- package/src/commands/run/version/delete.ts +0 -64
- package/src/commands/run/version/index.ts +0 -5
- package/src/commands/run/version/list.ts +0 -91
- package/src/commands/run/version/modify.ts +0 -137
- package/src/commands/run/version/update.ts +0 -398
- package/src/commands/smart.ts +0 -132
- package/src/commands/storage/index.ts +0 -1
- package/src/commands/storage/storage.ts +0 -464
- package/src/commands/third/index.ts +0 -1
- package/src/commands/third/thirdAttach.ts +0 -49
- package/src/completion/index.ts +0 -13
- package/src/constant.ts +0 -154
- package/src/decorators/captureError.ts +0 -25
- package/src/decorators/constants.ts +0 -12
- package/src/decorators/deprecate.ts +0 -25
- package/src/decorators/guard.ts +0 -42
- package/src/decorators/index.ts +0 -7
- package/src/decorators/injectParams.ts +0 -54
- package/src/decorators/params/common.ts +0 -28
- package/src/decorators/params/index.ts +0 -35
- package/src/env/domain.ts +0 -33
- package/src/env/index.ts +0 -63
- package/src/env/login.ts +0 -80
- package/src/error.ts +0 -36
- package/src/function/alias.ts +0 -43
- package/src/function/base.ts +0 -253
- package/src/function/code.ts +0 -55
- package/src/function/concurrency.ts +0 -57
- package/src/function/create.ts +0 -78
- package/src/function/delete.ts +0 -42
- package/src/function/index.ts +0 -11
- package/src/function/layer/attach.ts +0 -68
- package/src/function/layer/create.ts +0 -63
- package/src/function/layer/delete.ts +0 -21
- package/src/function/layer/download.ts +0 -54
- package/src/function/layer/index.ts +0 -7
- package/src/function/layer/list.ts +0 -32
- package/src/function/layer/sort.ts +0 -24
- package/src/function/trigger.ts +0 -97
- package/src/function/update.ts +0 -35
- package/src/function/version.ts +0 -39
- package/src/function/vpc.ts +0 -22
- package/src/gateway/index.ts +0 -137
- package/src/help.ts +0 -50
- package/src/hosting.ts +0 -212
- package/src/index.ts +0 -13
- package/src/logger.ts +0 -17
- package/src/run/create.ts +0 -23
- package/src/run/delete.ts +0 -15
- package/src/run/image/build.ts +0 -36
- package/src/run/image/delete.ts +0 -14
- package/src/run/image/index.ts +0 -4
- package/src/run/image/info.ts +0 -27
- package/src/run/image/list.ts +0 -23
- package/src/run/index.ts +0 -8
- package/src/run/list.ts +0 -30
- package/src/run/repo.ts +0 -25
- package/src/run/service/common.ts +0 -311
- package/src/run/service/config.ts +0 -77
- package/src/run/service/create.ts +0 -52
- package/src/run/service/deployPackage.ts +0 -65
- package/src/run/service/index.ts +0 -7
- package/src/run/service/list.ts +0 -29
- package/src/run/service/showLogs.ts +0 -98
- package/src/run/service/update.ts +0 -82
- package/src/run/standalonegateway/create.ts +0 -24
- package/src/run/standalonegateway/destroy.ts +0 -19
- package/src/run/standalonegateway/index.ts +0 -5
- package/src/run/standalonegateway/list.ts +0 -74
- package/src/run/standalonegateway/package/index.ts +0 -1
- package/src/run/standalonegateway/package/list.ts +0 -24
- package/src/run/standalonegateway/turn/index.ts +0 -2
- package/src/run/standalonegateway/turn/off.ts +0 -19
- package/src/run/standalonegateway/turn/on.ts +0 -19
- package/src/run/version/create.ts +0 -68
- package/src/run/version/delete.ts +0 -16
- package/src/run/version/index.ts +0 -6
- package/src/run/version/list.ts +0 -17
- package/src/run/version/modify.ts +0 -17
- package/src/run/version/repo.ts +0 -28
- package/src/run/version/update.ts +0 -59
- package/src/storage.ts +0 -114
- package/src/third/index.ts +0 -13
- package/src/types.ts +0 -672
- package/src/utils/auth.ts +0 -15
- package/src/utils/checkTcbrEnv.ts +0 -67
- package/src/utils/cli-table.ts +0 -23
- package/src/utils/commonParamsCheck.ts +0 -65
- package/src/utils/config.ts +0 -39
- package/src/utils/env.ts +0 -244
- package/src/utils/fs/del.ts +0 -5
- package/src/utils/fs/index.ts +0 -71
- package/src/utils/function-packer.ts +0 -97
- package/src/utils/index.ts +0 -25
- package/src/utils/log.ts +0 -82
- package/src/utils/net/cloud-api-request.ts +0 -62
- package/src/utils/net/credential.ts +0 -53
- package/src/utils/net/http-request.ts +0 -84
- package/src/utils/net/index.ts +0 -5
- package/src/utils/net/manager-service.ts +0 -36
- package/src/utils/net/proxy.ts +0 -6
- package/src/utils/notice.ts +0 -28
- package/src/utils/output/highlight.ts +0 -5
- package/src/utils/output/index.ts +0 -3
- package/src/utils/output/link.ts +0 -10
- package/src/utils/output/loading.ts +0 -82
- package/src/utils/parallel.ts +0 -82
- package/src/utils/platform/index.ts +0 -3
- package/src/utils/platform/mac.ts +0 -21
- package/src/utils/platform/os.ts +0 -64
- package/src/utils/platform/port.ts +0 -10
- package/src/utils/progress-bar.ts +0 -38
- package/src/utils/prompt/index.ts +0 -1
- package/src/utils/prompt/select.ts +0 -60
- package/src/utils/reporter/agree.ts +0 -20
- package/src/utils/reporter/download.ts +0 -26
- package/src/utils/reporter/index.ts +0 -3
- package/src/utils/reporter/usage.ts +0 -20
- package/src/utils/store/auth.ts +0 -49
- package/src/utils/store/common.ts +0 -8
- package/src/utils/store/db.ts +0 -68
- package/src/utils/store/index.ts +0 -5
- package/src/utils/store/usage.ts +0 -12
- package/src/utils/tcbrApi/callTcbrApi.ts +0 -28
- package/src/utils/tcbrApi/index.ts +0 -1
- package/src/utils/template.ts +0 -170
- package/src/utils/tools/encoding.ts +0 -8
- package/src/utils/tools/index.ts +0 -4
- package/src/utils/tools/object.ts +0 -33
- package/src/utils/tools/time.ts +0 -38
- package/src/utils/tools/uid.ts +0 -19
- package/src/utils/validator.ts +0 -65
- package/yarn-error.log +0 -12841
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { Command, ICommand } from '../../common'
|
|
3
|
-
import { CloudBaseError } from '../../../error'
|
|
4
|
-
import { loadingFactory } from '../../../utils'
|
|
5
|
-
import { deleteProvisionedConcurrencyConfig } from '../../../function'
|
|
6
|
-
import { InjectParams, CmdContext, ArgsParams, ArgsOptions } from '../../../decorators'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@ICommand()
|
|
10
|
-
export class deleteProvisionedConcurrency extends Command {
|
|
11
|
-
get options() {
|
|
12
|
-
return {
|
|
13
|
-
cmd: 'fn',
|
|
14
|
-
childCmd: 'delete-provisioned-concurrency <name> <version>',
|
|
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 name = params?.[0]
|
|
28
|
-
const version = params?.[1]
|
|
29
|
-
|
|
30
|
-
const {
|
|
31
|
-
envId
|
|
32
|
-
} = ctx
|
|
33
|
-
|
|
34
|
-
const loading = loadingFactory()
|
|
35
|
-
loading.start(`删除函数 [${name}] 预置并发配置中...`)
|
|
36
|
-
|
|
37
|
-
await deleteProvisionedConcurrencyConfig({
|
|
38
|
-
envId,
|
|
39
|
-
functionName: name,
|
|
40
|
-
qualifier: version
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
loading.succeed(`删除函数 [${name}] 预置并发配置成功!`)
|
|
44
|
-
}
|
|
45
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { Command, ICommand } from '../../common'
|
|
3
|
-
import { CloudBaseError } from '../../../error'
|
|
4
|
-
import { loadingFactory, printHorizontalTable } from '../../../utils'
|
|
5
|
-
import { getProvisionedConcurrencyConfig } from '../../../function'
|
|
6
|
-
import { InjectParams, CmdContext, ArgsParams, ArgsOptions } from '../../../decorators'
|
|
7
|
-
import { StatusMap, ConcurrencyTaskStatus } from '../../../constant'
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@ICommand()
|
|
11
|
-
export class getProvisionedConcurrency extends Command {
|
|
12
|
-
get options() {
|
|
13
|
-
return {
|
|
14
|
-
cmd: 'fn',
|
|
15
|
-
childCmd: 'get-provisioned-concurrency <name> [version]',
|
|
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, @ArgsOptions() options) {
|
|
28
|
-
const name = params?.[0]
|
|
29
|
-
const version = params?.[1]
|
|
30
|
-
|
|
31
|
-
const {
|
|
32
|
-
envId
|
|
33
|
-
} = ctx
|
|
34
|
-
|
|
35
|
-
const loading = loadingFactory()
|
|
36
|
-
loading.start(`拉取函数 [${name}] 预置并发配置中...`)
|
|
37
|
-
|
|
38
|
-
const res = await getProvisionedConcurrencyConfig({
|
|
39
|
-
envId,
|
|
40
|
-
functionName: name,
|
|
41
|
-
qualifier: version
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
loading.stop()
|
|
45
|
-
|
|
46
|
-
const head: string[] = ['设置并发数', '已完成并发数', '预置任务状态', '状态说明', '版本号']
|
|
47
|
-
|
|
48
|
-
const tableData = res.Allocated.map((item) => [
|
|
49
|
-
item.AllocatedProvisionedConcurrencyNum,
|
|
50
|
-
item.AvailableProvisionedConcurrencyNum,
|
|
51
|
-
ConcurrencyTaskStatus[item.Status] || '无',
|
|
52
|
-
item.StatusReason,
|
|
53
|
-
item.Qualifier
|
|
54
|
-
])
|
|
55
|
-
|
|
56
|
-
printHorizontalTable(head, tableData)
|
|
57
|
-
}
|
|
58
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { Command, ICommand } from '../../common'
|
|
3
|
-
import { CloudBaseError } from '../../../error'
|
|
4
|
-
import { loadingFactory } from '../../../utils'
|
|
5
|
-
import { setProvisionedConcurrencyConfig } from '../../../function'
|
|
6
|
-
import { InjectParams, CmdContext, ArgsParams, ArgsOptions } from '../../../decorators'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@ICommand()
|
|
10
|
-
export class setProvisionedConcurrency extends Command {
|
|
11
|
-
get options() {
|
|
12
|
-
return {
|
|
13
|
-
cmd: 'fn',
|
|
14
|
-
childCmd: 'set-provisioned-concurrency <name> <version> <concurrency>',
|
|
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 name = params?.[0]
|
|
28
|
-
const version = params?.[1]
|
|
29
|
-
const concurrency = Number(params?.[2] || 0)
|
|
30
|
-
|
|
31
|
-
const {
|
|
32
|
-
envId
|
|
33
|
-
} = ctx
|
|
34
|
-
|
|
35
|
-
const loading = loadingFactory()
|
|
36
|
-
loading.start(`配置函数 [${name}] 预置并发中...`)
|
|
37
|
-
|
|
38
|
-
await setProvisionedConcurrencyConfig({
|
|
39
|
-
envId,
|
|
40
|
-
functionName: name,
|
|
41
|
-
qualifier: version,
|
|
42
|
-
versionProvisionedConcurrencyNum: concurrency
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
loading.succeed(`配置函数 [${name}] 预置并发成功!`)
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import inquirer from 'inquirer'
|
|
2
|
-
import { Command, ICommand } from '../common'
|
|
3
|
-
import { CloudBaseError } from '../../error'
|
|
4
|
-
import { InjectParams, CmdContext, ArgsParams, Log, Logger } from '../../decorators'
|
|
5
|
-
import { batchUpdateFunctionConfig, updateFunctionConfig } from '../../function'
|
|
6
|
-
|
|
7
|
-
@ICommand()
|
|
8
|
-
export class ConfigUpdate extends Command {
|
|
9
|
-
get options() {
|
|
10
|
-
return {
|
|
11
|
-
cmd: 'fn',
|
|
12
|
-
childCmd: {
|
|
13
|
-
cmd: 'config',
|
|
14
|
-
desc: '函数配置管理'
|
|
15
|
-
},
|
|
16
|
-
childSubCmd: 'update [name]',
|
|
17
|
-
deprecateCmd: 'functions:config:update [name]',
|
|
18
|
-
options: [
|
|
19
|
-
{
|
|
20
|
-
flags: '-e, --envId <envId>',
|
|
21
|
-
desc: '环境 Id'
|
|
22
|
-
}
|
|
23
|
-
],
|
|
24
|
-
desc: '更新云函数配置'
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@InjectParams()
|
|
29
|
-
async execute(@CmdContext() ctx, @ArgsParams() params, @Log() log: Logger) {
|
|
30
|
-
const {
|
|
31
|
-
envId,
|
|
32
|
-
config: { functions }
|
|
33
|
-
} = ctx
|
|
34
|
-
const name = params?.[0]
|
|
35
|
-
let isBathUpdate = 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
|
-
isBathUpdate = isBatch
|
|
47
|
-
|
|
48
|
-
if (!isBathUpdate) {
|
|
49
|
-
throw new CloudBaseError('请指定云函数名称!')
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (isBathUpdate) {
|
|
54
|
-
await batchUpdateFunctionConfig({
|
|
55
|
-
envId,
|
|
56
|
-
functions,
|
|
57
|
-
log: true
|
|
58
|
-
})
|
|
59
|
-
return
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const functionItem = functions.find((item) => item.name === name)
|
|
63
|
-
|
|
64
|
-
if (!functionItem) {
|
|
65
|
-
throw new CloudBaseError('未找到相关函数配置,请检查函数名是否正确')
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
await updateFunctionConfig({
|
|
69
|
-
envId,
|
|
70
|
-
functionName: name,
|
|
71
|
-
config: functionItem
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
log.success(`[${name}] 更新云函数配置成功!`)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Command, ICommand } from '../common'
|
|
2
|
-
import { CloudBaseError } from '../../error'
|
|
3
|
-
import { copyFunction } from '../../function'
|
|
4
|
-
import { InjectParams, EnvId, ArgsOptions, ArgsParams, Log, Logger } from '../../decorators'
|
|
5
|
-
|
|
6
|
-
@ICommand()
|
|
7
|
-
export class FunctionCopy extends Command {
|
|
8
|
-
get options() {
|
|
9
|
-
return {
|
|
10
|
-
cmd: 'fn',
|
|
11
|
-
childCmd: 'copy <name> [newFunctionName]',
|
|
12
|
-
deprecateCmd: 'functions:copy <name> [newFunctionName]',
|
|
13
|
-
options: [
|
|
14
|
-
{
|
|
15
|
-
flags: '-e, --envId <envId>',
|
|
16
|
-
desc: '环境 Id'
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
flags: '-t, --target <targetEnvId>',
|
|
20
|
-
desc: '目标环境 Id'
|
|
21
|
-
},
|
|
22
|
-
// {
|
|
23
|
-
// flags: '--code-secret <codeSecret>',
|
|
24
|
-
// desc: '代码加密的函数的 CodeSecret'
|
|
25
|
-
// },
|
|
26
|
-
{
|
|
27
|
-
flags: '--force',
|
|
28
|
-
desc: '如果目标环境下存在同名函数,覆盖原函数'
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
desc: '拷贝云函数'
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@InjectParams()
|
|
36
|
-
async execute(
|
|
37
|
-
@EnvId() envId,
|
|
38
|
-
@ArgsOptions() options,
|
|
39
|
-
@ArgsParams() params,
|
|
40
|
-
@Log() log: Logger
|
|
41
|
-
) {
|
|
42
|
-
const name = params?.[0]
|
|
43
|
-
const newFunctionName = params?.[1]
|
|
44
|
-
|
|
45
|
-
const { force, codeSecret, targetEnvId } = options
|
|
46
|
-
|
|
47
|
-
if (!name) {
|
|
48
|
-
throw new CloudBaseError('请指定函数名称!')
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
await copyFunction({
|
|
52
|
-
force,
|
|
53
|
-
envId,
|
|
54
|
-
codeSecret,
|
|
55
|
-
functionName: name,
|
|
56
|
-
newFunctionName: newFunctionName || name,
|
|
57
|
-
targetEnvId: targetEnvId || envId
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
log.success('拷贝函数成功')
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import inquirer from 'inquirer'
|
|
2
|
-
|
|
3
|
-
import { Command, ICommand } from '../common'
|
|
4
|
-
import { CloudBaseError } from '../../error'
|
|
5
|
-
import { loadingFactory } from '../../utils'
|
|
6
|
-
import { deleteFunction, batchDeleteFunctions } from '../../function'
|
|
7
|
-
import { InjectParams, CmdContext, ArgsParams } from '../../decorators'
|
|
8
|
-
|
|
9
|
-
@ICommand()
|
|
10
|
-
export class DeleteFunction extends Command {
|
|
11
|
-
get options() {
|
|
12
|
-
return {
|
|
13
|
-
cmd: 'fn',
|
|
14
|
-
childCmd: 'delete [name]',
|
|
15
|
-
deprecateCmd: 'functions:delete [name]',
|
|
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 name = params?.[0]
|
|
29
|
-
const {
|
|
30
|
-
envId,
|
|
31
|
-
config: { functions }
|
|
32
|
-
} = ctx
|
|
33
|
-
|
|
34
|
-
let isBatchDelete = false
|
|
35
|
-
|
|
36
|
-
// 不指定云函数名称,默认删除所有函数
|
|
37
|
-
if (!name) {
|
|
38
|
-
const answer = await inquirer.prompt({
|
|
39
|
-
type: 'confirm',
|
|
40
|
-
name: 'isBatch',
|
|
41
|
-
message: '无云函数名称,是否需要删除配置文件中的全部云函数?',
|
|
42
|
-
default: false
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
// 危险操作,再次确认
|
|
46
|
-
if (answer.isBatch) {
|
|
47
|
-
const { reConfirm } = await inquirer.prompt({
|
|
48
|
-
type: 'confirm',
|
|
49
|
-
name: 'reConfirm',
|
|
50
|
-
message: '确定要删除配置文件中的全部云函数?',
|
|
51
|
-
default: false
|
|
52
|
-
})
|
|
53
|
-
isBatchDelete = reConfirm
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!isBatchDelete) {
|
|
57
|
-
throw new CloudBaseError('请指定需要删除的云函数名称!')
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (isBatchDelete) {
|
|
62
|
-
const names: string[] = functions.map((item) => item.name)
|
|
63
|
-
return batchDeleteFunctions({
|
|
64
|
-
names,
|
|
65
|
-
envId
|
|
66
|
-
})
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const loading = loadingFactory()
|
|
70
|
-
loading.start(`删除函数 [${name}] 中...`)
|
|
71
|
-
|
|
72
|
-
await deleteFunction({
|
|
73
|
-
envId,
|
|
74
|
-
functionName: name
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
loading.succeed(`删除函数 [${name}] 成功!`)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import path from 'path'
|
|
2
|
-
import inquirer from 'inquirer'
|
|
3
|
-
import { getRegion } from '@cloudbase/toolbox'
|
|
4
|
-
import { Command, ICommand } from '../common'
|
|
5
|
-
import { CloudBaseError } from '../../error'
|
|
6
|
-
import { createFunction } from '../../function'
|
|
7
|
-
import { queryGateway, createGateway } from '../../gateway'
|
|
8
|
-
import {
|
|
9
|
-
logger,
|
|
10
|
-
random,
|
|
11
|
-
isDirectory,
|
|
12
|
-
loadingFactory,
|
|
13
|
-
genClickableLink,
|
|
14
|
-
highlightCommand,
|
|
15
|
-
checkFullAccess,
|
|
16
|
-
AsyncTaskParallelController
|
|
17
|
-
} from '../../utils'
|
|
18
|
-
import { ICreateFunctionOptions } from '../../types'
|
|
19
|
-
import { DefaultFunctionDeployConfig } from '../../constant'
|
|
20
|
-
import { InjectParams, CmdContext, ArgsParams, Log, Logger } from '../../decorators'
|
|
21
|
-
|
|
22
|
-
const regionIdMap = {
|
|
23
|
-
'ap-guangzhou': 1,
|
|
24
|
-
'ap-shanghai': 4,
|
|
25
|
-
'ap-beijing': 8
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@ICommand()
|
|
29
|
-
export class FunctionDeploy extends Command {
|
|
30
|
-
get options() {
|
|
31
|
-
return {
|
|
32
|
-
cmd: 'fn',
|
|
33
|
-
childCmd: 'deploy [name]',
|
|
34
|
-
deprecateCmd: 'functions:deploy [name]',
|
|
35
|
-
options: [
|
|
36
|
-
{
|
|
37
|
-
flags: '-e, --envId <envId>',
|
|
38
|
-
desc: '环境 Id'
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
flags: '--code-secret <codeSecret>',
|
|
42
|
-
desc: '传入此参数将保护代码,格式为 36 位大小写字母和数字'
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
flags: '--force',
|
|
46
|
-
desc: '如果存在同名函数,上传后覆盖同名函数'
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
flags: '--path <path>',
|
|
50
|
-
desc: '自动创建HTTP 访问服务访问路径'
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
flags: '--all',
|
|
54
|
-
desc: '部署配置文件中的包含的全部云函数'
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
flags: '--dir <dir>',
|
|
58
|
-
desc: '指定云函数的文件夹路径'
|
|
59
|
-
}
|
|
60
|
-
],
|
|
61
|
-
desc: '部署云函数'
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@InjectParams()
|
|
66
|
-
async execute(@CmdContext() ctx, @ArgsParams() params, @Log() log: Logger) {
|
|
67
|
-
const { envId, config, options } = ctx
|
|
68
|
-
const { functions } = config
|
|
69
|
-
const { force, codeSecret, path: access, all, dir } = options
|
|
70
|
-
const functionRootPath = path.join(process.cwd(), config.functionRoot)
|
|
71
|
-
const name = params?.[0]
|
|
72
|
-
|
|
73
|
-
if (access && checkFullAccess(access)) {
|
|
74
|
-
log.warn('--path 参数已更换为HTTP 访问服务路径,请使用 --dir 指定部署函数的文件夹路径')
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (access && access[0] !== '/') {
|
|
78
|
-
throw new CloudBaseError('HTTP 访问服务路径必须以 / 开头')
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// 当没有指定函数名称或函数路径时,询问处理否部署全部云函数
|
|
82
|
-
if ((!name && !dir) || all) {
|
|
83
|
-
return this.deployAllFunction({
|
|
84
|
-
all,
|
|
85
|
-
envId,
|
|
86
|
-
force,
|
|
87
|
-
access,
|
|
88
|
-
functions,
|
|
89
|
-
codeSecret,
|
|
90
|
-
functionRootPath
|
|
91
|
-
})
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// 校验函数路径是否存在
|
|
95
|
-
if (dir) {
|
|
96
|
-
checkFullAccess(dir, true)
|
|
97
|
-
if (!isDirectory(dir)) {
|
|
98
|
-
throw new CloudBaseError('--dir 参数必须指定为云函数的文件夹路径')
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
let newFunction
|
|
103
|
-
if (functions && functions.length > 0) {
|
|
104
|
-
newFunction = functions.find((item) => item.name === name)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// 没有配置,使用默认配置
|
|
108
|
-
if (!newFunction || !newFunction.name) {
|
|
109
|
-
log.info('未找到函数发布配置,使用默认配置 => 运行时:Nodejs10.15/在线安装依赖')
|
|
110
|
-
newFunction = {
|
|
111
|
-
name,
|
|
112
|
-
...DefaultFunctionDeployConfig
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const loading = loadingFactory()
|
|
117
|
-
|
|
118
|
-
loading.start('云函数部署中...')
|
|
119
|
-
|
|
120
|
-
try {
|
|
121
|
-
await createFunction({
|
|
122
|
-
force,
|
|
123
|
-
envId,
|
|
124
|
-
codeSecret,
|
|
125
|
-
functionRootPath,
|
|
126
|
-
func: newFunction,
|
|
127
|
-
accessPath: access,
|
|
128
|
-
functionPath: dir
|
|
129
|
-
})
|
|
130
|
-
loading.succeed(`[${newFunction.name}] 云函数部署成功!`)
|
|
131
|
-
// await genApiGateway(envId, name)
|
|
132
|
-
this.printSuccessTips(envId)
|
|
133
|
-
} catch (e) {
|
|
134
|
-
// 询问是否覆盖同名函数
|
|
135
|
-
loading.stop()
|
|
136
|
-
await this.handleDeployFail(e, {
|
|
137
|
-
envId,
|
|
138
|
-
codeSecret,
|
|
139
|
-
functionRootPath,
|
|
140
|
-
func: newFunction,
|
|
141
|
-
accessPath: access,
|
|
142
|
-
functionPath: dir
|
|
143
|
-
})
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (access || newFunction.path) {
|
|
147
|
-
const link = genClickableLink(
|
|
148
|
-
`https://${envId}.service.tcloudbase.com${access || newFunction.path}`
|
|
149
|
-
)
|
|
150
|
-
console.log(`\n云函数HTTP 访问服务访问链接:${link}`)
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
async deployAllFunction(options: any) {
|
|
155
|
-
const { functions = [], envId, force, codeSecret, functionRootPath, all, access } = options
|
|
156
|
-
|
|
157
|
-
// 指定 all 参数,直接部署全部云函数
|
|
158
|
-
if (!all) {
|
|
159
|
-
const { isBatch } = await inquirer.prompt({
|
|
160
|
-
type: 'confirm',
|
|
161
|
-
name: 'isBatch',
|
|
162
|
-
message: '没有指定需要部署的云函数,是否部署配置文件中的全部云函数?',
|
|
163
|
-
default: false
|
|
164
|
-
})
|
|
165
|
-
|
|
166
|
-
// 用户不部署全部函数,报错
|
|
167
|
-
if (!isBatch) {
|
|
168
|
-
throw new CloudBaseError(
|
|
169
|
-
'请指定需要部署的云函数的名称或通过 --path 参数指定需要部署的函数的路径!'
|
|
170
|
-
)
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// 批量部署云函数
|
|
175
|
-
const loading = loadingFactory()
|
|
176
|
-
const tasks = functions.map((func) => async () => {
|
|
177
|
-
loading.start('云函数部署中')
|
|
178
|
-
try {
|
|
179
|
-
await createFunction({
|
|
180
|
-
func,
|
|
181
|
-
envId,
|
|
182
|
-
force,
|
|
183
|
-
codeSecret,
|
|
184
|
-
functionRootPath,
|
|
185
|
-
accessPath: access
|
|
186
|
-
})
|
|
187
|
-
loading.succeed(`[${func.name}] 云函数部署成功`)
|
|
188
|
-
} catch (e) {
|
|
189
|
-
loading.stop()
|
|
190
|
-
await this.handleDeployFail(e, {
|
|
191
|
-
func,
|
|
192
|
-
envId,
|
|
193
|
-
codeSecret,
|
|
194
|
-
functionRootPath,
|
|
195
|
-
accessPath: access
|
|
196
|
-
})
|
|
197
|
-
}
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
if (tasks.length > 5) {
|
|
201
|
-
logger.info('函数数量较多,将使用队列部署')
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// 控制函数创建并发
|
|
205
|
-
const asyncTaskController = new AsyncTaskParallelController(5, 50)
|
|
206
|
-
asyncTaskController.loadTasks(tasks)
|
|
207
|
-
const results = await asyncTaskController.run()
|
|
208
|
-
|
|
209
|
-
// 输出信息
|
|
210
|
-
const success = results.filter((_) => !_)
|
|
211
|
-
logger.success(`成功部署 ${success?.length} 个函数`)
|
|
212
|
-
// 部署失败
|
|
213
|
-
const err = results.filter((_) => _)
|
|
214
|
-
err?.length && logger.error(`${err?.length} 个云函数部署失败`)
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
async handleDeployFail(e: CloudBaseError, options: ICreateFunctionOptions) {
|
|
218
|
-
const { envId, codeSecret, functionRootPath, func, functionPath, accessPath } = options
|
|
219
|
-
const loading = loadingFactory()
|
|
220
|
-
|
|
221
|
-
if (e.code === 'ResourceInUse.FunctionName' || e.code === 'ResourceInUse.Function') {
|
|
222
|
-
const { force } = await inquirer.prompt({
|
|
223
|
-
type: 'confirm',
|
|
224
|
-
name: 'force',
|
|
225
|
-
message: `存在同名云函数:[${func.name}],是否覆盖原函数代码与配置`,
|
|
226
|
-
default: false
|
|
227
|
-
})
|
|
228
|
-
|
|
229
|
-
if (force) {
|
|
230
|
-
loading.start('云函数部署中...')
|
|
231
|
-
try {
|
|
232
|
-
await createFunction({
|
|
233
|
-
func,
|
|
234
|
-
envId,
|
|
235
|
-
codeSecret,
|
|
236
|
-
accessPath,
|
|
237
|
-
force: true,
|
|
238
|
-
functionPath,
|
|
239
|
-
functionRootPath
|
|
240
|
-
})
|
|
241
|
-
loading.succeed(`[${func.name}] 云函数部署成功!`)
|
|
242
|
-
// await genApiGateway(envId, name)
|
|
243
|
-
await this.printSuccessTips(envId)
|
|
244
|
-
} catch (e) {
|
|
245
|
-
loading.stop()
|
|
246
|
-
throw e
|
|
247
|
-
}
|
|
248
|
-
return
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
throw e
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
@InjectParams()
|
|
256
|
-
async printSuccessTips(envId: string, @Log() log?: Logger) {
|
|
257
|
-
let url = `https://console.cloud.tencent.com/tcb/scf?envId=${envId}`
|
|
258
|
-
const region = await getRegion()
|
|
259
|
-
url += `&rid=${regionIdMap[region]}`
|
|
260
|
-
const link = genClickableLink(url)
|
|
261
|
-
log.breakLine()
|
|
262
|
-
log.info(`控制台查看函数详情或创建HTTP 访问服务链接 🔗:${link}`)
|
|
263
|
-
log.info(`使用 ${highlightCommand('cloudbase functions:list')} 命令查看已部署云函数`)
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// 创建函数 API 网关
|
|
267
|
-
async genApiGateway(envId: string, name: string) {
|
|
268
|
-
const loading = loadingFactory()
|
|
269
|
-
// 检查是否绑定了 HTTP 网关
|
|
270
|
-
const res = await queryGateway({
|
|
271
|
-
name,
|
|
272
|
-
envId
|
|
273
|
-
})
|
|
274
|
-
// 未开启,不生成 HTTP 调用了链接
|
|
275
|
-
if (res?.EnableService === false) return
|
|
276
|
-
loading.start('生成云函数HTTP 访问服务中...')
|
|
277
|
-
|
|
278
|
-
let path
|
|
279
|
-
if (res?.APISet?.length > 0) {
|
|
280
|
-
path = res.APISet[0]?.Path
|
|
281
|
-
} else {
|
|
282
|
-
path = `/${random(12)}`
|
|
283
|
-
await createGateway({
|
|
284
|
-
envId,
|
|
285
|
-
name,
|
|
286
|
-
path
|
|
287
|
-
})
|
|
288
|
-
}
|
|
289
|
-
loading.stop()
|
|
290
|
-
const link = genClickableLink(`https://${envId}.service.tcloudbase.com${path}`)
|
|
291
|
-
console.log(`\n云函数HTTP 访问服务链接:${link}`)
|
|
292
|
-
}
|
|
293
|
-
}
|