@cloudbase/cli 2.0.3-alpha.1 → 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 +3 -3
- 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,182 +1,182 @@
|
|
|
1
|
-
import { prompt } from 'enquirer'
|
|
2
|
-
import {
|
|
3
|
-
listLayers,
|
|
4
|
-
listLayerVersions,
|
|
5
|
-
attachLayer,
|
|
6
|
-
getFunctionDetail,
|
|
7
|
-
unAttachLayer,
|
|
8
|
-
listFunction
|
|
9
|
-
} from '../../../function'
|
|
10
|
-
import { Command, ICommand } from '../../common'
|
|
11
|
-
import { loadingFactory } from '../../../utils'
|
|
12
|
-
import { CloudBaseError } from '../../../error'
|
|
13
|
-
import { InjectParams, EnvId, ArgsOptions, ArgsParams } from '../../../decorators'
|
|
14
|
-
import { layerCommonOptions } from './common'
|
|
15
|
-
|
|
16
|
-
const LayerStatusMap = {
|
|
17
|
-
Active: '正常',
|
|
18
|
-
Publishing: '发布中',
|
|
19
|
-
PublishFailed: '发布失败',
|
|
20
|
-
Deleted: '已删除'
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@ICommand()
|
|
24
|
-
export class AttachFileLayer extends Command {
|
|
25
|
-
get options() {
|
|
26
|
-
return {
|
|
27
|
-
...layerCommonOptions('bind <name>'),
|
|
28
|
-
deprecateCmd: 'functions:layer:bind <name>',
|
|
29
|
-
options: [
|
|
30
|
-
{
|
|
31
|
-
flags: '-e, --envId <envId>',
|
|
32
|
-
desc: '环境 Id'
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
flags: '--code-secret, <codeSecret>',
|
|
36
|
-
desc: '代码加密的函数的 CodeSecret'
|
|
37
|
-
}
|
|
38
|
-
],
|
|
39
|
-
desc: '绑定文件层到云函数'
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
@InjectParams()
|
|
44
|
-
async execute(@EnvId() envId, @ArgsParams() params, @ArgsOptions() options) {
|
|
45
|
-
const { codeSecret } = options
|
|
46
|
-
const fnName = params?.[0]
|
|
47
|
-
|
|
48
|
-
const loading = loadingFactory()
|
|
49
|
-
loading.start('数据加载中...')
|
|
50
|
-
|
|
51
|
-
// 检查函数是否存在当前环境中
|
|
52
|
-
const envFunctions = await listFunction({
|
|
53
|
-
envId
|
|
54
|
-
})
|
|
55
|
-
const exist = envFunctions.find((fn) => fn.FunctionName === fnName)
|
|
56
|
-
if (!exist) {
|
|
57
|
-
throw new CloudBaseError(`当前环境不存在此函数 [${fnName}]`)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
let layers: any[] = await listLayers({
|
|
61
|
-
offset: 0,
|
|
62
|
-
limit: 200
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
loading.stop()
|
|
66
|
-
|
|
67
|
-
layers = layers.map((item) => ({
|
|
68
|
-
name: `[${LayerStatusMap[item.Status] || '异常'}] ${item.LayerName}`,
|
|
69
|
-
value: item.LayerName
|
|
70
|
-
}))
|
|
71
|
-
|
|
72
|
-
if (!layers.length) {
|
|
73
|
-
throw new CloudBaseError('没有可用的文件层,请先创建文件层!')
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const { layer } = await prompt<any>({
|
|
77
|
-
type: 'select',
|
|
78
|
-
name: 'layer',
|
|
79
|
-
message: '选择文件层名称',
|
|
80
|
-
choices: layers,
|
|
81
|
-
result(choices) {
|
|
82
|
-
const keys = Object.values(this.map(choices)) as string[]
|
|
83
|
-
return keys[0]
|
|
84
|
-
}
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
let versions = await listLayerVersions({
|
|
88
|
-
name: layer
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
versions = versions.map((item) => String(item.LayerVersion))
|
|
92
|
-
|
|
93
|
-
if (!versions.length) {
|
|
94
|
-
throw new CloudBaseError('没有可用的文件层版本,请先创建文件层版本!')
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const { version } = await prompt<any>({
|
|
98
|
-
type: 'select',
|
|
99
|
-
name: 'version',
|
|
100
|
-
message: '选择文件层版本',
|
|
101
|
-
choices: versions
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
loading.start('文件层绑定中...')
|
|
105
|
-
await attachLayer({
|
|
106
|
-
envId,
|
|
107
|
-
functionName: fnName,
|
|
108
|
-
layerName: layer,
|
|
109
|
-
layerVersion: Number(version),
|
|
110
|
-
codeSecret
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
loading.succeed('文件层绑定成功!')
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
@ICommand()
|
|
118
|
-
export class UnAttachFileLayer extends Command {
|
|
119
|
-
get options() {
|
|
120
|
-
return {
|
|
121
|
-
...layerCommonOptions('unbind <name>'),
|
|
122
|
-
deprecateCmd: 'functions:layer:unbind <name>',
|
|
123
|
-
options: [
|
|
124
|
-
{
|
|
125
|
-
flags: '-e, --envId <envId>',
|
|
126
|
-
desc: '环境 Id'
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
flags: '--code-secret, <codeSecret>',
|
|
130
|
-
desc: '代码加密的函数的 CodeSecret'
|
|
131
|
-
}
|
|
132
|
-
],
|
|
133
|
-
desc: '删除云函数绑定的文件层'
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
@InjectParams()
|
|
138
|
-
async execute(@EnvId() envId, @ArgsParams() params, @ArgsOptions() options) {
|
|
139
|
-
const { codeSecret } = options
|
|
140
|
-
const fnName = params?.[0]
|
|
141
|
-
|
|
142
|
-
const loading = loadingFactory()
|
|
143
|
-
loading.start('数据加载中...')
|
|
144
|
-
|
|
145
|
-
const detail = await getFunctionDetail({
|
|
146
|
-
envId,
|
|
147
|
-
codeSecret,
|
|
148
|
-
functionName: fnName
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
if (!detail?.Layers?.length) {
|
|
152
|
-
throw new CloudBaseError('该云函数未绑定文件层!')
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
loading.stop()
|
|
156
|
-
|
|
157
|
-
const layers = detail.Layers.map((item) => ({
|
|
158
|
-
name: `名称:${item.LayerName} / 版本: ${item.LayerVersion}`,
|
|
159
|
-
value: item
|
|
160
|
-
}))
|
|
161
|
-
|
|
162
|
-
const { layer } = await prompt<any>({
|
|
163
|
-
type: 'select',
|
|
164
|
-
name: 'layer',
|
|
165
|
-
message: '选择文件层',
|
|
166
|
-
choices: layers,
|
|
167
|
-
result(choice) {
|
|
168
|
-
return this.map(choice)[choice]
|
|
169
|
-
}
|
|
170
|
-
})
|
|
171
|
-
|
|
172
|
-
loading.start('文件层解绑中...')
|
|
173
|
-
await unAttachLayer({
|
|
174
|
-
envId,
|
|
175
|
-
functionName: fnName,
|
|
176
|
-
layerName: layer.LayerName,
|
|
177
|
-
layerVersion: layer.LayerVersion,
|
|
178
|
-
codeSecret
|
|
179
|
-
})
|
|
180
|
-
loading.succeed('文件层解绑成功!')
|
|
181
|
-
}
|
|
182
|
-
}
|
|
1
|
+
import { prompt } from 'enquirer'
|
|
2
|
+
import {
|
|
3
|
+
listLayers,
|
|
4
|
+
listLayerVersions,
|
|
5
|
+
attachLayer,
|
|
6
|
+
getFunctionDetail,
|
|
7
|
+
unAttachLayer,
|
|
8
|
+
listFunction
|
|
9
|
+
} from '../../../function'
|
|
10
|
+
import { Command, ICommand } from '../../common'
|
|
11
|
+
import { loadingFactory } from '../../../utils'
|
|
12
|
+
import { CloudBaseError } from '../../../error'
|
|
13
|
+
import { InjectParams, EnvId, ArgsOptions, ArgsParams } from '../../../decorators'
|
|
14
|
+
import { layerCommonOptions } from './common'
|
|
15
|
+
|
|
16
|
+
const LayerStatusMap = {
|
|
17
|
+
Active: '正常',
|
|
18
|
+
Publishing: '发布中',
|
|
19
|
+
PublishFailed: '发布失败',
|
|
20
|
+
Deleted: '已删除'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@ICommand()
|
|
24
|
+
export class AttachFileLayer extends Command {
|
|
25
|
+
get options() {
|
|
26
|
+
return {
|
|
27
|
+
...layerCommonOptions('bind <name>'),
|
|
28
|
+
deprecateCmd: 'functions:layer:bind <name>',
|
|
29
|
+
options: [
|
|
30
|
+
{
|
|
31
|
+
flags: '-e, --envId <envId>',
|
|
32
|
+
desc: '环境 Id'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
flags: '--code-secret, <codeSecret>',
|
|
36
|
+
desc: '代码加密的函数的 CodeSecret'
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
desc: '绑定文件层到云函数'
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@InjectParams()
|
|
44
|
+
async execute(@EnvId() envId, @ArgsParams() params, @ArgsOptions() options) {
|
|
45
|
+
const { codeSecret } = options
|
|
46
|
+
const fnName = params?.[0]
|
|
47
|
+
|
|
48
|
+
const loading = loadingFactory()
|
|
49
|
+
loading.start('数据加载中...')
|
|
50
|
+
|
|
51
|
+
// 检查函数是否存在当前环境中
|
|
52
|
+
const envFunctions = await listFunction({
|
|
53
|
+
envId
|
|
54
|
+
})
|
|
55
|
+
const exist = envFunctions.find((fn) => fn.FunctionName === fnName)
|
|
56
|
+
if (!exist) {
|
|
57
|
+
throw new CloudBaseError(`当前环境不存在此函数 [${fnName}]`)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
let layers: any[] = await listLayers({
|
|
61
|
+
offset: 0,
|
|
62
|
+
limit: 200
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
loading.stop()
|
|
66
|
+
|
|
67
|
+
layers = layers.map((item) => ({
|
|
68
|
+
name: `[${LayerStatusMap[item.Status] || '异常'}] ${item.LayerName}`,
|
|
69
|
+
value: item.LayerName
|
|
70
|
+
}))
|
|
71
|
+
|
|
72
|
+
if (!layers.length) {
|
|
73
|
+
throw new CloudBaseError('没有可用的文件层,请先创建文件层!')
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const { layer } = await prompt<any>({
|
|
77
|
+
type: 'select',
|
|
78
|
+
name: 'layer',
|
|
79
|
+
message: '选择文件层名称',
|
|
80
|
+
choices: layers,
|
|
81
|
+
result(choices) {
|
|
82
|
+
const keys = Object.values(this.map(choices)) as string[]
|
|
83
|
+
return keys[0]
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
let versions = await listLayerVersions({
|
|
88
|
+
name: layer
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
versions = versions.map((item) => String(item.LayerVersion))
|
|
92
|
+
|
|
93
|
+
if (!versions.length) {
|
|
94
|
+
throw new CloudBaseError('没有可用的文件层版本,请先创建文件层版本!')
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const { version } = await prompt<any>({
|
|
98
|
+
type: 'select',
|
|
99
|
+
name: 'version',
|
|
100
|
+
message: '选择文件层版本',
|
|
101
|
+
choices: versions
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
loading.start('文件层绑定中...')
|
|
105
|
+
await attachLayer({
|
|
106
|
+
envId,
|
|
107
|
+
functionName: fnName,
|
|
108
|
+
layerName: layer,
|
|
109
|
+
layerVersion: Number(version),
|
|
110
|
+
codeSecret
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
loading.succeed('文件层绑定成功!')
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@ICommand()
|
|
118
|
+
export class UnAttachFileLayer extends Command {
|
|
119
|
+
get options() {
|
|
120
|
+
return {
|
|
121
|
+
...layerCommonOptions('unbind <name>'),
|
|
122
|
+
deprecateCmd: 'functions:layer:unbind <name>',
|
|
123
|
+
options: [
|
|
124
|
+
{
|
|
125
|
+
flags: '-e, --envId <envId>',
|
|
126
|
+
desc: '环境 Id'
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
flags: '--code-secret, <codeSecret>',
|
|
130
|
+
desc: '代码加密的函数的 CodeSecret'
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
desc: '删除云函数绑定的文件层'
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@InjectParams()
|
|
138
|
+
async execute(@EnvId() envId, @ArgsParams() params, @ArgsOptions() options) {
|
|
139
|
+
const { codeSecret } = options
|
|
140
|
+
const fnName = params?.[0]
|
|
141
|
+
|
|
142
|
+
const loading = loadingFactory()
|
|
143
|
+
loading.start('数据加载中...')
|
|
144
|
+
|
|
145
|
+
const detail = await getFunctionDetail({
|
|
146
|
+
envId,
|
|
147
|
+
codeSecret,
|
|
148
|
+
functionName: fnName
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
if (!detail?.Layers?.length) {
|
|
152
|
+
throw new CloudBaseError('该云函数未绑定文件层!')
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
loading.stop()
|
|
156
|
+
|
|
157
|
+
const layers = detail.Layers.map((item) => ({
|
|
158
|
+
name: `名称:${item.LayerName} / 版本: ${item.LayerVersion}`,
|
|
159
|
+
value: item
|
|
160
|
+
}))
|
|
161
|
+
|
|
162
|
+
const { layer } = await prompt<any>({
|
|
163
|
+
type: 'select',
|
|
164
|
+
name: 'layer',
|
|
165
|
+
message: '选择文件层',
|
|
166
|
+
choices: layers,
|
|
167
|
+
result(choice) {
|
|
168
|
+
return this.map(choice)[choice]
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
loading.start('文件层解绑中...')
|
|
173
|
+
await unAttachLayer({
|
|
174
|
+
envId,
|
|
175
|
+
functionName: fnName,
|
|
176
|
+
layerName: layer.LayerName,
|
|
177
|
+
layerVersion: layer.LayerVersion,
|
|
178
|
+
codeSecret
|
|
179
|
+
})
|
|
180
|
+
loading.succeed('文件层解绑成功!')
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export const layerCommonOptions = (sub: string) => ({
|
|
2
|
-
cmd: 'fn',
|
|
3
|
-
childCmd: {
|
|
4
|
-
cmd: 'layer',
|
|
5
|
-
desc: '云函数层管理'
|
|
6
|
-
},
|
|
7
|
-
childSubCmd: sub
|
|
8
|
-
})
|
|
1
|
+
export const layerCommonOptions = (sub: string) => ({
|
|
2
|
+
cmd: 'fn',
|
|
3
|
+
childCmd: {
|
|
4
|
+
cmd: 'layer',
|
|
5
|
+
desc: '云函数层管理'
|
|
6
|
+
},
|
|
7
|
+
childSubCmd: sub
|
|
8
|
+
})
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import path from 'path'
|
|
2
|
-
import { Command, ICommand } from '../../common'
|
|
3
|
-
import { createLayer } from '../../../function'
|
|
4
|
-
import { loadingFactory } from '../../../utils'
|
|
5
|
-
import { InjectParams, EnvId, ArgsOptions, ArgsParams } from '../../../decorators'
|
|
6
|
-
import { layerCommonOptions } from './common'
|
|
7
|
-
|
|
8
|
-
@ICommand()
|
|
9
|
-
export class CreateFileLayer extends Command {
|
|
10
|
-
get options() {
|
|
11
|
-
return {
|
|
12
|
-
...layerCommonOptions('create <alias>'),
|
|
13
|
-
deprecateCmd: 'functions:layer:create <alias>',
|
|
14
|
-
options: [
|
|
15
|
-
{
|
|
16
|
-
flags: '-e, --envId <envId>',
|
|
17
|
-
desc: '环境 Id'
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
flags: '--file, <file>',
|
|
21
|
-
desc: '文件路径'
|
|
22
|
-
}
|
|
23
|
-
],
|
|
24
|
-
desc: '创建函数文件层'
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@InjectParams()
|
|
29
|
-
async execute(@EnvId() envId, @ArgsOptions() options, @ArgsParams() params) {
|
|
30
|
-
const alias = params?.[0]
|
|
31
|
-
const { file } = options
|
|
32
|
-
|
|
33
|
-
const layerName = `${alias}_${envId}`
|
|
34
|
-
const filePath = path.resolve(file)
|
|
35
|
-
const runtimes = ['Nodejs8.9', 'Php7', 'Java8']
|
|
36
|
-
|
|
37
|
-
const loading = loadingFactory()
|
|
38
|
-
|
|
39
|
-
loading.start('文件层创建中...')
|
|
40
|
-
|
|
41
|
-
await createLayer({
|
|
42
|
-
layerName,
|
|
43
|
-
runtimes,
|
|
44
|
-
contentPath: filePath
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
loading.succeed('文件层创建成功!')
|
|
48
|
-
}
|
|
49
|
-
}
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import { Command, ICommand } from '../../common'
|
|
3
|
+
import { createLayer } from '../../../function'
|
|
4
|
+
import { loadingFactory } from '../../../utils'
|
|
5
|
+
import { InjectParams, EnvId, ArgsOptions, ArgsParams } from '../../../decorators'
|
|
6
|
+
import { layerCommonOptions } from './common'
|
|
7
|
+
|
|
8
|
+
@ICommand()
|
|
9
|
+
export class CreateFileLayer extends Command {
|
|
10
|
+
get options() {
|
|
11
|
+
return {
|
|
12
|
+
...layerCommonOptions('create <alias>'),
|
|
13
|
+
deprecateCmd: 'functions:layer:create <alias>',
|
|
14
|
+
options: [
|
|
15
|
+
{
|
|
16
|
+
flags: '-e, --envId <envId>',
|
|
17
|
+
desc: '环境 Id'
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
flags: '--file, <file>',
|
|
21
|
+
desc: '文件路径'
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
desc: '创建函数文件层'
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@InjectParams()
|
|
29
|
+
async execute(@EnvId() envId, @ArgsOptions() options, @ArgsParams() params) {
|
|
30
|
+
const alias = params?.[0]
|
|
31
|
+
const { file } = options
|
|
32
|
+
|
|
33
|
+
const layerName = `${alias}_${envId}`
|
|
34
|
+
const filePath = path.resolve(file)
|
|
35
|
+
const runtimes = ['Nodejs8.9', 'Php7', 'Java8']
|
|
36
|
+
|
|
37
|
+
const loading = loadingFactory()
|
|
38
|
+
|
|
39
|
+
loading.start('文件层创建中...')
|
|
40
|
+
|
|
41
|
+
await createLayer({
|
|
42
|
+
layerName,
|
|
43
|
+
runtimes,
|
|
44
|
+
contentPath: filePath
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
loading.succeed('文件层创建成功!')
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
import { prompt } from 'enquirer'
|
|
2
|
-
import { Command, ICommand } from '../../common'
|
|
3
|
-
import { loadingFactory } from '../../../utils'
|
|
4
|
-
import { CloudBaseError } from '../../../error'
|
|
5
|
-
import { InjectParams, EnvId } from '../../../decorators'
|
|
6
|
-
import { deleteLayer, listLayers, listLayerVersions } from '../../../function'
|
|
7
|
-
import { layerCommonOptions } from './common'
|
|
8
|
-
|
|
9
|
-
@ICommand()
|
|
10
|
-
export class DeleteFileLayer extends Command {
|
|
11
|
-
get options() {
|
|
12
|
-
return {
|
|
13
|
-
...layerCommonOptions('delete'),
|
|
14
|
-
deprecateCmd: 'functions:layer:delete',
|
|
15
|
-
options: [
|
|
16
|
-
{
|
|
17
|
-
flags: '-e, --envId <envId>',
|
|
18
|
-
desc: '环境 Id'
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
desc: '删除当前环境的文件层'
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@InjectParams()
|
|
26
|
-
async execute(@EnvId() envId) {
|
|
27
|
-
const loading = loadingFactory()
|
|
28
|
-
loading.start('数据加载中...')
|
|
29
|
-
|
|
30
|
-
let layers: any[] = await listLayers({
|
|
31
|
-
offset: 0,
|
|
32
|
-
limit: 200
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
loading.stop()
|
|
36
|
-
|
|
37
|
-
// 只能删除当前环境的文件层
|
|
38
|
-
layers = layers
|
|
39
|
-
.filter((item) => item.LayerName.includes(`_${envId}`))
|
|
40
|
-
.map((item) => item.LayerName)
|
|
41
|
-
|
|
42
|
-
if (!layers.length) {
|
|
43
|
-
throw new CloudBaseError('当前环境没有可用的文件层,请先创建文件层!')
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const { layer } = await prompt<any>({
|
|
47
|
-
type: 'select',
|
|
48
|
-
name: 'layer',
|
|
49
|
-
message: '选择文件层名称',
|
|
50
|
-
choices: layers
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
let versions = await listLayerVersions({
|
|
54
|
-
name: layer
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
versions = versions.map((item) => String(item.LayerVersion))
|
|
58
|
-
|
|
59
|
-
const { version } = await prompt<any>({
|
|
60
|
-
type: 'select',
|
|
61
|
-
name: 'version',
|
|
62
|
-
message: '选择文件层版本',
|
|
63
|
-
choices: versions
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
loading.start('文件层删除中...')
|
|
67
|
-
await deleteLayer({
|
|
68
|
-
name: layer,
|
|
69
|
-
version: Number(version)
|
|
70
|
-
})
|
|
71
|
-
loading.succeed('文件层删除成功!')
|
|
72
|
-
}
|
|
73
|
-
}
|
|
1
|
+
import { prompt } from 'enquirer'
|
|
2
|
+
import { Command, ICommand } from '../../common'
|
|
3
|
+
import { loadingFactory } from '../../../utils'
|
|
4
|
+
import { CloudBaseError } from '../../../error'
|
|
5
|
+
import { InjectParams, EnvId } from '../../../decorators'
|
|
6
|
+
import { deleteLayer, listLayers, listLayerVersions } from '../../../function'
|
|
7
|
+
import { layerCommonOptions } from './common'
|
|
8
|
+
|
|
9
|
+
@ICommand()
|
|
10
|
+
export class DeleteFileLayer extends Command {
|
|
11
|
+
get options() {
|
|
12
|
+
return {
|
|
13
|
+
...layerCommonOptions('delete'),
|
|
14
|
+
deprecateCmd: 'functions:layer:delete',
|
|
15
|
+
options: [
|
|
16
|
+
{
|
|
17
|
+
flags: '-e, --envId <envId>',
|
|
18
|
+
desc: '环境 Id'
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
desc: '删除当前环境的文件层'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@InjectParams()
|
|
26
|
+
async execute(@EnvId() envId) {
|
|
27
|
+
const loading = loadingFactory()
|
|
28
|
+
loading.start('数据加载中...')
|
|
29
|
+
|
|
30
|
+
let layers: any[] = await listLayers({
|
|
31
|
+
offset: 0,
|
|
32
|
+
limit: 200
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
loading.stop()
|
|
36
|
+
|
|
37
|
+
// 只能删除当前环境的文件层
|
|
38
|
+
layers = layers
|
|
39
|
+
.filter((item) => item.LayerName.includes(`_${envId}`))
|
|
40
|
+
.map((item) => item.LayerName)
|
|
41
|
+
|
|
42
|
+
if (!layers.length) {
|
|
43
|
+
throw new CloudBaseError('当前环境没有可用的文件层,请先创建文件层!')
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const { layer } = await prompt<any>({
|
|
47
|
+
type: 'select',
|
|
48
|
+
name: 'layer',
|
|
49
|
+
message: '选择文件层名称',
|
|
50
|
+
choices: layers
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
let versions = await listLayerVersions({
|
|
54
|
+
name: layer
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
versions = versions.map((item) => String(item.LayerVersion))
|
|
58
|
+
|
|
59
|
+
const { version } = await prompt<any>({
|
|
60
|
+
type: 'select',
|
|
61
|
+
name: 'version',
|
|
62
|
+
message: '选择文件层版本',
|
|
63
|
+
choices: versions
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
loading.start('文件层删除中...')
|
|
67
|
+
await deleteLayer({
|
|
68
|
+
name: layer,
|
|
69
|
+
version: Number(version)
|
|
70
|
+
})
|
|
71
|
+
loading.succeed('文件层删除成功!')
|
|
72
|
+
}
|
|
73
|
+
}
|