@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/function/base.ts
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import CloudBase from '@cloudbase/manager-node'
|
|
2
|
-
import { CloudApiService, checkAndGetCredential, getProxy } from '../utils'
|
|
3
|
-
import { successLog } from '../logger'
|
|
4
|
-
import {
|
|
5
|
-
IListFunctionOptions,
|
|
6
|
-
IFunctionLogOptions,
|
|
7
|
-
IUpdateFunctionConfigOptions,
|
|
8
|
-
IFunctionBatchOptions,
|
|
9
|
-
InvokeFunctionOptions
|
|
10
|
-
} from '../types'
|
|
11
|
-
import { CloudBaseError } from '../error'
|
|
12
|
-
import { getVpcs, getSubnets } from './vpc'
|
|
13
|
-
import { getRegion } from '@cloudbase/toolbox'
|
|
14
|
-
|
|
15
|
-
export interface IBaseOptions {
|
|
16
|
-
envId: string
|
|
17
|
-
functionName: string
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface ICopyFunctionOptions {
|
|
21
|
-
envId: string
|
|
22
|
-
functionName: string
|
|
23
|
-
newFunctionName: string
|
|
24
|
-
targetEnvId: string
|
|
25
|
-
force?: boolean
|
|
26
|
-
copyConfig?: boolean
|
|
27
|
-
codeSecret?: string
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const scfService = CloudApiService.getInstance('scf')
|
|
31
|
-
export interface IDetailOptions extends IBaseOptions {
|
|
32
|
-
codeSecret?: string
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export async function getFunctionService(envId: string) {
|
|
36
|
-
const region = await getRegion()
|
|
37
|
-
const { secretId, secretKey, token } = await checkAndGetCredential(true)
|
|
38
|
-
|
|
39
|
-
const app = new CloudBase({
|
|
40
|
-
region,
|
|
41
|
-
token,
|
|
42
|
-
envId,
|
|
43
|
-
secretId,
|
|
44
|
-
secretKey,
|
|
45
|
-
proxy: getProxy()
|
|
46
|
-
})
|
|
47
|
-
return app.functions
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// 列出函数
|
|
51
|
-
export async function listFunction(
|
|
52
|
-
options: IListFunctionOptions
|
|
53
|
-
): Promise<Record<string, string>[]> {
|
|
54
|
-
const { limit = 20, offset = 0, envId } = options
|
|
55
|
-
const res: any = await scfService.request('ListFunctions', {
|
|
56
|
-
Namespace: envId,
|
|
57
|
-
Limit: limit,
|
|
58
|
-
Offset: offset
|
|
59
|
-
})
|
|
60
|
-
const { Functions = [] } = res
|
|
61
|
-
const data: Record<string, string>[] = []
|
|
62
|
-
Functions.forEach(func => {
|
|
63
|
-
const { FunctionId, FunctionName, Runtime, AddTime, ModTime, Status } = func
|
|
64
|
-
data.push({
|
|
65
|
-
FunctionId,
|
|
66
|
-
FunctionName,
|
|
67
|
-
Runtime,
|
|
68
|
-
AddTime,
|
|
69
|
-
ModTime,
|
|
70
|
-
Status
|
|
71
|
-
})
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
return data
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// 获取云函数详细信息
|
|
78
|
-
export async function getFunctionDetail(options: IDetailOptions): Promise<Record<string, any>> {
|
|
79
|
-
const { functionName, envId, codeSecret } = options
|
|
80
|
-
|
|
81
|
-
const res = await scfService.request('GetFunction', {
|
|
82
|
-
FunctionName: functionName,
|
|
83
|
-
Namespace: envId,
|
|
84
|
-
ShowCode: 'TRUE',
|
|
85
|
-
CodeSecret: codeSecret
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
const data: Record<string, any> = res
|
|
89
|
-
|
|
90
|
-
// 获取 VPC 信息
|
|
91
|
-
const { VpcId = '', SubnetId = '' } = data.VpcConfig || {}
|
|
92
|
-
if (VpcId && SubnetId) {
|
|
93
|
-
try {
|
|
94
|
-
const vpcs = await getVpcs()
|
|
95
|
-
const subnets = await getSubnets(VpcId)
|
|
96
|
-
const vpc = vpcs.find(item => item.VpcId === VpcId)
|
|
97
|
-
const subnet = subnets.find(item => item.SubnetId === SubnetId)
|
|
98
|
-
data.VpcConfig = {
|
|
99
|
-
vpc,
|
|
100
|
-
subnet
|
|
101
|
-
}
|
|
102
|
-
} catch (e) {
|
|
103
|
-
// 无法获取到 VPC 配置,只展示 id 信息
|
|
104
|
-
data.VpcConfig = {
|
|
105
|
-
vpc: VpcId,
|
|
106
|
-
subnet: SubnetId
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return data
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 批量获取函数信息
|
|
114
|
-
export async function batchGetFunctionsDetail({
|
|
115
|
-
names,
|
|
116
|
-
envId,
|
|
117
|
-
codeSecret
|
|
118
|
-
}): Promise<Record<string, string>[]> {
|
|
119
|
-
const data: Record<string, string>[] = []
|
|
120
|
-
const promises = names.map(name =>
|
|
121
|
-
(async () => {
|
|
122
|
-
try {
|
|
123
|
-
const info = await getFunctionDetail({
|
|
124
|
-
envId,
|
|
125
|
-
codeSecret,
|
|
126
|
-
functionName: name
|
|
127
|
-
})
|
|
128
|
-
data.push(info)
|
|
129
|
-
} catch (e) {
|
|
130
|
-
throw new CloudBaseError(`${name} 获取信息失败:${e.message}`)
|
|
131
|
-
}
|
|
132
|
-
})()
|
|
133
|
-
)
|
|
134
|
-
|
|
135
|
-
await Promise.all(promises)
|
|
136
|
-
|
|
137
|
-
return data
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// 获取函数日志
|
|
141
|
-
export async function getFunctionLog(
|
|
142
|
-
options: IFunctionLogOptions
|
|
143
|
-
): Promise<Record<string, string>[]> {
|
|
144
|
-
const { envId } = options
|
|
145
|
-
|
|
146
|
-
const params = {
|
|
147
|
-
Namespace: envId
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
Object.keys(options).forEach(key => {
|
|
151
|
-
if (key === 'envId') return
|
|
152
|
-
const keyFirstCharUpperCase = key.charAt(0).toUpperCase() + key.slice(1)
|
|
153
|
-
params[keyFirstCharUpperCase] = options[key]
|
|
154
|
-
})
|
|
155
|
-
|
|
156
|
-
const { Data = [] }: any = await scfService.request('GetFunctionLogs', params)
|
|
157
|
-
return Data
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// 更新函数配置
|
|
161
|
-
export async function updateFunctionConfig(options: IUpdateFunctionConfigOptions): Promise<void> {
|
|
162
|
-
const { functionName, config, envId } = options
|
|
163
|
-
|
|
164
|
-
const functionService = await getFunctionService(envId)
|
|
165
|
-
await functionService.updateFunctionConfig({
|
|
166
|
-
name: functionName,
|
|
167
|
-
...config
|
|
168
|
-
})
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// 批量更新函数配置
|
|
172
|
-
export async function batchUpdateFunctionConfig(options: IFunctionBatchOptions): Promise<void> {
|
|
173
|
-
const { functions, envId, log } = options
|
|
174
|
-
const promises = functions.map(func =>
|
|
175
|
-
(async () => {
|
|
176
|
-
try {
|
|
177
|
-
await updateFunctionConfig({
|
|
178
|
-
functionName: func.name,
|
|
179
|
-
config: func,
|
|
180
|
-
envId
|
|
181
|
-
})
|
|
182
|
-
log && successLog(`[${func.name}] 更新云函数配置成功!`)
|
|
183
|
-
} catch (e) {
|
|
184
|
-
throw new CloudBaseError(`${func.name} 更新配置失败:${e.message}`)
|
|
185
|
-
}
|
|
186
|
-
})()
|
|
187
|
-
)
|
|
188
|
-
|
|
189
|
-
await Promise.all(promises)
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// 调用函数
|
|
193
|
-
export async function invokeFunction(options: InvokeFunctionOptions) {
|
|
194
|
-
const { functionName, envId, params = {} } = options
|
|
195
|
-
|
|
196
|
-
const _params = {
|
|
197
|
-
FunctionName: functionName,
|
|
198
|
-
Namespace: envId,
|
|
199
|
-
ClientContext: JSON.stringify(params),
|
|
200
|
-
LogType: 'Tail'
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
try {
|
|
204
|
-
const { Result } = await scfService.request('Invoke', _params)
|
|
205
|
-
return Result
|
|
206
|
-
} catch (e) {
|
|
207
|
-
throw new CloudBaseError(`[${functionName}] 调用失败:\n${e.message}`)
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// 批量触发云函数
|
|
212
|
-
export async function batchInvokeFunctions(options: IFunctionBatchOptions) {
|
|
213
|
-
const { functions, envId, log = false } = options
|
|
214
|
-
|
|
215
|
-
const promises = functions.map(func =>
|
|
216
|
-
(async () => {
|
|
217
|
-
try {
|
|
218
|
-
const result = await invokeFunction({
|
|
219
|
-
functionName: func.name,
|
|
220
|
-
params: func.params,
|
|
221
|
-
envId
|
|
222
|
-
})
|
|
223
|
-
if (log) {
|
|
224
|
-
successLog(`[${func.name}] 调用成功\n响应结果:\n`)
|
|
225
|
-
console.log(result)
|
|
226
|
-
}
|
|
227
|
-
return result
|
|
228
|
-
} catch (e) {
|
|
229
|
-
throw new CloudBaseError(`${func.name} 函数调用失败:${e.message}`)
|
|
230
|
-
}
|
|
231
|
-
})()
|
|
232
|
-
)
|
|
233
|
-
|
|
234
|
-
return Promise.all(promises)
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// 复制云函数
|
|
238
|
-
export async function copyFunction(options: ICopyFunctionOptions) {
|
|
239
|
-
const { envId, functionName, newFunctionName, targetEnvId, force, codeSecret } = options
|
|
240
|
-
|
|
241
|
-
if (!envId || !functionName || !newFunctionName) {
|
|
242
|
-
throw new CloudBaseError('参数缺失')
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
await scfService.request('CopyFunction', {
|
|
246
|
-
FunctionName: functionName,
|
|
247
|
-
NewFunctionName: newFunctionName,
|
|
248
|
-
Namespace: envId,
|
|
249
|
-
TargetNamespace: targetEnvId || envId,
|
|
250
|
-
Override: force ? true : false,
|
|
251
|
-
CodeSecret: codeSecret
|
|
252
|
-
})
|
|
253
|
-
}
|
package/src/function/code.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import unzipper from 'unzipper'
|
|
4
|
-
import { CloudApiService, fetchStream, delSync, checkFullAccess } from '../utils'
|
|
5
|
-
|
|
6
|
-
interface IFunctionCodeOptions {
|
|
7
|
-
envId: string
|
|
8
|
-
destPath: string
|
|
9
|
-
functionName: string
|
|
10
|
-
codeSecret?: string
|
|
11
|
-
unzip?: boolean
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const scfService = CloudApiService.getInstance('scf')
|
|
15
|
-
|
|
16
|
-
// 下载函数代码
|
|
17
|
-
export async function downloadFunctionCode(options: IFunctionCodeOptions) {
|
|
18
|
-
const { destPath, envId, functionName, codeSecret, unzip = false } = options
|
|
19
|
-
|
|
20
|
-
// 检验路径是否存在
|
|
21
|
-
checkFullAccess(destPath, true)
|
|
22
|
-
|
|
23
|
-
// 获取下载链接
|
|
24
|
-
const { Url } = await scfService.request('GetFunctionAddress', {
|
|
25
|
-
FunctionName: functionName,
|
|
26
|
-
Namespace: envId,
|
|
27
|
-
CodeSecret: codeSecret
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
// 下载文件
|
|
31
|
-
const res = await fetchStream(Url)
|
|
32
|
-
const zipPath = path.join(destPath, `${functionName}.zip`)
|
|
33
|
-
const dest = fs.createWriteStream(zipPath)
|
|
34
|
-
res.body.pipe(dest)
|
|
35
|
-
return new Promise<void>(resolve => {
|
|
36
|
-
// 解压文件
|
|
37
|
-
dest.on('close', () => {
|
|
38
|
-
// 不解压 ZIP 文件
|
|
39
|
-
if (!unzip) {
|
|
40
|
-
resolve()
|
|
41
|
-
return
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const unzipStream = unzipper.Extract({
|
|
45
|
-
path: destPath
|
|
46
|
-
})
|
|
47
|
-
fs.createReadStream(zipPath).pipe(unzipStream)
|
|
48
|
-
unzipStream.on('close', () => {
|
|
49
|
-
// 删除 ZIP 文件
|
|
50
|
-
delSync([zipPath])
|
|
51
|
-
resolve()
|
|
52
|
-
})
|
|
53
|
-
})
|
|
54
|
-
})
|
|
55
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { CloudBaseError } from '../error'
|
|
2
|
-
import { ISetProvisionedConcurrencyConfig, IGetProvisionedConcurrencyConfig, IGetProvisionedConcurrencyRes, IFunctionVersionsRes } from '../types'
|
|
3
|
-
import { getFunctionService } from './base'
|
|
4
|
-
|
|
5
|
-
// 设置函数预置并发
|
|
6
|
-
export async function setProvisionedConcurrencyConfig(options: ISetProvisionedConcurrencyConfig) {
|
|
7
|
-
const { envId, functionName, qualifier, versionProvisionedConcurrencyNum } = options
|
|
8
|
-
|
|
9
|
-
const scfService = await getFunctionService(envId)
|
|
10
|
-
|
|
11
|
-
try {
|
|
12
|
-
await scfService.setProvisionedConcurrencyConfig({
|
|
13
|
-
functionName,
|
|
14
|
-
qualifier,
|
|
15
|
-
versionProvisionedConcurrencyNum
|
|
16
|
-
})
|
|
17
|
-
} catch (e) {
|
|
18
|
-
throw new CloudBaseError(`[${functionName}] 设置函数预置并发失败: ${e.message}`, {
|
|
19
|
-
code: e.code
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// 查看函数预置并发
|
|
25
|
-
export async function getProvisionedConcurrencyConfig(options: IGetProvisionedConcurrencyConfig): Promise<IGetProvisionedConcurrencyRes> {
|
|
26
|
-
const { envId, functionName, qualifier } = options
|
|
27
|
-
const scfService = await getFunctionService(envId)
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
return scfService.getProvisionedConcurrencyConfig({
|
|
31
|
-
functionName,
|
|
32
|
-
qualifier,
|
|
33
|
-
})
|
|
34
|
-
} catch (e) {
|
|
35
|
-
throw new CloudBaseError(`[${functionName}] 查看函数预置并发信息失败: ${e.message}`, {
|
|
36
|
-
code: e.code
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// 删除函数预置并发
|
|
42
|
-
export async function deleteProvisionedConcurrencyConfig(options: IGetProvisionedConcurrencyConfig): Promise<void> {
|
|
43
|
-
const { envId, functionName, qualifier } = options
|
|
44
|
-
const scfService = await getFunctionService(envId)
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
await scfService.deleteProvisionedConcurrencyConfig({
|
|
48
|
-
functionName,
|
|
49
|
-
qualifier
|
|
50
|
-
})
|
|
51
|
-
} catch (e) {
|
|
52
|
-
throw new CloudBaseError(`[${functionName}] 删除函数预置并发失败: ${e.message}`, {
|
|
53
|
-
code: e.code
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
package/src/function/create.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { loadingFactory } from '../utils'
|
|
2
|
-
import { CloudBaseError } from '../error'
|
|
3
|
-
import { getFunctionService } from './base'
|
|
4
|
-
import { ICreateFunctionOptions, ICloudFunction } from '../types'
|
|
5
|
-
|
|
6
|
-
// 创建云函数
|
|
7
|
-
export async function createFunction(options: ICreateFunctionOptions): Promise<void> {
|
|
8
|
-
const {
|
|
9
|
-
envId,
|
|
10
|
-
accessPath,
|
|
11
|
-
codeSecret,
|
|
12
|
-
force = false,
|
|
13
|
-
functionPath,
|
|
14
|
-
base64Code = '',
|
|
15
|
-
functionRootPath = ''
|
|
16
|
-
} = options
|
|
17
|
-
|
|
18
|
-
// 兼容处理 config
|
|
19
|
-
const func: ICloudFunction & { path?: string } = {
|
|
20
|
-
...options?.func?.config,
|
|
21
|
-
...options.func
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// 覆盖默认的路径
|
|
25
|
-
accessPath && (func.path = accessPath)
|
|
26
|
-
|
|
27
|
-
const funcName = func.name
|
|
28
|
-
|
|
29
|
-
const scfService = await getFunctionService(envId)
|
|
30
|
-
|
|
31
|
-
func.isWaitInstall = true
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
await scfService.createFunction({
|
|
35
|
-
func,
|
|
36
|
-
force,
|
|
37
|
-
base64Code,
|
|
38
|
-
codeSecret,
|
|
39
|
-
functionPath,
|
|
40
|
-
functionRootPath
|
|
41
|
-
})
|
|
42
|
-
} catch (e) {
|
|
43
|
-
// 不强制覆盖,抛出错误
|
|
44
|
-
if (e.message && !force) {
|
|
45
|
-
throw new CloudBaseError(`[${funcName}] 部署失败,${e.message}`, {
|
|
46
|
-
code: e.code,
|
|
47
|
-
original: e
|
|
48
|
-
})
|
|
49
|
-
}
|
|
50
|
-
throw e
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// 批量创建云函数
|
|
55
|
-
export async function batchCreateFunctions(options: ICreateFunctionOptions): Promise<void> {
|
|
56
|
-
const { functions, functionRootPath = '', envId, force, codeSecret, log = false } = options
|
|
57
|
-
const promises = functions.map((func) =>
|
|
58
|
-
(async () => {
|
|
59
|
-
const loading = loadingFactory()
|
|
60
|
-
try {
|
|
61
|
-
log && loading.start(`[${func.name}] 函数部署中...`)
|
|
62
|
-
await createFunction({
|
|
63
|
-
func,
|
|
64
|
-
envId,
|
|
65
|
-
force,
|
|
66
|
-
codeSecret,
|
|
67
|
-
functionRootPath
|
|
68
|
-
})
|
|
69
|
-
log && loading.succeed(`[${func.name}] 函数部署成功`)
|
|
70
|
-
} catch (e) {
|
|
71
|
-
log && loading.fail(`[${func.name}] 函数部署失败`)
|
|
72
|
-
throw new CloudBaseError(e.message)
|
|
73
|
-
}
|
|
74
|
-
})()
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
await Promise.all(promises)
|
|
78
|
-
}
|
package/src/function/delete.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { successLog } from '../logger'
|
|
2
|
-
import { CloudBaseError } from '../error'
|
|
3
|
-
import { CloudApiService } from '../utils'
|
|
4
|
-
import { queryGateway, deleteGateway } from '../gateway'
|
|
5
|
-
|
|
6
|
-
const scfService = CloudApiService.getInstance('scf')
|
|
7
|
-
|
|
8
|
-
// 删除函数
|
|
9
|
-
export async function deleteFunction({ functionName, envId }): Promise<void> {
|
|
10
|
-
// 检测是否绑定了 API 网关
|
|
11
|
-
const res = await queryGateway({
|
|
12
|
-
envId,
|
|
13
|
-
name: functionName
|
|
14
|
-
})
|
|
15
|
-
// 删除绑定的 API 网关
|
|
16
|
-
if (res?.APISet?.length > 0) {
|
|
17
|
-
await deleteGateway({
|
|
18
|
-
envId,
|
|
19
|
-
name: functionName
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
await scfService.request('DeleteFunction', {
|
|
23
|
-
FunctionName: functionName,
|
|
24
|
-
Namespace: envId
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// 批量删除云函数
|
|
29
|
-
export async function batchDeleteFunctions({ names, envId }): Promise<void> {
|
|
30
|
-
const promises = names.map(name =>
|
|
31
|
-
(async () => {
|
|
32
|
-
try {
|
|
33
|
-
await deleteFunction({ functionName: name, envId })
|
|
34
|
-
successLog(`[${name}] 函数删除成功!`)
|
|
35
|
-
} catch (e) {
|
|
36
|
-
throw new CloudBaseError(e.message)
|
|
37
|
-
}
|
|
38
|
-
})()
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
await Promise.all(promises)
|
|
42
|
-
}
|
package/src/function/index.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export * from './create'
|
|
2
|
-
export * from './trigger'
|
|
3
|
-
export * from './code'
|
|
4
|
-
export * from './base'
|
|
5
|
-
export * from './delete'
|
|
6
|
-
export * from './update'
|
|
7
|
-
export * from './layer'
|
|
8
|
-
export * from './vpc'
|
|
9
|
-
export * from './version'
|
|
10
|
-
export * from './concurrency'
|
|
11
|
-
export * from './alias'
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import _ from 'lodash'
|
|
2
|
-
import { getFunctionDetail } from '../base'
|
|
3
|
-
import { CloudApiService } from '../../utils'
|
|
4
|
-
import { CloudBaseError } from '../../error'
|
|
5
|
-
|
|
6
|
-
const scfService = new CloudApiService('scf')
|
|
7
|
-
|
|
8
|
-
export interface IAttachOptions {
|
|
9
|
-
envId: string
|
|
10
|
-
layerName: string
|
|
11
|
-
layerVersion: number
|
|
12
|
-
functionName: string
|
|
13
|
-
codeSecret?: string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 函数绑定文件层
|
|
17
|
-
export async function attachLayer(options: IAttachOptions): Promise<void> {
|
|
18
|
-
const { envId, functionName, layerName, layerVersion, codeSecret } = options
|
|
19
|
-
|
|
20
|
-
let { Layers } = await getFunctionDetail({
|
|
21
|
-
envId,
|
|
22
|
-
codeSecret,
|
|
23
|
-
functionName
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
Layers = Layers.map(item => _.pick(item, ['LayerName', 'LayerVersion']))
|
|
27
|
-
// 新加的文件层添加到最后
|
|
28
|
-
Layers.push({
|
|
29
|
-
LayerName: layerName,
|
|
30
|
-
LayerVersion: layerVersion
|
|
31
|
-
})
|
|
32
|
-
const res = await scfService.request('UpdateFunctionConfiguration', {
|
|
33
|
-
Layers,
|
|
34
|
-
Namespace: envId,
|
|
35
|
-
FunctionName: functionName
|
|
36
|
-
})
|
|
37
|
-
return res
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// 函数解绑文件层
|
|
41
|
-
export async function unAttachLayer(options: IAttachOptions): Promise<void> {
|
|
42
|
-
const { envId, functionName, layerName, layerVersion, codeSecret } = options
|
|
43
|
-
|
|
44
|
-
let { Layers } = await getFunctionDetail({
|
|
45
|
-
envId,
|
|
46
|
-
codeSecret,
|
|
47
|
-
functionName
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
Layers = Layers.map(item => _.pick(item, ['LayerName', 'LayerVersion']))
|
|
51
|
-
|
|
52
|
-
const index = Layers.findIndex(
|
|
53
|
-
item => item.LayerName === layerName && item.LayerVersion === layerVersion
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
if (index === -1) {
|
|
57
|
-
throw new CloudBaseError('层不存在')
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// 删除指定的层
|
|
61
|
-
Layers.splice(index, 1)
|
|
62
|
-
|
|
63
|
-
return scfService.request('UpdateFunctionConfiguration', {
|
|
64
|
-
Layers,
|
|
65
|
-
Namespace: envId,
|
|
66
|
-
FunctionName: functionName
|
|
67
|
-
})
|
|
68
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import { CloudBaseError, zipDir } from '@cloudbase/toolbox'
|
|
4
|
-
import { CloudApiService, checkFullAccess, isDirectory, delSync } from '../../utils'
|
|
5
|
-
|
|
6
|
-
const scfService = new CloudApiService('scf')
|
|
7
|
-
|
|
8
|
-
export interface IFunctionLayerOptions {
|
|
9
|
-
contentPath?: string
|
|
10
|
-
base64Content?: string
|
|
11
|
-
layerName: string
|
|
12
|
-
// 支持的运行时
|
|
13
|
-
runtimes: string[]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 创建文件层
|
|
17
|
-
export async function createLayer(options: IFunctionLayerOptions): Promise<void> {
|
|
18
|
-
const { contentPath = '', layerName, base64Content = '', runtimes = [] } = options
|
|
19
|
-
|
|
20
|
-
checkFullAccess(contentPath)
|
|
21
|
-
|
|
22
|
-
const validRuntime = ['Nodejs8.9', 'Php7', 'Java8']
|
|
23
|
-
if (runtimes.some(item => validRuntime.indexOf(item) === -1)) {
|
|
24
|
-
throw new CloudBaseError(
|
|
25
|
-
`Invalid runtime value. Now only support: ${validRuntime.join(', ')}`
|
|
26
|
-
)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
let base64
|
|
30
|
-
|
|
31
|
-
if (base64Content) {
|
|
32
|
-
base64 = base64Content
|
|
33
|
-
} else if (isDirectory(contentPath)) {
|
|
34
|
-
// 压缩文件夹
|
|
35
|
-
const dirName = path.parse(contentPath).name
|
|
36
|
-
const dest = path.join(process.cwd(), `cli-${dirName}.zip`)
|
|
37
|
-
// ZIP 文件存在,删除 ZIP 文件
|
|
38
|
-
if (checkFullAccess(dest)) {
|
|
39
|
-
delSync(dest)
|
|
40
|
-
}
|
|
41
|
-
await zipDir(contentPath, dest)
|
|
42
|
-
// 转换成 base64
|
|
43
|
-
const fileBuffer = await fs.promises.readFile(dest)
|
|
44
|
-
base64 = fileBuffer.toString('base64')
|
|
45
|
-
delSync(dest)
|
|
46
|
-
} else {
|
|
47
|
-
const fileType = path.extname(contentPath)
|
|
48
|
-
if (fileType !== '.zip') {
|
|
49
|
-
throw new CloudBaseError('文件类型不正确,目前只支持 ZIP 文件!')
|
|
50
|
-
}
|
|
51
|
-
const fileBuffer = await fs.promises.readFile(contentPath)
|
|
52
|
-
base64 = fileBuffer.toString('base64')
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return scfService.request('PublishLayerVersion', {
|
|
56
|
-
LayerName: layerName,
|
|
57
|
-
CompatibleRuntimes: runtimes,
|
|
58
|
-
Content: {
|
|
59
|
-
// 最大支持 20M
|
|
60
|
-
ZipFile: base64
|
|
61
|
-
}
|
|
62
|
-
})
|
|
63
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import { CloudBaseError } from '../../error'
|
|
4
|
-
import { CloudApiService } from '../../utils'
|
|
5
|
-
|
|
6
|
-
const scfService = new CloudApiService('scf')
|
|
7
|
-
|
|
8
|
-
export interface ILayerDeleteOptions {
|
|
9
|
-
name: string
|
|
10
|
-
version: number
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// 创建文件层
|
|
14
|
-
export async function deleteLayer(options: ILayerDeleteOptions): Promise<void> {
|
|
15
|
-
const { name, version } = options
|
|
16
|
-
|
|
17
|
-
return scfService.request('DeleteLayerVersion', {
|
|
18
|
-
LayerName: name,
|
|
19
|
-
LayerVersion: version
|
|
20
|
-
})
|
|
21
|
-
}
|