@cloudbase/cli 1.12.7-alpha.4 → 2.0.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.
Files changed (317) hide show
  1. package/.editorconfig +9 -9
  2. package/.eslintignore +7 -7
  3. package/.eslintrc +35 -35
  4. package/.prettierrc.js +29 -29
  5. package/.vscode/launch.json +16 -16
  6. package/.vscode/settings.json +3 -0
  7. package/LICENSE +5 -5
  8. package/README.md +35 -35
  9. package/bin/cloudbase.js +5 -5
  10. package/bin/tcb.js +0 -0
  11. package/changelog.md +6 -6
  12. package/jest.config.js +17 -17
  13. package/lib/commands/account/login.js +18 -18
  14. package/lib/commands/run/create.js +6 -1
  15. package/lib/commands/run/delete.js +6 -1
  16. package/lib/commands/run/image/common.js +1 -1
  17. package/lib/commands/run/image/delete.js +5 -0
  18. package/lib/commands/run/image/download.js +5 -0
  19. package/lib/commands/run/image/list.js +5 -0
  20. package/lib/commands/run/image/upload.js +5 -0
  21. package/lib/commands/run/index.js +1 -0
  22. package/lib/commands/run/list.js +7 -1
  23. package/lib/commands/run/service/config.js +112 -0
  24. package/lib/commands/run/service/create.js +140 -0
  25. package/lib/commands/run/service/deploy.js +145 -0
  26. package/lib/commands/run/service/index.js +21 -0
  27. package/lib/commands/run/service/list.js +115 -0
  28. package/lib/commands/run/service/update.js +132 -0
  29. package/lib/commands/run/version/common.js +1 -1
  30. package/lib/commands/run/version/create.js +5 -0
  31. package/lib/commands/run/version/delete.js +5 -0
  32. package/lib/commands/run/version/list.js +5 -0
  33. package/lib/commands/run/version/modify.js +5 -0
  34. package/lib/commands/run/version/update.js +5 -0
  35. package/lib/commands/storage/storage.js +1 -1
  36. package/lib/constant.js +20 -1
  37. package/lib/env/login.js +7 -7
  38. package/lib/help.js +40 -38
  39. package/lib/run/index.js +1 -0
  40. package/lib/run/service/common.js +163 -0
  41. package/lib/run/service/config.js +70 -0
  42. package/lib/run/service/create.js +67 -0
  43. package/lib/run/service/deployPackage.js +87 -0
  44. package/lib/run/service/index.js +23 -0
  45. package/lib/run/service/list.js +31 -0
  46. package/lib/run/service/showLogs.js +116 -0
  47. package/lib/run/service/update.js +83 -0
  48. package/lib/utils/checkTcbrEnv.js +74 -0
  49. package/lib/utils/commonParamsCheck.js +48 -0
  50. package/lib/utils/index.js +3 -0
  51. package/lib/utils/tcbrApi/callTcbrApi.js +38 -0
  52. package/lib/utils/tcbrApi/index.js +17 -0
  53. package/lib/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.js +268 -0
  54. package/lib/utils/tcbrApi/tcbr-cloud-api/error.js +17 -0
  55. package/lib/utils/tcbrApi/tcbr-cloud-api/index.js +17 -0
  56. package/lib/utils/tcbrApi/tcbr-cloud-api/request.js +40 -0
  57. package/lib/utils/tcbrApi/tcbr-cloud-api-request.js +61 -0
  58. package/lib/utils/validator.js +32 -1
  59. package/package.json +88 -88
  60. package/post-install.js +61 -61
  61. package/runtime/nodejs/bootstrap.js +255 -255
  62. package/runtime/nodejs/runtime.js +183 -183
  63. package/src/auth/index.ts +1 -1
  64. package/src/auth/login.ts +91 -91
  65. package/src/auth/logout.ts +7 -7
  66. package/src/commands/account/index.ts +2 -2
  67. package/src/commands/account/login.ts +192 -192
  68. package/src/commands/account/logout.ts +24 -24
  69. package/src/commands/common.ts +246 -246
  70. package/src/commands/env/base.ts +90 -90
  71. package/src/commands/env/create.ts +92 -92
  72. package/src/commands/env/domain.ts +186 -186
  73. package/src/commands/env/index.ts +4 -4
  74. package/src/commands/env/login.ts +235 -235
  75. package/src/commands/framework/index.ts +124 -124
  76. package/src/commands/functions/alias/getRoute.ts +76 -76
  77. package/src/commands/functions/alias/index.ts +2 -2
  78. package/src/commands/functions/alias/setRoute.ts +82 -82
  79. package/src/commands/functions/code-download.ts +100 -100
  80. package/src/commands/functions/code-update.ts +62 -62
  81. package/src/commands/functions/concurrency/delete.ts +45 -45
  82. package/src/commands/functions/concurrency/index.ts +2 -2
  83. package/src/commands/functions/concurrency/list.ts +58 -58
  84. package/src/commands/functions/concurrency/set.ts +47 -47
  85. package/src/commands/functions/config-update.ts +76 -76
  86. package/src/commands/functions/copy.ts +62 -62
  87. package/src/commands/functions/delete.ts +79 -79
  88. package/src/commands/functions/deploy.ts +293 -293
  89. package/src/commands/functions/detail.ts +138 -138
  90. package/src/commands/functions/index.ts +16 -16
  91. package/src/commands/functions/invoke.ts +121 -121
  92. package/src/commands/functions/layer/bind.ts +182 -182
  93. package/src/commands/functions/layer/common.ts +8 -8
  94. package/src/commands/functions/layer/create.ts +49 -49
  95. package/src/commands/functions/layer/delete.ts +73 -73
  96. package/src/commands/functions/layer/download.ts +92 -92
  97. package/src/commands/functions/layer/index.ts +7 -7
  98. package/src/commands/functions/layer/list.ts +94 -94
  99. package/src/commands/functions/layer/sort.ts +76 -76
  100. package/src/commands/functions/list.ts +68 -68
  101. package/src/commands/functions/log.ts +148 -148
  102. package/src/commands/functions/run.ts +249 -249
  103. package/src/commands/functions/trigger-create.ts +79 -79
  104. package/src/commands/functions/trigger-delete.ts +105 -105
  105. package/src/commands/functions/version/index.ts +1 -1
  106. package/src/commands/functions/version/list.ts +73 -73
  107. package/src/commands/functions/version/publish.ts +43 -43
  108. package/src/commands/gateway/create.ts +109 -109
  109. package/src/commands/gateway/delete.ts +81 -81
  110. package/src/commands/gateway/domain.ts +159 -159
  111. package/src/commands/gateway/index.ts +5 -5
  112. package/src/commands/gateway/list.ts +76 -76
  113. package/src/commands/gateway/switch.ts +107 -107
  114. package/src/commands/helpers/index.ts +2 -2
  115. package/src/commands/helpers/init.ts +431 -431
  116. package/src/commands/helpers/new.ts +117 -117
  117. package/src/commands/helpers/open.ts +67 -67
  118. package/src/commands/hosting/hosting.ts +360 -360
  119. package/src/commands/index.ts +13 -13
  120. package/src/commands/lowcode/app.ts +34 -34
  121. package/src/commands/lowcode/comps.ts +322 -322
  122. package/src/commands/lowcode/index.ts +1 -1
  123. package/src/commands/lowcode/utils.ts +24 -24
  124. package/src/commands/run/create.ts +9 -2
  125. package/src/commands/run/delete.ts +8 -2
  126. package/src/commands/run/image/common.ts +1 -1
  127. package/src/commands/run/image/delete.ts +8 -1
  128. package/src/commands/run/image/download.ts +7 -1
  129. package/src/commands/run/image/index.ts +4 -4
  130. package/src/commands/run/image/list.ts +7 -2
  131. package/src/commands/run/image/upload.ts +8 -1
  132. package/src/commands/run/index.ts +2 -1
  133. package/src/commands/run/list.ts +11 -3
  134. package/src/commands/run/service/config.ts +81 -0
  135. package/src/commands/run/service/create.ts +118 -0
  136. package/src/commands/run/service/deploy.ts +121 -0
  137. package/src/commands/run/service/index.ts +5 -0
  138. package/src/commands/run/service/list.ts +94 -0
  139. package/src/commands/run/service/update.ts +104 -0
  140. package/src/commands/run/standalonegateway/common.ts +7 -7
  141. package/src/commands/run/standalonegateway/create.ts +85 -85
  142. package/src/commands/run/standalonegateway/destroy.ts +59 -59
  143. package/src/commands/run/standalonegateway/index.ts +4 -4
  144. package/src/commands/run/standalonegateway/list.ts +53 -53
  145. package/src/commands/run/standalonegateway/package.ts +62 -62
  146. package/src/commands/run/standalonegateway/turn.ts +63 -63
  147. package/src/commands/run/version/common.ts +1 -1
  148. package/src/commands/run/version/create.ts +8 -1
  149. package/src/commands/run/version/delete.ts +8 -2
  150. package/src/commands/run/version/index.ts +4 -4
  151. package/src/commands/run/version/list.ts +7 -1
  152. package/src/commands/run/version/modify.ts +8 -1
  153. package/src/commands/run/version/update.ts +8 -1
  154. package/src/commands/smart.ts +132 -132
  155. package/src/commands/storage/storage.ts +464 -464
  156. package/src/commands/third/thirdAttach.ts +49 -49
  157. package/src/completion/index.ts +13 -13
  158. package/src/constant.ts +35 -1
  159. package/src/decorators/captureError.ts +25 -25
  160. package/src/decorators/constants.ts +12 -12
  161. package/src/decorators/deprecate.ts +25 -25
  162. package/src/decorators/guard.ts +42 -42
  163. package/src/decorators/index.ts +7 -7
  164. package/src/decorators/injectParams.ts +54 -54
  165. package/src/decorators/params/common.ts +28 -28
  166. package/src/decorators/params/index.ts +35 -35
  167. package/src/env/domain.ts +33 -33
  168. package/src/env/index.ts +63 -63
  169. package/src/env/login.ts +80 -80
  170. package/src/error.ts +36 -36
  171. package/src/function/alias.ts +43 -43
  172. package/src/function/base.ts +253 -253
  173. package/src/function/code.ts +55 -55
  174. package/src/function/concurrency.ts +57 -57
  175. package/src/function/create.ts +78 -78
  176. package/src/function/delete.ts +42 -42
  177. package/src/function/index.ts +10 -10
  178. package/src/function/layer/attach.ts +68 -68
  179. package/src/function/layer/create.ts +63 -63
  180. package/src/function/layer/delete.ts +21 -21
  181. package/src/function/layer/download.ts +54 -54
  182. package/src/function/layer/index.ts +7 -7
  183. package/src/function/layer/list.ts +32 -32
  184. package/src/function/layer/sort.ts +24 -24
  185. package/src/function/trigger.ts +97 -97
  186. package/src/function/update.ts +35 -35
  187. package/src/function/version.ts +38 -38
  188. package/src/function/vpc.ts +22 -22
  189. package/src/gateway/index.ts +137 -137
  190. package/src/help.ts +50 -48
  191. package/src/hosting.ts +212 -212
  192. package/src/index.ts +13 -13
  193. package/src/logger.ts +17 -17
  194. package/src/run/create.ts +23 -23
  195. package/src/run/delete.ts +15 -15
  196. package/src/run/image/build.ts +36 -36
  197. package/src/run/image/delete.ts +13 -13
  198. package/src/run/image/index.ts +3 -3
  199. package/src/run/image/info.ts +26 -26
  200. package/src/run/index.ts +2 -1
  201. package/src/run/list.ts +29 -29
  202. package/src/run/repo.ts +24 -24
  203. package/src/run/service/common.ts +206 -0
  204. package/src/run/service/config.ts +77 -0
  205. package/src/run/service/create.ts +52 -0
  206. package/src/run/service/deployPackage.ts +63 -0
  207. package/src/run/service/index.ts +7 -0
  208. package/src/run/service/list.ts +29 -0
  209. package/src/run/service/showLogs.ts +98 -0
  210. package/src/run/service/update.ts +81 -0
  211. package/src/run/standalonegateway/create.ts +24 -24
  212. package/src/run/standalonegateway/destroy.ts +19 -19
  213. package/src/run/standalonegateway/index.ts +4 -4
  214. package/src/run/standalonegateway/list.ts +74 -74
  215. package/src/run/standalonegateway/package/list.ts +24 -24
  216. package/src/run/standalonegateway/turn/index.ts +1 -1
  217. package/src/run/standalonegateway/turn/off.ts +19 -19
  218. package/src/run/standalonegateway/turn/on.ts +19 -19
  219. package/src/run/version/create.ts +68 -68
  220. package/src/run/version/delete.ts +15 -15
  221. package/src/run/version/index.ts +5 -5
  222. package/src/run/version/list.ts +16 -16
  223. package/src/run/version/modify.ts +16 -16
  224. package/src/run/version/repo.ts +27 -27
  225. package/src/run/version/update.ts +58 -58
  226. package/src/storage.ts +114 -114
  227. package/src/third/index.ts +12 -12
  228. package/src/types.ts +128 -2
  229. package/src/utils/auth.ts +15 -15
  230. package/src/utils/checkTcbrEnv.ts +67 -0
  231. package/src/utils/cli-table.ts +23 -23
  232. package/src/utils/commonParamsCheck.ts +65 -0
  233. package/src/utils/config.ts +39 -39
  234. package/src/utils/env.ts +244 -244
  235. package/src/utils/fs/del.ts +5 -5
  236. package/src/utils/fs/index.ts +71 -71
  237. package/src/utils/function-packer.ts +97 -97
  238. package/src/utils/index.ts +5 -1
  239. package/src/utils/log.ts +81 -81
  240. package/src/utils/net/cloud-api-request.ts +62 -62
  241. package/src/utils/net/credential.ts +53 -53
  242. package/src/utils/net/http-request.ts +84 -84
  243. package/src/utils/net/index.ts +4 -4
  244. package/src/utils/net/manager-service.ts +36 -36
  245. package/src/utils/net/proxy.ts +6 -6
  246. package/src/utils/notice.ts +28 -28
  247. package/src/utils/output/highlight.ts +5 -5
  248. package/src/utils/output/index.ts +2 -2
  249. package/src/utils/output/link.ts +10 -10
  250. package/src/utils/output/loading.ts +82 -82
  251. package/src/utils/parallel.ts +82 -82
  252. package/src/utils/platform/index.ts +2 -2
  253. package/src/utils/platform/mac.ts +21 -21
  254. package/src/utils/platform/os.ts +64 -64
  255. package/src/utils/platform/port.ts +10 -10
  256. package/src/utils/progress-bar.ts +38 -38
  257. package/src/utils/prompt/select.ts +59 -59
  258. package/src/utils/reporter/agree.ts +20 -20
  259. package/src/utils/reporter/download.ts +26 -26
  260. package/src/utils/reporter/index.ts +3 -3
  261. package/src/utils/reporter/usage.ts +20 -20
  262. package/src/utils/store/auth.ts +49 -49
  263. package/src/utils/store/common.ts +8 -8
  264. package/src/utils/store/db.ts +68 -68
  265. package/src/utils/store/index.ts +4 -4
  266. package/src/utils/store/usage.ts +12 -12
  267. package/src/utils/tcbrApi/callTcbrApi.ts +28 -0
  268. package/src/utils/tcbrApi/index.ts +1 -0
  269. package/src/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.ts +363 -0
  270. package/src/utils/tcbrApi/tcbr-cloud-api/error.ts +30 -0
  271. package/src/utils/tcbrApi/tcbr-cloud-api/index.ts +1 -0
  272. package/src/utils/tcbrApi/tcbr-cloud-api/request.ts +28 -0
  273. package/src/utils/tcbrApi/tcbr-cloud-api-request.ts +66 -0
  274. package/src/utils/template.ts +170 -170
  275. package/src/utils/tools/encoding.ts +8 -8
  276. package/src/utils/tools/index.ts +4 -4
  277. package/src/utils/tools/object.ts +33 -33
  278. package/src/utils/tools/time.ts +38 -38
  279. package/src/utils/tools/uid.ts +19 -19
  280. package/src/utils/validator.ts +64 -32
  281. package/templates/html/loginFail.html +90 -90
  282. package/templates/html/loginSuccess.html +86 -86
  283. package/templates/server/node/_gitignore +54 -54
  284. package/templates/server/node/cloudbaserc.json +10 -10
  285. package/templates/server/node/index.js +5 -5
  286. package/templates/server/node/package.json +9 -9
  287. package/tsconfig.json +19 -19
  288. package/tsconfig.test.json +13 -13
  289. package/types/commands/run/index.d.ts +1 -0
  290. package/types/commands/run/service/config.d.ts +14 -0
  291. package/types/commands/run/service/create.d.ts +13 -0
  292. package/types/commands/run/service/deploy.d.ts +13 -0
  293. package/types/commands/run/service/index.d.ts +5 -0
  294. package/types/commands/run/service/list.d.ts +13 -0
  295. package/types/commands/run/service/update.d.ts +13 -0
  296. package/types/constant.d.ts +18 -0
  297. package/types/run/index.d.ts +1 -0
  298. package/types/run/service/common.d.ts +32 -0
  299. package/types/run/service/config.d.ts +23 -0
  300. package/types/run/service/create.d.ts +7 -0
  301. package/types/run/service/deployPackage.d.ts +11 -0
  302. package/types/run/service/index.d.ts +7 -0
  303. package/types/run/service/list.d.ts +2 -0
  304. package/types/run/service/showLogs.d.ts +2 -0
  305. package/types/run/service/update.d.ts +2 -0
  306. package/types/types.d.ts +116 -2
  307. package/types/utils/checkTcbrEnv.d.ts +3 -0
  308. package/types/utils/commonParamsCheck.d.ts +3 -0
  309. package/types/utils/index.d.ts +3 -0
  310. package/types/utils/tcbrApi/callTcbrApi.d.ts +1 -0
  311. package/types/utils/tcbrApi/index.d.ts +1 -0
  312. package/types/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.d.ts +51 -0
  313. package/types/utils/tcbrApi/tcbr-cloud-api/error.d.ts +20 -0
  314. package/types/utils/tcbrApi/tcbr-cloud-api/index.d.ts +1 -0
  315. package/types/utils/tcbrApi/tcbr-cloud-api/request.d.ts +4 -0
  316. package/types/utils/tcbrApi/tcbr-cloud-api-request.d.ts +9 -0
  317. package/types/utils/validator.d.ts +4 -0
package/src/hosting.ts CHANGED
@@ -1,212 +1,212 @@
1
- import path from 'path'
2
- import {
3
- CloudApiService,
4
- firstLetterToLowerCase,
5
- isDirectory,
6
- genClickableLink,
7
- checkReadable,
8
- getStorageService
9
- } from './utils'
10
- import { CloudBaseError } from './error'
11
-
12
- interface IBaseOptions {
13
- envId: string
14
- }
15
-
16
- interface IHostingFileOptions extends IBaseOptions {
17
- filePath: string
18
- cloudPath: string
19
- isDir: boolean
20
- onProgress?: (data: any) => void
21
- onFileFinish?: (...args) => void
22
- }
23
-
24
- interface IHostingCloudOptions extends IBaseOptions {
25
- cloudPath: string
26
- isDir: boolean
27
- }
28
-
29
- const HostingStatusMap = {
30
- init: '初始化中',
31
- process: '处理中',
32
- online: '上线',
33
- destroying: '销毁中',
34
- offline: '下线',
35
- create_fail: '初始化失败', // eslint-disable-line
36
- destroy_fail: '销毁失败' // eslint-disable-line
37
- }
38
-
39
- const tcbService = CloudApiService.getInstance('tcb')
40
-
41
- export async function getHostingInfo(options: IBaseOptions) {
42
- const { envId } = options
43
- const res = await tcbService.request('DescribeStaticStore', {
44
- EnvId: envId
45
- })
46
- const data = firstLetterToLowerCase(res)
47
- return data
48
- }
49
-
50
- export async function checkHostingStatus(envId: string) {
51
- const hostings = await getHostingInfo({ envId })
52
-
53
- const link = genClickableLink('https://console.cloud.tencent.com/tcb')
54
-
55
- if (!hostings.data || !hostings.data.length) {
56
- throw new CloudBaseError(
57
- `您还没有开启静态网站服务,请先到云开发控制台开启静态网站服务!\n👉 ${link}`,
58
- {
59
- code: 'INVALID_OPERATION'
60
- }
61
- )
62
- }
63
-
64
- const website = hostings.data[0]
65
-
66
- if (website.status !== 'online') {
67
- throw new CloudBaseError(
68
- `静态网站服务【${HostingStatusMap[website.status]}】,无法进行此操作!`,
69
- {
70
- code: 'INVALID_OPERATION'
71
- }
72
- )
73
- }
74
-
75
- return website
76
- }
77
-
78
- export async function enableHosting(options: IBaseOptions) {
79
- const { envId } = options
80
- const hostings = await getHostingInfo(options)
81
- if (hostings?.data?.length) {
82
- const website = hostings.data[0]
83
- // offline 状态的服务可重新开启
84
- if (website.status !== 'offline') {
85
- throw new CloudBaseError('静态网站服务已开启,请勿重复操作!')
86
- }
87
- }
88
-
89
- const res = await tcbService.request('CreateStaticStore', {
90
- EnvId: envId
91
- })
92
- const code = res.Result === 'succ' ? 0 : -1
93
- return {
94
- code,
95
- requestId: res.RequestId
96
- }
97
- }
98
-
99
- // 展示文件信息
100
- export async function hostingList(options: IBaseOptions) {
101
- const { envId } = options
102
- const hosting = await checkHostingStatus(envId)
103
- const { bucket, regoin } = hosting
104
- const storageService = await getStorageService(envId)
105
-
106
- const list = await storageService.walkCloudDirCustom({
107
- prefix: '',
108
- bucket,
109
- region: regoin
110
- })
111
-
112
- return list
113
- }
114
-
115
- export async function destroyHosting(options: IBaseOptions) {
116
- const { envId } = options
117
- const files = await hostingList(options)
118
-
119
- if (files?.length) {
120
- throw new CloudBaseError('静态网站文件不为空,无法销毁!', {
121
- code: 'INVALID_OPERATION'
122
- })
123
- }
124
-
125
- const hostings = await getHostingInfo(options)
126
-
127
- if (!hostings.data || !hostings.data.length) {
128
- throw new CloudBaseError('静态网站服务未开启!', {
129
- code: 'INVALID_OPERATION'
130
- })
131
- }
132
-
133
- const website = hostings.data[0]
134
-
135
- // destroy_fail 状态可重试
136
- if (website.status !== 'online' && website.status !== 'destroy_fail') {
137
- throw new CloudBaseError(
138
- `静态网站服务【${HostingStatusMap[website.status]}】,无法进行此操作!`,
139
- {
140
- code: 'INVALID_OPERATION'
141
- }
142
- )
143
- }
144
-
145
- const res = await tcbService.request('DestroyStaticStore', {
146
- EnvId: envId
147
- })
148
-
149
- const code = res.Result === 'succ' ? 0 : -1
150
- return {
151
- code,
152
- requestId: res.RequestId
153
- }
154
- }
155
-
156
- // 上传文件
157
- export async function hostingDeploy(options: IHostingFileOptions) {
158
- const { envId, filePath, cloudPath, onProgress, onFileFinish } = options
159
- const resolvePath = path.resolve(filePath)
160
- // 检查路径是否存在
161
- checkReadable(resolvePath, true)
162
-
163
- const hosting = await checkHostingStatus(envId)
164
- const { bucket, regoin } = hosting
165
- const storageService = await getStorageService(envId)
166
-
167
- if (isDirectory(resolvePath)) {
168
- await storageService.uploadDirectoryCustom({
169
- localPath: resolvePath,
170
- cloudPath,
171
- bucket,
172
- region: regoin,
173
- onProgress,
174
- onFileFinish,
175
- fileId: false
176
- })
177
- } else {
178
- const assignCloudPath = cloudPath || path.parse(resolvePath).base
179
- await storageService.uploadFileCustom({
180
- localPath: resolvePath,
181
- cloudPath: assignCloudPath,
182
- bucket,
183
- region: regoin,
184
- onProgress,
185
- fileId: false
186
- })
187
- }
188
- }
189
-
190
- // 删除文件
191
- export async function hostingDelete(options: IHostingCloudOptions) {
192
- const { envId, cloudPath, isDir } = options
193
- const hosting = await checkHostingStatus(envId)
194
- const { bucket, regoin } = hosting
195
- const storageService = await getStorageService(envId)
196
-
197
- if (isDir) {
198
- await storageService.deleteDirectoryCustom({
199
- cloudPath,
200
- bucket,
201
- region: regoin
202
- })
203
- } else {
204
- await storageService.deleteFileCustom([cloudPath], bucket, regoin)
205
- }
206
- }
207
-
208
- // 删除文件
209
- export async function walkLocalDir(envId: string, dir: string) {
210
- const storageService = await getStorageService(envId)
211
- return storageService.walkLocalDir(dir)
212
- }
1
+ import path from 'path'
2
+ import {
3
+ CloudApiService,
4
+ firstLetterToLowerCase,
5
+ isDirectory,
6
+ genClickableLink,
7
+ checkReadable,
8
+ getStorageService
9
+ } from './utils'
10
+ import { CloudBaseError } from './error'
11
+
12
+ interface IBaseOptions {
13
+ envId: string
14
+ }
15
+
16
+ interface IHostingFileOptions extends IBaseOptions {
17
+ filePath: string
18
+ cloudPath: string
19
+ isDir: boolean
20
+ onProgress?: (data: any) => void
21
+ onFileFinish?: (...args) => void
22
+ }
23
+
24
+ interface IHostingCloudOptions extends IBaseOptions {
25
+ cloudPath: string
26
+ isDir: boolean
27
+ }
28
+
29
+ const HostingStatusMap = {
30
+ init: '初始化中',
31
+ process: '处理中',
32
+ online: '上线',
33
+ destroying: '销毁中',
34
+ offline: '下线',
35
+ create_fail: '初始化失败', // eslint-disable-line
36
+ destroy_fail: '销毁失败' // eslint-disable-line
37
+ }
38
+
39
+ const tcbService = CloudApiService.getInstance('tcb')
40
+
41
+ export async function getHostingInfo(options: IBaseOptions) {
42
+ const { envId } = options
43
+ const res = await tcbService.request('DescribeStaticStore', {
44
+ EnvId: envId
45
+ })
46
+ const data = firstLetterToLowerCase(res)
47
+ return data
48
+ }
49
+
50
+ export async function checkHostingStatus(envId: string) {
51
+ const hostings = await getHostingInfo({ envId })
52
+
53
+ const link = genClickableLink('https://console.cloud.tencent.com/tcb')
54
+
55
+ if (!hostings.data || !hostings.data.length) {
56
+ throw new CloudBaseError(
57
+ `您还没有开启静态网站服务,请先到云开发控制台开启静态网站服务!\n👉 ${link}`,
58
+ {
59
+ code: 'INVALID_OPERATION'
60
+ }
61
+ )
62
+ }
63
+
64
+ const website = hostings.data[0]
65
+
66
+ if (website.status !== 'online') {
67
+ throw new CloudBaseError(
68
+ `静态网站服务【${HostingStatusMap[website.status]}】,无法进行此操作!`,
69
+ {
70
+ code: 'INVALID_OPERATION'
71
+ }
72
+ )
73
+ }
74
+
75
+ return website
76
+ }
77
+
78
+ export async function enableHosting(options: IBaseOptions) {
79
+ const { envId } = options
80
+ const hostings = await getHostingInfo(options)
81
+ if (hostings?.data?.length) {
82
+ const website = hostings.data[0]
83
+ // offline 状态的服务可重新开启
84
+ if (website.status !== 'offline') {
85
+ throw new CloudBaseError('静态网站服务已开启,请勿重复操作!')
86
+ }
87
+ }
88
+
89
+ const res = await tcbService.request('CreateStaticStore', {
90
+ EnvId: envId
91
+ })
92
+ const code = res.Result === 'succ' ? 0 : -1
93
+ return {
94
+ code,
95
+ requestId: res.RequestId
96
+ }
97
+ }
98
+
99
+ // 展示文件信息
100
+ export async function hostingList(options: IBaseOptions) {
101
+ const { envId } = options
102
+ const hosting = await checkHostingStatus(envId)
103
+ const { bucket, regoin } = hosting
104
+ const storageService = await getStorageService(envId)
105
+
106
+ const list = await storageService.walkCloudDirCustom({
107
+ prefix: '',
108
+ bucket,
109
+ region: regoin
110
+ })
111
+
112
+ return list
113
+ }
114
+
115
+ export async function destroyHosting(options: IBaseOptions) {
116
+ const { envId } = options
117
+ const files = await hostingList(options)
118
+
119
+ if (files?.length) {
120
+ throw new CloudBaseError('静态网站文件不为空,无法销毁!', {
121
+ code: 'INVALID_OPERATION'
122
+ })
123
+ }
124
+
125
+ const hostings = await getHostingInfo(options)
126
+
127
+ if (!hostings.data || !hostings.data.length) {
128
+ throw new CloudBaseError('静态网站服务未开启!', {
129
+ code: 'INVALID_OPERATION'
130
+ })
131
+ }
132
+
133
+ const website = hostings.data[0]
134
+
135
+ // destroy_fail 状态可重试
136
+ if (website.status !== 'online' && website.status !== 'destroy_fail') {
137
+ throw new CloudBaseError(
138
+ `静态网站服务【${HostingStatusMap[website.status]}】,无法进行此操作!`,
139
+ {
140
+ code: 'INVALID_OPERATION'
141
+ }
142
+ )
143
+ }
144
+
145
+ const res = await tcbService.request('DestroyStaticStore', {
146
+ EnvId: envId
147
+ })
148
+
149
+ const code = res.Result === 'succ' ? 0 : -1
150
+ return {
151
+ code,
152
+ requestId: res.RequestId
153
+ }
154
+ }
155
+
156
+ // 上传文件
157
+ export async function hostingDeploy(options: IHostingFileOptions) {
158
+ const { envId, filePath, cloudPath, onProgress, onFileFinish } = options
159
+ const resolvePath = path.resolve(filePath)
160
+ // 检查路径是否存在
161
+ checkReadable(resolvePath, true)
162
+
163
+ const hosting = await checkHostingStatus(envId)
164
+ const { bucket, regoin } = hosting
165
+ const storageService = await getStorageService(envId)
166
+
167
+ if (isDirectory(resolvePath)) {
168
+ await storageService.uploadDirectoryCustom({
169
+ localPath: resolvePath,
170
+ cloudPath,
171
+ bucket,
172
+ region: regoin,
173
+ onProgress,
174
+ onFileFinish,
175
+ fileId: false
176
+ })
177
+ } else {
178
+ const assignCloudPath = cloudPath || path.parse(resolvePath).base
179
+ await storageService.uploadFileCustom({
180
+ localPath: resolvePath,
181
+ cloudPath: assignCloudPath,
182
+ bucket,
183
+ region: regoin,
184
+ onProgress,
185
+ fileId: false
186
+ })
187
+ }
188
+ }
189
+
190
+ // 删除文件
191
+ export async function hostingDelete(options: IHostingCloudOptions) {
192
+ const { envId, cloudPath, isDir } = options
193
+ const hosting = await checkHostingStatus(envId)
194
+ const { bucket, regoin } = hosting
195
+ const storageService = await getStorageService(envId)
196
+
197
+ if (isDir) {
198
+ await storageService.deleteDirectoryCustom({
199
+ cloudPath,
200
+ bucket,
201
+ region: regoin
202
+ })
203
+ } else {
204
+ await storageService.deleteFileCustom([cloudPath], bucket, regoin)
205
+ }
206
+ }
207
+
208
+ // 删除文件
209
+ export async function walkLocalDir(envId: string, dir: string) {
210
+ const storageService = await getStorageService(envId)
211
+ return storageService.walkLocalDir(dir)
212
+ }
package/src/index.ts CHANGED
@@ -1,13 +1,13 @@
1
- import 'reflect-metadata'
2
- import { registerCommands } from './commands/common'
3
- import './commands'
4
-
5
- export { smartDeploy } from './commands'
6
-
7
- registerCommands()
8
-
9
- // HACK: 部分依赖使用了 globalThis,会在 Node12 以下的版本报错
10
- if (typeof globalThis === undefined) {
11
- // eslint-disable-next-line no-undef
12
- ;(globalThis as any) = global
13
- }
1
+ import 'reflect-metadata'
2
+ import { registerCommands } from './commands/common'
3
+ import './commands'
4
+
5
+ export { smartDeploy } from './commands'
6
+
7
+ registerCommands()
8
+
9
+ // HACK: 部分依赖使用了 globalThis,会在 Node12 以下的版本报错
10
+ if (typeof globalThis === undefined) {
11
+ // eslint-disable-next-line no-undef
12
+ ;(globalThis as any) = global
13
+ }
package/src/logger.ts CHANGED
@@ -1,17 +1,17 @@
1
- import chalk from 'chalk'
2
- import logSymbols from 'log-symbols'
3
-
4
- export function errorLog(msg: string) {
5
- // 空格,兼容中文字符编码长度问题
6
- console.log(`${logSymbols.error} ${msg}`)
7
- }
8
-
9
- export function successLog(msg: string) {
10
- // 空格,兼容中文字符编码长度问题
11
- console.log(`${logSymbols.success} ${msg}`)
12
- }
13
-
14
- export function warnLog(msg: string) {
15
- // 空格,兼容中文字符编码长度问题
16
- console.log(`${logSymbols.warning} ${msg}`)
17
- }
1
+ import chalk from 'chalk'
2
+ import logSymbols from 'log-symbols'
3
+
4
+ export function errorLog(msg: string) {
5
+ // 空格,兼容中文字符编码长度问题
6
+ console.log(`${logSymbols.error} ${msg}`)
7
+ }
8
+
9
+ export function successLog(msg: string) {
10
+ // 空格,兼容中文字符编码长度问题
11
+ console.log(`${logSymbols.success} ${msg}`)
12
+ }
13
+
14
+ export function warnLog(msg: string) {
15
+ // 空格,兼容中文字符编码长度问题
16
+ console.log(`${logSymbols.warning} ${msg}`)
17
+ }
package/src/run/create.ts CHANGED
@@ -1,23 +1,23 @@
1
- import { CloudApiService } from '../utils'
2
- import {
3
- ICreateRunOptions
4
- } from '../types'
5
-
6
- const tcbService = CloudApiService.getInstance('tcb')
7
-
8
- export const createRun = async (options: ICreateRunOptions) => {
9
- const { Result } = await tcbService.request('EstablishCloudBaseRunServer',
10
- {
11
- EnvId: options.envId,
12
- ServiceName: options.name,
13
- Remark: options.remark,
14
- VpcInfo: options.vpcInfo,
15
- LogType: options.logType,
16
- IsPublic: options.isPublic,
17
- ...(options.imageRepo ? { ImageRepo: options.imageRepo } : {}),
18
- ...(options.logType === 'es' ? { EsInfo: options.esInfo } : {})
19
- },
20
- )
21
-
22
- return Result
23
- }
1
+ import { CloudApiService } from '../utils'
2
+ import {
3
+ ICreateRunOptions
4
+ } from '../types'
5
+
6
+ const tcbService = CloudApiService.getInstance('tcb')
7
+
8
+ export const createRun = async (options: ICreateRunOptions) => {
9
+ const { Result } = await tcbService.request('EstablishCloudBaseRunServer',
10
+ {
11
+ EnvId: options.envId,
12
+ ServiceName: options.name,
13
+ Remark: options.remark,
14
+ VpcInfo: options.vpcInfo,
15
+ LogType: options.logType,
16
+ IsPublic: options.isPublic,
17
+ ...(options.imageRepo ? { ImageRepo: options.imageRepo } : {}),
18
+ ...(options.logType === 'es' ? { EsInfo: options.esInfo } : {})
19
+ },
20
+ )
21
+
22
+ return Result
23
+ }
package/src/run/delete.ts CHANGED
@@ -1,15 +1,15 @@
1
- import { CloudApiService } from '../utils'
2
- import {
3
- IDeleteRun
4
- } from '../types'
5
-
6
- const tcbService = CloudApiService.getInstance('tcb')
7
-
8
- export const deleteRun = async (options: IDeleteRun) => {
9
- const { Result } = await tcbService.request('DeleteCloudBaseRunServer', {
10
- EnvId: options.envId,
11
- ServerName: options.serverName
12
- })
13
-
14
- return Result
15
- }
1
+ import { CloudApiService } from '../utils'
2
+ import {
3
+ IDeleteRun
4
+ } from '../types'
5
+
6
+ const tcbService = CloudApiService.getInstance('tcb')
7
+
8
+ export const deleteRun = async (options: IDeleteRun) => {
9
+ const { Result } = await tcbService.request('DeleteCloudBaseRunServer', {
10
+ EnvId: options.envId,
11
+ ServerName: options.serverName
12
+ })
13
+
14
+ return Result
15
+ }
@@ -1,36 +1,36 @@
1
- import { createReadStream, createWriteStream, readdirSync } from 'fs'
2
- import { join } from 'path'
3
- import { zip } from 'compressing'
4
- import { CloudApiService, fetchStream } from '../../utils'
5
- import {
6
- IBuildImage
7
- } from '../../types'
8
-
9
- const tcbService = CloudApiService.getInstance('tcb')
10
-
11
- // 提交构建任务
12
- export const createBuild = async (options: IBuildImage) => {
13
- const { PackageName, PackageVersion, UploadHeaders, UploadUrl } = await tcbService.request('DescribeCloudBaseBuildService', {
14
- EnvId: options.envId,
15
- ServiceName: options.serviceName,
16
- })
17
-
18
- return { PackageName, PackageVersion, UploadHeaders, UploadUrl }
19
- }
20
-
21
- // 上传zip压缩包
22
- export const uploadZip = async (path: string, url: string, headers: { [key: string]: string }) => {
23
- let body = createReadStream(path)
24
-
25
- await fetchStream(url, {
26
- method: 'PUT',
27
- headers: {
28
- Accept: '*/*',
29
- 'Accept-Encoding': 'gzip, deflate, br',
30
- 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,en-US;q=0.6',
31
- // [headers['Key']]: headers['Value'],
32
- 'Content-Type': 'application/x-zip-compressed'
33
- },
34
- body
35
- })
36
- }
1
+ import { createReadStream, createWriteStream, readdirSync } from 'fs'
2
+ import { join } from 'path'
3
+ import { zip } from 'compressing'
4
+ import { CloudApiService, fetchStream } from '../../utils'
5
+ import {
6
+ IBuildImage
7
+ } from '../../types'
8
+
9
+ const tcbService = CloudApiService.getInstance('tcb')
10
+
11
+ // 提交构建任务
12
+ export const createBuild = async (options: IBuildImage) => {
13
+ const { PackageName, PackageVersion, UploadHeaders, UploadUrl } = await tcbService.request('DescribeCloudBaseBuildService', {
14
+ EnvId: options.envId,
15
+ ServiceName: options.serviceName,
16
+ })
17
+
18
+ return { PackageName, PackageVersion, UploadHeaders, UploadUrl }
19
+ }
20
+
21
+ // 上传zip压缩包
22
+ export const uploadZip = async (path: string, url: string, headers: { [key: string]: string }) => {
23
+ let body = createReadStream(path)
24
+
25
+ await fetchStream(url, {
26
+ method: 'PUT',
27
+ headers: {
28
+ Accept: '*/*',
29
+ 'Accept-Encoding': 'gzip, deflate, br',
30
+ 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,en-US;q=0.6',
31
+ // [headers['Key']]: headers['Value'],
32
+ 'Content-Type': 'application/x-zip-compressed'
33
+ },
34
+ body
35
+ })
36
+ }
@@ -1,14 +1,14 @@
1
- import { CloudApiService } from '../../utils'
2
- import { IDeleteImage } from '../../types'
3
- import { option } from 'yargs'
4
-
5
- const tcbService = CloudApiService.getInstance('tcb')
6
-
7
- export const deleteImage = async (options: IDeleteImage) => {
8
- const { Result } = await tcbService.request('DeleteCloudBaseRunImage', {
9
- EnvId: options.envId,
10
- ImageUrl: options.imageUrl
11
- })
12
-
13
- return Result
1
+ import { CloudApiService } from '../../utils'
2
+ import { IDeleteImage } from '../../types'
3
+ import { option } from 'yargs'
4
+
5
+ const tcbService = CloudApiService.getInstance('tcb')
6
+
7
+ export const deleteImage = async (options: IDeleteImage) => {
8
+ const { Result } = await tcbService.request('DeleteCloudBaseRunImage', {
9
+ EnvId: options.envId,
10
+ ImageUrl: options.imageUrl
11
+ })
12
+
13
+ return Result
14
14
  }