serverless-offline 8.8.1 → 9.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 (235) hide show
  1. package/README.md +3 -3
  2. package/package.json +33 -57
  3. package/src/ServerlessOffline.js +412 -0
  4. package/src/config/commandOptions.js +155 -0
  5. package/src/config/constants.js +22 -0
  6. package/{dist → src}/config/defaultOptions.js +8 -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 +1277 -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 +308 -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 +166 -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/resolveJoins.js +29 -0
  128. package/src/utils/splitHandlerPathAndName.js +31 -0
  129. package/src/utils/unflatten.js +11 -0
  130. package/CHANGELOG.md +0 -78
  131. package/dist/ServerlessOffline.js +0 -508
  132. package/dist/config/commandOptions.js +0 -149
  133. package/dist/config/constants.js +0 -30
  134. package/dist/config/index.js +0 -55
  135. package/dist/config/supportedRuntimes.js +0 -40
  136. package/dist/debugLog.js +0 -12
  137. package/dist/events/authCanExecuteResource.js +0 -35
  138. package/dist/events/authFunctionNameExtractor.js +0 -87
  139. package/dist/events/authMatchPolicyResource.js +0 -62
  140. package/dist/events/authValidateContext.js +0 -53
  141. package/dist/events/http/Endpoint.js +0 -173
  142. package/dist/events/http/Http.js +0 -77
  143. package/dist/events/http/HttpEventDefinition.js +0 -36
  144. package/dist/events/http/HttpServer.js +0 -1370
  145. package/dist/events/http/OfflineEndpoint.js +0 -38
  146. package/dist/events/http/authJWTSettingsExtractor.js +0 -76
  147. package/dist/events/http/createAuthScheme.js +0 -184
  148. package/dist/events/http/createJWTAuthScheme.js +0 -159
  149. package/dist/events/http/index.js +0 -15
  150. package/dist/events/http/javaHelpers.js +0 -99
  151. package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +0 -87
  152. package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +0 -246
  153. package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +0 -225
  154. package/dist/events/http/lambda-events/VelocityContext.js +0 -170
  155. package/dist/events/http/lambda-events/index.js +0 -39
  156. package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +0 -111
  157. package/dist/events/http/payloadSchemaValidator.js +0 -13
  158. package/dist/events/schedule/Schedule.js +0 -183
  159. package/dist/events/schedule/ScheduleEvent.js +0 -27
  160. package/dist/events/schedule/ScheduleEventDefinition.js +0 -36
  161. package/dist/events/schedule/index.js +0 -15
  162. package/dist/events/websocket/HttpServer.js +0 -114
  163. package/dist/events/websocket/WebSocket.js +0 -78
  164. package/dist/events/websocket/WebSocketClients.js +0 -577
  165. package/dist/events/websocket/WebSocketEventDefinition.js +0 -32
  166. package/dist/events/websocket/WebSocketServer.js +0 -139
  167. package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +0 -33
  168. package/dist/events/websocket/http-routes/_catchAll/index.js +0 -15
  169. package/dist/events/websocket/http-routes/connections/ConnectionsController.js +0 -45
  170. package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +0 -95
  171. package/dist/events/websocket/http-routes/connections/index.js +0 -15
  172. package/dist/events/websocket/http-routes/index.js +0 -23
  173. package/dist/events/websocket/index.js +0 -15
  174. package/dist/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +0 -99
  175. package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +0 -101
  176. package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +0 -47
  177. package/dist/events/websocket/lambda-events/WebSocketEvent.js +0 -54
  178. package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +0 -98
  179. package/dist/events/websocket/lambda-events/index.js +0 -39
  180. package/dist/index.js +0 -15
  181. package/dist/lambda/HttpServer.js +0 -124
  182. package/dist/lambda/Lambda.js +0 -117
  183. package/dist/lambda/LambdaContext.js +0 -53
  184. package/dist/lambda/LambdaFunction.js +0 -390
  185. package/dist/lambda/LambdaFunctionPool.js +0 -127
  186. package/dist/lambda/handler-runner/HandlerRunner.js +0 -195
  187. package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +0 -124
  188. package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +0 -49
  189. package/dist/lambda/handler-runner/child-process-runner/index.js +0 -15
  190. package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +0 -515
  191. package/dist/lambda/handler-runner/docker-runner/DockerImage.js +0 -67
  192. package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +0 -74
  193. package/dist/lambda/handler-runner/docker-runner/index.js +0 -15
  194. package/dist/lambda/handler-runner/go-runner/GoRunner.js +0 -230
  195. package/dist/lambda/handler-runner/go-runner/index.js +0 -15
  196. package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +0 -228
  197. package/dist/lambda/handler-runner/in-process-runner/index.js +0 -15
  198. package/dist/lambda/handler-runner/index.js +0 -15
  199. package/dist/lambda/handler-runner/java-runner/JavaRunner.js +0 -153
  200. package/dist/lambda/handler-runner/java-runner/index.js +0 -15
  201. package/dist/lambda/handler-runner/python-runner/PythonRunner.js +0 -185
  202. package/dist/lambda/handler-runner/python-runner/index.js +0 -15
  203. package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +0 -147
  204. package/dist/lambda/handler-runner/ruby-runner/index.js +0 -15
  205. package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +0 -92
  206. package/dist/lambda/handler-runner/worker-thread-runner/index.js +0 -15
  207. package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +0 -31
  208. package/dist/lambda/index.js +0 -15
  209. package/dist/lambda/routes/index.js +0 -23
  210. package/dist/lambda/routes/invocations/InvocationsController.js +0 -142
  211. package/dist/lambda/routes/invocations/index.js +0 -15
  212. package/dist/lambda/routes/invocations/invocationsRoute.js +0 -90
  213. package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +0 -38
  214. package/dist/lambda/routes/invoke-async/index.js +0 -15
  215. package/dist/lambda/routes/invoke-async/invokeAsyncRoute.js +0 -43
  216. package/dist/main.js +0 -11
  217. package/dist/serverlessLog.js +0 -91
  218. package/dist/utils/checkDockerDaemon.js +0 -27
  219. package/dist/utils/checkGoVersion.js +0 -27
  220. package/dist/utils/createApiKey.js +0 -12
  221. package/dist/utils/createUniqueId.js +0 -14
  222. package/dist/utils/detectExecutable.js +0 -21
  223. package/dist/utils/generateHapiPath.js +0 -28
  224. package/dist/utils/getHttpApiCorsConfig.js +0 -40
  225. package/dist/utils/index.js +0 -165
  226. package/dist/utils/jsonPath.js +0 -21
  227. package/dist/utils/lowerCaseKeys.js +0 -14
  228. package/dist/utils/parseHeaders.js +0 -23
  229. package/dist/utils/parseMultiValueHeaders.js +0 -36
  230. package/dist/utils/parseMultiValueQueryStringParameters.js +0 -40
  231. package/dist/utils/parseQueryStringParameters.js +0 -26
  232. package/dist/utils/resolveJoins.js +0 -36
  233. package/dist/utils/satisfiesVersionRange.js +0 -20
  234. package/dist/utils/splitHandlerPathAndName.js +0 -37
  235. package/dist/utils/unflatten.js +0 -18
@@ -1,185 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _child_process = require("child_process");
9
-
10
- var _os = require("os");
11
-
12
- var _path = require("path");
13
-
14
- var _process = _interopRequireWildcard(require("process"));
15
-
16
- var _readline = _interopRequireDefault(require("readline"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
-
22
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
-
24
- function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
25
-
26
- var id = 0;
27
-
28
- function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
29
-
30
- const {
31
- parse,
32
- stringify
33
- } = JSON;
34
- const {
35
- assign
36
- } = Object;
37
- const {
38
- has
39
- } = Reflect;
40
-
41
- var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
42
-
43
- var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
44
-
45
- var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
46
-
47
- var _runtime = /*#__PURE__*/_classPrivateFieldLooseKey("runtime");
48
-
49
- var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
50
-
51
- class PythonRunner {
52
- constructor(funOptions, env, allowCache, v3Utils) {
53
- Object.defineProperty(this, _env, {
54
- writable: true,
55
- value: null
56
- });
57
- Object.defineProperty(this, _handlerName, {
58
- writable: true,
59
- value: null
60
- });
61
- Object.defineProperty(this, _handlerPath, {
62
- writable: true,
63
- value: null
64
- });
65
- Object.defineProperty(this, _runtime, {
66
- writable: true,
67
- value: null
68
- });
69
- Object.defineProperty(this, _allowCache, {
70
- writable: true,
71
- value: false
72
- });
73
- const {
74
- handlerName,
75
- handlerPath,
76
- runtime
77
- } = funOptions;
78
- _classPrivateFieldLooseBase(this, _env)[_env] = env;
79
- _classPrivateFieldLooseBase(this, _handlerName)[_handlerName] = handlerName;
80
- _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
81
- _classPrivateFieldLooseBase(this, _runtime)[_runtime] = (0, _os.platform)() === 'win32' ? 'python.exe' : runtime;
82
- _classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
83
-
84
- if (v3Utils) {
85
- this.log = v3Utils.log;
86
- this.progress = v3Utils.progress;
87
- this.writeText = v3Utils.writeText;
88
- this.v3Utils = v3Utils;
89
- }
90
-
91
- if (_process.default.env.VIRTUAL_ENV) {
92
- const runtimeDir = (0, _os.platform)() === 'win32' ? 'Scripts' : 'bin';
93
- _process.default.env.PATH = [(0, _path.join)(_process.default.env.VIRTUAL_ENV, runtimeDir), _path.delimiter, _process.default.env.PATH].join('');
94
- }
95
-
96
- const [pythonExecutable] = _classPrivateFieldLooseBase(this, _runtime)[_runtime].split('.');
97
-
98
- this.handlerProcess = (0, _child_process.spawn)(pythonExecutable, ['-u', (0, _path.resolve)(__dirname, 'invoke.py'), (0, _path.relative)((0, _process.cwd)(), _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]), _classPrivateFieldLooseBase(this, _handlerName)[_handlerName]], {
99
- env: assign(_process.default.env, _classPrivateFieldLooseBase(this, _env)[_env]),
100
- shell: true
101
- });
102
- this.handlerProcess.stdout.readline = _readline.default.createInterface({
103
- input: this.handlerProcess.stdout
104
- });
105
- } // () => void
106
-
107
-
108
- cleanup() {
109
- this.handlerProcess.kill();
110
- }
111
-
112
- _parsePayload(value) {
113
- let payload;
114
-
115
- for (const item of value.split(_os.EOL)) {
116
- let json; // first check if it's JSON
117
-
118
- try {
119
- json = parse(item); // nope, it's not JSON
120
- } catch (err) {// no-op
121
- } // now let's see if we have a property __offline_payload__
122
-
123
-
124
- if (json && typeof json === 'object' && has(json, '__offline_payload__')) {
125
- payload = json.__offline_payload__; // everything else is print(), logging, ...
126
- } else if (this.log) {
127
- this.log.notice(item);
128
- } else {
129
- console.log(item);
130
- }
131
- }
132
-
133
- return payload;
134
- } // invokeLocalPython, loosely based on:
135
- // https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/index.js#L410
136
- // invoke.py, based on:
137
- // https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/invoke.py
138
-
139
-
140
- async run(event, context) {
141
- return new Promise((accept, reject) => {
142
- const input = stringify({
143
- context,
144
- event,
145
- allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache]
146
- });
147
-
148
- const onErr = data => {
149
- // TODO
150
- if (this.log) {
151
- this.log.notice(data.toString());
152
- } else {
153
- console.log(data.toString());
154
- }
155
- };
156
-
157
- const onLine = line => {
158
- try {
159
- const parsed = this._parsePayload(line.toString());
160
-
161
- if (parsed) {
162
- this.handlerProcess.stdout.readline.removeListener('line', onLine);
163
- this.handlerProcess.stderr.removeListener('data', onErr);
164
- return accept(parsed);
165
- }
166
-
167
- return null;
168
- } catch (err) {
169
- return reject(err);
170
- }
171
- };
172
-
173
- this.handlerProcess.stdout.readline.on('line', onLine);
174
- this.handlerProcess.stderr.on('data', onErr);
175
-
176
- _process.default.nextTick(() => {
177
- this.handlerProcess.stdin.write(input);
178
- this.handlerProcess.stdin.write('\n');
179
- });
180
- });
181
- }
182
-
183
- }
184
-
185
- exports.default = PythonRunner;
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "default", {
7
- enumerable: true,
8
- get: function () {
9
- return _PythonRunner.default;
10
- }
11
- });
12
-
13
- var _PythonRunner = _interopRequireDefault(require("./PythonRunner.js"));
14
-
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1,147 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _os = require("os");
9
-
10
- var _path = require("path");
11
-
12
- var _process = require("process");
13
-
14
- var _execa = _interopRequireDefault(require("execa"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
19
-
20
- var id = 0;
21
-
22
- function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
23
-
24
- const {
25
- parse,
26
- stringify
27
- } = JSON;
28
- const {
29
- has
30
- } = Reflect;
31
-
32
- var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
33
-
34
- var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
35
-
36
- var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
37
-
38
- var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
39
-
40
- class RubyRunner {
41
- constructor(funOptions, env, allowCache, v3Utils) {
42
- Object.defineProperty(this, _env, {
43
- writable: true,
44
- value: null
45
- });
46
- Object.defineProperty(this, _handlerName, {
47
- writable: true,
48
- value: null
49
- });
50
- Object.defineProperty(this, _handlerPath, {
51
- writable: true,
52
- value: null
53
- });
54
- Object.defineProperty(this, _allowCache, {
55
- writable: true,
56
- value: false
57
- });
58
- const {
59
- handlerName,
60
- handlerPath
61
- } = funOptions;
62
- _classPrivateFieldLooseBase(this, _env)[_env] = env;
63
- _classPrivateFieldLooseBase(this, _handlerName)[_handlerName] = handlerName;
64
- _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
65
- _classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
66
-
67
- if (v3Utils) {
68
- this.log = v3Utils.log;
69
- this.progress = v3Utils.progress;
70
- this.writeText = v3Utils.writeText;
71
- this.v3Utils = v3Utils;
72
- }
73
- } // no-op
74
- // () => void
75
-
76
-
77
- cleanup() {}
78
-
79
- _parsePayload(value) {
80
- let payload;
81
-
82
- for (const item of value.split(_os.EOL)) {
83
- let json; // first check if it's JSON
84
-
85
- try {
86
- json = parse(item); // nope, it's not JSON
87
- } catch (err) {// no-op
88
- } // now let's see if we have a property __offline_payload__
89
-
90
-
91
- if (json && typeof json === 'object' && has(json, '__offline_payload__')) {
92
- payload = json.__offline_payload__;
93
- } else if (this.log) {
94
- this.log.notice(item);
95
- } else {
96
- console.log(item); // log non-JSON stdout to console (puts, p, logger.info, ...)
97
- }
98
- }
99
-
100
- return payload;
101
- } // invokeLocalRuby, loosely based on:
102
- // https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/index.js#L556
103
- // invoke.rb, copy/pasted entirely as is:
104
- // https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/invoke.rb
105
-
106
-
107
- async run(event, context) {
108
- const runtime = (0, _os.platform)() === 'win32' ? 'ruby.exe' : 'ruby'; // https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html
109
- // https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html
110
- // exclude callbackWaitsForEmptyEventLoop, don't mutate context
111
-
112
- const {
113
- callbackWaitsForEmptyEventLoop,
114
- ..._context
115
- } = context;
116
- const input = stringify({
117
- context: _context,
118
- event,
119
- allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache]
120
- }); // console.log(input)
121
-
122
- const ruby = (0, _execa.default)(runtime, [(0, _path.resolve)(__dirname, 'invoke.rb'), (0, _path.relative)((0, _process.cwd)(), _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]), _classPrivateFieldLooseBase(this, _handlerName)[_handlerName]], {
123
- env: _classPrivateFieldLooseBase(this, _env)[_env],
124
- input // shell: true,
125
-
126
- });
127
- const result = await ruby;
128
- const {
129
- stderr,
130
- stdout
131
- } = result;
132
-
133
- if (stderr) {
134
- // TODO
135
- if (this.log) {
136
- this.log.notice(stderr);
137
- } else {
138
- console.log(stderr);
139
- }
140
- }
141
-
142
- return this._parsePayload(stdout);
143
- }
144
-
145
- }
146
-
147
- exports.default = RubyRunner;
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "default", {
7
- enumerable: true,
8
- get: function () {
9
- return _RubyRunner.default;
10
- }
11
- });
12
-
13
- var _RubyRunner = _interopRequireDefault(require("./RubyRunner.js"));
14
-
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1,92 +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 _worker_threads = require("worker_threads");
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
- // eslint-disable-line import/no-unresolved
19
- const workerThreadHelperPath = (0, _path.resolve)(__dirname, './workerThreadHelper.js');
20
-
21
- var _workerThread = /*#__PURE__*/_classPrivateFieldLooseKey("workerThread");
22
-
23
- var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
24
-
25
- class WorkerThreadRunner {
26
- constructor(funOptions
27
- /* options */
28
- , env, allowCache) {
29
- Object.defineProperty(this, _workerThread, {
30
- writable: true,
31
- value: null
32
- });
33
- Object.defineProperty(this, _allowCache, {
34
- writable: true,
35
- value: false
36
- });
37
- // this._options = options
38
- const {
39
- functionKey,
40
- handlerName,
41
- handlerPath,
42
- timeout
43
- } = funOptions;
44
- _classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
45
- _classPrivateFieldLooseBase(this, _workerThread)[_workerThread] = new _worker_threads.Worker(workerThreadHelperPath, {
46
- // don't pass process.env from the main process!
47
- env,
48
- workerData: {
49
- functionKey,
50
- handlerName,
51
- handlerPath,
52
- timeout
53
- }
54
- });
55
- } // () => Promise<number>
56
-
57
-
58
- cleanup() {
59
- // TODO console.log('worker thread cleanup')
60
- // NOTE: terminate returns a Promise with exit code in node.js v12.5+
61
- return _classPrivateFieldLooseBase(this, _workerThread)[_workerThread].terminate();
62
- }
63
-
64
- run(event, context) {
65
- return new Promise((_resolve, reject) => {
66
- const {
67
- port1,
68
- port2
69
- } = new _worker_threads.MessageChannel();
70
- port1.on('message', _resolve) // emitted if the worker thread throws an uncaught exception.
71
- // In that case, the worker will be terminated.
72
- .on('error', reject) // TODO
73
- .on('exit', code => {
74
- if (code !== 0) {
75
- reject(new Error(`Worker stopped with exit code ${code}`));
76
- }
77
- });
78
-
79
- _classPrivateFieldLooseBase(this, _workerThread)[_workerThread].postMessage({
80
- context,
81
- event,
82
- allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache],
83
- // port2 is part of the payload, for the other side to answer messages
84
- port: port2
85
- }, // port2 is also required to be part of the transfer list
86
- [port2]);
87
- });
88
- }
89
-
90
- }
91
-
92
- exports.default = WorkerThreadRunner;
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "default", {
7
- enumerable: true,
8
- get: function () {
9
- return _WorkerThreadRunner.default;
10
- }
11
- });
12
-
13
- var _WorkerThreadRunner = _interopRequireDefault(require("./WorkerThreadRunner.js"));
14
-
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1,31 +0,0 @@
1
- "use strict";
2
-
3
- var _process = require("process");
4
-
5
- var _worker_threads = require("worker_threads");
6
-
7
- var _index = _interopRequireDefault(require("../in-process-runner/index.js"));
8
-
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
- // eslint-disable-line import/no-unresolved
12
- const {
13
- functionKey,
14
- handlerName,
15
- handlerPath
16
- } = _worker_threads.workerData;
17
-
18
- _worker_threads.parentPort.on('message', async messageData => {
19
- const {
20
- context,
21
- event,
22
- port,
23
- timeout,
24
- allowCache
25
- } = messageData; // TODO we could probably cache this in the module scope?
26
-
27
- const inProcessRunner = new _index.default(functionKey, handlerPath, handlerName, _process.env, timeout, allowCache);
28
- const result = await inProcessRunner.run(event, context); // TODO check serializeability (contains function, symbol etc)
29
-
30
- port.postMessage(result);
31
- });
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "default", {
7
- enumerable: true,
8
- get: function () {
9
- return _Lambda.default;
10
- }
11
- });
12
-
13
- var _Lambda = _interopRequireDefault(require("./Lambda.js"));
14
-
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "invocationsRoute", {
7
- enumerable: true,
8
- get: function () {
9
- return _index.default;
10
- }
11
- });
12
- Object.defineProperty(exports, "invokeAsyncRoute", {
13
- enumerable: true,
14
- get: function () {
15
- return _index2.default;
16
- }
17
- });
18
-
19
- var _index = _interopRequireDefault(require("./invocations/index.js"));
20
-
21
- var _index2 = _interopRequireDefault(require("./invoke-async/index.js"));
22
-
23
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1,142 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _serverlessLog = _interopRequireDefault(require("../../../serverlessLog.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 _lambda = /*#__PURE__*/_classPrivateFieldLooseKey("lambda");
19
-
20
- class InvocationsController {
21
- constructor(lambda, v3Utils) {
22
- Object.defineProperty(this, _lambda, {
23
- writable: true,
24
- value: null
25
- });
26
- _classPrivateFieldLooseBase(this, _lambda)[_lambda] = lambda;
27
-
28
- if (v3Utils) {
29
- this.log = v3Utils.log;
30
- this.progress = v3Utils.progress;
31
- this.writeText = v3Utils.writeText;
32
- this.v3Utils = v3Utils;
33
- }
34
- }
35
-
36
- async invoke(functionName, invocationType, event, clientContext) {
37
- // Reject gracefully if functionName does not exist
38
- const functionNames = _classPrivateFieldLooseBase(this, _lambda)[_lambda].listFunctionNames();
39
-
40
- if (functionNames.length === 0 || !functionNames.includes(functionName)) {
41
- if (this.log) {
42
- this.log.error(`Attempt to invoke function '${functionName}' failed. Function does not exists.`);
43
- } else {
44
- (0, _serverlessLog.default)(`Attempt to invoke function '${functionName}' failed. Function does not exists.`);
45
- } // Conforms to the actual response from AWS Lambda when invoking a non-existent
46
- // function. Details on the error are provided in the Payload.Message key
47
-
48
-
49
- return {
50
- FunctionError: 'ResourceNotFoundException',
51
- Payload: {
52
- Message: `Function not found: ${functionName}`,
53
- Type: 'User'
54
- },
55
- StatusCode: 404
56
- };
57
- }
58
-
59
- const lambdaFunction = _classPrivateFieldLooseBase(this, _lambda)[_lambda].getByFunctionName(functionName);
60
-
61
- lambdaFunction.setClientContext(clientContext);
62
- lambdaFunction.setEvent(event);
63
-
64
- if (invocationType === 'Event') {
65
- // don't await result!
66
- lambdaFunction.runHandler();
67
- return {
68
- Payload: '',
69
- StatusCode: 202
70
- };
71
- }
72
-
73
- if (!invocationType || invocationType === 'RequestResponse') {
74
- let result;
75
-
76
- try {
77
- result = await lambdaFunction.runHandler();
78
- } catch (err) {
79
- if (this.log) {
80
- this.log.error(`Unhandled Lambda Error during invoke of '${functionName}': ${err}`);
81
- } else {
82
- (0, _serverlessLog.default)(`Unhandled Lambda Error during invoke of '${functionName}'`);
83
- console.log(err);
84
- } // In most circumstances this is the correct error type/structure.
85
- // The API returns a StreamingBody with status code of 200
86
- // that eventually spits out the error and stack trace.
87
- // When the request is synchronous, aws-sdk should buffer
88
- // the whole error stream, however this has not been validated.
89
-
90
-
91
- return {
92
- Payload: {
93
- errorType: 'Error',
94
- errorMessage: err.message,
95
- trace: err.stack.split('\n')
96
- },
97
- UnhandledError: true,
98
- StatusCode: 200
99
- }; // TODO: Additional pre and post-handler validation can expose
100
- // the following error types:
101
- // RequestTooLargeException, InvalidParameterValueException,
102
- // and whatever response is thrown when the response is too large.
103
- } // Checking if the result of the Lambda Invoke is a primitive string to wrap it. this is for future post-processing such as Step Functions Tasks
104
-
105
-
106
- if (result) {
107
- if (typeof result === 'string') {
108
- result = `"${result}"`;
109
- }
110
- } // result is actually the Payload.
111
- // So return in a standard structure so Hapi can
112
- // respond with the correct status codes
113
-
114
-
115
- return {
116
- Payload: result,
117
- StatusCode: 200
118
- };
119
- } // TODO FIXME
120
-
121
-
122
- const errMsg = `invocationType: '${invocationType}' not supported by serverless-offline`;
123
-
124
- if (this.log) {
125
- this.log.error(errMsg);
126
- } else {
127
- console.log(errMsg);
128
- }
129
-
130
- return {
131
- FunctionError: 'InvalidParameterValueException',
132
- Payload: {
133
- Message: errMsg,
134
- Type: 'User'
135
- },
136
- StatusCode: 400
137
- };
138
- }
139
-
140
- }
141
-
142
- exports.default = InvocationsController;