@cloudbase/cli 2.0.3 → 2.0.4-alpha.0
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/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/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/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
- package/.vscode/settings.json +0 -3
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
import _ from 'lodash'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import chalk from 'chalk'
|
|
4
|
-
import execa from 'execa'
|
|
5
|
-
import { getRegion } from '@cloudbase/toolbox'
|
|
6
|
-
|
|
7
|
-
import { Command, ICommand } from '../common'
|
|
8
|
-
import {
|
|
9
|
-
getSelectedEnv,
|
|
10
|
-
downloadTemplate,
|
|
11
|
-
initProjectConfig,
|
|
12
|
-
getSelectRegion,
|
|
13
|
-
delSync
|
|
14
|
-
} from '../../utils'
|
|
15
|
-
import { InjectParams, Log, Logger, CmdContext } from '../../decorators'
|
|
16
|
-
import { checkLogin } from '../../auth'
|
|
17
|
-
|
|
18
|
-
@ICommand()
|
|
19
|
-
export class NewCommand extends Command {
|
|
20
|
-
get options() {
|
|
21
|
-
return {
|
|
22
|
-
// templateUri 是 Git 地址或模板名
|
|
23
|
-
cmd: 'new [appName] [templateUri]',
|
|
24
|
-
options: [
|
|
25
|
-
{
|
|
26
|
-
flags: '-e, --envId <envId>',
|
|
27
|
-
desc: '环境 Id'
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
flags: '--clone',
|
|
31
|
-
desc: '从 Git 创建模板时是否 Clone 整个仓库'
|
|
32
|
-
}
|
|
33
|
-
],
|
|
34
|
-
desc: '创建一个新的云开发应用',
|
|
35
|
-
requiredEnvId: false,
|
|
36
|
-
withoutAuth: true
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
@InjectParams()
|
|
41
|
-
async execute(@CmdContext() ctx, @Log() log?: Logger) {
|
|
42
|
-
const { params, options, envId } = ctx
|
|
43
|
-
const { clone } = options
|
|
44
|
-
|
|
45
|
-
let appName = params?.[0]
|
|
46
|
-
const templateUri = params?.[1]
|
|
47
|
-
|
|
48
|
-
// 检查登录
|
|
49
|
-
await checkLogin()
|
|
50
|
-
|
|
51
|
-
let region = await getRegion(true)
|
|
52
|
-
|
|
53
|
-
// 配置文件中不存在 region,选择 region
|
|
54
|
-
if (!region) {
|
|
55
|
-
region = await getSelectRegion()
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// 获取 envId
|
|
59
|
-
let env = envId
|
|
60
|
-
if (!env) {
|
|
61
|
-
env = await getSelectedEnv(envId)
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
let projectPath
|
|
65
|
-
|
|
66
|
-
if (templateUri && isGitUrl(templateUri)) {
|
|
67
|
-
// git 仓库
|
|
68
|
-
if (clone) {
|
|
69
|
-
// clone 完整的仓库
|
|
70
|
-
await execa('git', ['clone', templateUri, appName], {
|
|
71
|
-
stdio: 'inherit'
|
|
72
|
-
})
|
|
73
|
-
} else {
|
|
74
|
-
await execa('git', ['clone', '--depth', 1, templateUri, appName], {
|
|
75
|
-
stdio: 'inherit'
|
|
76
|
-
})
|
|
77
|
-
// 删除 .git 文件夹
|
|
78
|
-
await delSync([path.join(process.cwd(), appName, '.git')])
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// 下载 Git 仓库文件,不包含完整的 Git 记录
|
|
82
|
-
projectPath = path.join(process.cwd(), appName)
|
|
83
|
-
} else {
|
|
84
|
-
// 下载模板
|
|
85
|
-
projectPath = await downloadTemplate({
|
|
86
|
-
appName,
|
|
87
|
-
projectPath,
|
|
88
|
-
templateUri,
|
|
89
|
-
newProject: true
|
|
90
|
-
})
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
await initProjectConfig(env, region, projectPath)
|
|
94
|
-
|
|
95
|
-
// 成功提示
|
|
96
|
-
this.initSuccessOutput(appName)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// 项目初始化成功后打印提示语
|
|
100
|
-
@InjectParams()
|
|
101
|
-
initSuccessOutput(appName: string, @Log() log?: Logger) {
|
|
102
|
-
log.success(appName ? `创建应用 ${appName} 成功!\n` : '创建应用成功!')
|
|
103
|
-
|
|
104
|
-
if (appName) {
|
|
105
|
-
const command = chalk.bold.cyan(`cd ${appName}`)
|
|
106
|
-
log.info(`👉 执行命令 ${command} 进入文件夹`)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
log.info(`👉 开发完成后,执行命令 ${chalk.bold.cyan('tcb')} 一键部署`)
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 判断是否为 Git 仓库地址
|
|
114
|
-
export function isGitUrl(url: string) {
|
|
115
|
-
const regex = /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\.git)(\/?|\#[-\d\w._]+?)$/
|
|
116
|
-
return regex.test(url)
|
|
117
|
-
}
|
|
1
|
+
import _ from 'lodash'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import chalk from 'chalk'
|
|
4
|
+
import execa from 'execa'
|
|
5
|
+
import { getRegion } from '@cloudbase/toolbox'
|
|
6
|
+
|
|
7
|
+
import { Command, ICommand } from '../common'
|
|
8
|
+
import {
|
|
9
|
+
getSelectedEnv,
|
|
10
|
+
downloadTemplate,
|
|
11
|
+
initProjectConfig,
|
|
12
|
+
getSelectRegion,
|
|
13
|
+
delSync
|
|
14
|
+
} from '../../utils'
|
|
15
|
+
import { InjectParams, Log, Logger, CmdContext } from '../../decorators'
|
|
16
|
+
import { checkLogin } from '../../auth'
|
|
17
|
+
|
|
18
|
+
@ICommand()
|
|
19
|
+
export class NewCommand extends Command {
|
|
20
|
+
get options() {
|
|
21
|
+
return {
|
|
22
|
+
// templateUri 是 Git 地址或模板名
|
|
23
|
+
cmd: 'new [appName] [templateUri]',
|
|
24
|
+
options: [
|
|
25
|
+
{
|
|
26
|
+
flags: '-e, --envId <envId>',
|
|
27
|
+
desc: '环境 Id'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
flags: '--clone',
|
|
31
|
+
desc: '从 Git 创建模板时是否 Clone 整个仓库'
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
desc: '创建一个新的云开发应用',
|
|
35
|
+
requiredEnvId: false,
|
|
36
|
+
withoutAuth: true
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@InjectParams()
|
|
41
|
+
async execute(@CmdContext() ctx, @Log() log?: Logger) {
|
|
42
|
+
const { params, options, envId } = ctx
|
|
43
|
+
const { clone } = options
|
|
44
|
+
|
|
45
|
+
let appName = params?.[0]
|
|
46
|
+
const templateUri = params?.[1]
|
|
47
|
+
|
|
48
|
+
// 检查登录
|
|
49
|
+
await checkLogin()
|
|
50
|
+
|
|
51
|
+
let region = await getRegion(true)
|
|
52
|
+
|
|
53
|
+
// 配置文件中不存在 region,选择 region
|
|
54
|
+
if (!region) {
|
|
55
|
+
region = await getSelectRegion()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 获取 envId
|
|
59
|
+
let env = envId
|
|
60
|
+
if (!env) {
|
|
61
|
+
env = await getSelectedEnv(envId)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let projectPath
|
|
65
|
+
|
|
66
|
+
if (templateUri && isGitUrl(templateUri)) {
|
|
67
|
+
// git 仓库
|
|
68
|
+
if (clone) {
|
|
69
|
+
// clone 完整的仓库
|
|
70
|
+
await execa('git', ['clone', templateUri, appName], {
|
|
71
|
+
stdio: 'inherit'
|
|
72
|
+
})
|
|
73
|
+
} else {
|
|
74
|
+
await execa('git', ['clone', '--depth', 1, templateUri, appName], {
|
|
75
|
+
stdio: 'inherit'
|
|
76
|
+
})
|
|
77
|
+
// 删除 .git 文件夹
|
|
78
|
+
await delSync([path.join(process.cwd(), appName, '.git')])
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// 下载 Git 仓库文件,不包含完整的 Git 记录
|
|
82
|
+
projectPath = path.join(process.cwd(), appName)
|
|
83
|
+
} else {
|
|
84
|
+
// 下载模板
|
|
85
|
+
projectPath = await downloadTemplate({
|
|
86
|
+
appName,
|
|
87
|
+
projectPath,
|
|
88
|
+
templateUri,
|
|
89
|
+
newProject: true
|
|
90
|
+
})
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
await initProjectConfig(env, region, projectPath)
|
|
94
|
+
|
|
95
|
+
// 成功提示
|
|
96
|
+
this.initSuccessOutput(appName)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// 项目初始化成功后打印提示语
|
|
100
|
+
@InjectParams()
|
|
101
|
+
initSuccessOutput(appName: string, @Log() log?: Logger) {
|
|
102
|
+
log.success(appName ? `创建应用 ${appName} 成功!\n` : '创建应用成功!')
|
|
103
|
+
|
|
104
|
+
if (appName) {
|
|
105
|
+
const command = chalk.bold.cyan(`cd ${appName}`)
|
|
106
|
+
log.info(`👉 执行命令 ${command} 进入文件夹`)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
log.info(`👉 开发完成后,执行命令 ${chalk.bold.cyan('tcb')} 一键部署`)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// 判断是否为 Git 仓库地址
|
|
114
|
+
export function isGitUrl(url: string) {
|
|
115
|
+
const regex = /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\.git)(\/?|\#[-\d\w._]+?)$/
|
|
116
|
+
return regex.test(url)
|
|
117
|
+
}
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
import open from 'open'
|
|
2
|
-
import chalk from 'chalk'
|
|
3
|
-
import inquirer from 'inquirer'
|
|
4
|
-
import { CloudBaseError } from '../../error'
|
|
5
|
-
import { Command, ICommand } from '../common'
|
|
6
|
-
import { InjectParams, ArgsParams } from '../../decorators'
|
|
7
|
-
|
|
8
|
-
interface Link {
|
|
9
|
-
name: string
|
|
10
|
-
value: string
|
|
11
|
-
consolePath?: string
|
|
12
|
-
url?: string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const links: Link[] = [
|
|
16
|
-
{
|
|
17
|
-
name: 'CLI 文档',
|
|
18
|
-
value: 'cli-doc',
|
|
19
|
-
url: 'https://tencentcloudbase.github.io/2019-09-03-cli/'
|
|
20
|
-
}
|
|
21
|
-
]
|
|
22
|
-
|
|
23
|
-
@ICommand()
|
|
24
|
-
export class OpenLinkCommand extends Command {
|
|
25
|
-
get options() {
|
|
26
|
-
return {
|
|
27
|
-
cmd: 'open [link]',
|
|
28
|
-
options: [],
|
|
29
|
-
desc: '在浏览器中打开云开发相关连接',
|
|
30
|
-
requiredEnvId: false,
|
|
31
|
-
withoutAuth: true
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@InjectParams()
|
|
36
|
-
async execute(@ArgsParams() params) {
|
|
37
|
-
let openLink: Link = null
|
|
38
|
-
const link = params?.[0]
|
|
39
|
-
|
|
40
|
-
// 如果指定了 link,直接打开链接
|
|
41
|
-
if (link) {
|
|
42
|
-
openLink = links.find((item) => item.value === link)
|
|
43
|
-
|
|
44
|
-
if (!openLink) {
|
|
45
|
-
throw new CloudBaseError(`${link} 链接不存在!`)
|
|
46
|
-
}
|
|
47
|
-
} else {
|
|
48
|
-
const { selectLink } = await inquirer.prompt({
|
|
49
|
-
type: 'list',
|
|
50
|
-
name: 'selectLink',
|
|
51
|
-
message: '请选择需要打开的链接',
|
|
52
|
-
choices: links
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
openLink = links.find((item) => item.value === selectLink)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (!openLink) {
|
|
59
|
-
throw new CloudBaseError('请指定需要打开的链接!')
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
console.log(`在您的默认浏览器中打开 ${openLink.name} 链接:`)
|
|
63
|
-
console.log(chalk.underline.bold(openLink.url))
|
|
64
|
-
|
|
65
|
-
open(openLink.url)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
1
|
+
import open from 'open'
|
|
2
|
+
import chalk from 'chalk'
|
|
3
|
+
import inquirer from 'inquirer'
|
|
4
|
+
import { CloudBaseError } from '../../error'
|
|
5
|
+
import { Command, ICommand } from '../common'
|
|
6
|
+
import { InjectParams, ArgsParams } from '../../decorators'
|
|
7
|
+
|
|
8
|
+
interface Link {
|
|
9
|
+
name: string
|
|
10
|
+
value: string
|
|
11
|
+
consolePath?: string
|
|
12
|
+
url?: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const links: Link[] = [
|
|
16
|
+
{
|
|
17
|
+
name: 'CLI 文档',
|
|
18
|
+
value: 'cli-doc',
|
|
19
|
+
url: 'https://tencentcloudbase.github.io/2019-09-03-cli/'
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
@ICommand()
|
|
24
|
+
export class OpenLinkCommand extends Command {
|
|
25
|
+
get options() {
|
|
26
|
+
return {
|
|
27
|
+
cmd: 'open [link]',
|
|
28
|
+
options: [],
|
|
29
|
+
desc: '在浏览器中打开云开发相关连接',
|
|
30
|
+
requiredEnvId: false,
|
|
31
|
+
withoutAuth: true
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@InjectParams()
|
|
36
|
+
async execute(@ArgsParams() params) {
|
|
37
|
+
let openLink: Link = null
|
|
38
|
+
const link = params?.[0]
|
|
39
|
+
|
|
40
|
+
// 如果指定了 link,直接打开链接
|
|
41
|
+
if (link) {
|
|
42
|
+
openLink = links.find((item) => item.value === link)
|
|
43
|
+
|
|
44
|
+
if (!openLink) {
|
|
45
|
+
throw new CloudBaseError(`${link} 链接不存在!`)
|
|
46
|
+
}
|
|
47
|
+
} else {
|
|
48
|
+
const { selectLink } = await inquirer.prompt({
|
|
49
|
+
type: 'list',
|
|
50
|
+
name: 'selectLink',
|
|
51
|
+
message: '请选择需要打开的链接',
|
|
52
|
+
choices: links
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
openLink = links.find((item) => item.value === selectLink)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!openLink) {
|
|
59
|
+
throw new CloudBaseError('请指定需要打开的链接!')
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
console.log(`在您的默认浏览器中打开 ${openLink.name} 链接:`)
|
|
63
|
+
console.log(chalk.underline.bold(openLink.url))
|
|
64
|
+
|
|
65
|
+
open(openLink.url)
|
|
66
|
+
}
|
|
67
|
+
}
|