@cloudbase/cli 2.0.2 → 2.0.3
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/.vscode/settings.json +3 -0
- package/LICENSE +5 -5
- package/README.md +35 -35
- package/bin/cloudbase.js +5 -5
- package/bin/tcb.js +0 -0
- package/changelog.md +6 -6
- package/jest.config.js +17 -17
- package/lib/commands/account/login.js +18 -18
- package/lib/commands/storage/storage.js +1 -1
- package/lib/env/login.js +7 -7
- package/lib/run/service/deployPackage.js +2 -2
- package/package.json +2 -2
- 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/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/service/deployPackage.ts +1 -1
- 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/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
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
import inquirer from 'inquirer'
|
|
2
|
-
import { Command, ICommand } from '../common'
|
|
3
|
-
import { CloudBaseError } from '../../error'
|
|
4
|
-
import { InjectParams, CmdContext, ArgsParams } from '../../decorators'
|
|
5
|
-
import { batchDeleteTriggers, deleteFunctionTrigger } from '../../function'
|
|
6
|
-
|
|
7
|
-
@ICommand()
|
|
8
|
-
export class DeleteTrigger extends Command {
|
|
9
|
-
get options() {
|
|
10
|
-
return {
|
|
11
|
-
cmd: 'fn',
|
|
12
|
-
childCmd: { cmd: 'trigger', desc: '函数触发器操作' },
|
|
13
|
-
childSubCmd: 'delete [functionName] [triggerName]',
|
|
14
|
-
deprecateCmd: 'functions:trigger:delete [functionName] [triggerName]',
|
|
15
|
-
options: [
|
|
16
|
-
{
|
|
17
|
-
flags: '-e, --envId <envId>',
|
|
18
|
-
desc: '环境 Id'
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
desc: '删除云函数触发器'
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@InjectParams()
|
|
26
|
-
async execute(@CmdContext() ctx, @ArgsParams() params) {
|
|
27
|
-
const {
|
|
28
|
-
envId,
|
|
29
|
-
config: { functions }
|
|
30
|
-
} = ctx
|
|
31
|
-
|
|
32
|
-
const name = params?.[0]
|
|
33
|
-
const triggerName = params?.[1]
|
|
34
|
-
|
|
35
|
-
let isBatchDeleteTriggers
|
|
36
|
-
let isBatchDeleteFunctionTriggers = false
|
|
37
|
-
|
|
38
|
-
// 不指定云函数名称,删除配置文件中所有函数的所有触发器
|
|
39
|
-
if (!name) {
|
|
40
|
-
const answer = await inquirer.prompt({
|
|
41
|
-
type: 'confirm',
|
|
42
|
-
name: 'isBatch',
|
|
43
|
-
message: '无云函数名称,是否需要删除配置文件中的【全部云函数】的全部触发器?',
|
|
44
|
-
default: false
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
// 危险操作,再次确认
|
|
48
|
-
if (answer.isBatch) {
|
|
49
|
-
const { reConfirm } = await inquirer.prompt({
|
|
50
|
-
type: 'confirm',
|
|
51
|
-
name: 'reConfirm',
|
|
52
|
-
message: '确定要删除配置文件中的【全部云函数】的全部触发器?',
|
|
53
|
-
default: false
|
|
54
|
-
})
|
|
55
|
-
isBatchDeleteTriggers = reConfirm
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (!isBatchDeleteTriggers) {
|
|
59
|
-
throw new CloudBaseError('请指定云函数名称以及触发器名称!')
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (isBatchDeleteTriggers) {
|
|
64
|
-
return batchDeleteTriggers({
|
|
65
|
-
envId,
|
|
66
|
-
functions
|
|
67
|
-
})
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// 指定了函数名称,但没有指定触发器名称,删除此函数的所有触发器
|
|
71
|
-
if (!triggerName && name) {
|
|
72
|
-
const { isBatch } = await inquirer.prompt({
|
|
73
|
-
type: 'confirm',
|
|
74
|
-
name: 'isBatch',
|
|
75
|
-
message: '没有指定触发器名称,是否需要此云函数的全部触发器?',
|
|
76
|
-
default: false
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
isBatchDeleteFunctionTriggers = isBatch
|
|
80
|
-
|
|
81
|
-
if (!isBatchDeleteFunctionTriggers) {
|
|
82
|
-
throw new CloudBaseError('请指定云函数名称以及触发器名称!')
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (isBatchDeleteFunctionTriggers) {
|
|
87
|
-
const func = functions.find((item) => item.name === name)
|
|
88
|
-
return batchDeleteTriggers({
|
|
89
|
-
envId,
|
|
90
|
-
functions: [func]
|
|
91
|
-
})
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (!triggerName) {
|
|
95
|
-
throw new CloudBaseError('触发器名称不能为空')
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// 删除指定函数的单个触发器
|
|
99
|
-
await deleteFunctionTrigger({
|
|
100
|
-
envId,
|
|
101
|
-
functionName: name,
|
|
102
|
-
triggerName
|
|
103
|
-
})
|
|
104
|
-
}
|
|
105
|
-
}
|
|
1
|
+
import inquirer from 'inquirer'
|
|
2
|
+
import { Command, ICommand } from '../common'
|
|
3
|
+
import { CloudBaseError } from '../../error'
|
|
4
|
+
import { InjectParams, CmdContext, ArgsParams } from '../../decorators'
|
|
5
|
+
import { batchDeleteTriggers, deleteFunctionTrigger } from '../../function'
|
|
6
|
+
|
|
7
|
+
@ICommand()
|
|
8
|
+
export class DeleteTrigger extends Command {
|
|
9
|
+
get options() {
|
|
10
|
+
return {
|
|
11
|
+
cmd: 'fn',
|
|
12
|
+
childCmd: { cmd: 'trigger', desc: '函数触发器操作' },
|
|
13
|
+
childSubCmd: 'delete [functionName] [triggerName]',
|
|
14
|
+
deprecateCmd: 'functions:trigger:delete [functionName] [triggerName]',
|
|
15
|
+
options: [
|
|
16
|
+
{
|
|
17
|
+
flags: '-e, --envId <envId>',
|
|
18
|
+
desc: '环境 Id'
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
desc: '删除云函数触发器'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@InjectParams()
|
|
26
|
+
async execute(@CmdContext() ctx, @ArgsParams() params) {
|
|
27
|
+
const {
|
|
28
|
+
envId,
|
|
29
|
+
config: { functions }
|
|
30
|
+
} = ctx
|
|
31
|
+
|
|
32
|
+
const name = params?.[0]
|
|
33
|
+
const triggerName = params?.[1]
|
|
34
|
+
|
|
35
|
+
let isBatchDeleteTriggers
|
|
36
|
+
let isBatchDeleteFunctionTriggers = false
|
|
37
|
+
|
|
38
|
+
// 不指定云函数名称,删除配置文件中所有函数的所有触发器
|
|
39
|
+
if (!name) {
|
|
40
|
+
const answer = await inquirer.prompt({
|
|
41
|
+
type: 'confirm',
|
|
42
|
+
name: 'isBatch',
|
|
43
|
+
message: '无云函数名称,是否需要删除配置文件中的【全部云函数】的全部触发器?',
|
|
44
|
+
default: false
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
// 危险操作,再次确认
|
|
48
|
+
if (answer.isBatch) {
|
|
49
|
+
const { reConfirm } = await inquirer.prompt({
|
|
50
|
+
type: 'confirm',
|
|
51
|
+
name: 'reConfirm',
|
|
52
|
+
message: '确定要删除配置文件中的【全部云函数】的全部触发器?',
|
|
53
|
+
default: false
|
|
54
|
+
})
|
|
55
|
+
isBatchDeleteTriggers = reConfirm
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!isBatchDeleteTriggers) {
|
|
59
|
+
throw new CloudBaseError('请指定云函数名称以及触发器名称!')
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (isBatchDeleteTriggers) {
|
|
64
|
+
return batchDeleteTriggers({
|
|
65
|
+
envId,
|
|
66
|
+
functions
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// 指定了函数名称,但没有指定触发器名称,删除此函数的所有触发器
|
|
71
|
+
if (!triggerName && name) {
|
|
72
|
+
const { isBatch } = await inquirer.prompt({
|
|
73
|
+
type: 'confirm',
|
|
74
|
+
name: 'isBatch',
|
|
75
|
+
message: '没有指定触发器名称,是否需要此云函数的全部触发器?',
|
|
76
|
+
default: false
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
isBatchDeleteFunctionTriggers = isBatch
|
|
80
|
+
|
|
81
|
+
if (!isBatchDeleteFunctionTriggers) {
|
|
82
|
+
throw new CloudBaseError('请指定云函数名称以及触发器名称!')
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (isBatchDeleteFunctionTriggers) {
|
|
87
|
+
const func = functions.find((item) => item.name === name)
|
|
88
|
+
return batchDeleteTriggers({
|
|
89
|
+
envId,
|
|
90
|
+
functions: [func]
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (!triggerName) {
|
|
95
|
+
throw new CloudBaseError('触发器名称不能为空')
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// 删除指定函数的单个触发器
|
|
99
|
+
await deleteFunctionTrigger({
|
|
100
|
+
envId,
|
|
101
|
+
functionName: name,
|
|
102
|
+
triggerName
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './publish'
|
|
1
|
+
export * from './publish'
|
|
2
2
|
export * from './list'
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
import { Command, ICommand } from '../../common'
|
|
3
|
-
import { CloudBaseError } from '../../../error'
|
|
4
|
-
import { loadingFactory, printHorizontalTable } from '../../../utils'
|
|
5
|
-
import { listFunctionVersions } from '../../../function'
|
|
6
|
-
import { InjectParams, CmdContext, ArgsParams, ArgsOptions } from '../../../decorators'
|
|
7
|
-
import { StatusMap } from '../../../constant'
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@ICommand()
|
|
11
|
-
export class ListFunctionVersion extends Command {
|
|
12
|
-
get options() {
|
|
13
|
-
return {
|
|
14
|
-
cmd: 'fn',
|
|
15
|
-
childCmd: 'list-function-versions <name>',
|
|
16
|
-
options: [
|
|
17
|
-
{
|
|
18
|
-
flags: '-e, --envId <envId>',
|
|
19
|
-
desc: '环境 Id'
|
|
20
|
-
},
|
|
21
|
-
{ flags: '-l, --limit <limit>', desc: '返回数据长度,默认值为 20' },
|
|
22
|
-
{
|
|
23
|
-
flags: '-o, --offset <offset>',
|
|
24
|
-
desc: '数据偏移量,默认值为 0'
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
desc: '展示函数版本列表'
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@InjectParams()
|
|
32
|
-
async execute(@CmdContext() ctx, @ArgsParams() params, @ArgsOptions() options) {
|
|
33
|
-
const name = params?.[0]
|
|
34
|
-
let { limit = 20, offset = 0 } = options
|
|
35
|
-
limit = Number(limit)
|
|
36
|
-
offset = Number(offset)
|
|
37
|
-
if (!Number.isInteger(limit) || !Number.isInteger(offset)) {
|
|
38
|
-
throw new CloudBaseError('limit 和 offset 必须为整数')
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (limit < 0 || offset < 0) {
|
|
42
|
-
throw new CloudBaseError('limit 和 offset 必须为大于 0 的整数')
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const {
|
|
46
|
-
envId
|
|
47
|
-
} = ctx
|
|
48
|
-
|
|
49
|
-
const loading = loadingFactory()
|
|
50
|
-
loading.start(`拉取函数 [${name}] 版本列表中...`)
|
|
51
|
-
|
|
52
|
-
const res = await listFunctionVersions({
|
|
53
|
-
envId,
|
|
54
|
-
functionName: name,
|
|
55
|
-
offset,
|
|
56
|
-
limit
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
loading.stop()
|
|
60
|
-
|
|
61
|
-
const head: string[] = ['版本', '描述', '创建时间', '修改时间', '状态']
|
|
62
|
-
|
|
63
|
-
const tableData = res.Versions.map((item) => [
|
|
64
|
-
item.Version,
|
|
65
|
-
item.Description,
|
|
66
|
-
item.AddTime,
|
|
67
|
-
item.ModTime,
|
|
68
|
-
StatusMap[item.Status]
|
|
69
|
-
])
|
|
70
|
-
|
|
71
|
-
printHorizontalTable(head, tableData)
|
|
72
|
-
}
|
|
73
|
-
}
|
|
1
|
+
|
|
2
|
+
import { Command, ICommand } from '../../common'
|
|
3
|
+
import { CloudBaseError } from '../../../error'
|
|
4
|
+
import { loadingFactory, printHorizontalTable } from '../../../utils'
|
|
5
|
+
import { listFunctionVersions } from '../../../function'
|
|
6
|
+
import { InjectParams, CmdContext, ArgsParams, ArgsOptions } from '../../../decorators'
|
|
7
|
+
import { StatusMap } from '../../../constant'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@ICommand()
|
|
11
|
+
export class ListFunctionVersion extends Command {
|
|
12
|
+
get options() {
|
|
13
|
+
return {
|
|
14
|
+
cmd: 'fn',
|
|
15
|
+
childCmd: 'list-function-versions <name>',
|
|
16
|
+
options: [
|
|
17
|
+
{
|
|
18
|
+
flags: '-e, --envId <envId>',
|
|
19
|
+
desc: '环境 Id'
|
|
20
|
+
},
|
|
21
|
+
{ flags: '-l, --limit <limit>', desc: '返回数据长度,默认值为 20' },
|
|
22
|
+
{
|
|
23
|
+
flags: '-o, --offset <offset>',
|
|
24
|
+
desc: '数据偏移量,默认值为 0'
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
desc: '展示函数版本列表'
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@InjectParams()
|
|
32
|
+
async execute(@CmdContext() ctx, @ArgsParams() params, @ArgsOptions() options) {
|
|
33
|
+
const name = params?.[0]
|
|
34
|
+
let { limit = 20, offset = 0 } = options
|
|
35
|
+
limit = Number(limit)
|
|
36
|
+
offset = Number(offset)
|
|
37
|
+
if (!Number.isInteger(limit) || !Number.isInteger(offset)) {
|
|
38
|
+
throw new CloudBaseError('limit 和 offset 必须为整数')
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (limit < 0 || offset < 0) {
|
|
42
|
+
throw new CloudBaseError('limit 和 offset 必须为大于 0 的整数')
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const {
|
|
46
|
+
envId
|
|
47
|
+
} = ctx
|
|
48
|
+
|
|
49
|
+
const loading = loadingFactory()
|
|
50
|
+
loading.start(`拉取函数 [${name}] 版本列表中...`)
|
|
51
|
+
|
|
52
|
+
const res = await listFunctionVersions({
|
|
53
|
+
envId,
|
|
54
|
+
functionName: name,
|
|
55
|
+
offset,
|
|
56
|
+
limit
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
loading.stop()
|
|
60
|
+
|
|
61
|
+
const head: string[] = ['版本', '描述', '创建时间', '修改时间', '状态']
|
|
62
|
+
|
|
63
|
+
const tableData = res.Versions.map((item) => [
|
|
64
|
+
item.Version,
|
|
65
|
+
item.Description,
|
|
66
|
+
item.AddTime,
|
|
67
|
+
item.ModTime,
|
|
68
|
+
StatusMap[item.Status]
|
|
69
|
+
])
|
|
70
|
+
|
|
71
|
+
printHorizontalTable(head, tableData)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
import { Command, ICommand } from '../../common'
|
|
3
|
-
import { CloudBaseError } from '../../../error'
|
|
4
|
-
import { loadingFactory } from '../../../utils'
|
|
5
|
-
import { publishVersion } from '../../../function'
|
|
6
|
-
import { InjectParams, CmdContext, ArgsParams } from '../../../decorators'
|
|
7
|
-
|
|
8
|
-
@ICommand()
|
|
9
|
-
export class PublishFunctionVersion extends Command {
|
|
10
|
-
get options() {
|
|
11
|
-
return {
|
|
12
|
-
cmd: 'fn',
|
|
13
|
-
childCmd: 'publish-version <name> [description]',
|
|
14
|
-
options: [
|
|
15
|
-
{
|
|
16
|
-
flags: '-e, --envId <envId>',
|
|
17
|
-
desc: '环境 Id'
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
desc: '发布函数新版本'
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
@InjectParams()
|
|
25
|
-
async execute(@CmdContext() ctx, @ArgsParams() params) {
|
|
26
|
-
const name = params?.[0]
|
|
27
|
-
const description = params?.[1]
|
|
28
|
-
const {
|
|
29
|
-
envId
|
|
30
|
-
} = ctx
|
|
31
|
-
|
|
32
|
-
const loading = loadingFactory()
|
|
33
|
-
loading.start(`发布函数 [${name}] 新版本中...`)
|
|
34
|
-
|
|
35
|
-
await publishVersion({
|
|
36
|
-
envId,
|
|
37
|
-
functionName: name,
|
|
38
|
-
description
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
loading.succeed(`发布函数 [${name}] 新版本成功!`)
|
|
42
|
-
}
|
|
43
|
-
}
|
|
1
|
+
|
|
2
|
+
import { Command, ICommand } from '../../common'
|
|
3
|
+
import { CloudBaseError } from '../../../error'
|
|
4
|
+
import { loadingFactory } from '../../../utils'
|
|
5
|
+
import { publishVersion } from '../../../function'
|
|
6
|
+
import { InjectParams, CmdContext, ArgsParams } from '../../../decorators'
|
|
7
|
+
|
|
8
|
+
@ICommand()
|
|
9
|
+
export class PublishFunctionVersion extends Command {
|
|
10
|
+
get options() {
|
|
11
|
+
return {
|
|
12
|
+
cmd: 'fn',
|
|
13
|
+
childCmd: 'publish-version <name> [description]',
|
|
14
|
+
options: [
|
|
15
|
+
{
|
|
16
|
+
flags: '-e, --envId <envId>',
|
|
17
|
+
desc: '环境 Id'
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
desc: '发布函数新版本'
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@InjectParams()
|
|
25
|
+
async execute(@CmdContext() ctx, @ArgsParams() params) {
|
|
26
|
+
const name = params?.[0]
|
|
27
|
+
const description = params?.[1]
|
|
28
|
+
const {
|
|
29
|
+
envId
|
|
30
|
+
} = ctx
|
|
31
|
+
|
|
32
|
+
const loading = loadingFactory()
|
|
33
|
+
loading.start(`发布函数 [${name}] 新版本中...`)
|
|
34
|
+
|
|
35
|
+
await publishVersion({
|
|
36
|
+
envId,
|
|
37
|
+
functionName: name,
|
|
38
|
+
description
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
loading.succeed(`发布函数 [${name}] 新版本成功!`)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
import { prompt } from 'enquirer'
|
|
2
|
-
import { Command, ICommand } from '../common'
|
|
3
|
-
import { CloudBaseError } from '../../error'
|
|
4
|
-
import { createGateway, queryGatewayDomain } from '../../gateway'
|
|
5
|
-
import { listFunction } from '../../function'
|
|
6
|
-
import { assertTruthy } from '../../utils/validator'
|
|
7
|
-
import { loadingFactory, genClickableLink } from '../../utils'
|
|
8
|
-
import { InjectParams, EnvId, ArgsOptions } from '../../decorators'
|
|
9
|
-
|
|
10
|
-
@ICommand()
|
|
11
|
-
export class CreateService extends Command {
|
|
12
|
-
get options() {
|
|
13
|
-
return {
|
|
14
|
-
cmd: 'service',
|
|
15
|
-
childCmd: 'create',
|
|
16
|
-
deprecateCmd: 'service:create',
|
|
17
|
-
options: [
|
|
18
|
-
{
|
|
19
|
-
flags: '-e, --envId <envId>',
|
|
20
|
-
desc: '环境 Id'
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
flags: '-p, --service-path <servicePath>',
|
|
24
|
-
desc: 'HTTP 访问服务路径,如 api'
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
flags: '-f, --function <name>',
|
|
28
|
-
desc: 'HTTP 访问服务路径绑定的云函数名称'
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
desc: '创建 HTTP 访问服务'
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@InjectParams()
|
|
36
|
-
async execute(@EnvId() envId, @ArgsOptions() options) {
|
|
37
|
-
let { function: functionName, servicePath } = options
|
|
38
|
-
const loading = loadingFactory()
|
|
39
|
-
|
|
40
|
-
if (!servicePath || !functionName) {
|
|
41
|
-
loading.start('数据加载中...')
|
|
42
|
-
const functions = await listFunction({
|
|
43
|
-
envId,
|
|
44
|
-
limit: 100,
|
|
45
|
-
offset: 0
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
loading.stop()
|
|
49
|
-
|
|
50
|
-
if (!functions.length) {
|
|
51
|
-
throw new CloudBaseError('当前环境下不存在可用的云函数,请先创建云函数!')
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let { name } = await prompt<any>({
|
|
55
|
-
type: 'select',
|
|
56
|
-
name: 'name',
|
|
57
|
-
message: '请选择创建HTTP 访问服务的云函数',
|
|
58
|
-
choices: functions.map((item) => item.FunctionName)
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
let { path } = await prompt<any>({
|
|
62
|
-
type: 'input',
|
|
63
|
-
name: 'path',
|
|
64
|
-
message: '请输入HTTP 访问服务路径'
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
functionName = name
|
|
68
|
-
servicePath = path
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
assertTruthy(servicePath, '请指定需要创建的HTTP 访问服务路径!')
|
|
72
|
-
|
|
73
|
-
// 创建云函数网关
|
|
74
|
-
loading.start(`[${functionName}] HTTP 访问服务创建中...`)
|
|
75
|
-
|
|
76
|
-
// 补充 / 符号
|
|
77
|
-
servicePath = servicePath[0] === '/' ? servicePath : `/${servicePath}`
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
// step1: 判断云函数是否存在
|
|
81
|
-
const functionList = await listFunction({
|
|
82
|
-
envId,
|
|
83
|
-
limit: 100
|
|
84
|
-
})
|
|
85
|
-
const isExisted = functionList.filter((item) => item.FunctionName === functionName)
|
|
86
|
-
if (isExisted.length <= 0) {
|
|
87
|
-
throw new CloudBaseError(`[${functionName}] 云函数不存在!`)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// step2: 创建云函数网关
|
|
91
|
-
await createGateway({
|
|
92
|
-
envId,
|
|
93
|
-
path: servicePath,
|
|
94
|
-
name: functionName
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
// 查询访问域名
|
|
98
|
-
const res = await queryGatewayDomain({ envId })
|
|
99
|
-
const link = genClickableLink(`https://${res.DefaultDomain}${servicePath}`)
|
|
100
|
-
loading.succeed(`HTTP 访问服务创建成功!\n点击访问> ${link}`)
|
|
101
|
-
} catch (e) {
|
|
102
|
-
loading.stop()
|
|
103
|
-
if (e.code === 'InvalidParameter.APICreated') {
|
|
104
|
-
throw new CloudBaseError('路径已存在!')
|
|
105
|
-
}
|
|
106
|
-
throw e
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
1
|
+
import { prompt } from 'enquirer'
|
|
2
|
+
import { Command, ICommand } from '../common'
|
|
3
|
+
import { CloudBaseError } from '../../error'
|
|
4
|
+
import { createGateway, queryGatewayDomain } from '../../gateway'
|
|
5
|
+
import { listFunction } from '../../function'
|
|
6
|
+
import { assertTruthy } from '../../utils/validator'
|
|
7
|
+
import { loadingFactory, genClickableLink } from '../../utils'
|
|
8
|
+
import { InjectParams, EnvId, ArgsOptions } from '../../decorators'
|
|
9
|
+
|
|
10
|
+
@ICommand()
|
|
11
|
+
export class CreateService extends Command {
|
|
12
|
+
get options() {
|
|
13
|
+
return {
|
|
14
|
+
cmd: 'service',
|
|
15
|
+
childCmd: 'create',
|
|
16
|
+
deprecateCmd: 'service:create',
|
|
17
|
+
options: [
|
|
18
|
+
{
|
|
19
|
+
flags: '-e, --envId <envId>',
|
|
20
|
+
desc: '环境 Id'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
flags: '-p, --service-path <servicePath>',
|
|
24
|
+
desc: 'HTTP 访问服务路径,如 api'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
flags: '-f, --function <name>',
|
|
28
|
+
desc: 'HTTP 访问服务路径绑定的云函数名称'
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
desc: '创建 HTTP 访问服务'
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@InjectParams()
|
|
36
|
+
async execute(@EnvId() envId, @ArgsOptions() options) {
|
|
37
|
+
let { function: functionName, servicePath } = options
|
|
38
|
+
const loading = loadingFactory()
|
|
39
|
+
|
|
40
|
+
if (!servicePath || !functionName) {
|
|
41
|
+
loading.start('数据加载中...')
|
|
42
|
+
const functions = await listFunction({
|
|
43
|
+
envId,
|
|
44
|
+
limit: 100,
|
|
45
|
+
offset: 0
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
loading.stop()
|
|
49
|
+
|
|
50
|
+
if (!functions.length) {
|
|
51
|
+
throw new CloudBaseError('当前环境下不存在可用的云函数,请先创建云函数!')
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
let { name } = await prompt<any>({
|
|
55
|
+
type: 'select',
|
|
56
|
+
name: 'name',
|
|
57
|
+
message: '请选择创建HTTP 访问服务的云函数',
|
|
58
|
+
choices: functions.map((item) => item.FunctionName)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
let { path } = await prompt<any>({
|
|
62
|
+
type: 'input',
|
|
63
|
+
name: 'path',
|
|
64
|
+
message: '请输入HTTP 访问服务路径'
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
functionName = name
|
|
68
|
+
servicePath = path
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
assertTruthy(servicePath, '请指定需要创建的HTTP 访问服务路径!')
|
|
72
|
+
|
|
73
|
+
// 创建云函数网关
|
|
74
|
+
loading.start(`[${functionName}] HTTP 访问服务创建中...`)
|
|
75
|
+
|
|
76
|
+
// 补充 / 符号
|
|
77
|
+
servicePath = servicePath[0] === '/' ? servicePath : `/${servicePath}`
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
// step1: 判断云函数是否存在
|
|
81
|
+
const functionList = await listFunction({
|
|
82
|
+
envId,
|
|
83
|
+
limit: 100
|
|
84
|
+
})
|
|
85
|
+
const isExisted = functionList.filter((item) => item.FunctionName === functionName)
|
|
86
|
+
if (isExisted.length <= 0) {
|
|
87
|
+
throw new CloudBaseError(`[${functionName}] 云函数不存在!`)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// step2: 创建云函数网关
|
|
91
|
+
await createGateway({
|
|
92
|
+
envId,
|
|
93
|
+
path: servicePath,
|
|
94
|
+
name: functionName
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
// 查询访问域名
|
|
98
|
+
const res = await queryGatewayDomain({ envId })
|
|
99
|
+
const link = genClickableLink(`https://${res.DefaultDomain}${servicePath}`)
|
|
100
|
+
loading.succeed(`HTTP 访问服务创建成功!\n点击访问> ${link}`)
|
|
101
|
+
} catch (e) {
|
|
102
|
+
loading.stop()
|
|
103
|
+
if (e.code === 'InvalidParameter.APICreated') {
|
|
104
|
+
throw new CloudBaseError('路径已存在!')
|
|
105
|
+
}
|
|
106
|
+
throw e
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|