@cloudbase/cli 2.0.0 → 2.0.3-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) 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/LICENSE +5 -5
  7. package/README.md +35 -35
  8. package/bin/cloudbase.js +5 -5
  9. package/bin/tcb.js +6 -4
  10. package/changelog.md +6 -6
  11. package/jest.config.js +17 -17
  12. package/lib/commands/account/login.js +18 -18
  13. package/lib/commands/storage/storage.js +1 -1
  14. package/lib/env/login.js +7 -7
  15. package/lib/run/service/deployPackage.js +6 -4
  16. package/lib/utils/net/http-request.js +4 -4
  17. package/lib/utils/tcbrApi/tcbr-cloud-api/request.js +3 -3
  18. package/package.json +17 -17
  19. package/post-install.js +61 -61
  20. package/runtime/nodejs/bootstrap.js +255 -255
  21. package/runtime/nodejs/runtime.js +183 -183
  22. package/src/auth/index.ts +1 -1
  23. package/src/auth/login.ts +91 -91
  24. package/src/auth/logout.ts +7 -7
  25. package/src/commands/account/index.ts +2 -2
  26. package/src/commands/account/login.ts +192 -192
  27. package/src/commands/account/logout.ts +24 -24
  28. package/src/commands/common.ts +246 -246
  29. package/src/commands/env/base.ts +90 -90
  30. package/src/commands/env/create.ts +92 -92
  31. package/src/commands/env/domain.ts +186 -186
  32. package/src/commands/env/index.ts +4 -4
  33. package/src/commands/env/login.ts +235 -235
  34. package/src/commands/framework/index.ts +124 -124
  35. package/src/commands/functions/alias/getRoute.ts +76 -76
  36. package/src/commands/functions/alias/index.ts +2 -2
  37. package/src/commands/functions/alias/setRoute.ts +82 -82
  38. package/src/commands/functions/code-download.ts +100 -100
  39. package/src/commands/functions/code-update.ts +62 -62
  40. package/src/commands/functions/concurrency/delete.ts +45 -45
  41. package/src/commands/functions/concurrency/index.ts +2 -2
  42. package/src/commands/functions/concurrency/list.ts +58 -58
  43. package/src/commands/functions/concurrency/set.ts +47 -47
  44. package/src/commands/functions/config-update.ts +76 -76
  45. package/src/commands/functions/copy.ts +62 -62
  46. package/src/commands/functions/delete.ts +79 -79
  47. package/src/commands/functions/deploy.ts +293 -293
  48. package/src/commands/functions/detail.ts +138 -138
  49. package/src/commands/functions/index.ts +16 -16
  50. package/src/commands/functions/invoke.ts +121 -121
  51. package/src/commands/functions/layer/bind.ts +182 -182
  52. package/src/commands/functions/layer/common.ts +8 -8
  53. package/src/commands/functions/layer/create.ts +49 -49
  54. package/src/commands/functions/layer/delete.ts +73 -73
  55. package/src/commands/functions/layer/download.ts +92 -92
  56. package/src/commands/functions/layer/index.ts +7 -7
  57. package/src/commands/functions/layer/list.ts +94 -94
  58. package/src/commands/functions/layer/sort.ts +76 -76
  59. package/src/commands/functions/list.ts +68 -68
  60. package/src/commands/functions/log.ts +148 -148
  61. package/src/commands/functions/run.ts +249 -249
  62. package/src/commands/functions/trigger-create.ts +79 -79
  63. package/src/commands/functions/trigger-delete.ts +105 -105
  64. package/src/commands/functions/version/index.ts +1 -1
  65. package/src/commands/functions/version/list.ts +73 -73
  66. package/src/commands/functions/version/publish.ts +43 -43
  67. package/src/commands/gateway/create.ts +109 -109
  68. package/src/commands/gateway/delete.ts +81 -81
  69. package/src/commands/gateway/domain.ts +159 -159
  70. package/src/commands/gateway/index.ts +5 -5
  71. package/src/commands/gateway/list.ts +76 -76
  72. package/src/commands/gateway/switch.ts +107 -107
  73. package/src/commands/helpers/index.ts +2 -2
  74. package/src/commands/helpers/init.ts +431 -431
  75. package/src/commands/helpers/new.ts +117 -117
  76. package/src/commands/helpers/open.ts +67 -67
  77. package/src/commands/hosting/hosting.ts +360 -360
  78. package/src/commands/index.ts +13 -13
  79. package/src/commands/lowcode/app.ts +34 -34
  80. package/src/commands/lowcode/comps.ts +322 -322
  81. package/src/commands/lowcode/index.ts +1 -1
  82. package/src/commands/lowcode/utils.ts +24 -24
  83. package/src/commands/run/image/index.ts +4 -4
  84. package/src/commands/run/standalonegateway/common.ts +7 -7
  85. package/src/commands/run/standalonegateway/create.ts +85 -85
  86. package/src/commands/run/standalonegateway/destroy.ts +59 -59
  87. package/src/commands/run/standalonegateway/index.ts +4 -4
  88. package/src/commands/run/standalonegateway/list.ts +53 -53
  89. package/src/commands/run/standalonegateway/package.ts +62 -62
  90. package/src/commands/run/standalonegateway/turn.ts +63 -63
  91. package/src/commands/run/version/index.ts +4 -4
  92. package/src/commands/smart.ts +132 -132
  93. package/src/commands/storage/storage.ts +464 -464
  94. package/src/commands/third/thirdAttach.ts +49 -49
  95. package/src/completion/index.ts +13 -13
  96. package/src/decorators/captureError.ts +25 -25
  97. package/src/decorators/constants.ts +12 -12
  98. package/src/decorators/deprecate.ts +25 -25
  99. package/src/decorators/guard.ts +42 -42
  100. package/src/decorators/index.ts +7 -7
  101. package/src/decorators/injectParams.ts +54 -54
  102. package/src/decorators/params/common.ts +28 -28
  103. package/src/decorators/params/index.ts +35 -35
  104. package/src/env/domain.ts +33 -33
  105. package/src/env/index.ts +63 -63
  106. package/src/env/login.ts +80 -80
  107. package/src/error.ts +36 -36
  108. package/src/function/alias.ts +43 -43
  109. package/src/function/base.ts +253 -253
  110. package/src/function/code.ts +55 -55
  111. package/src/function/concurrency.ts +57 -57
  112. package/src/function/create.ts +78 -78
  113. package/src/function/delete.ts +42 -42
  114. package/src/function/index.ts +10 -10
  115. package/src/function/layer/attach.ts +68 -68
  116. package/src/function/layer/create.ts +63 -63
  117. package/src/function/layer/delete.ts +21 -21
  118. package/src/function/layer/download.ts +54 -54
  119. package/src/function/layer/index.ts +7 -7
  120. package/src/function/layer/list.ts +32 -32
  121. package/src/function/layer/sort.ts +24 -24
  122. package/src/function/trigger.ts +97 -97
  123. package/src/function/update.ts +35 -35
  124. package/src/function/version.ts +38 -38
  125. package/src/function/vpc.ts +22 -22
  126. package/src/gateway/index.ts +137 -137
  127. package/src/hosting.ts +212 -212
  128. package/src/index.ts +13 -13
  129. package/src/logger.ts +17 -17
  130. package/src/run/create.ts +23 -23
  131. package/src/run/delete.ts +15 -15
  132. package/src/run/image/build.ts +36 -36
  133. package/src/run/image/delete.ts +13 -13
  134. package/src/run/image/index.ts +3 -3
  135. package/src/run/image/info.ts +26 -26
  136. package/src/run/list.ts +29 -29
  137. package/src/run/repo.ts +24 -24
  138. package/src/run/service/deployPackage.ts +6 -4
  139. package/src/run/standalonegateway/create.ts +24 -24
  140. package/src/run/standalonegateway/destroy.ts +19 -19
  141. package/src/run/standalonegateway/index.ts +4 -4
  142. package/src/run/standalonegateway/list.ts +74 -74
  143. package/src/run/standalonegateway/package/list.ts +24 -24
  144. package/src/run/standalonegateway/turn/index.ts +1 -1
  145. package/src/run/standalonegateway/turn/off.ts +19 -19
  146. package/src/run/standalonegateway/turn/on.ts +19 -19
  147. package/src/run/version/create.ts +68 -68
  148. package/src/run/version/delete.ts +15 -15
  149. package/src/run/version/index.ts +5 -5
  150. package/src/run/version/list.ts +16 -16
  151. package/src/run/version/modify.ts +16 -16
  152. package/src/run/version/repo.ts +27 -27
  153. package/src/run/version/update.ts +58 -58
  154. package/src/storage.ts +114 -114
  155. package/src/third/index.ts +12 -12
  156. package/src/utils/auth.ts +15 -15
  157. package/src/utils/cli-table.ts +23 -23
  158. package/src/utils/config.ts +39 -39
  159. package/src/utils/env.ts +244 -244
  160. package/src/utils/fs/del.ts +5 -5
  161. package/src/utils/fs/index.ts +71 -71
  162. package/src/utils/function-packer.ts +97 -97
  163. package/src/utils/log.ts +81 -81
  164. package/src/utils/net/cloud-api-request.ts +62 -62
  165. package/src/utils/net/credential.ts +53 -53
  166. package/src/utils/net/http-request.ts +84 -84
  167. package/src/utils/net/index.ts +4 -4
  168. package/src/utils/net/manager-service.ts +36 -36
  169. package/src/utils/net/proxy.ts +6 -6
  170. package/src/utils/notice.ts +28 -28
  171. package/src/utils/output/highlight.ts +5 -5
  172. package/src/utils/output/index.ts +2 -2
  173. package/src/utils/output/link.ts +10 -10
  174. package/src/utils/output/loading.ts +82 -82
  175. package/src/utils/parallel.ts +82 -82
  176. package/src/utils/platform/index.ts +2 -2
  177. package/src/utils/platform/mac.ts +21 -21
  178. package/src/utils/platform/os.ts +64 -64
  179. package/src/utils/platform/port.ts +10 -10
  180. package/src/utils/progress-bar.ts +38 -38
  181. package/src/utils/prompt/select.ts +59 -59
  182. package/src/utils/reporter/agree.ts +20 -20
  183. package/src/utils/reporter/download.ts +26 -26
  184. package/src/utils/reporter/index.ts +3 -3
  185. package/src/utils/reporter/usage.ts +20 -20
  186. package/src/utils/store/auth.ts +49 -49
  187. package/src/utils/store/common.ts +8 -8
  188. package/src/utils/store/db.ts +68 -68
  189. package/src/utils/store/index.ts +4 -4
  190. package/src/utils/store/usage.ts +12 -12
  191. package/src/utils/tcbrApi/tcbr-cloud-api/request.ts +13 -13
  192. package/src/utils/template.ts +170 -170
  193. package/src/utils/tools/encoding.ts +8 -8
  194. package/src/utils/tools/index.ts +4 -4
  195. package/src/utils/tools/object.ts +33 -33
  196. package/src/utils/tools/time.ts +38 -38
  197. package/src/utils/tools/uid.ts +19 -19
  198. package/templates/html/loginFail.html +90 -90
  199. package/templates/html/loginSuccess.html +86 -86
  200. package/templates/server/node/_gitignore +54 -54
  201. package/templates/server/node/cloudbaserc.json +10 -10
  202. package/templates/server/node/index.js +5 -5
  203. package/templates/server/node/package.json +9 -9
  204. package/tsconfig.json +19 -19
  205. package/tsconfig.test.json +13 -13
  206. package/.vscode/settings.json +0 -3
package/post-install.js CHANGED
@@ -1,61 +1,61 @@
1
- /* eslint-disable */
2
- const chalk = require('chalk')
3
- const { execSync } = require('child_process')
4
-
5
- const isWin32 = process.platform === 'win32'
6
-
7
- const print = (color = null) => (str = '') => {
8
- const terminalCols = retrieveCols()
9
- const strLength = str.replace(/\u001B\[[0-9]{2}m/g, '').length
10
- const leftPaddingLength = Math.floor((terminalCols - strLength) / 2)
11
- const leftPadding = ' '.repeat(Math.max(leftPaddingLength, 0))
12
- if (color) {
13
- str = chalk[color](str)
14
- }
15
-
16
- console.log(leftPadding, str)
17
- }
18
-
19
- const retrieveCols = (() => {
20
- let result = false
21
-
22
- return () => {
23
- if (result) {
24
- return result
25
- }
26
- const defaultCols = 80
27
-
28
- try {
29
- const terminalCols = execSync('tput cols', { stdio: ['pipe', 'pipe', 'ignore'] })
30
- result = parseInt(terminalCols.toString()) || defaultCols
31
- } catch (e) {
32
- result = defaultCols
33
- }
34
-
35
- return result
36
- }
37
- })()
38
-
39
- // 只在 osx 系统上展示 emoji
40
- const emoji = (emoji) => (process.stdout.isTTY && !isWin32 ? emoji : '')
41
-
42
- function printFooter() {
43
- const yellow = print('yellow')
44
- // const yellow = str => console.log(chalk.yellow(str))
45
- const emptyLine = print()
46
-
47
- emptyLine()
48
-
49
- yellow('了解如何使用 CloudBase CLI')
50
- yellow('请查看使用文档')
51
-
52
- print()(
53
- ' '.repeat(15) +
54
- `${chalk.bold(emoji('👉'))} ${chalk.underline(
55
- 'https://docs.cloudbase.net/cli-v1/quick-start.html'
56
- )}`
57
- )
58
- emptyLine()
59
- }
60
-
61
- printFooter()
1
+ /* eslint-disable */
2
+ const chalk = require('chalk')
3
+ const { execSync } = require('child_process')
4
+
5
+ const isWin32 = process.platform === 'win32'
6
+
7
+ const print = (color = null) => (str = '') => {
8
+ const terminalCols = retrieveCols()
9
+ const strLength = str.replace(/\u001B\[[0-9]{2}m/g, '').length
10
+ const leftPaddingLength = Math.floor((terminalCols - strLength) / 2)
11
+ const leftPadding = ' '.repeat(Math.max(leftPaddingLength, 0))
12
+ if (color) {
13
+ str = chalk[color](str)
14
+ }
15
+
16
+ console.log(leftPadding, str)
17
+ }
18
+
19
+ const retrieveCols = (() => {
20
+ let result = false
21
+
22
+ return () => {
23
+ if (result) {
24
+ return result
25
+ }
26
+ const defaultCols = 80
27
+
28
+ try {
29
+ const terminalCols = execSync('tput cols', { stdio: ['pipe', 'pipe', 'ignore'] })
30
+ result = parseInt(terminalCols.toString()) || defaultCols
31
+ } catch (e) {
32
+ result = defaultCols
33
+ }
34
+
35
+ return result
36
+ }
37
+ })()
38
+
39
+ // 只在 osx 系统上展示 emoji
40
+ const emoji = (emoji) => (process.stdout.isTTY && !isWin32 ? emoji : '')
41
+
42
+ function printFooter() {
43
+ const yellow = print('yellow')
44
+ // const yellow = str => console.log(chalk.yellow(str))
45
+ const emptyLine = print()
46
+
47
+ emptyLine()
48
+
49
+ yellow('了解如何使用 CloudBase CLI')
50
+ yellow('请查看使用文档')
51
+
52
+ print()(
53
+ ' '.repeat(15) +
54
+ `${chalk.bold(emoji('👉'))} ${chalk.underline(
55
+ 'https://docs.cloudbase.net/cli-v1/quick-start.html'
56
+ )}`
57
+ )
58
+ emptyLine()
59
+ }
60
+
61
+ printFooter()
@@ -1,255 +1,255 @@
1
- /* eslint-disable */
2
- var runtime = require('./runtime')
3
- var util = require('util')
4
-
5
- var initHandlerFault = 'function initialization failed'
6
- var maxRetMsgLen = 6 * 1024 * 1024 // byte
7
- var maxRetMsgLenExceedError = 'body size is too long'
8
- var httpHandler, eventHandler
9
-
10
- var _result, _fault
11
- var _user_exception = false
12
-
13
- function wrapLog(invokeId) {
14
- console.log = console.info = function prettyConsoleLog() {
15
- var message = `${util.format.apply(this, arguments)}`
16
- runtime.console_log(message)
17
- }
18
- console.error = console.warn = function prettyConsoleLogErr() {
19
- var message = `${util.format.apply(this, arguments)}`
20
- runtime.console_log(message, (err = true))
21
- }
22
- }
23
-
24
- function main() {
25
- if (0 != runtime.init()) {
26
- console.log('runtime init failed')
27
- return
28
- }
29
- runtime.log('init succ')
30
-
31
- cleanEnv()
32
-
33
- process.on('beforeExit', () => {
34
- runtime.log('catch exit')
35
- finish(null, null, false)
36
- })
37
- process.on('uncaughtException', err => {
38
- runtime.log('catch exception')
39
- finish(err, null, false)
40
- })
41
-
42
- waitForInvoke()
43
- }
44
-
45
- function cleanEnv() {
46
- var envToDelete = ['SOCKETPATH', 'CONTAINERID']
47
- for (var k in process.env) {
48
- if (k.startsWith('KUBERNETES')) {
49
- envToDelete.push(k)
50
- }
51
- }
52
-
53
- envToDelete.forEach(e => {
54
- delete process.env[e]
55
- })
56
- }
57
-
58
- function waitForInvoke() {
59
- runtime.log('wait for invoke')
60
- var invokeInfo = runtime.wait_for_invoke()
61
- setTimeout(() => {
62
- runtime.log('timed out, invoke')
63
- invoke(invokeInfo)
64
- }, 0)
65
- }
66
-
67
- function invoke(invokeInfo) {
68
- if (invokeInfo.cmd === 'RELOAD') {
69
- runtime.log(`get reload request: ${invokeInfo.context}`)
70
- // 路径中可能包含 . 符号
71
- var ff = invokeInfo.globalHandler.split('.')
72
- initHandler(invokeInfo.filePath + ff[0], ff[1])
73
- runtime.log('handlers reloaded')
74
- _result = 'reload'
75
- finish(null, null, false)
76
- return
77
- }
78
-
79
- _result = undefined
80
- _fault = undefined
81
-
82
- runtime.report_running()
83
-
84
- var ev, ctx
85
- if (invokeInfo.event || invokeInfo.context) {
86
- try {
87
- ev = JSON.parse(invokeInfo.event)
88
- ctx = JSON.parse(invokeInfo.context)
89
- } catch (err) {
90
- _fault = `eval event[${invokeInfo.event}] or context [${invokeInfo.context}] failed\n${err}`
91
- return
92
- }
93
- }
94
-
95
- ctx['environ'].split(';').forEach(e => {
96
- if (e == '') return
97
- var kv = e.split('=', 2)
98
- process.env[kv[0]] = kv[1]
99
- })
100
-
101
- runtime.log(`request[${ctx['request_id']}] invoked`)
102
-
103
- if (!httpHandler && !eventHandler) {
104
- _fault = initHandlerFault
105
- return
106
- }
107
-
108
- wrapLog(ctx['request_id'])
109
- if (invokeInfo.cmd === 'HTTP') {
110
- httpHandler.handle(invokeInfo.sockfd)
111
- } else if (invokeInfo.cmd === 'EVENT') {
112
- eventHandler.handle(ev, ctx)
113
- } else {
114
- _fault = `recv unknown task type: ${invokeInfo.cmd}`
115
- runtime.log(`recv unknown task type: ${invokeInfo.cmd}`)
116
- }
117
-
118
- runtime.log('process finished')
119
- }
120
-
121
- function initHandler(file, func) {
122
- try {
123
- var path = require('path')
124
- var current_path = path.dirname(file)
125
- process.chdir(current_path)
126
- runtime.log(`working directory: ${process.cwd()}`)
127
-
128
- for (var item in require.cache) {
129
- delete require.cache[item]
130
- }
131
- var usermod = require(file)
132
- httpHandler = new HttpHandler(usermod[func])
133
- eventHandler = new EventHandler(usermod[func])
134
- } catch (err) {
135
- runtime.log(`get user function[${file}:${func}] failed`)
136
- runtime.log(err.stack)
137
- initHandlerFault = err.message
138
- _user_exception = true
139
- }
140
- }
141
-
142
- function finish(err, data, wait) {
143
- runtime.log('finish')
144
- runtime.log(wait ? 'wait' : 'not wait')
145
-
146
- if (_result === undefined) {
147
- if (err == null) {
148
- try {
149
- _result = JSON.stringify(data === undefined ? null : data)
150
- } catch (err) {
151
- _result = 'faulted'
152
- _fault = `stringify response to json failed: ${err.message}`
153
- return
154
- }
155
- } else {
156
- _result = 'faulted'
157
- if (err instanceof Error) {
158
- runtime.console_log(err.stack, true)
159
- _fault = err.message
160
- } else {
161
- var errStr = String(err)
162
- _fault = `${errStr}(callback err is not instance of Error)`
163
- }
164
- }
165
- }
166
-
167
- if (wait) {
168
- return
169
- }
170
-
171
- runtime.log(_result)
172
- process.nextTick(() => {
173
- if (_result == 'reload') {
174
- // reload response, do nothing
175
- } else if (_fault !== undefined) {
176
- _user_exception = true
177
- var errType = _user_exception ? 2 : 1
178
- runtime.report_fail(_fault, 0, errType)
179
- } else if (_result.length > maxRetMsgLen) {
180
- runtime.report_fail(maxRetMsgLenExceedError, 0, 1)
181
- } else {
182
- runtime.report_done(_result, 0)
183
- }
184
- waitForInvoke()
185
- })
186
- }
187
-
188
- class HttpHandler {
189
- constructor(func) {
190
- this.realHandler = func
191
- }
192
-
193
- handle(fd) {}
194
- }
195
-
196
- class EventHandler {
197
- constructor(func) {
198
- this.realHandler = func
199
- }
200
-
201
- handle(ev, ctx) {
202
- var called = false
203
- var wait = true
204
- var callback = (err, data) => {
205
- if (called) {
206
- return
207
- }
208
- called = true
209
- finish(err, data, wait)
210
- }
211
-
212
- var ctxx = Object.assign(
213
- {
214
- set callbackWaitsForEmptyEventLoop(value) {
215
- wait = value
216
- },
217
- get callbackWaitsForEmptyEventLoop() {
218
- return wait
219
- },
220
- getContext() {
221
- return ctx
222
- },
223
- done: function(err, data) {
224
- wait = false
225
- callback(err, data)
226
- },
227
- succeed: function(data) {
228
- ctxx.done(null, data)
229
- },
230
- fail: function(err) {
231
- ctxx.done(err, null)
232
- }
233
- },
234
- ctx
235
- )
236
-
237
- try {
238
- _user_exception = false
239
- var ret = this.realHandler(ev, ctxx, callback)
240
- if (
241
- ret &&
242
- ret.then !== undefined &&
243
- typeof ret.then === 'function'
244
- ) {
245
- ret.then(ctxx.succeed, ctxx.fail)
246
- }
247
- } catch (err) {
248
- runtime.console_log(err.stack, true)
249
- _fault = err.stack
250
- _user_exception = true
251
- }
252
- }
253
- }
254
-
255
- main()
1
+ /* eslint-disable */
2
+ var runtime = require('./runtime')
3
+ var util = require('util')
4
+
5
+ var initHandlerFault = 'function initialization failed'
6
+ var maxRetMsgLen = 6 * 1024 * 1024 // byte
7
+ var maxRetMsgLenExceedError = 'body size is too long'
8
+ var httpHandler, eventHandler
9
+
10
+ var _result, _fault
11
+ var _user_exception = false
12
+
13
+ function wrapLog(invokeId) {
14
+ console.log = console.info = function prettyConsoleLog() {
15
+ var message = `${util.format.apply(this, arguments)}`
16
+ runtime.console_log(message)
17
+ }
18
+ console.error = console.warn = function prettyConsoleLogErr() {
19
+ var message = `${util.format.apply(this, arguments)}`
20
+ runtime.console_log(message, (err = true))
21
+ }
22
+ }
23
+
24
+ function main() {
25
+ if (0 != runtime.init()) {
26
+ console.log('runtime init failed')
27
+ return
28
+ }
29
+ runtime.log('init succ')
30
+
31
+ cleanEnv()
32
+
33
+ process.on('beforeExit', () => {
34
+ runtime.log('catch exit')
35
+ finish(null, null, false)
36
+ })
37
+ process.on('uncaughtException', err => {
38
+ runtime.log('catch exception')
39
+ finish(err, null, false)
40
+ })
41
+
42
+ waitForInvoke()
43
+ }
44
+
45
+ function cleanEnv() {
46
+ var envToDelete = ['SOCKETPATH', 'CONTAINERID']
47
+ for (var k in process.env) {
48
+ if (k.startsWith('KUBERNETES')) {
49
+ envToDelete.push(k)
50
+ }
51
+ }
52
+
53
+ envToDelete.forEach(e => {
54
+ delete process.env[e]
55
+ })
56
+ }
57
+
58
+ function waitForInvoke() {
59
+ runtime.log('wait for invoke')
60
+ var invokeInfo = runtime.wait_for_invoke()
61
+ setTimeout(() => {
62
+ runtime.log('timed out, invoke')
63
+ invoke(invokeInfo)
64
+ }, 0)
65
+ }
66
+
67
+ function invoke(invokeInfo) {
68
+ if (invokeInfo.cmd === 'RELOAD') {
69
+ runtime.log(`get reload request: ${invokeInfo.context}`)
70
+ // 路径中可能包含 . 符号
71
+ var ff = invokeInfo.globalHandler.split('.')
72
+ initHandler(invokeInfo.filePath + ff[0], ff[1])
73
+ runtime.log('handlers reloaded')
74
+ _result = 'reload'
75
+ finish(null, null, false)
76
+ return
77
+ }
78
+
79
+ _result = undefined
80
+ _fault = undefined
81
+
82
+ runtime.report_running()
83
+
84
+ var ev, ctx
85
+ if (invokeInfo.event || invokeInfo.context) {
86
+ try {
87
+ ev = JSON.parse(invokeInfo.event)
88
+ ctx = JSON.parse(invokeInfo.context)
89
+ } catch (err) {
90
+ _fault = `eval event[${invokeInfo.event}] or context [${invokeInfo.context}] failed\n${err}`
91
+ return
92
+ }
93
+ }
94
+
95
+ ctx['environ'].split(';').forEach(e => {
96
+ if (e == '') return
97
+ var kv = e.split('=', 2)
98
+ process.env[kv[0]] = kv[1]
99
+ })
100
+
101
+ runtime.log(`request[${ctx['request_id']}] invoked`)
102
+
103
+ if (!httpHandler && !eventHandler) {
104
+ _fault = initHandlerFault
105
+ return
106
+ }
107
+
108
+ wrapLog(ctx['request_id'])
109
+ if (invokeInfo.cmd === 'HTTP') {
110
+ httpHandler.handle(invokeInfo.sockfd)
111
+ } else if (invokeInfo.cmd === 'EVENT') {
112
+ eventHandler.handle(ev, ctx)
113
+ } else {
114
+ _fault = `recv unknown task type: ${invokeInfo.cmd}`
115
+ runtime.log(`recv unknown task type: ${invokeInfo.cmd}`)
116
+ }
117
+
118
+ runtime.log('process finished')
119
+ }
120
+
121
+ function initHandler(file, func) {
122
+ try {
123
+ var path = require('path')
124
+ var current_path = path.dirname(file)
125
+ process.chdir(current_path)
126
+ runtime.log(`working directory: ${process.cwd()}`)
127
+
128
+ for (var item in require.cache) {
129
+ delete require.cache[item]
130
+ }
131
+ var usermod = require(file)
132
+ httpHandler = new HttpHandler(usermod[func])
133
+ eventHandler = new EventHandler(usermod[func])
134
+ } catch (err) {
135
+ runtime.log(`get user function[${file}:${func}] failed`)
136
+ runtime.log(err.stack)
137
+ initHandlerFault = err.message
138
+ _user_exception = true
139
+ }
140
+ }
141
+
142
+ function finish(err, data, wait) {
143
+ runtime.log('finish')
144
+ runtime.log(wait ? 'wait' : 'not wait')
145
+
146
+ if (_result === undefined) {
147
+ if (err == null) {
148
+ try {
149
+ _result = JSON.stringify(data === undefined ? null : data)
150
+ } catch (err) {
151
+ _result = 'faulted'
152
+ _fault = `stringify response to json failed: ${err.message}`
153
+ return
154
+ }
155
+ } else {
156
+ _result = 'faulted'
157
+ if (err instanceof Error) {
158
+ runtime.console_log(err.stack, true)
159
+ _fault = err.message
160
+ } else {
161
+ var errStr = String(err)
162
+ _fault = `${errStr}(callback err is not instance of Error)`
163
+ }
164
+ }
165
+ }
166
+
167
+ if (wait) {
168
+ return
169
+ }
170
+
171
+ runtime.log(_result)
172
+ process.nextTick(() => {
173
+ if (_result == 'reload') {
174
+ // reload response, do nothing
175
+ } else if (_fault !== undefined) {
176
+ _user_exception = true
177
+ var errType = _user_exception ? 2 : 1
178
+ runtime.report_fail(_fault, 0, errType)
179
+ } else if (_result.length > maxRetMsgLen) {
180
+ runtime.report_fail(maxRetMsgLenExceedError, 0, 1)
181
+ } else {
182
+ runtime.report_done(_result, 0)
183
+ }
184
+ waitForInvoke()
185
+ })
186
+ }
187
+
188
+ class HttpHandler {
189
+ constructor(func) {
190
+ this.realHandler = func
191
+ }
192
+
193
+ handle(fd) {}
194
+ }
195
+
196
+ class EventHandler {
197
+ constructor(func) {
198
+ this.realHandler = func
199
+ }
200
+
201
+ handle(ev, ctx) {
202
+ var called = false
203
+ var wait = true
204
+ var callback = (err, data) => {
205
+ if (called) {
206
+ return
207
+ }
208
+ called = true
209
+ finish(err, data, wait)
210
+ }
211
+
212
+ var ctxx = Object.assign(
213
+ {
214
+ set callbackWaitsForEmptyEventLoop(value) {
215
+ wait = value
216
+ },
217
+ get callbackWaitsForEmptyEventLoop() {
218
+ return wait
219
+ },
220
+ getContext() {
221
+ return ctx
222
+ },
223
+ done: function(err, data) {
224
+ wait = false
225
+ callback(err, data)
226
+ },
227
+ succeed: function(data) {
228
+ ctxx.done(null, data)
229
+ },
230
+ fail: function(err) {
231
+ ctxx.done(err, null)
232
+ }
233
+ },
234
+ ctx
235
+ )
236
+
237
+ try {
238
+ _user_exception = false
239
+ var ret = this.realHandler(ev, ctxx, callback)
240
+ if (
241
+ ret &&
242
+ ret.then !== undefined &&
243
+ typeof ret.then === 'function'
244
+ ) {
245
+ ret.then(ctxx.succeed, ctxx.fail)
246
+ }
247
+ } catch (err) {
248
+ runtime.console_log(err.stack, true)
249
+ _fault = err.stack
250
+ _user_exception = true
251
+ }
252
+ }
253
+ }
254
+
255
+ main()