serverless-offline 8.0.0 → 8.3.1

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 (53) hide show
  1. package/README.md +125 -112
  2. package/dist/ServerlessOffline.js +91 -24
  3. package/dist/config/constants.js +1 -1
  4. package/dist/config/supportedRuntimes.js +1 -1
  5. package/dist/events/http/Endpoint.js +27 -9
  6. package/dist/events/http/Http.js +3 -3
  7. package/dist/events/http/HttpServer.js +311 -76
  8. package/dist/events/http/authFunctionNameExtractor.js +14 -8
  9. package/dist/events/http/authJWTSettingsExtractor.js +14 -7
  10. package/dist/events/http/createAuthScheme.js +42 -8
  11. package/dist/events/http/createJWTAuthScheme.js +52 -13
  12. package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +7 -6
  13. package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +18 -7
  14. package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +17 -6
  15. package/dist/events/http/lambda-events/VelocityContext.js +4 -4
  16. package/dist/events/http/lambda-events/index.js +4 -4
  17. package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +19 -7
  18. package/dist/events/schedule/Schedule.js +64 -20
  19. package/dist/events/websocket/HttpServer.js +24 -7
  20. package/dist/events/websocket/WebSocket.js +14 -6
  21. package/dist/events/websocket/WebSocketClients.js +65 -17
  22. package/dist/events/websocket/WebSocketServer.js +28 -6
  23. package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +9 -2
  24. package/dist/events/websocket/http-routes/connections/ConnectionsController.js +1 -1
  25. package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +28 -5
  26. package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +5 -5
  27. package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +1 -1
  28. package/dist/events/websocket/lambda-events/WebSocketEvent.js +3 -3
  29. package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +4 -4
  30. package/dist/lambda/HttpServer.js +34 -10
  31. package/dist/lambda/Lambda.js +15 -7
  32. package/dist/lambda/LambdaContext.js +1 -1
  33. package/dist/lambda/LambdaFunction.js +40 -23
  34. package/dist/lambda/LambdaFunctionPool.js +9 -8
  35. package/dist/lambda/handler-runner/HandlerRunner.js +48 -15
  36. package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +21 -8
  37. package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +1 -10
  38. package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +168 -69
  39. package/dist/lambda/handler-runner/docker-runner/DockerImage.js +21 -5
  40. package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +4 -4
  41. package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +9 -21
  42. package/dist/lambda/handler-runner/java-runner/JavaRunner.js +26 -14
  43. package/dist/lambda/handler-runner/python-runner/PythonRunner.js +20 -7
  44. package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +22 -24
  45. package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +2 -2
  46. package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +1 -11
  47. package/dist/lambda/routes/invocations/InvocationsController.js +37 -11
  48. package/dist/lambda/routes/invocations/invocationsRoute.js +2 -2
  49. package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +2 -6
  50. package/dist/serverlessLog.js +1 -1
  51. package/dist/utils/getHttpApiCorsConfig.js +18 -5
  52. package/dist/utils/index.js +16 -16
  53. package/package.json +58 -37
@@ -49,34 +49,34 @@ const {
49
49
  keys
50
50
  } = Object;
51
51
 
52
- var _containerId = _classPrivateFieldLooseKey("containerId");
52
+ var _containerId = /*#__PURE__*/_classPrivateFieldLooseKey("containerId");
53
53
 
54
- var _dockerOptions = _classPrivateFieldLooseKey("dockerOptions");
54
+ var _dockerOptions = /*#__PURE__*/_classPrivateFieldLooseKey("dockerOptions");
55
55
 
56
- var _env = _classPrivateFieldLooseKey("env");
56
+ var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
57
57
 
58
- var _functionKey = _classPrivateFieldLooseKey("functionKey");
58
+ var _functionKey = /*#__PURE__*/_classPrivateFieldLooseKey("functionKey");
59
59
 
60
- var _handler = _classPrivateFieldLooseKey("handler");
60
+ var _handler = /*#__PURE__*/_classPrivateFieldLooseKey("handler");
61
61
 
62
- var _image = _classPrivateFieldLooseKey("image");
62
+ var _image = /*#__PURE__*/_classPrivateFieldLooseKey("image");
63
63
 
64
- var _imageNameTag = _classPrivateFieldLooseKey("imageNameTag");
64
+ var _imageNameTag = /*#__PURE__*/_classPrivateFieldLooseKey("imageNameTag");
65
65
 
66
- var _lambda = _classPrivateFieldLooseKey("lambda");
66
+ var _lambda = /*#__PURE__*/_classPrivateFieldLooseKey("lambda");
67
67
 
68
- var _layers = _classPrivateFieldLooseKey("layers");
68
+ var _layers = /*#__PURE__*/_classPrivateFieldLooseKey("layers");
69
69
 
70
- var _port = _classPrivateFieldLooseKey("port");
70
+ var _port = /*#__PURE__*/_classPrivateFieldLooseKey("port");
71
71
 
72
- var _provider = _classPrivateFieldLooseKey("provider");
72
+ var _provider = /*#__PURE__*/_classPrivateFieldLooseKey("provider");
73
73
 
74
- var _runtime = _classPrivateFieldLooseKey("runtime");
74
+ var _runtime = /*#__PURE__*/_classPrivateFieldLooseKey("runtime");
75
75
 
76
- var _servicePath = _classPrivateFieldLooseKey("servicePath");
76
+ var _servicePath = /*#__PURE__*/_classPrivateFieldLooseKey("servicePath");
77
77
 
78
78
  class DockerContainer {
79
- constructor(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions) {
79
+ constructor(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions, v3Utils) {
80
80
  Object.defineProperty(this, _containerId, {
81
81
  writable: true,
82
82
  value: null
@@ -133,12 +133,19 @@ class DockerContainer {
133
133
  _classPrivateFieldLooseBase(this, _functionKey)[_functionKey] = functionKey;
134
134
  _classPrivateFieldLooseBase(this, _handler)[_handler] = handler;
135
135
  _classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag] = this._baseImage(runtime);
136
- _classPrivateFieldLooseBase(this, _image)[_image] = new _DockerImage.default(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag]);
136
+ _classPrivateFieldLooseBase(this, _image)[_image] = new _DockerImage.default(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag], v3Utils);
137
137
  _classPrivateFieldLooseBase(this, _runtime)[_runtime] = runtime;
138
138
  _classPrivateFieldLooseBase(this, _layers)[_layers] = layers;
139
139
  _classPrivateFieldLooseBase(this, _provider)[_provider] = provider;
140
140
  _classPrivateFieldLooseBase(this, _servicePath)[_servicePath] = servicePath;
141
141
  _classPrivateFieldLooseBase(this, _dockerOptions)[_dockerOptions] = dockerOptions;
142
+
143
+ if (v3Utils) {
144
+ this.log = v3Utils.log;
145
+ this.progress = v3Utils.progress;
146
+ this.writeText = v3Utils.writeText;
147
+ this.v3Utils = v3Utils;
148
+ }
142
149
  }
143
150
 
144
151
  _baseImage(runtime) {
@@ -147,7 +154,13 @@ class DockerContainer {
147
154
 
148
155
  async start(codeDir) {
149
156
  await _classPrivateFieldLooseBase(this, _image)[_image].pull();
150
- (0, _debugLog.default)('Run Docker container...');
157
+
158
+ if (this.log) {
159
+ this.log.debug('Run Docker container...');
160
+ } else {
161
+ (0, _debugLog.default)('Run Docker container...');
162
+ }
163
+
151
164
  let permissions = 'ro';
152
165
 
153
166
  if (!_classPrivateFieldLooseBase(this, _dockerOptions)[_dockerOptions].readOnly) {
@@ -160,10 +173,18 @@ class DockerContainer {
160
173
  ];
161
174
 
162
175
  if (_classPrivateFieldLooseBase(this, _layers)[_layers].length > 0) {
163
- (0, _serverlessLog.logLayers)(`Found layers, checking provider type`);
176
+ if (this.log) {
177
+ this.log.verbose(`Found layers, checking provider type`);
178
+ } else {
179
+ (0, _serverlessLog.logLayers)(`Found layers, checking provider type`);
180
+ }
164
181
 
165
182
  if (_classPrivateFieldLooseBase(this, _provider)[_provider].name.toLowerCase() !== 'aws') {
166
- (0, _serverlessLog.logLayers)(`Provider ${_classPrivateFieldLooseBase(this, _provider)[_provider].name} is Unsupported. Layers are only supported on aws.`);
183
+ if (this.log) {
184
+ this.log.warning(`Provider ${_classPrivateFieldLooseBase(this, _provider)[_provider].name} is Unsupported. Layers are only supported on aws.`);
185
+ } else {
186
+ (0, _serverlessLog.logLayers)(`Provider ${_classPrivateFieldLooseBase(this, _provider)[_provider].name} is Unsupported. Layers are only supported on aws.`);
187
+ }
167
188
  } else {
168
189
  let layerDir = _classPrivateFieldLooseBase(this, _dockerOptions)[_dockerOptions].layersDir;
169
190
 
@@ -174,16 +195,31 @@ class DockerContainer {
174
195
  layerDir = (0, _path.join)(layerDir, this._getLayersSha256());
175
196
 
176
197
  if (await (0, _fsExtra.pathExists)(layerDir)) {
177
- (0, _serverlessLog.logLayers)(`Layers already exist for this function. Skipping download.`);
198
+ if (this.log) {
199
+ this.log.verbose(`Layers already exist for this function. Skipping download.`);
200
+ } else {
201
+ (0, _serverlessLog.logLayers)(`Layers already exist for this function. Skipping download.`);
202
+ }
178
203
  } else {
179
204
  const layers = [];
180
- (0, _serverlessLog.logLayers)(`Storing layers at ${layerDir}`); // Only initialise if we have layers, we're using AWS, and they don't already exist
205
+
206
+ if (this.log) {
207
+ this.log.verbose(`Storing layers at ${layerDir}`);
208
+ } else {
209
+ (0, _serverlessLog.logLayers)(`Storing layers at ${layerDir}`);
210
+ } // Only initialise if we have layers, we're using AWS, and they don't already exist
211
+
181
212
 
182
213
  _classPrivateFieldLooseBase(this, _lambda)[_lambda] = new _awsSdk.Lambda({
183
214
  apiVersion: '2015-03-31',
184
215
  region: _classPrivateFieldLooseBase(this, _provider)[_provider].region
185
216
  });
186
- (0, _serverlessLog.logLayers)(`Getting layers`);
217
+
218
+ if (this.log) {
219
+ this.log.verbose(`Getting layers`);
220
+ } else {
221
+ (0, _serverlessLog.logLayers)(`Getting layers`);
222
+ }
187
223
 
188
224
  for (const layerArn of _classPrivateFieldLooseBase(this, _layers)[_layers]) {
189
225
  layers.push(this._downloadLayer(layerArn, layerDir));
@@ -275,66 +311,119 @@ class DockerContainer {
275
311
  async _downloadLayer(layerArn, layerDir) {
276
312
  const layerName = layerArn.split(':layer:')[1];
277
313
  const layerZipFile = `${layerDir}/${layerName}.zip`;
278
- (0, _serverlessLog.logLayers)(`[${layerName}] ARN: ${layerArn}`);
314
+ const layerProgress = this.log && this.progress.get(`layer-${layerName}`);
315
+
316
+ if (this.log) {
317
+ this.log.verbose(`[${layerName}] ARN: ${layerArn}`);
318
+ } else {
319
+ (0, _serverlessLog.logLayers)(`[${layerName}] ARN: ${layerArn}`);
320
+ }
321
+
279
322
  const params = {
280
323
  Arn: layerArn
281
324
  };
282
- (0, _serverlessLog.logLayers)(`[${layerName}] Getting Info`);
283
- let layer = null;
284
325
 
285
- try {
286
- layer = await _classPrivateFieldLooseBase(this, _lambda)[_lambda].getLayerVersionByArn(params).promise();
287
- } catch (e) {
288
- (0, _serverlessLog.logWarning)(`[${layerName}] ${e.code}: ${e.message}`);
289
- return;
326
+ if (this.log) {
327
+ this.log.verbose(`[${layerName}] Getting Info`);
328
+ layerProgress.notice(`Retrieving "${layerName}": Getting info`);
329
+ } else {
330
+ (0, _serverlessLog.logLayers)(`[${layerName}] Getting Info`);
290
331
  }
291
332
 
292
- if (Object.prototype.hasOwnProperty.call(layer, 'CompatibleRuntimes') && !layer.CompatibleRuntimes.includes(_classPrivateFieldLooseBase(this, _runtime)[_runtime])) {
293
- (0, _serverlessLog.logWarning)(`[${layerName}] Layer is not compatible with ${_classPrivateFieldLooseBase(this, _runtime)[_runtime]} runtime`);
294
- return;
295
- }
333
+ try {
334
+ let layer = null;
296
335
 
297
- const layerUrl = layer.Content.Location; // const layerSha = layer.Content.CodeSha256
336
+ try {
337
+ layer = await _classPrivateFieldLooseBase(this, _lambda)[_lambda].getLayerVersionByArn(params).promise();
338
+ } catch (e) {
339
+ if (this.log) {
340
+ this.log.warning(`[${layerName}] ${e.code}: ${e.message}`);
341
+ } else {
342
+ (0, _serverlessLog.logWarning)(`[${layerName}] ${e.code}: ${e.message}`);
343
+ }
298
344
 
299
- const layerSize = layer.Content.CodeSize;
300
- await (0, _fsExtra.ensureDir)(layerDir);
301
- (0, _serverlessLog.logLayers)(`[${layerName}] Downloading ${this._formatBytes(layerSize)}...`);
302
- const res = await (0, _nodeFetch.default)(layerUrl, {
303
- method: 'get'
304
- });
345
+ return;
346
+ }
305
347
 
306
- if (!res.ok) {
307
- (0, _serverlessLog.logWarning)(`[${layerName}] Failed to fetch from ${layerUrl} with ${res.statusText}`);
308
- return;
309
- }
348
+ if (Object.prototype.hasOwnProperty.call(layer, 'CompatibleRuntimes') && !layer.CompatibleRuntimes.includes(_classPrivateFieldLooseBase(this, _runtime)[_runtime])) {
349
+ if (this.log) {
350
+ this.log.warning(`[${layerName}] Layer is not compatible with ${_classPrivateFieldLooseBase(this, _runtime)[_runtime]} runtime`);
351
+ } else {
352
+ (0, _serverlessLog.logWarning)(`[${layerName}] Layer is not compatible with ${_classPrivateFieldLooseBase(this, _runtime)[_runtime]} runtime`);
353
+ }
310
354
 
311
- const fileStream = (0, _fs.createWriteStream)(`${layerZipFile}`);
312
- await new Promise((resolve, reject) => {
313
- res.body.pipe(fileStream);
314
- res.body.on('error', err => {
315
- reject(err);
316
- });
317
- fileStream.on('finish', () => {
318
- resolve();
355
+ return;
356
+ }
357
+
358
+ const layerUrl = layer.Content.Location; // const layerSha = layer.Content.CodeSha256
359
+
360
+ const layerSize = layer.Content.CodeSize;
361
+ await (0, _fsExtra.ensureDir)(layerDir);
362
+
363
+ if (this.log) {
364
+ this.log.verbose(`Retrieving "${layerName}": Downloading ${this._formatBytes(layerSize)}...`);
365
+ layerProgress.notice(`Retrieving "${layerName}": Downloading ${this._formatBytes(layerSize)}`);
366
+ } else {
367
+ (0, _serverlessLog.logLayers)(`[${layerName}] Downloading ${this._formatBytes(layerSize)}...`);
368
+ }
369
+
370
+ const res = await (0, _nodeFetch.default)(layerUrl, {
371
+ method: 'get'
319
372
  });
320
- });
321
- (0, _serverlessLog.logLayers)(`[${layerName}] Unzipping to .layers directory`);
322
- const data = await (0, _fsExtra.readFile)(`${layerZipFile}`);
323
- const zip = await _jszip.default.loadAsync(data);
324
- await Promise.all(keys(zip.files).map(async filename => {
325
- const fileData = await zip.files[filename].async('nodebuffer');
326
-
327
- if (filename.endsWith(_path.sep)) {
328
- return Promise.resolve();
373
+
374
+ if (!res.ok) {
375
+ if (this.log) {
376
+ this.log.warning(`[${layerName}] Failed to fetch from ${layerUrl} with ${res.statusText}`);
377
+ } else {
378
+ (0, _serverlessLog.logWarning)(`[${layerName}] Failed to fetch from ${layerUrl} with ${res.statusText}`);
379
+ }
380
+
381
+ return;
329
382
  }
330
383
 
331
- await (0, _fsExtra.ensureDir)((0, _path.join)(layerDir, (0, _path.dirname)(filename)));
332
- return (0, _fsExtra.writeFile)((0, _path.join)(layerDir, filename), fileData, {
333
- mode: zip.files[filename].unixPermissions
384
+ const fileStream = (0, _fs.createWriteStream)(`${layerZipFile}`);
385
+ await new Promise((resolve, reject) => {
386
+ res.body.pipe(fileStream);
387
+ res.body.on('error', err => {
388
+ reject(err);
389
+ });
390
+ fileStream.on('finish', () => {
391
+ resolve();
392
+ });
334
393
  });
335
- }));
336
- (0, _serverlessLog.logLayers)(`[${layerName}] Removing zip file`);
337
- (0, _fs.unlinkSync)(`${layerZipFile}`);
394
+
395
+ if (this.log) {
396
+ this.log.verbose(`Retrieving "${layerName}": Unzipping to .layers directory`);
397
+ layerProgress.notice(`Retrieving "${layerName}": Unzipping to .layers directory`);
398
+ } else {
399
+ (0, _serverlessLog.logLayers)(`[${layerName}] Unzipping to .layers directory`);
400
+ }
401
+
402
+ const data = await (0, _fsExtra.readFile)(`${layerZipFile}`);
403
+ const zip = await _jszip.default.loadAsync(data);
404
+ await Promise.all(keys(zip.files).map(async filename => {
405
+ const fileData = await zip.files[filename].async('nodebuffer');
406
+
407
+ if (filename.endsWith(_path.sep)) {
408
+ return Promise.resolve();
409
+ }
410
+
411
+ await (0, _fsExtra.ensureDir)((0, _path.join)(layerDir, (0, _path.dirname)(filename)));
412
+ return (0, _fsExtra.writeFile)((0, _path.join)(layerDir, filename), fileData, {
413
+ mode: zip.files[filename].unixPermissions
414
+ });
415
+ }));
416
+
417
+ if (this.log) {
418
+ this.log.verbose(`[${layerName}] Removing zip file`);
419
+ } else {
420
+ (0, _serverlessLog.logLayers)(`[${layerName}] Removing zip file`);
421
+ }
422
+
423
+ (0, _fs.unlinkSync)(`${layerZipFile}`);
424
+ } finally {
425
+ if (this.log) layerProgress.remove();
426
+ }
338
427
  }
339
428
 
340
429
  async _getBridgeGatewayIp() {
@@ -346,7 +435,12 @@ class DockerContainer {
346
435
  stdout: gateway
347
436
  } = await (0, _execa.default)('docker', ['network', 'inspect', 'bridge', '--format', '{{(index .IPAM.Config 0).Gateway}}']));
348
437
  } catch (err) {
349
- console.error(err.stderr);
438
+ if (this.log) {
439
+ this.log.error(err.stderr);
440
+ } else {
441
+ console.error(err.stderr);
442
+ }
443
+
350
444
  throw err;
351
445
  }
352
446
 
@@ -387,7 +481,12 @@ class DockerContainer {
387
481
  await (0, _execa.default)('docker', ['stop', _classPrivateFieldLooseBase(this, _containerId)[_containerId]]);
388
482
  await (0, _execa.default)('docker', ['rm', _classPrivateFieldLooseBase(this, _containerId)[_containerId]]);
389
483
  } catch (err) {
390
- console.error(err.stderr);
484
+ if (this.log) {
485
+ this.log.error(err.stderr);
486
+ } else {
487
+ console.error(err.stderr);
488
+ }
489
+
391
490
  throw err;
392
491
  }
393
492
  }
@@ -19,30 +19,46 @@ var id = 0;
19
19
 
20
20
  function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
21
21
 
22
- var _imageNameTag = _classPrivateFieldLooseKey("imageNameTag");
22
+ var _imageNameTag = /*#__PURE__*/_classPrivateFieldLooseKey("imageNameTag");
23
23
 
24
24
  class DockerImage {
25
- constructor(imageNameTag) {
25
+ constructor(imageNameTag, v3Utils) {
26
26
  Object.defineProperty(this, _imageNameTag, {
27
27
  writable: true,
28
28
  value: null
29
29
  });
30
30
  _classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag] = imageNameTag;
31
+
32
+ if (v3Utils) {
33
+ this.log = v3Utils.log;
34
+ this.progress = v3Utils.progress;
35
+ this.writeText = v3Utils.writeText;
36
+ this.v3Utils = v3Utils;
37
+ }
31
38
  }
32
39
 
33
40
  static async _pullImage(imageNameTag) {
34
- (0, _debugLog.default)(`Downloading base Docker image... (${imageNameTag})`);
41
+ if (this.log) {
42
+ this.log.debug(`Downloading base Docker image... (${imageNameTag})`);
43
+ } else {
44
+ (0, _debugLog.default)(`Downloading base Docker image... (${imageNameTag})`);
45
+ }
35
46
 
36
47
  try {
37
48
  await (0, _execa.default)('docker', ['pull', '--disable-content-trust=false', imageNameTag]);
38
49
  } catch (err) {
39
- console.error(err.stderr);
50
+ if (this.log) {
51
+ this.log.error(err.stderr);
52
+ } else {
53
+ console.error(err.stderr);
54
+ }
55
+
40
56
  throw err;
41
57
  }
42
58
  }
43
59
 
44
60
  async pull() {
45
- return DockerImage._memoizedPull(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag]);
61
+ return DockerImage._memoizedPull(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag], this.v3Utils);
46
62
  }
47
63
 
48
64
  }
@@ -17,12 +17,12 @@ var id = 0;
17
17
 
18
18
  function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
19
19
 
20
- var _codeDir = _classPrivateFieldLooseKey("codeDir");
20
+ var _codeDir = /*#__PURE__*/_classPrivateFieldLooseKey("codeDir");
21
21
 
22
- var _container = _classPrivateFieldLooseKey("container");
22
+ var _container = /*#__PURE__*/_classPrivateFieldLooseKey("container");
23
23
 
24
24
  class DockerRunner {
25
- constructor(funOptions, env, dockerOptions) {
25
+ constructor(funOptions, env, dockerOptions, v3Utils) {
26
26
  Object.defineProperty(this, _codeDir, {
27
27
  writable: true,
28
28
  value: null
@@ -46,7 +46,7 @@ class DockerRunner {
46
46
  _classPrivateFieldLooseBase(this, _codeDir)[_codeDir] = _classPrivateFieldLooseBase(this, _codeDir)[_codeDir].replace(servicePath, dockerOptions.hostServicePath);
47
47
  }
48
48
 
49
- _classPrivateFieldLooseBase(this, _container)[_container] = new _DockerContainer.default(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions);
49
+ _classPrivateFieldLooseBase(this, _container)[_container] = new _DockerContainer.default(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions, v3Utils);
50
50
  }
51
51
 
52
52
  cleanup() {
@@ -11,9 +11,9 @@ var path = _interopRequireWildcard(require("path"));
11
11
 
12
12
  var fs = _interopRequireWildcard(require("fs"));
13
13
 
14
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
14
+ 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); }
15
15
 
16
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
16
+ 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; }
17
17
 
18
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
19
 
@@ -84,17 +84,17 @@ const clearModule = (fP, opts) => {
84
84
  }
85
85
  };
86
86
 
87
- var _env = _classPrivateFieldLooseKey("env");
87
+ var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
88
88
 
89
- var _functionKey = _classPrivateFieldLooseKey("functionKey");
89
+ var _functionKey = /*#__PURE__*/_classPrivateFieldLooseKey("functionKey");
90
90
 
91
- var _handlerName = _classPrivateFieldLooseKey("handlerName");
91
+ var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
92
92
 
93
- var _handlerPath = _classPrivateFieldLooseKey("handlerPath");
93
+ var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
94
94
 
95
- var _timeout = _classPrivateFieldLooseKey("timeout");
95
+ var _timeout = /*#__PURE__*/_classPrivateFieldLooseKey("timeout");
96
96
 
97
- var _allowCache = _classPrivateFieldLooseKey("allowCache");
97
+ var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
98
98
 
99
99
  class InProcessRunner {
100
100
  constructor(functionKey, handlerPath, handlerName, env, timeout, allowCache) {
@@ -191,9 +191,6 @@ class InProcessRunner {
191
191
  try {
192
192
  result = handler(event, lambdaContext, callback);
193
193
  } catch (err) {
194
- // this only executes when we have an exception caused by synchronous code
195
- // TODO logging
196
- console.log(err);
197
194
  throw new Error(`Uncaught error in '${_classPrivateFieldLooseBase(this, _functionKey)[_functionKey]}' handler.`);
198
195
  } // // not a Promise, which is not supported by aws
199
196
  // if (result == null || typeof result.then !== 'function') {
@@ -207,16 +204,7 @@ class InProcessRunner {
207
204
  callbacks.push(result);
208
205
  }
209
206
 
210
- let callbackResult;
211
-
212
- try {
213
- callbackResult = await Promise.race(callbacks);
214
- } catch (err) {
215
- // TODO logging
216
- console.log(err);
217
- throw err;
218
- }
219
-
207
+ const callbackResult = await Promise.race(callbacks);
220
208
  return callbackResult;
221
209
  }
222
210
 
@@ -27,18 +27,18 @@ const {
27
27
  has
28
28
  } = Reflect;
29
29
 
30
- var _env = _classPrivateFieldLooseKey("env");
30
+ var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
31
31
 
32
- var _functionName = _classPrivateFieldLooseKey("functionName");
32
+ var _functionName = /*#__PURE__*/_classPrivateFieldLooseKey("functionName");
33
33
 
34
- var _handler = _classPrivateFieldLooseKey("handler");
34
+ var _handler = /*#__PURE__*/_classPrivateFieldLooseKey("handler");
35
35
 
36
- var _deployPackage = _classPrivateFieldLooseKey("deployPackage");
36
+ var _deployPackage = /*#__PURE__*/_classPrivateFieldLooseKey("deployPackage");
37
37
 
38
- var _allowCache = _classPrivateFieldLooseKey("allowCache");
38
+ var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
39
39
 
40
40
  class JavaRunner {
41
- constructor(funOptions, env, allowCache) {
41
+ constructor(funOptions, env, allowCache, v3Utils) {
42
42
  Object.defineProperty(this, _env, {
43
43
  writable: true,
44
44
  value: null
@@ -70,6 +70,13 @@ class JavaRunner {
70
70
  _classPrivateFieldLooseBase(this, _handler)[_handler] = handler;
71
71
  _classPrivateFieldLooseBase(this, _deployPackage)[_deployPackage] = functionPackage || servicePackage;
72
72
  _classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
73
+
74
+ if (v3Utils) {
75
+ this.log = v3Utils.log;
76
+ this.progress = v3Utils.progress;
77
+ this.writeText = v3Utils.writeText;
78
+ this.v3Utils = v3Utils;
79
+ }
73
80
  } // no-op
74
81
  // () => void
75
82
 
@@ -120,19 +127,24 @@ class JavaRunner {
120
127
  const response = await (0, _nodeFetch.default)(`http://localhost:${port}/invoke`, httpOptions);
121
128
  result = await response.text();
122
129
  } catch (e) {
123
- console.log('Local java server not running. For faster local invocations, run "java-invoke-local --server" in your project directory'); // Fallback invocation
130
+ if (this.log) {
131
+ this.log.notice('Local java server not running. For faster local invocations, run "java-invoke-local --server" in your project directory');
132
+ } else {
133
+ console.log('Local java server not running. For faster local invocations, run "java-invoke-local --server" in your project directory');
134
+ } // Fallback invocation
135
+
124
136
 
125
137
  const args = ['-c', _classPrivateFieldLooseBase(this, _handler)[_handler], '-a', _classPrivateFieldLooseBase(this, _deployPackage)[_deployPackage], '-f', _classPrivateFieldLooseBase(this, _functionName)[_functionName], '-d', input, '--json-output', '--serverless-offline'];
126
138
  result = (0, _javaInvokeLocal.invokeJavaLocal)(args, _classPrivateFieldLooseBase(this, _env)[_env]);
127
- console.log(result);
128
- }
129
139
 
130
- try {
131
- return this._parsePayload(result);
132
- } catch (err) {
133
- console.log(result);
134
- return err;
140
+ if (this.log) {
141
+ this.log.notice(result);
142
+ } else {
143
+ console.log(result);
144
+ }
135
145
  }
146
+
147
+ return this._parsePayload(result);
136
148
  }
137
149
 
138
150
  }
@@ -34,18 +34,18 @@ const {
34
34
  has
35
35
  } = Reflect;
36
36
 
37
- var _env = _classPrivateFieldLooseKey("env");
37
+ var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
38
38
 
39
- var _handlerName = _classPrivateFieldLooseKey("handlerName");
39
+ var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
40
40
 
41
- var _handlerPath = _classPrivateFieldLooseKey("handlerPath");
41
+ var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
42
42
 
43
- var _runtime = _classPrivateFieldLooseKey("runtime");
43
+ var _runtime = /*#__PURE__*/_classPrivateFieldLooseKey("runtime");
44
44
 
45
- var _allowCache = _classPrivateFieldLooseKey("allowCache");
45
+ var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
46
46
 
47
47
  class PythonRunner {
48
- constructor(funOptions, env, allowCache) {
48
+ constructor(funOptions, env, allowCache, v3Utils) {
49
49
  Object.defineProperty(this, _env, {
50
50
  writable: true,
51
51
  value: null
@@ -77,6 +77,13 @@ class PythonRunner {
77
77
  _classPrivateFieldLooseBase(this, _runtime)[_runtime] = (0, _os.platform)() === 'win32' ? 'python.exe' : runtime;
78
78
  _classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
79
79
 
80
+ if (v3Utils) {
81
+ this.log = v3Utils.log;
82
+ this.progress = v3Utils.progress;
83
+ this.writeText = v3Utils.writeText;
84
+ this.v3Utils = v3Utils;
85
+ }
86
+
80
87
  if (process.env.VIRTUAL_ENV) {
81
88
  const runtimeDir = (0, _os.platform)() === 'win32' ? 'Scripts' : 'bin';
82
89
  process.env.PATH = [(0, _path.join)(process.env.VIRTUAL_ENV, runtimeDir), _path.delimiter, process.env.PATH].join('');
@@ -112,6 +119,8 @@ class PythonRunner {
112
119
 
113
120
  if (json && typeof json === 'object' && has(json, '__offline_payload__')) {
114
121
  payload = json.__offline_payload__; // everything else is print(), logging, ...
122
+ } else if (this.log) {
123
+ this.log.notice(item);
115
124
  } else {
116
125
  console.log(item);
117
126
  }
@@ -134,7 +143,11 @@ class PythonRunner {
134
143
 
135
144
  const onErr = data => {
136
145
  // TODO
137
- console.log(data.toString());
146
+ if (this.log) {
147
+ this.log.notice(data.toString());
148
+ } else {
149
+ console.log(data.toString());
150
+ }
138
151
  };
139
152
 
140
153
  const onLine = line => {