serverless-offline 8.8.0 → 9.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.
Files changed (233) hide show
  1. package/README.md +12 -11
  2. package/package.json +33 -58
  3. package/src/ServerlessOffline.js +409 -0
  4. package/src/config/commandOptions.js +159 -0
  5. package/src/config/constants.js +22 -0
  6. package/{dist → src}/config/defaultOptions.js +9 -17
  7. package/src/config/index.js +4 -0
  8. package/src/config/supportedRuntimes.js +47 -0
  9. package/src/events/authCanExecuteResource.js +35 -0
  10. package/src/events/authFunctionNameExtractor.js +75 -0
  11. package/src/events/authMatchPolicyResource.js +71 -0
  12. package/src/events/authValidateContext.js +51 -0
  13. package/src/events/http/Endpoint.js +135 -0
  14. package/src/events/http/Http.js +50 -0
  15. package/src/events/http/HttpEventDefinition.js +20 -0
  16. package/src/events/http/HttpServer.js +1242 -0
  17. package/src/events/http/OfflineEndpoint.js +33 -0
  18. package/src/events/http/authJWTSettingsExtractor.js +70 -0
  19. package/src/events/http/createAuthScheme.js +176 -0
  20. package/src/events/http/createJWTAuthScheme.js +106 -0
  21. package/src/events/http/index.js +1 -0
  22. package/src/events/http/javaHelpers.js +102 -0
  23. package/src/events/http/lambda-events/LambdaIntegrationEvent.js +57 -0
  24. package/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js +233 -0
  25. package/src/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +190 -0
  26. package/src/events/http/lambda-events/VelocityContext.js +147 -0
  27. package/src/events/http/lambda-events/index.js +4 -0
  28. package/src/events/http/lambda-events/renderVelocityTemplateObject.js +93 -0
  29. package/{dist → src}/events/http/parseResources.js +73 -78
  30. package/src/events/http/payloadSchemaValidator.js +13 -0
  31. package/{dist → src}/events/http/templates/offline-default.req.vm +0 -0
  32. package/{dist → src}/events/http/templates/offline-default.res.vm +0 -0
  33. package/src/events/schedule/Schedule.js +131 -0
  34. package/src/events/schedule/ScheduleEvent.js +18 -0
  35. package/src/events/schedule/ScheduleEventDefinition.js +21 -0
  36. package/src/events/schedule/index.js +1 -0
  37. package/src/events/websocket/HttpServer.js +69 -0
  38. package/src/events/websocket/WebSocket.js +52 -0
  39. package/src/events/websocket/WebSocketClients.js +462 -0
  40. package/src/events/websocket/WebSocketEventDefinition.js +18 -0
  41. package/src/events/websocket/WebSocketServer.js +73 -0
  42. package/src/events/websocket/http-routes/_catchAll/catchAllRoute.js +16 -0
  43. package/src/events/websocket/http-routes/_catchAll/index.js +1 -0
  44. package/src/events/websocket/http-routes/connections/ConnectionsController.js +28 -0
  45. package/src/events/websocket/http-routes/connections/connectionsRoutes.js +70 -0
  46. package/src/events/websocket/http-routes/connections/index.js +1 -0
  47. package/src/events/websocket/http-routes/index.js +2 -0
  48. package/src/events/websocket/index.js +1 -0
  49. package/src/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +65 -0
  50. package/src/events/websocket/lambda-events/WebSocketConnectEvent.js +68 -0
  51. package/src/events/websocket/lambda-events/WebSocketDisconnectEvent.js +31 -0
  52. package/src/events/websocket/lambda-events/WebSocketEvent.js +29 -0
  53. package/src/events/websocket/lambda-events/WebSocketRequestContext.js +67 -0
  54. package/src/events/websocket/lambda-events/index.js +4 -0
  55. package/src/index.js +12 -0
  56. package/src/lambda/HttpServer.js +108 -0
  57. package/src/lambda/Lambda.js +68 -0
  58. package/src/lambda/LambdaContext.js +33 -0
  59. package/src/lambda/LambdaFunction.js +309 -0
  60. package/src/lambda/LambdaFunctionPool.js +109 -0
  61. package/src/lambda/__tests__/LambdaContext.test.js +30 -0
  62. package/src/lambda/__tests__/LambdaFunction.test.js +196 -0
  63. package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsJSONObject.fixture.js +47 -0
  64. package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsNativeString.fixture.js +46 -0
  65. package/src/lambda/__tests__/fixtures/Lambda/package.json +3 -0
  66. package/src/lambda/__tests__/fixtures/lambdaFunction.fixture.js +145 -0
  67. package/src/lambda/__tests__/fixtures/package.json +3 -0
  68. package/src/lambda/__tests__/routes/invocations/InvocationsController.test.js +42 -0
  69. package/src/lambda/handler-runner/HandlerRunner.js +136 -0
  70. package/src/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +72 -0
  71. package/src/lambda/handler-runner/child-process-runner/childProcessHelper.js +42 -0
  72. package/src/lambda/handler-runner/child-process-runner/index.js +1 -0
  73. package/src/lambda/handler-runner/docker-runner/DockerContainer.js +417 -0
  74. package/src/lambda/handler-runner/docker-runner/DockerImage.js +35 -0
  75. package/src/lambda/handler-runner/docker-runner/DockerRunner.js +63 -0
  76. package/src/lambda/handler-runner/docker-runner/index.js +1 -0
  77. package/src/lambda/handler-runner/go-runner/GoRunner.js +167 -0
  78. package/src/lambda/handler-runner/go-runner/index.js +1 -0
  79. package/src/lambda/handler-runner/in-process-runner/InProcessRunner.js +125 -0
  80. package/src/lambda/handler-runner/in-process-runner/index.js +1 -0
  81. package/src/lambda/handler-runner/index.js +1 -0
  82. package/src/lambda/handler-runner/java-runner/JavaRunner.js +114 -0
  83. package/src/lambda/handler-runner/java-runner/index.js +1 -0
  84. package/src/lambda/handler-runner/python-runner/PythonRunner.js +138 -0
  85. package/src/lambda/handler-runner/python-runner/index.js +1 -0
  86. package/{dist → src}/lambda/handler-runner/python-runner/invoke.py +0 -0
  87. package/src/lambda/handler-runner/ruby-runner/RubyRunner.js +107 -0
  88. package/src/lambda/handler-runner/ruby-runner/index.js +1 -0
  89. package/{dist → src}/lambda/handler-runner/ruby-runner/invoke.rb +0 -0
  90. package/src/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +70 -0
  91. package/src/lambda/handler-runner/worker-thread-runner/index.js +1 -0
  92. package/src/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +29 -0
  93. package/src/lambda/index.js +1 -0
  94. package/src/lambda/routes/index.js +2 -0
  95. package/src/lambda/routes/invocations/InvocationsController.js +102 -0
  96. package/src/lambda/routes/invocations/index.js +1 -0
  97. package/src/lambda/routes/invocations/invocationsRoute.js +77 -0
  98. package/src/lambda/routes/invoke-async/InvokeAsyncController.js +20 -0
  99. package/src/lambda/routes/invoke-async/index.js +1 -0
  100. package/src/lambda/routes/invoke-async/invokeAsyncRoute.js +33 -0
  101. package/src/utils/__tests__/createUniqueId.test.js +18 -0
  102. package/src/utils/__tests__/formatToClfTime.test.js +14 -0
  103. package/src/utils/__tests__/generateHapiPath.test.js +46 -0
  104. package/src/utils/__tests__/lowerCaseKeys.test.js +30 -0
  105. package/src/utils/__tests__/parseHeaders.test.js +13 -0
  106. package/src/utils/__tests__/parseMultiValueHeaders.test.js +24 -0
  107. package/src/utils/__tests__/parseMultiValueQueryStringParameters.test.js +159 -0
  108. package/src/utils/__tests__/parseQueryStringParameters.test.js +15 -0
  109. package/src/utils/__tests__/splitHandlerPathAndName.test.js +54 -0
  110. package/src/utils/__tests__/unflatten.test.js +32 -0
  111. package/src/utils/checkDockerDaemon.js +19 -0
  112. package/src/utils/checkGoVersion.js +16 -0
  113. package/src/utils/createApiKey.js +5 -0
  114. package/src/utils/createUniqueId.js +5 -0
  115. package/src/utils/detectExecutable.js +11 -0
  116. package/{dist → src}/utils/formatToClfTime.js +6 -14
  117. package/src/utils/generateHapiPath.js +26 -0
  118. package/src/utils/getHttpApiCorsConfig.js +28 -0
  119. package/src/utils/index.js +42 -0
  120. package/src/utils/jsonPath.js +13 -0
  121. package/src/utils/logRoutes.js +64 -0
  122. package/src/utils/lowerCaseKeys.js +6 -0
  123. package/src/utils/parseHeaders.js +14 -0
  124. package/src/utils/parseMultiValueHeaders.js +27 -0
  125. package/src/utils/parseMultiValueQueryStringParameters.js +31 -0
  126. package/src/utils/parseQueryStringParameters.js +15 -0
  127. package/src/utils/splitHandlerPathAndName.js +31 -0
  128. package/src/utils/unflatten.js +11 -0
  129. package/dist/ServerlessOffline.js +0 -514
  130. package/dist/config/commandOptions.js +0 -149
  131. package/dist/config/constants.js +0 -30
  132. package/dist/config/index.js +0 -55
  133. package/dist/config/supportedRuntimes.js +0 -40
  134. package/dist/debugLog.js +0 -12
  135. package/dist/events/authCanExecuteResource.js +0 -35
  136. package/dist/events/authFunctionNameExtractor.js +0 -87
  137. package/dist/events/authMatchPolicyResource.js +0 -62
  138. package/dist/events/authValidateContext.js +0 -53
  139. package/dist/events/http/Endpoint.js +0 -173
  140. package/dist/events/http/Http.js +0 -77
  141. package/dist/events/http/HttpEventDefinition.js +0 -36
  142. package/dist/events/http/HttpServer.js +0 -1370
  143. package/dist/events/http/OfflineEndpoint.js +0 -38
  144. package/dist/events/http/authJWTSettingsExtractor.js +0 -76
  145. package/dist/events/http/createAuthScheme.js +0 -184
  146. package/dist/events/http/createJWTAuthScheme.js +0 -159
  147. package/dist/events/http/index.js +0 -15
  148. package/dist/events/http/javaHelpers.js +0 -99
  149. package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +0 -87
  150. package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +0 -246
  151. package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +0 -225
  152. package/dist/events/http/lambda-events/VelocityContext.js +0 -170
  153. package/dist/events/http/lambda-events/index.js +0 -39
  154. package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +0 -111
  155. package/dist/events/http/payloadSchemaValidator.js +0 -13
  156. package/dist/events/schedule/Schedule.js +0 -183
  157. package/dist/events/schedule/ScheduleEvent.js +0 -27
  158. package/dist/events/schedule/ScheduleEventDefinition.js +0 -36
  159. package/dist/events/schedule/index.js +0 -15
  160. package/dist/events/websocket/HttpServer.js +0 -114
  161. package/dist/events/websocket/WebSocket.js +0 -78
  162. package/dist/events/websocket/WebSocketClients.js +0 -577
  163. package/dist/events/websocket/WebSocketEventDefinition.js +0 -32
  164. package/dist/events/websocket/WebSocketServer.js +0 -139
  165. package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +0 -33
  166. package/dist/events/websocket/http-routes/_catchAll/index.js +0 -15
  167. package/dist/events/websocket/http-routes/connections/ConnectionsController.js +0 -45
  168. package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +0 -95
  169. package/dist/events/websocket/http-routes/connections/index.js +0 -15
  170. package/dist/events/websocket/http-routes/index.js +0 -23
  171. package/dist/events/websocket/index.js +0 -15
  172. package/dist/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +0 -99
  173. package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +0 -101
  174. package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +0 -47
  175. package/dist/events/websocket/lambda-events/WebSocketEvent.js +0 -54
  176. package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +0 -98
  177. package/dist/events/websocket/lambda-events/index.js +0 -39
  178. package/dist/index.js +0 -15
  179. package/dist/lambda/HttpServer.js +0 -124
  180. package/dist/lambda/Lambda.js +0 -117
  181. package/dist/lambda/LambdaContext.js +0 -53
  182. package/dist/lambda/LambdaFunction.js +0 -390
  183. package/dist/lambda/LambdaFunctionPool.js +0 -127
  184. package/dist/lambda/handler-runner/HandlerRunner.js +0 -195
  185. package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +0 -124
  186. package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +0 -49
  187. package/dist/lambda/handler-runner/child-process-runner/index.js +0 -15
  188. package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +0 -515
  189. package/dist/lambda/handler-runner/docker-runner/DockerImage.js +0 -67
  190. package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +0 -74
  191. package/dist/lambda/handler-runner/docker-runner/index.js +0 -15
  192. package/dist/lambda/handler-runner/go-runner/GoRunner.js +0 -230
  193. package/dist/lambda/handler-runner/go-runner/index.js +0 -15
  194. package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +0 -228
  195. package/dist/lambda/handler-runner/in-process-runner/index.js +0 -15
  196. package/dist/lambda/handler-runner/index.js +0 -15
  197. package/dist/lambda/handler-runner/java-runner/JavaRunner.js +0 -153
  198. package/dist/lambda/handler-runner/java-runner/index.js +0 -15
  199. package/dist/lambda/handler-runner/python-runner/PythonRunner.js +0 -185
  200. package/dist/lambda/handler-runner/python-runner/index.js +0 -15
  201. package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +0 -147
  202. package/dist/lambda/handler-runner/ruby-runner/index.js +0 -15
  203. package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +0 -92
  204. package/dist/lambda/handler-runner/worker-thread-runner/index.js +0 -15
  205. package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +0 -31
  206. package/dist/lambda/index.js +0 -15
  207. package/dist/lambda/routes/index.js +0 -23
  208. package/dist/lambda/routes/invocations/InvocationsController.js +0 -142
  209. package/dist/lambda/routes/invocations/index.js +0 -15
  210. package/dist/lambda/routes/invocations/invocationsRoute.js +0 -90
  211. package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +0 -38
  212. package/dist/lambda/routes/invoke-async/index.js +0 -15
  213. package/dist/lambda/routes/invoke-async/invokeAsyncRoute.js +0 -43
  214. package/dist/main.js +0 -11
  215. package/dist/serverlessLog.js +0 -91
  216. package/dist/utils/checkDockerDaemon.js +0 -27
  217. package/dist/utils/checkGoVersion.js +0 -27
  218. package/dist/utils/createApiKey.js +0 -12
  219. package/dist/utils/createUniqueId.js +0 -14
  220. package/dist/utils/detectExecutable.js +0 -21
  221. package/dist/utils/generateHapiPath.js +0 -28
  222. package/dist/utils/getHttpApiCorsConfig.js +0 -40
  223. package/dist/utils/index.js +0 -165
  224. package/dist/utils/jsonPath.js +0 -21
  225. package/dist/utils/lowerCaseKeys.js +0 -14
  226. package/dist/utils/parseHeaders.js +0 -23
  227. package/dist/utils/parseMultiValueHeaders.js +0 -36
  228. package/dist/utils/parseMultiValueQueryStringParameters.js +0 -40
  229. package/dist/utils/parseQueryStringParameters.js +0 -26
  230. package/dist/utils/resolveJoins.js +0 -36
  231. package/dist/utils/satisfiesVersionRange.js +0 -20
  232. package/dist/utils/splitHandlerPathAndName.js +0 -37
  233. package/dist/utils/unflatten.js +0 -18
@@ -1,390 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _path = require("path");
9
-
10
- var _fsExtra = require("fs-extra");
11
-
12
- var _perf_hooks = require("perf_hooks");
13
-
14
- var _jszip = _interopRequireDefault(require("jszip"));
15
-
16
- var _index = _interopRequireDefault(require("./handler-runner/index.js"));
17
-
18
- var _LambdaContext = _interopRequireDefault(require("./LambdaContext.js"));
19
-
20
- var _serverlessLog = _interopRequireDefault(require("../serverlessLog.js"));
21
-
22
- var _resolveJoins = _interopRequireDefault(require("../utils/resolveJoins.js"));
23
-
24
- var _index2 = require("../config/index.js");
25
-
26
- var _index3 = require("../utils/index.js");
27
-
28
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
-
30
- function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
31
-
32
- var id = 0;
33
-
34
- function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
35
-
36
- const {
37
- keys
38
- } = Object;
39
- const {
40
- ceil
41
- } = Math;
42
-
43
- var _artifact = /*#__PURE__*/_classPrivateFieldLooseKey("artifact");
44
-
45
- var _clientContext = /*#__PURE__*/_classPrivateFieldLooseKey("clientContext");
46
-
47
- var _codeDir = /*#__PURE__*/_classPrivateFieldLooseKey("codeDir");
48
-
49
- var _event = /*#__PURE__*/_classPrivateFieldLooseKey("event");
50
-
51
- var _executionTimeEnded = /*#__PURE__*/_classPrivateFieldLooseKey("executionTimeEnded");
52
-
53
- var _executionTimeStarted = /*#__PURE__*/_classPrivateFieldLooseKey("executionTimeStarted");
54
-
55
- var _functionKey = /*#__PURE__*/_classPrivateFieldLooseKey("functionKey");
56
-
57
- var _functionName = /*#__PURE__*/_classPrivateFieldLooseKey("functionName");
58
-
59
- var _handlerRunner = /*#__PURE__*/_classPrivateFieldLooseKey("handlerRunner");
60
-
61
- var _idleTimeStarted = /*#__PURE__*/_classPrivateFieldLooseKey("idleTimeStarted");
62
-
63
- var _initialized = /*#__PURE__*/_classPrivateFieldLooseKey("initialized");
64
-
65
- var _lambdaContext = /*#__PURE__*/_classPrivateFieldLooseKey("lambdaContext");
66
-
67
- var _lambdaDir = /*#__PURE__*/_classPrivateFieldLooseKey("lambdaDir");
68
-
69
- var _memorySize = /*#__PURE__*/_classPrivateFieldLooseKey("memorySize");
70
-
71
- var _region = /*#__PURE__*/_classPrivateFieldLooseKey("region");
72
-
73
- var _runtime = /*#__PURE__*/_classPrivateFieldLooseKey("runtime");
74
-
75
- var _timeout = /*#__PURE__*/_classPrivateFieldLooseKey("timeout");
76
-
77
- class LambdaFunction {
78
- // can be 'BUSY' or 'IDLE'
79
- constructor(functionKey, functionDefinition, serverless, options, v3Utils) {
80
- var _functionDefinition$p;
81
-
82
- Object.defineProperty(this, _artifact, {
83
- writable: true,
84
- value: null
85
- });
86
- Object.defineProperty(this, _clientContext, {
87
- writable: true,
88
- value: null
89
- });
90
- Object.defineProperty(this, _codeDir, {
91
- writable: true,
92
- value: null
93
- });
94
- Object.defineProperty(this, _event, {
95
- writable: true,
96
- value: null
97
- });
98
- Object.defineProperty(this, _executionTimeEnded, {
99
- writable: true,
100
- value: null
101
- });
102
- Object.defineProperty(this, _executionTimeStarted, {
103
- writable: true,
104
- value: null
105
- });
106
- Object.defineProperty(this, _functionKey, {
107
- writable: true,
108
- value: null
109
- });
110
- Object.defineProperty(this, _functionName, {
111
- writable: true,
112
- value: null
113
- });
114
- Object.defineProperty(this, _handlerRunner, {
115
- writable: true,
116
- value: null
117
- });
118
- Object.defineProperty(this, _idleTimeStarted, {
119
- writable: true,
120
- value: null
121
- });
122
- Object.defineProperty(this, _initialized, {
123
- writable: true,
124
- value: false
125
- });
126
- Object.defineProperty(this, _lambdaContext, {
127
- writable: true,
128
- value: null
129
- });
130
- Object.defineProperty(this, _lambdaDir, {
131
- writable: true,
132
- value: null
133
- });
134
- Object.defineProperty(this, _memorySize, {
135
- writable: true,
136
- value: null
137
- });
138
- Object.defineProperty(this, _region, {
139
- writable: true,
140
- value: null
141
- });
142
- Object.defineProperty(this, _runtime, {
143
- writable: true,
144
- value: null
145
- });
146
- Object.defineProperty(this, _timeout, {
147
- writable: true,
148
- value: null
149
- });
150
- this.status = 'IDLE';
151
- const {
152
- service,
153
- config: {
154
- serverlessPath,
155
- servicePath
156
- },
157
- service: {
158
- provider,
159
- package: servicePackage = {}
160
- }
161
- } = serverless;
162
-
163
- if (v3Utils) {
164
- this.log = v3Utils.log;
165
- this.progress = v3Utils.progress;
166
- this.writeText = v3Utils.writeText;
167
- this.v3Utils = v3Utils;
168
- } // TEMP options.location, for compatibility with serverless-webpack:
169
- // https://github.com/dherault/serverless-offline/issues/787
170
- // TODO FIXME look into better way to work with serverless-webpack
171
-
172
-
173
- const _servicePath = (0, _path.resolve)(servicePath, options.location || '');
174
-
175
- const {
176
- handler,
177
- name,
178
- package: functionPackage = {}
179
- } = functionDefinition;
180
- const [handlerPath, handlerName] = (0, _index3.splitHandlerPathAndName)(handler);
181
- const memorySize = functionDefinition.memorySize || provider.memorySize || _index2.DEFAULT_LAMBDA_MEMORY_SIZE;
182
- const runtime = functionDefinition.runtime || provider.runtime || _index2.DEFAULT_LAMBDA_RUNTIME;
183
- const timeout = (functionDefinition.timeout || provider.timeout || _index2.DEFAULT_LAMBDA_TIMEOUT) * 1000; // this._executionTimeout = null
184
-
185
- _classPrivateFieldLooseBase(this, _functionKey)[_functionKey] = functionKey;
186
- _classPrivateFieldLooseBase(this, _functionName)[_functionName] = name;
187
- _classPrivateFieldLooseBase(this, _memorySize)[_memorySize] = memorySize;
188
- _classPrivateFieldLooseBase(this, _region)[_region] = provider.region;
189
- _classPrivateFieldLooseBase(this, _runtime)[_runtime] = runtime;
190
- _classPrivateFieldLooseBase(this, _timeout)[_timeout] = timeout;
191
-
192
- this._verifySupportedRuntime();
193
-
194
- const env = this._getEnv((0, _resolveJoins.default)(provider.environment), functionDefinition.environment, handler);
195
-
196
- _classPrivateFieldLooseBase(this, _artifact)[_artifact] = (_functionDefinition$p = functionDefinition.package) === null || _functionDefinition$p === void 0 ? void 0 : _functionDefinition$p.artifact;
197
-
198
- if (!_classPrivateFieldLooseBase(this, _artifact)[_artifact]) {
199
- var _service$package;
200
-
201
- _classPrivateFieldLooseBase(this, _artifact)[_artifact] = (_service$package = service.package) === null || _service$package === void 0 ? void 0 : _service$package.artifact;
202
- }
203
-
204
- if (_classPrivateFieldLooseBase(this, _artifact)[_artifact]) {
205
- // lambda directory contains code and layers
206
- _classPrivateFieldLooseBase(this, _lambdaDir)[_lambdaDir] = (0, _path.join)(_servicePath, '.serverless-offline', 'services', service.service, functionKey, (0, _index3.createUniqueId)());
207
- }
208
-
209
- _classPrivateFieldLooseBase(this, _codeDir)[_codeDir] = _classPrivateFieldLooseBase(this, _lambdaDir)[_lambdaDir] ? (0, _path.resolve)(_classPrivateFieldLooseBase(this, _lambdaDir)[_lambdaDir], 'code') : _servicePath; // TEMP
210
-
211
- const funOptions = {
212
- functionKey,
213
- handler,
214
- handlerName,
215
- codeDir: _classPrivateFieldLooseBase(this, _codeDir)[_codeDir],
216
- handlerPath: (0, _path.resolve)(_classPrivateFieldLooseBase(this, _codeDir)[_codeDir], handlerPath),
217
- runtime,
218
- serverlessPath,
219
- servicePath: _servicePath,
220
- timeout,
221
- layers: functionDefinition.layers || [],
222
- provider,
223
- functionName: name,
224
- servicePackage: servicePackage.artifact ? (0, _path.resolve)(_servicePath, servicePackage.artifact) : undefined,
225
- functionPackage: functionPackage.artifact ? (0, _path.resolve)(_servicePath, functionPackage.artifact) : undefined
226
- };
227
- _classPrivateFieldLooseBase(this, _handlerRunner)[_handlerRunner] = new _index.default(funOptions, options, env, v3Utils);
228
- _classPrivateFieldLooseBase(this, _lambdaContext)[_lambdaContext] = new _LambdaContext.default(name, memorySize);
229
- }
230
-
231
- _startExecutionTimer() {
232
- _classPrivateFieldLooseBase(this, _executionTimeStarted)[_executionTimeStarted] = _perf_hooks.performance.now(); // this._executionTimeout = this.#executionTimeStarted + this.#timeout * 1000
233
- }
234
-
235
- _stopExecutionTimer() {
236
- _classPrivateFieldLooseBase(this, _executionTimeEnded)[_executionTimeEnded] = _perf_hooks.performance.now();
237
- }
238
-
239
- _startIdleTimer() {
240
- _classPrivateFieldLooseBase(this, _idleTimeStarted)[_idleTimeStarted] = _perf_hooks.performance.now();
241
- }
242
-
243
- _verifySupportedRuntime() {
244
- // print message but keep working (don't error out or exit process)
245
- if (!_index2.supportedRuntimes.has(_classPrivateFieldLooseBase(this, _runtime)[_runtime])) {
246
- // this.printBlankLine(); // TODO
247
- if (this.log) {
248
- this.log.warning();
249
- this.log.warning(`Warning: found unsupported runtime '${_classPrivateFieldLooseBase(this, _runtime)[_runtime]}' for function '${_classPrivateFieldLooseBase(this, _functionKey)[_functionKey]}'`);
250
- } else {
251
- console.log('');
252
- (0, _serverlessLog.default)(`Warning: found unsupported runtime '${_classPrivateFieldLooseBase(this, _runtime)[_runtime]}' for function '${_classPrivateFieldLooseBase(this, _functionKey)[_functionKey]}'`);
253
- }
254
- }
255
- } // based on:
256
- // https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/index.js#L108
257
-
258
-
259
- _getAwsEnvVars() {
260
- return {
261
- AWS_DEFAULT_REGION: _classPrivateFieldLooseBase(this, _region)[_region],
262
- AWS_LAMBDA_FUNCTION_MEMORY_SIZE: _classPrivateFieldLooseBase(this, _memorySize)[_memorySize],
263
- AWS_LAMBDA_FUNCTION_NAME: _classPrivateFieldLooseBase(this, _functionName)[_functionName],
264
- AWS_LAMBDA_FUNCTION_VERSION: '$LATEST',
265
- // https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/lib/naming.js#L123
266
- AWS_LAMBDA_LOG_GROUP_NAME: `/aws/lambda/${_classPrivateFieldLooseBase(this, _functionName)[_functionName]}`,
267
- AWS_LAMBDA_LOG_STREAM_NAME: '2016/12/02/[$LATEST]f77ff5e4026c45bda9a9ebcec6bc9cad',
268
- AWS_REGION: _classPrivateFieldLooseBase(this, _region)[_region],
269
- LAMBDA_RUNTIME_DIR: '/var/runtime',
270
- LAMBDA_TASK_ROOT: '/var/task',
271
- LANG: 'en_US.UTF-8',
272
- LD_LIBRARY_PATH: '/usr/local/lib64/node-v4.3.x/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib',
273
- NODE_PATH: '/var/runtime:/var/task:/var/runtime/node_modules'
274
- };
275
- }
276
-
277
- _getEnv(providerEnv, functionDefinitionEnv, handler) {
278
- return { ...this._getAwsEnvVars(),
279
- ...providerEnv,
280
- ...functionDefinitionEnv,
281
- _HANDLER: handler,
282
- // TODO is this available in AWS?
283
- IS_OFFLINE: true
284
- };
285
- }
286
-
287
- setClientContext(clientContext) {
288
- _classPrivateFieldLooseBase(this, _clientContext)[_clientContext] = clientContext;
289
- }
290
-
291
- setEvent(event) {
292
- _classPrivateFieldLooseBase(this, _event)[_event] = event;
293
- } // () => Promise<void>
294
-
295
-
296
- async cleanup() {
297
- // TODO console.log('lambda cleanup')
298
- await _classPrivateFieldLooseBase(this, _handlerRunner)[_handlerRunner].cleanup();
299
-
300
- if (_classPrivateFieldLooseBase(this, _lambdaDir)[_lambdaDir]) {
301
- await (0, _fsExtra.remove)(_classPrivateFieldLooseBase(this, _lambdaDir)[_lambdaDir]);
302
- }
303
- }
304
-
305
- _executionTimeInMillis() {
306
- return _classPrivateFieldLooseBase(this, _executionTimeEnded)[_executionTimeEnded] - _classPrivateFieldLooseBase(this, _executionTimeStarted)[_executionTimeStarted];
307
- } // round up to the nearest ms
308
-
309
-
310
- _billedExecutionTimeInMillis() {
311
- return ceil(_classPrivateFieldLooseBase(this, _executionTimeEnded)[_executionTimeEnded] - _classPrivateFieldLooseBase(this, _executionTimeStarted)[_executionTimeStarted]);
312
- } // extractArtifact, loosely based on:
313
- // https://github.com/serverless/serverless/blob/v1.57.0/lib/plugins/aws/invokeLocal/index.js#L312
314
-
315
-
316
- async _extractArtifact() {
317
- if (!_classPrivateFieldLooseBase(this, _artifact)[_artifact]) {
318
- return null;
319
- }
320
-
321
- (0, _fsExtra.emptyDir)(_classPrivateFieldLooseBase(this, _codeDir)[_codeDir]);
322
- const data = await (0, _fsExtra.readFile)(_classPrivateFieldLooseBase(this, _artifact)[_artifact]);
323
- const zip = await _jszip.default.loadAsync(data);
324
- return Promise.all(keys(zip.files).map(async filename => {
325
- const fileData = await zip.files[filename].async('nodebuffer');
326
-
327
- if (filename.endsWith('/')) {
328
- return Promise.resolve();
329
- }
330
-
331
- await (0, _fsExtra.ensureDir)((0, _path.join)(_classPrivateFieldLooseBase(this, _codeDir)[_codeDir], (0, _path.dirname)(filename)));
332
- return (0, _fsExtra.writeFile)((0, _path.join)(_classPrivateFieldLooseBase(this, _codeDir)[_codeDir], filename), fileData, {
333
- mode: zip.files[filename].unixPermissions
334
- });
335
- }));
336
- }
337
-
338
- async _initialize() {
339
- await this._extractArtifact();
340
- _classPrivateFieldLooseBase(this, _initialized)[_initialized] = true;
341
- }
342
-
343
- get idleTimeInMinutes() {
344
- return (_perf_hooks.performance.now() - _classPrivateFieldLooseBase(this, _idleTimeStarted)[_idleTimeStarted]) / 1000 / 60;
345
- }
346
-
347
- get functionName() {
348
- return _classPrivateFieldLooseBase(this, _functionName)[_functionName];
349
- }
350
-
351
- async runHandler() {
352
- this.status = 'BUSY';
353
-
354
- if (!_classPrivateFieldLooseBase(this, _initialized)[_initialized]) {
355
- await this._initialize();
356
- }
357
-
358
- const requestId = (0, _index3.createUniqueId)();
359
-
360
- _classPrivateFieldLooseBase(this, _lambdaContext)[_lambdaContext].setRequestId(requestId);
361
-
362
- _classPrivateFieldLooseBase(this, _lambdaContext)[_lambdaContext].setClientContext(_classPrivateFieldLooseBase(this, _clientContext)[_clientContext]);
363
-
364
- const context = _classPrivateFieldLooseBase(this, _lambdaContext)[_lambdaContext].create();
365
-
366
- this._startExecutionTimer();
367
-
368
- const result = await _classPrivateFieldLooseBase(this, _handlerRunner)[_handlerRunner].run(_classPrivateFieldLooseBase(this, _event)[_event], context);
369
-
370
- this._stopExecutionTimer(); // TEMP TODO FIXME find better solution
371
-
372
-
373
- if (!_classPrivateFieldLooseBase(this, _handlerRunner)[_handlerRunner].isDockerRunner()) {
374
- if (this.log) {
375
- this.log.notice(`(λ: ${_classPrivateFieldLooseBase(this, _functionKey)[_functionKey]}) RequestId: ${requestId} Duration: ${this._executionTimeInMillis().toFixed(2)} ms Billed Duration: ${this._billedExecutionTimeInMillis()} ms`);
376
- } else {
377
- (0, _serverlessLog.default)(`(λ: ${_classPrivateFieldLooseBase(this, _functionKey)[_functionKey]}) RequestId: ${requestId} Duration: ${this._executionTimeInMillis().toFixed(2)} ms Billed Duration: ${this._billedExecutionTimeInMillis()} ms`);
378
- }
379
- }
380
-
381
- this.status = 'IDLE';
382
-
383
- this._startIdleTimer();
384
-
385
- return result;
386
- }
387
-
388
- }
389
-
390
- exports.default = LambdaFunction;
@@ -1,127 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _LambdaFunction = _interopRequireDefault(require("./LambdaFunction.js"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
13
-
14
- var id = 0;
15
-
16
- function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
17
-
18
- var _options = /*#__PURE__*/_classPrivateFieldLooseKey("options");
19
-
20
- var _pool = /*#__PURE__*/_classPrivateFieldLooseKey("pool");
21
-
22
- var _serverless = /*#__PURE__*/_classPrivateFieldLooseKey("serverless");
23
-
24
- var _timerRef = /*#__PURE__*/_classPrivateFieldLooseKey("timerRef");
25
-
26
- class LambdaFunctionPool {
27
- constructor(serverless, options, v3Utils) {
28
- Object.defineProperty(this, _options, {
29
- writable: true,
30
- value: null
31
- });
32
- Object.defineProperty(this, _pool, {
33
- writable: true,
34
- value: new Map()
35
- });
36
- Object.defineProperty(this, _serverless, {
37
- writable: true,
38
- value: null
39
- });
40
- Object.defineProperty(this, _timerRef, {
41
- writable: true,
42
- value: null
43
- });
44
- _classPrivateFieldLooseBase(this, _options)[_options] = options;
45
- _classPrivateFieldLooseBase(this, _serverless)[_serverless] = serverless;
46
- this.v3Utils = v3Utils; // start cleaner
47
-
48
- this._startCleanTimer();
49
- }
50
-
51
- _startCleanTimer() {
52
- // NOTE: don't use setInterval, as it would schedule always a new run,
53
- // regardless of function processing time and e.g. user action (debugging)
54
- _classPrivateFieldLooseBase(this, _timerRef)[_timerRef] = setTimeout(() => {
55
- // console.log('run cleanup')
56
- _classPrivateFieldLooseBase(this, _pool)[_pool].forEach(lambdaFunctions => {
57
- lambdaFunctions.forEach(lambdaFunction => {
58
- const {
59
- idleTimeInMinutes,
60
- status
61
- } = lambdaFunction; // console.log(idleTimeInMinutes, status)
62
-
63
- if (status === 'IDLE' && idleTimeInMinutes >= _classPrivateFieldLooseBase(this, _options)[_options].functionCleanupIdleTimeSeconds / 60) {
64
- // console.log(`removed Lambda Function ${lambdaFunction.functionName}`)
65
- lambdaFunction.cleanup();
66
- lambdaFunctions.delete(lambdaFunction);
67
- }
68
- });
69
- }); // schedule new timer
70
-
71
-
72
- this._startCleanTimer();
73
- }, _classPrivateFieldLooseBase(this, _options)[_options].functionCleanupIdleTimeSeconds * 1000 / 2);
74
- }
75
-
76
- _cleanupPool() {
77
- const wait = [];
78
-
79
- _classPrivateFieldLooseBase(this, _pool)[_pool].forEach(lambdaFunctions => {
80
- lambdaFunctions.forEach(lambdaFunction => {
81
- // collect promises
82
- wait.push(lambdaFunction.cleanup());
83
- lambdaFunctions.delete(lambdaFunction);
84
- });
85
- });
86
-
87
- return Promise.all(wait);
88
- } // TODO make sure to call this
89
-
90
-
91
- async cleanup() {
92
- clearTimeout(_classPrivateFieldLooseBase(this, _timerRef)[_timerRef]);
93
- return this._cleanupPool();
94
- }
95
-
96
- get(functionKey, functionDefinition) {
97
- const lambdaFunctions = _classPrivateFieldLooseBase(this, _pool)[_pool].get(functionKey);
98
-
99
- let lambdaFunction; // we don't have any instances
100
-
101
- if (lambdaFunctions == null) {
102
- lambdaFunction = new _LambdaFunction.default(functionKey, functionDefinition, _classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options], this.v3Utils);
103
-
104
- _classPrivateFieldLooseBase(this, _pool)[_pool].set(functionKey, new Set([lambdaFunction]));
105
-
106
- return lambdaFunction;
107
- } // console.log(`${lambdaFunctions.size} lambdaFunctions`)
108
- // find any IDLE ones
109
-
110
-
111
- lambdaFunction = Array.from(lambdaFunctions).find(({
112
- status
113
- }) => status === 'IDLE'); // we don't have any IDLE instances
114
-
115
- if (lambdaFunction == null) {
116
- lambdaFunction = new _LambdaFunction.default(functionKey, functionDefinition, _classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options], this.v3Utils);
117
- lambdaFunctions.add(lambdaFunction); // console.log(`${lambdaFunctions.size} lambdaFunctions`)
118
-
119
- return lambdaFunction;
120
- }
121
-
122
- return lambdaFunction;
123
- }
124
-
125
- }
126
-
127
- exports.default = LambdaFunctionPool;