@cloudbase/cli 2.0.12 → 2.1.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/.history/.gitignore_20220624162613 +84 -0
- package/.history/.gitignore_20220627114054 +86 -0
- package/.history/package_20220711204706.json +88 -0
- package/.history/package_20220711204818.json +88 -0
- package/.history/package_20220712151717.json +88 -0
- package/.history/package_20220712212537.json +88 -0
- package/.history/package_20220722205058.json +88 -0
- package/.history/package_20220726110155.json +88 -0
- package/.history/package_20220726110201.json +88 -0
- package/.history/package_20220728110905.json +88 -0
- package/.history/package_20220728110936.json +88 -0
- package/.history/package_20220728111531.json +89 -0
- package/.history/package_20220728111810.json +89 -0
- package/.history/src/commands/lowcode/app_20220728111717.ts +52 -0
- package/{src/commands/lowcode/app.ts → .history/src/commands/lowcode/app_20220728112031.ts} +2 -2
- package/{src/index.ts → .history/src/index_20220624162613.ts} +0 -0
- package/.history/src/index_20220627113609.ts +15 -0
- package/.history/src/index_20220627114102.ts +13 -0
- package/.vscode/launch.json +10 -0
- package/bin/cloudbase.js +0 -0
- package/bin/tcb.js +5 -5
- package/lib/commands/account/login.js +3 -6
- package/lib/commands/env/index.js +0 -1
- package/lib/commands/lowcode/app.js +1 -1
- package/lib/commands/run/index.js +0 -1
- package/lib/commands/run/service/deploy.js +6 -1
- package/lib/commands/run/service/index.js +0 -1
- package/lib/commands/run/service/update.js +4 -0
- package/lib/constant.js +15 -1
- package/lib/env/index.js +1 -11
- package/lib/run/index.js +0 -1
- package/lib/run/service/common.js +20 -7
- package/lib/run/service/config.js +2 -3
- package/lib/run/service/deployPackage.js +2 -9
- package/lib/run/service/index.js +0 -1
- package/lib/run/service/update.js +1 -1
- 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 +2 -2
- package/types/commands/env/index.d.ts +0 -1
- package/types/commands/run/index.d.ts +0 -1
- package/types/commands/run/service/index.d.ts +0 -1
- package/types/env/index.d.ts +0 -6
- package/types/run/index.d.ts +0 -1
- package/types/run/service/common.d.ts +8 -1
- package/types/run/service/index.d.ts +0 -1
- package/types/types.d.ts +4 -0
- package/types/utils/debug-logger.d.ts +1 -0
- package/types/utils/net/http-request.d.ts +6 -2
- package/lib/commands/env/create.js +0 -115
- package/lib/commands/run/create.js +0 -162
- package/lib/commands/run/service/create.js +0 -144
- package/lib/run/create.js +0 -19
- package/lib/run/service/create.js +0 -67
- 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/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/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 -69
- 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/types/commands/env/create.d.ts +0 -12
- package/types/commands/run/create.d.ts +0 -13
- package/types/commands/run/service/create.d.ts +0 -13
- package/types/run/create.d.ts +0 -2
- package/types/run/service/create.d.ts +0 -7
package/src/commands/smart.ts
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import os from 'os'
|
|
3
|
-
import _ from 'lodash'
|
|
4
|
-
import path from 'path'
|
|
5
|
-
import chalk from 'chalk'
|
|
6
|
-
import { prompt } from 'enquirer'
|
|
7
|
-
import { run } from '@cloudbase/framework-core'
|
|
8
|
-
import { ConfigParser, getRegion } from '@cloudbase/toolbox'
|
|
9
|
-
import {
|
|
10
|
-
logger,
|
|
11
|
-
getSelectedEnv,
|
|
12
|
-
authSupevisor,
|
|
13
|
-
loadingFactory,
|
|
14
|
-
getSelectRegion,
|
|
15
|
-
checkTcbService,
|
|
16
|
-
getCloudBaseConfig,
|
|
17
|
-
downloadTemplate,
|
|
18
|
-
initProjectConfig
|
|
19
|
-
} from '../utils'
|
|
20
|
-
import * as Hosting from '../hosting'
|
|
21
|
-
import * as Function from '../function'
|
|
22
|
-
import { checkLogin } from '../auth'
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* 智能命令
|
|
26
|
-
*/
|
|
27
|
-
export async function smartDeploy() {
|
|
28
|
-
const loading = loadingFactory()
|
|
29
|
-
loading.start('环境检测中')
|
|
30
|
-
|
|
31
|
-
// 检查登录
|
|
32
|
-
await checkLogin()
|
|
33
|
-
|
|
34
|
-
// 检查是否开通 TCB 服务
|
|
35
|
-
await checkTcbService()
|
|
36
|
-
|
|
37
|
-
const files = fs.readdirSync(process.cwd())
|
|
38
|
-
|
|
39
|
-
loading.stop()
|
|
40
|
-
|
|
41
|
-
// 获取当前目录
|
|
42
|
-
const home = os.homedir()
|
|
43
|
-
const current = process.cwd()
|
|
44
|
-
let relative = current
|
|
45
|
-
if (current.indexOf(home) > -1) {
|
|
46
|
-
relative = path.relative(home, current)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// 当期区域
|
|
50
|
-
let region = await getRegion(true)
|
|
51
|
-
|
|
52
|
-
// 当前目录为空,执行初始化项目操作
|
|
53
|
-
if (!files.length) {
|
|
54
|
-
logger.info('当前目录为空,初始化云开发项目\n')
|
|
55
|
-
// 先选择 region,再选择环境
|
|
56
|
-
region = await getSelectRegion()
|
|
57
|
-
const envId = await getSelectedEnv()
|
|
58
|
-
// 下载模板
|
|
59
|
-
const projectPath = await downloadTemplate()
|
|
60
|
-
await initProjectConfig(envId, region, projectPath)
|
|
61
|
-
// 成功提示
|
|
62
|
-
logger.success('初始化项目成功!\n')
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// 初始化项目成功,或当前目录已经存在项目,继续使用 Framework 执行部署
|
|
66
|
-
const { setup } = await prompt<any>({
|
|
67
|
-
type: 'confirm',
|
|
68
|
-
name: 'setup',
|
|
69
|
-
message: `是否使用云开发部署当前项目 <${chalk.bold.cyan(relative)}> ?`,
|
|
70
|
-
initial: true
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
if (!setup) {
|
|
74
|
-
return
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// 检测是否有 cloudbase 配置
|
|
78
|
-
const config = await getCloudBaseConfig()
|
|
79
|
-
let envId = config?.envId
|
|
80
|
-
|
|
81
|
-
// 配置文件中不存在 region,选择 region
|
|
82
|
-
if (!config?.region && !region) {
|
|
83
|
-
region = await getSelectRegion()
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// 配置文件不存在
|
|
87
|
-
if (!envId) {
|
|
88
|
-
envId = await getSelectedEnv()
|
|
89
|
-
fs.writeFileSync(
|
|
90
|
-
path.join(process.cwd(), 'cloudbaserc.json'),
|
|
91
|
-
JSON.stringify({
|
|
92
|
-
envId,
|
|
93
|
-
region,
|
|
94
|
-
version: '2.0',
|
|
95
|
-
$schema: 'https://framework-1258016615.tcloudbaseapp.com/schema/latest.json'
|
|
96
|
-
})
|
|
97
|
-
)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// 把 region 写入到配置文件中
|
|
101
|
-
const parser = new ConfigParser()
|
|
102
|
-
parser.update('region', region)
|
|
103
|
-
|
|
104
|
-
// 调用 Framework
|
|
105
|
-
await callFramework(envId)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
async function callFramework(envId: string) {
|
|
109
|
-
const loginState = await authSupevisor.getLoginState()
|
|
110
|
-
const { token, secretId, secretKey } = loginState
|
|
111
|
-
const config = await getCloudBaseConfig()
|
|
112
|
-
|
|
113
|
-
await run(
|
|
114
|
-
{
|
|
115
|
-
projectPath: process.cwd(),
|
|
116
|
-
cloudbaseConfig: {
|
|
117
|
-
secretId,
|
|
118
|
-
secretKey,
|
|
119
|
-
token,
|
|
120
|
-
envId
|
|
121
|
-
},
|
|
122
|
-
config,
|
|
123
|
-
logLevel: process.argv.includes('--verbose') ? 'debug' : 'info',
|
|
124
|
-
resourceProviders: {
|
|
125
|
-
hosting: Hosting,
|
|
126
|
-
function: Function
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
'deploy',
|
|
130
|
-
''
|
|
131
|
-
)
|
|
132
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './storage'
|
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import inquirer from 'inquirer'
|
|
4
|
-
import logSymbols from 'log-symbols'
|
|
5
|
-
import { StorageService } from '@cloudbase/manager-node/types/storage'
|
|
6
|
-
import { Command, ICommand } from '../common'
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
loadingFactory,
|
|
10
|
-
printHorizontalTable,
|
|
11
|
-
formatDate,
|
|
12
|
-
createUploadProgressBar,
|
|
13
|
-
formateFileSize,
|
|
14
|
-
getMangerService,
|
|
15
|
-
isDirectory,
|
|
16
|
-
checkFullAccess
|
|
17
|
-
} from '../../utils'
|
|
18
|
-
|
|
19
|
-
import { CloudBaseError } from '../../error'
|
|
20
|
-
import { InjectParams, EnvId, ArgsParams, ArgsOptions, Log, Logger } from '../../decorators'
|
|
21
|
-
|
|
22
|
-
const AclMap = {
|
|
23
|
-
READONLY: '所有用户可读,仅创建者和管理员可写',
|
|
24
|
-
PRIVATE: '仅创建者及管理员可读写',
|
|
25
|
-
ADMINWRITE: '所有用户可读,仅管理员可写',
|
|
26
|
-
ADMINONLY: '仅管理员可读写'
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async function getStorageService(envId: string): Promise<StorageService> {
|
|
30
|
-
const { storage } = await getMangerService(envId)
|
|
31
|
-
return storage
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function checkCloudPath(cloudPath: string) {
|
|
35
|
-
if (cloudPath?.[0] === '/') {
|
|
36
|
-
throw new CloudBaseError('cloudPath 不能以 "/" 开头')
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
@ICommand()
|
|
41
|
-
export class UploadCommand extends Command {
|
|
42
|
-
get options() {
|
|
43
|
-
return {
|
|
44
|
-
cmd: 'storage',
|
|
45
|
-
childCmd: 'upload <localPath> [cloudPath]',
|
|
46
|
-
deprecateCmd: 'storage:upload <localPath> [cloudPath]',
|
|
47
|
-
options: [
|
|
48
|
-
{
|
|
49
|
-
flags: '-e, --envId <envId>',
|
|
50
|
-
desc: '环境 Id'
|
|
51
|
-
},
|
|
52
|
-
{ flags: '--times <times>', desc: '设置上传重试次数,默认值为 1' },
|
|
53
|
-
{
|
|
54
|
-
flags: '--interval <interval>',
|
|
55
|
-
desc: '设置上传失败时,重试时间间隔(毫秒),默认值为 500'
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
desc: '上传文件/文件夹'
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@InjectParams()
|
|
63
|
-
async execute(
|
|
64
|
-
@EnvId() envId,
|
|
65
|
-
@ArgsParams() params,
|
|
66
|
-
@ArgsOptions() options,
|
|
67
|
-
@Log() log: Logger
|
|
68
|
-
) {
|
|
69
|
-
const localPath = params?.[0]
|
|
70
|
-
const cloudPath = params?.[1]
|
|
71
|
-
const retryCount = options?.times
|
|
72
|
-
const retryInterval = options?.interval
|
|
73
|
-
const resolveLocalPath = path.resolve(localPath)
|
|
74
|
-
if (!checkFullAccess(resolveLocalPath)) {
|
|
75
|
-
throw new CloudBaseError('文件未找到!')
|
|
76
|
-
}
|
|
77
|
-
if (retryCount > 10) {
|
|
78
|
-
throw new CloudBaseError('上传重试次数为 0-10 次之间')
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const loading = loadingFactory()
|
|
82
|
-
loading.start('准备上传中...')
|
|
83
|
-
const storageService = await getStorageService(envId)
|
|
84
|
-
const isDir = fs.statSync(resolveLocalPath).isDirectory()
|
|
85
|
-
|
|
86
|
-
let totalFiles = 0
|
|
87
|
-
|
|
88
|
-
if (isDir) {
|
|
89
|
-
let files = await storageService.walkLocalDir(resolveLocalPath)
|
|
90
|
-
files = files.filter((item) => !isDirectory(item))
|
|
91
|
-
totalFiles = files.length
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// 上传进度条
|
|
95
|
-
const onProgress = createUploadProgressBar(
|
|
96
|
-
() => {
|
|
97
|
-
!isDir && log.success('上传文件成功!')
|
|
98
|
-
},
|
|
99
|
-
() => {
|
|
100
|
-
loading.stop()
|
|
101
|
-
}
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
const successFiles = []
|
|
105
|
-
const failedFiles = []
|
|
106
|
-
if (isDir) {
|
|
107
|
-
await storageService.uploadDirectory({
|
|
108
|
-
localPath: resolveLocalPath,
|
|
109
|
-
cloudPath,
|
|
110
|
-
onProgress,
|
|
111
|
-
onFileFinish: (...args) => {
|
|
112
|
-
const error = args[0]
|
|
113
|
-
const fileInfo = (args as any)[2]
|
|
114
|
-
if (error) {
|
|
115
|
-
failedFiles.push(fileInfo.Key)
|
|
116
|
-
} else {
|
|
117
|
-
successFiles.push(fileInfo.Key)
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
retryCount: retryCount || 1,
|
|
121
|
-
retryInterval,
|
|
122
|
-
parallel: 20
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
log.success(`文件共计 ${totalFiles} 个`)
|
|
126
|
-
log.success(`文件上传成功 ${successFiles.length} 个`)
|
|
127
|
-
// 上传成功的文件
|
|
128
|
-
if (totalFiles <= 50) {
|
|
129
|
-
printHorizontalTable(
|
|
130
|
-
['状态', '文件'],
|
|
131
|
-
successFiles.map((item) => [logSymbols.success, item])
|
|
132
|
-
)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// 上传失败的文件
|
|
136
|
-
log.error(`文件上传失败 ${failedFiles.length} 个`)
|
|
137
|
-
if (failedFiles.length) {
|
|
138
|
-
if (totalFiles <= 50) {
|
|
139
|
-
printHorizontalTable(
|
|
140
|
-
['状态', '文件'],
|
|
141
|
-
failedFiles.map((item) => [logSymbols.error, item])
|
|
142
|
-
)
|
|
143
|
-
} else {
|
|
144
|
-
// 写入文件到本地
|
|
145
|
-
const errorLogPath = path.resolve('./cloudbase-error.log')
|
|
146
|
-
log.error('上传失败文件:')
|
|
147
|
-
console.log(errorLogPath)
|
|
148
|
-
fs.writeFileSync(errorLogPath, failedFiles.join('\n'))
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
} else {
|
|
152
|
-
const assignCloudPath = cloudPath || path.parse(resolveLocalPath).base
|
|
153
|
-
await storageService.uploadFile({
|
|
154
|
-
localPath: resolveLocalPath,
|
|
155
|
-
cloudPath: assignCloudPath,
|
|
156
|
-
onProgress
|
|
157
|
-
})
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
@ICommand()
|
|
163
|
-
export class DownloadCommand extends Command {
|
|
164
|
-
get options() {
|
|
165
|
-
return {
|
|
166
|
-
cmd: 'storage',
|
|
167
|
-
childCmd: 'download <cloudPath> <localPath>',
|
|
168
|
-
deprecateCmd: 'storage:download <cloudPath> <localPath>',
|
|
169
|
-
options: [
|
|
170
|
-
{
|
|
171
|
-
flags: '-e, --envId <envId>',
|
|
172
|
-
desc: '环境 Id'
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
flags: '-d, --dir',
|
|
176
|
-
desc: '下载目标是否为文件夹'
|
|
177
|
-
}
|
|
178
|
-
],
|
|
179
|
-
desc: '下载文件/文件夹,文件夹需指定 --dir 选项'
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
@InjectParams()
|
|
184
|
-
async execute(@EnvId() envId, @ArgsOptions() options, @ArgsParams() params) {
|
|
185
|
-
const cloudPath = params?.[0]
|
|
186
|
-
const localPath = params?.[1]
|
|
187
|
-
const storageService = await getStorageService(envId)
|
|
188
|
-
const resolveLocalPath = path.resolve(localPath)
|
|
189
|
-
|
|
190
|
-
const { dir } = options
|
|
191
|
-
const fileText = dir ? '文件夹' : '文件'
|
|
192
|
-
|
|
193
|
-
if (dir && !checkFullAccess(resolveLocalPath)) {
|
|
194
|
-
throw new CloudBaseError('存储文件夹不存在!')
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
const loading = loadingFactory()
|
|
198
|
-
|
|
199
|
-
loading.start(`下载${fileText}中`)
|
|
200
|
-
|
|
201
|
-
if (dir) {
|
|
202
|
-
await storageService.downloadDirectory({
|
|
203
|
-
localPath: resolveLocalPath,
|
|
204
|
-
cloudPath,
|
|
205
|
-
parallel: 20
|
|
206
|
-
})
|
|
207
|
-
} else {
|
|
208
|
-
await storageService.downloadFile({
|
|
209
|
-
cloudPath,
|
|
210
|
-
localPath: resolveLocalPath
|
|
211
|
-
})
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
loading.succeed(`下载${fileText}成功!`)
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
@ICommand()
|
|
219
|
-
export class DeleteFileCommand extends Command {
|
|
220
|
-
get options() {
|
|
221
|
-
return {
|
|
222
|
-
cmd: 'storage',
|
|
223
|
-
childCmd: 'delete [cloudPath]',
|
|
224
|
-
deprecateCmd: 'storage:delete [cloudPath]',
|
|
225
|
-
options: [
|
|
226
|
-
{
|
|
227
|
-
flags: '-e, --envId <envId>',
|
|
228
|
-
desc: '环境 Id'
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
flags: '-d, --dir',
|
|
232
|
-
desc: '下载目标是否为文件夹'
|
|
233
|
-
}
|
|
234
|
-
],
|
|
235
|
-
desc: '删除文件/文件夹,文件夹需指定 --dir 选项'
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
@InjectParams()
|
|
240
|
-
async execute(@EnvId() envId, @ArgsOptions() options, @ArgsParams() params) {
|
|
241
|
-
let isDir = options.dir
|
|
242
|
-
const cloudPath = params?.[0]
|
|
243
|
-
const loading = loadingFactory()
|
|
244
|
-
const storageService = await getStorageService(envId)
|
|
245
|
-
|
|
246
|
-
// 删除所有文件,危险操作,需要提示
|
|
247
|
-
if (!cloudPath) {
|
|
248
|
-
const { confirm } = await inquirer.prompt({
|
|
249
|
-
type: 'confirm',
|
|
250
|
-
name: 'confirm',
|
|
251
|
-
message: '指定云端路径为空,将会删除所有文件,是否继续',
|
|
252
|
-
default: false
|
|
253
|
-
})
|
|
254
|
-
if (!confirm) {
|
|
255
|
-
throw new CloudBaseError('操作终止!')
|
|
256
|
-
}
|
|
257
|
-
isDir = true
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// cloudPath 为 / 时,只能删除文件夹
|
|
261
|
-
if (cloudPath === '/') {
|
|
262
|
-
isDir = true
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
const fileText = isDir ? '文件夹' : '文件'
|
|
266
|
-
loading.start(`删除${fileText}中`)
|
|
267
|
-
|
|
268
|
-
if (isDir) {
|
|
269
|
-
await storageService.deleteDirectory(cloudPath)
|
|
270
|
-
} else {
|
|
271
|
-
await storageService.deleteFile([cloudPath])
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
loading.succeed(`删除${fileText}成功!`)
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
@ICommand()
|
|
279
|
-
export class StorageListCommand extends Command {
|
|
280
|
-
get options() {
|
|
281
|
-
return {
|
|
282
|
-
cmd: 'storage',
|
|
283
|
-
childCmd: 'list [cloudPath]',
|
|
284
|
-
deprecateCmd: 'storage:list [cloudPath]',
|
|
285
|
-
options: [
|
|
286
|
-
{
|
|
287
|
-
flags: '-e, --envId <envId>',
|
|
288
|
-
desc: '环境 Id'
|
|
289
|
-
}
|
|
290
|
-
// {
|
|
291
|
-
// flags: '-m, --max',
|
|
292
|
-
// desc: '传输数据的最大条数'
|
|
293
|
-
// },
|
|
294
|
-
// {
|
|
295
|
-
// flags: '--markder',
|
|
296
|
-
// desc: '起始路径名,后(不含)按照 UTF-8 字典序返回条目'
|
|
297
|
-
// }
|
|
298
|
-
],
|
|
299
|
-
desc: '获取文件存储的文件列表,不指定路径时获取全部文件列表'
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
@InjectParams()
|
|
304
|
-
async execute(@EnvId() envId, @ArgsParams() params) {
|
|
305
|
-
const cloudPath = params?.[0]
|
|
306
|
-
const storageService = await getStorageService(envId)
|
|
307
|
-
|
|
308
|
-
const loading = loadingFactory()
|
|
309
|
-
loading.start('获取文件列表中...')
|
|
310
|
-
const list = await storageService.listDirectoryFiles(cloudPath)
|
|
311
|
-
loading.stop()
|
|
312
|
-
|
|
313
|
-
const head = ['序号', 'Key', 'LastModified', 'ETag', 'Size(KB)']
|
|
314
|
-
|
|
315
|
-
const notDir = (item) => !(Number(item.Size) === 0 && /\/$/g.test(item.Key))
|
|
316
|
-
|
|
317
|
-
const tableData = list
|
|
318
|
-
.filter(notDir)
|
|
319
|
-
.map((item, index) => [
|
|
320
|
-
index + 1,
|
|
321
|
-
item.Key,
|
|
322
|
-
formatDate(item.LastModified, 'yyyy-MM-dd hh:mm:ss'),
|
|
323
|
-
item.ETag,
|
|
324
|
-
String(formateFileSize(item.Size, 'KB'))
|
|
325
|
-
])
|
|
326
|
-
printHorizontalTable(head, tableData)
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
@ICommand()
|
|
331
|
-
export class GetUrlCommand extends Command {
|
|
332
|
-
get options() {
|
|
333
|
-
return {
|
|
334
|
-
cmd: 'storage',
|
|
335
|
-
childCmd: 'url <cloudPath>',
|
|
336
|
-
deprecateCmd: 'storage:url <cloudPath>',
|
|
337
|
-
options: [
|
|
338
|
-
{
|
|
339
|
-
flags: '-e, --envId <envId>',
|
|
340
|
-
desc: '环境 Id'
|
|
341
|
-
}
|
|
342
|
-
],
|
|
343
|
-
desc: '获取文件临时访问地址'
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
@InjectParams()
|
|
348
|
-
async execute(@EnvId() envId, @ArgsParams() params, @Log() log: Logger) {
|
|
349
|
-
const cloudPath = params?.[0]
|
|
350
|
-
const storageService = await getStorageService(envId)
|
|
351
|
-
|
|
352
|
-
const fileList = await storageService.getTemporaryUrl([cloudPath])
|
|
353
|
-
const { url } = fileList[0]
|
|
354
|
-
|
|
355
|
-
log.success(`文件临时访问地址:${url}`)
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
@ICommand()
|
|
360
|
-
export class StorageDetailCommand extends Command {
|
|
361
|
-
get options() {
|
|
362
|
-
return {
|
|
363
|
-
cmd: 'storage',
|
|
364
|
-
childCmd: 'detail <cloudPath>',
|
|
365
|
-
deprecateCmd: 'storage:detail <cloudPath>',
|
|
366
|
-
options: [
|
|
367
|
-
{
|
|
368
|
-
flags: '-e, --envId <envId>',
|
|
369
|
-
desc: '环境 Id'
|
|
370
|
-
}
|
|
371
|
-
],
|
|
372
|
-
desc: '获取文件信息'
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
@InjectParams()
|
|
377
|
-
async execute(@EnvId() envId, @ArgsParams() params) {
|
|
378
|
-
const cloudPath = params?.[0]
|
|
379
|
-
const storageService = await getStorageService(envId)
|
|
380
|
-
|
|
381
|
-
const fileInfo = await storageService.getFileInfo(cloudPath)
|
|
382
|
-
const date = formatDate(fileInfo.Date, 'yyyy-MM-dd hh:mm:ss')
|
|
383
|
-
|
|
384
|
-
const logInfo = `文件大小:${fileInfo.Size}\n文件类型:${fileInfo.Type}\n修改日期:${date}\nETag:${fileInfo.ETag}
|
|
385
|
-
`
|
|
386
|
-
console.log(logInfo)
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
@ICommand()
|
|
391
|
-
export class GetAclCommand extends Command {
|
|
392
|
-
get options() {
|
|
393
|
-
return {
|
|
394
|
-
cmd: 'storage',
|
|
395
|
-
childCmd: 'get-acl',
|
|
396
|
-
deprecateCmd: 'storage:get-acl',
|
|
397
|
-
options: [
|
|
398
|
-
{
|
|
399
|
-
flags: '-e, --envId <envId>',
|
|
400
|
-
desc: '环境 Id'
|
|
401
|
-
}
|
|
402
|
-
],
|
|
403
|
-
desc: '获取文件存储权限信息'
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
@InjectParams()
|
|
408
|
-
async execute(@EnvId() envId) {
|
|
409
|
-
const storageService = await getStorageService(envId)
|
|
410
|
-
const acl = await storageService.getStorageAcl()
|
|
411
|
-
|
|
412
|
-
console.log(`当前权限【${AclMap[acl]}】`)
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
@ICommand()
|
|
417
|
-
export class setAclCommand extends Command {
|
|
418
|
-
get options() {
|
|
419
|
-
return {
|
|
420
|
-
cmd: 'storage',
|
|
421
|
-
childCmd: 'set-acl',
|
|
422
|
-
deprecateCmd: 'storage:set-acl',
|
|
423
|
-
options: [
|
|
424
|
-
{
|
|
425
|
-
flags: '-e, --envId <envId>',
|
|
426
|
-
desc: '环境 Id'
|
|
427
|
-
}
|
|
428
|
-
],
|
|
429
|
-
desc: '设置文件存储权限信息'
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
@InjectParams()
|
|
434
|
-
async execute(@EnvId() envId, @Log() log: Logger) {
|
|
435
|
-
const storageService = await getStorageService(envId)
|
|
436
|
-
|
|
437
|
-
const { acl } = await inquirer.prompt({
|
|
438
|
-
type: 'list',
|
|
439
|
-
name: 'acl',
|
|
440
|
-
message: '选择权限',
|
|
441
|
-
choices: [
|
|
442
|
-
{
|
|
443
|
-
name: '所有用户可读,仅创建者和管理员可写',
|
|
444
|
-
value: 'READONLY'
|
|
445
|
-
},
|
|
446
|
-
{
|
|
447
|
-
name: '仅创建者及管理员可读写',
|
|
448
|
-
value: 'PRIVATE'
|
|
449
|
-
},
|
|
450
|
-
{
|
|
451
|
-
name: '所有用户可读,仅管理员可写',
|
|
452
|
-
value: 'ADMINWRITE'
|
|
453
|
-
},
|
|
454
|
-
{
|
|
455
|
-
name: '仅管理员可读写',
|
|
456
|
-
value: 'ADMINONLY'
|
|
457
|
-
}
|
|
458
|
-
]
|
|
459
|
-
})
|
|
460
|
-
|
|
461
|
-
await storageService.setStorageAcl(acl)
|
|
462
|
-
log.success('设置存储权限成功!')
|
|
463
|
-
}
|
|
464
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './thirdAttach'
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Command } from '../common'
|
|
2
|
-
import { loadingFactory } from '../../utils'
|
|
3
|
-
import { deleteThirdPartAttach } from '../../third'
|
|
4
|
-
import { InjectParams, ArgsOptions } from '../../decorators'
|
|
5
|
-
|
|
6
|
-
export class DeleteThirdAttach extends Command {
|
|
7
|
-
get options() {
|
|
8
|
-
return {
|
|
9
|
-
cmd: 'third',
|
|
10
|
-
childCmd: 'deleteThirdAttach',
|
|
11
|
-
deprecateCmd: 'third:deleteThirdAttach',
|
|
12
|
-
options: [
|
|
13
|
-
{
|
|
14
|
-
flags: '--source <source>',
|
|
15
|
-
desc: '第三方来源'
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
flags: '--thirdAppId <thirdAppId>',
|
|
19
|
-
desc: '第三方appId'
|
|
20
|
-
}
|
|
21
|
-
],
|
|
22
|
-
desc: '解除第三方绑定',
|
|
23
|
-
requiredEnvId: false
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@InjectParams()
|
|
28
|
-
async execute(@ArgsOptions() options) {
|
|
29
|
-
const { source, thirdAppId } = options
|
|
30
|
-
|
|
31
|
-
let typeFlag
|
|
32
|
-
if (source === 'qq') {
|
|
33
|
-
typeFlag = 1
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (!typeFlag) {
|
|
37
|
-
throw new Error('请指定对应的source')
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const loading = loadingFactory()
|
|
41
|
-
loading.start('数据加载中...')
|
|
42
|
-
const data = await deleteThirdPartAttach({
|
|
43
|
-
TypeFlag: typeFlag,
|
|
44
|
-
ThirdPartAppid: thirdAppId
|
|
45
|
-
})
|
|
46
|
-
loading.stop()
|
|
47
|
-
console.log(data)
|
|
48
|
-
}
|
|
49
|
-
}
|
package/src/completion/index.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ALL_COMMANDS } from '../constant'
|
|
2
|
-
|
|
3
|
-
export function handleCompletion({ reply, line }) {
|
|
4
|
-
// 命令
|
|
5
|
-
const cmd = line.replace(/^cloudbase\s|^tcb\s/, '')
|
|
6
|
-
|
|
7
|
-
const commands = ALL_COMMANDS.filter(item => item.indexOf(cmd) > -1)
|
|
8
|
-
if (commands.length > 0) {
|
|
9
|
-
reply(commands)
|
|
10
|
-
} else {
|
|
11
|
-
reply(['-h', '-v'])
|
|
12
|
-
}
|
|
13
|
-
}
|