serverless-offline 7.1.0 → 8.3.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 (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
@@ -7,6 +7,10 @@ exports.default = void 0;
7
7
 
8
8
  var _updateNotifier = _interopRequireDefault(require("update-notifier"));
9
9
 
10
+ var _chalk = _interopRequireDefault(require("chalk"));
11
+
12
+ var _semver = require("semver");
13
+
10
14
  var _debugLog = _interopRequireDefault(require("./debugLog.js"));
11
15
 
12
16
  var _serverlessLog = _interopRequireWildcard(require("./serverlessLog.js"));
@@ -19,9 +23,9 @@ var _package = _interopRequireDefault(require("../package.json"));
19
23
 
20
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
25
 
22
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
26
+ 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); }
23
27
 
24
- 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; }
28
+ 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; }
25
29
 
26
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; }
27
31
 
@@ -29,22 +33,22 @@ var id = 0;
29
33
 
30
34
  function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
31
35
 
32
- var _cliOptions = _classPrivateFieldLooseKey("cliOptions");
36
+ var _cliOptions = /*#__PURE__*/_classPrivateFieldLooseKey("cliOptions");
33
37
 
34
- var _http = _classPrivateFieldLooseKey("http");
38
+ var _http = /*#__PURE__*/_classPrivateFieldLooseKey("http");
35
39
 
36
- var _options = _classPrivateFieldLooseKey("options");
40
+ var _options = /*#__PURE__*/_classPrivateFieldLooseKey("options");
37
41
 
38
- var _schedule = _classPrivateFieldLooseKey("schedule");
42
+ var _schedule = /*#__PURE__*/_classPrivateFieldLooseKey("schedule");
39
43
 
40
- var _webSocket = _classPrivateFieldLooseKey("webSocket");
44
+ var _webSocket = /*#__PURE__*/_classPrivateFieldLooseKey("webSocket");
41
45
 
42
- var _lambda = _classPrivateFieldLooseKey("lambda");
46
+ var _lambda = /*#__PURE__*/_classPrivateFieldLooseKey("lambda");
43
47
 
44
- var _serverless = _classPrivateFieldLooseKey("serverless");
48
+ var _serverless = /*#__PURE__*/_classPrivateFieldLooseKey("serverless");
45
49
 
46
50
  class ServerlessOffline {
47
- constructor(serverless, cliOptions) {
51
+ constructor(serverless, cliOptions, v3Utils) {
48
52
  Object.defineProperty(this, _cliOptions, {
49
53
  writable: true,
50
54
  value: null
@@ -75,6 +79,14 @@ class ServerlessOffline {
75
79
  });
76
80
  _classPrivateFieldLooseBase(this, _cliOptions)[_cliOptions] = cliOptions;
77
81
  _classPrivateFieldLooseBase(this, _serverless)[_serverless] = serverless;
82
+
83
+ if (v3Utils) {
84
+ this.log = v3Utils.log;
85
+ this.progress = v3Utils.progress;
86
+ this.writeText = v3Utils.writeText;
87
+ this.v3Utils = v3Utils;
88
+ }
89
+
78
90
  (0, _serverlessLog.setLog)((...args) => serverless.cli.log(...args));
79
91
  this.commands = {
80
92
  offline: {
@@ -101,7 +113,11 @@ class ServerlessOffline {
101
113
 
102
114
  _printBlankLine() {
103
115
  if (process.env.NODE_ENV !== 'test') {
104
- console.log();
116
+ if (this.log) {
117
+ this.log.notice();
118
+ } else {
119
+ console.log();
120
+ }
105
121
  }
106
122
  } // Entry point for the plugin (sls offline) when running 'sls offline start'
107
123
 
@@ -157,7 +173,12 @@ class ServerlessOffline {
157
173
  return;
158
174
  }
159
175
 
160
- (0, _serverlessLog.default)('Halting offline server');
176
+ if (this.log) {
177
+ this.log.info('Halting offline server');
178
+ } else {
179
+ (0, _serverlessLog.default)('Halting offline server');
180
+ }
181
+
161
182
  const eventModules = [];
162
183
 
163
184
  if (_classPrivateFieldLooseBase(this, _lambda)[_lambda]) {
@@ -204,14 +225,19 @@ class ServerlessOffline {
204
225
  // with child_process methods
205
226
  .on('SIGTERM', () => resolve('SIGTERM'));
206
227
  });
207
- (0, _serverlessLog.default)(`Got ${command} signal. Offline Halting...`);
228
+
229
+ if (this.log) {
230
+ this.log.info(`Got ${command} signal. Offline Halting...`);
231
+ } else {
232
+ (0, _serverlessLog.default)(`Got ${command} signal. Offline Halting...`);
233
+ }
208
234
  }
209
235
 
210
236
  async _createLambda(lambdas, skipStart) {
211
237
  const {
212
238
  default: Lambda
213
239
  } = await Promise.resolve().then(() => _interopRequireWildcard(require('./lambda/index.js')));
214
- _classPrivateFieldLooseBase(this, _lambda)[_lambda] = new Lambda(_classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options]);
240
+ _classPrivateFieldLooseBase(this, _lambda)[_lambda] = new Lambda(_classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options], this.v3Utils);
215
241
 
216
242
  _classPrivateFieldLooseBase(this, _lambda)[_lambda].create(lambdas);
217
243
 
@@ -224,7 +250,7 @@ class ServerlessOffline {
224
250
  const {
225
251
  default: Http
226
252
  } = await Promise.resolve().then(() => _interopRequireWildcard(require('./events/http/index.js')));
227
- _classPrivateFieldLooseBase(this, _http)[_http] = new Http(_classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options], _classPrivateFieldLooseBase(this, _lambda)[_lambda]);
253
+ _classPrivateFieldLooseBase(this, _http)[_http] = new Http(_classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options], _classPrivateFieldLooseBase(this, _lambda)[_lambda], this.v3Utils);
228
254
  await _classPrivateFieldLooseBase(this, _http)[_http].registerPlugins();
229
255
 
230
256
  _classPrivateFieldLooseBase(this, _http)[_http].create(events); // HTTP Proxy defined in Resource
@@ -246,7 +272,7 @@ class ServerlessOffline {
246
272
  const {
247
273
  default: Schedule
248
274
  } = await Promise.resolve().then(() => _interopRequireWildcard(require('./events/schedule/index.js')));
249
- _classPrivateFieldLooseBase(this, _schedule)[_schedule] = new Schedule(_classPrivateFieldLooseBase(this, _lambda)[_lambda], _classPrivateFieldLooseBase(this, _serverless)[_serverless].service.provider.region);
275
+ _classPrivateFieldLooseBase(this, _schedule)[_schedule] = new Schedule(_classPrivateFieldLooseBase(this, _lambda)[_lambda], _classPrivateFieldLooseBase(this, _serverless)[_serverless].service.provider.region, this.v3Utils);
250
276
 
251
277
  _classPrivateFieldLooseBase(this, _schedule)[_schedule].create(events);
252
278
  }
@@ -255,7 +281,7 @@ class ServerlessOffline {
255
281
  const {
256
282
  default: WebSocket
257
283
  } = await Promise.resolve().then(() => _interopRequireWildcard(require('./events/websocket/index.js')));
258
- _classPrivateFieldLooseBase(this, _webSocket)[_webSocket] = new WebSocket(_classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options], _classPrivateFieldLooseBase(this, _lambda)[_lambda]);
284
+ _classPrivateFieldLooseBase(this, _webSocket)[_webSocket] = new WebSocket(_classPrivateFieldLooseBase(this, _serverless)[_serverless], _classPrivateFieldLooseBase(this, _options)[_options], _classPrivateFieldLooseBase(this, _lambda)[_lambda], this.v3Utils);
259
285
 
260
286
  _classPrivateFieldLooseBase(this, _webSocket)[_webSocket].create(events);
261
287
 
@@ -292,8 +318,16 @@ class ServerlessOffline {
292
318
  headers: _classPrivateFieldLooseBase(this, _options)[_options].corsAllowHeaders,
293
319
  origin: _classPrivateFieldLooseBase(this, _options)[_options].corsAllowOrigin
294
320
  };
295
- (0, _serverlessLog.default)(`Starting Offline: ${provider.stage}/${provider.region}.`);
296
- (0, _debugLog.default)('options:', _classPrivateFieldLooseBase(this, _options)[_options]);
321
+
322
+ if (this.log) {
323
+ this.log.notice();
324
+ this.log.notice(`Starting Offline at stage ${provider.stage} ${_chalk.default.gray(`{${provider.region})`)}`);
325
+ this.log.notice();
326
+ this.log.debug('options:', _classPrivateFieldLooseBase(this, _options)[_options]);
327
+ } else {
328
+ (0, _serverlessLog.default)(`Starting Offline: ${provider.stage} ${provider.region}.`);
329
+ (0, _debugLog.default)('options:', _classPrivateFieldLooseBase(this, _options)[_options]);
330
+ }
297
331
  }
298
332
 
299
333
  _getEvents() {
@@ -338,7 +372,12 @@ class ServerlessOffline {
338
372
  };
339
373
  } else if (typeof httpEvent.http === 'object') {
340
374
  if (!httpEvent.http.method) {
341
- (0, _serverlessLog.logWarning)(`Event definition is missing a method for function "${functionKey}"`);
375
+ if (this.log) {
376
+ this.log.warning(`Event definition is missing a method for function "${functionKey}"`);
377
+ } else {
378
+ (0, _serverlessLog.logWarning)(`Event definition is missing a method for function "${functionKey}"`);
379
+ }
380
+
342
381
  httpEvent.http.method = '';
343
382
  }
344
383
 
@@ -349,7 +388,12 @@ class ServerlessOffline {
349
388
  delete httpEvent.http.method;
350
389
  delete httpEvent.http.path;
351
390
  } else {
352
- (0, _serverlessLog.logWarning)(`Event definition must be a string or object but received ${typeof httpEvent.http} for function "${functionKey}"`);
391
+ if (this.log) {
392
+ this.log.warning(`Event definition must be a string or object but received ${typeof httpEvent.http} for function "${functionKey}"`);
393
+ } else {
394
+ (0, _serverlessLog.logWarning)(`Event definition must be a string or object but received ${typeof httpEvent.http} for function "${functionKey}"`);
395
+ }
396
+
353
397
  httpEvent.http.routeKey = '';
354
398
  }
355
399
 
@@ -381,10 +425,20 @@ class ServerlessOffline {
381
425
  }); // for simple API Key authentication model
382
426
 
383
427
  if (hasPrivateHttpEvent) {
384
- (0, _serverlessLog.default)(`Key with token: ${_classPrivateFieldLooseBase(this, _options)[_options].apiKey}`);
428
+ if (this.log) {
429
+ this.log.notice(`Key with token: ${_classPrivateFieldLooseBase(this, _options)[_options].apiKey}`);
430
+ } else {
431
+ (0, _serverlessLog.default)(`Key with token: ${_classPrivateFieldLooseBase(this, _options)[_options].apiKey}`);
432
+ }
385
433
 
386
434
  if (_classPrivateFieldLooseBase(this, _options)[_options].noAuth) {
387
- (0, _serverlessLog.default)('Authorizers are turned off. You do not need to use x-api-key header.');
435
+ if (this.log) {
436
+ this.log.notice('Authorizers are turned off. You do not need to use x-api-key header.');
437
+ } else {
438
+ (0, _serverlessLog.default)('Authorizers are turned off. You do not need to use x-api-key header.');
439
+ }
440
+ } else if (this.log) {
441
+ this.log.notice('Remember to use x-api-key on the request headers');
388
442
  } else {
389
443
  (0, _serverlessLog.default)('Remember to use x-api-key on the request headers');
390
444
  }
@@ -408,13 +462,26 @@ class ServerlessOffline {
408
462
  const currentVersion = _classPrivateFieldLooseBase(this, _serverless)[_serverless].version;
409
463
 
410
464
  const requiredVersionRange = _package.default.peerDependencies.serverless;
465
+
466
+ if ((0, _semver.parse)(currentVersion).prerelease.length) {
467
+ // Do not validate, if run against serverless pre-release
468
+ return;
469
+ }
470
+
411
471
  const versionIsSatisfied = (0, _index.satisfiesVersionRange)(currentVersion, requiredVersionRange);
412
472
 
413
473
  if (!versionIsSatisfied) {
414
- (0, _serverlessLog.logWarning)(`serverless-offline requires serverless version ${requiredVersionRange} but found version ${currentVersion}.
474
+ if (this.log) {
475
+ this.log.warning(`serverless-offline requires serverless version ${requiredVersionRange} but found version ${currentVersion}.
415
476
  Be aware that functionality might be limited or contains bugs.
416
477
  To avoid any issues update serverless to a later version.
417
478
  `);
479
+ } else {
480
+ (0, _serverlessLog.logWarning)(`serverless-offline requires serverless version ${requiredVersionRange} but found version ${currentVersion}.
481
+ Be aware that functionality might be limited or contains bugs.
482
+ To avoid any issues update serverless to a later version.
483
+ `);
484
+ }
418
485
  }
419
486
  }
420
487
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.DEFAULT_DOCKER_CONTAINER_PORT = exports.DEFAULT_WEBSOCKETS_ROUTE = exports.DEFAULT_WEBSOCKETS_API_ROUTE_SELECTION_EXPRESSION = exports.SERVER_SHUTDOWN_TIMEOUT = exports.DEFAULT_LAMBDA_TIMEOUT = exports.DEFAULT_LAMBDA_MEMORY_SIZE = exports.DEFAULT_LAMBDA_RUNTIME = exports.CUSTOM_OPTION = exports.BASE_URL_PLACEHOLDER = void 0;
6
+ exports.SERVER_SHUTDOWN_TIMEOUT = exports.DEFAULT_WEBSOCKETS_ROUTE = exports.DEFAULT_WEBSOCKETS_API_ROUTE_SELECTION_EXPRESSION = exports.DEFAULT_LAMBDA_TIMEOUT = exports.DEFAULT_LAMBDA_RUNTIME = exports.DEFAULT_LAMBDA_MEMORY_SIZE = exports.DEFAULT_DOCKER_CONTAINER_PORT = exports.CUSTOM_OPTION = exports.BASE_URL_PLACEHOLDER = void 0;
7
7
  // dummy placeholder url for the WHATWG URL constructor
8
8
  // https://github.com/nodejs/node/issues/12682
9
9
  const BASE_URL_PLACEHOLDER = 'http://example';
@@ -29,7 +29,7 @@ exports.supportedNodejs = supportedNodejs;
29
29
  const supportedProvided = new Set(['provided']); // PYTHON
30
30
 
31
31
  exports.supportedProvided = supportedProvided;
32
- const supportedPython = new Set(['python2.7', 'python3.6', 'python3.7', 'python3.8']); // RUBY
32
+ const supportedPython = new Set(['python2.7', 'python3.6', 'python3.7', 'python3.8', 'python3.9']); // RUBY
33
33
 
34
34
  exports.supportedPython = supportedPython;
35
35
  const supportedRuby = new Set(['ruby2.5', 'ruby2.7']); // deprecated runtimes
@@ -41,12 +41,12 @@ function getResponseContentType(fep) {
41
41
  return 'application/json';
42
42
  }
43
43
 
44
- var _handlerPath = _classPrivateFieldLooseKey("handlerPath");
44
+ var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
45
45
 
46
- var _http = _classPrivateFieldLooseKey("http");
46
+ var _http = /*#__PURE__*/_classPrivateFieldLooseKey("http");
47
47
 
48
48
  class Endpoint {
49
- constructor(handlerPath, http) {
49
+ constructor(handlerPath, http, v3Utils) {
50
50
  Object.defineProperty(this, _handlerPath, {
51
51
  writable: true,
52
52
  value: null
@@ -57,6 +57,14 @@ class Endpoint {
57
57
  });
58
58
  _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
59
59
  _classPrivateFieldLooseBase(this, _http)[_http] = http;
60
+
61
+ if (v3Utils) {
62
+ this.log = v3Utils.log;
63
+ this.progress = v3Utils.progress;
64
+ this.writeText = v3Utils.writeText;
65
+ this.v3Utils = v3Utils;
66
+ }
67
+
60
68
  return this._generate();
61
69
  } // determine whether we have function level overrides for velocity templates
62
70
  // if not we will use defaults
@@ -79,15 +87,21 @@ class Endpoint {
79
87
  });
80
88
  } // load request template if exists if not use default from serverless offline
81
89
  else if ((0, _fs.existsSync)(reqFilename)) {
82
- fep.requestTemplates['application/json'] = readFile(reqFilename);
83
- } else {
84
- fep.requestTemplates['application/json'] = defaultRequestTemplate;
85
- } // determine response template
90
+ fep.requestTemplates['application/json'] = readFile(reqFilename);
91
+ } else {
92
+ fep.requestTemplates['application/json'] = defaultRequestTemplate;
93
+ } // determine response template
86
94
 
87
95
 
88
96
  const resFilename = `${_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]}.res.vm`;
89
97
  fep.responseContentType = getResponseContentType(fep);
90
- (0, _debugLog.default)('Response Content-Type ', fep.responseContentType); // load response template from http response template, or load file if exists other use default
98
+
99
+ if (this.log) {
100
+ this.log.debug('Response Content-Type ', fep.responseContentType);
101
+ } else {
102
+ (0, _debugLog.default)('Response Content-Type ', fep.responseContentType);
103
+ } // load response template from http response template, or load file if exists other use default
104
+
91
105
 
92
106
  if (fep.response && fep.response.template) {
93
107
  fep.responses.default.responseTemplates[fep.responseContentType] = fep.response.template;
@@ -97,7 +111,11 @@ class Endpoint {
97
111
  fep.responses.default.responseTemplates[fep.responseContentType] = defaultResponseTemplate;
98
112
  }
99
113
  } catch (err) {
100
- (0, _debugLog.default)(`Error: ${err}`);
114
+ if (this.log) {
115
+ this.log.debug(`Error: ${err}`);
116
+ } else {
117
+ (0, _debugLog.default)(`Error: ${err}`);
118
+ }
101
119
  }
102
120
 
103
121
  return fep;
@@ -17,15 +17,15 @@ var id = 0;
17
17
 
18
18
  function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
19
19
 
20
- var _httpServer = _classPrivateFieldLooseKey("httpServer");
20
+ var _httpServer = /*#__PURE__*/_classPrivateFieldLooseKey("httpServer");
21
21
 
22
22
  class Http {
23
- constructor(serverless, options, lambda) {
23
+ constructor(serverless, options, lambda, v3Utils) {
24
24
  Object.defineProperty(this, _httpServer, {
25
25
  writable: true,
26
26
  value: null
27
27
  });
28
- _classPrivateFieldLooseBase(this, _httpServer)[_httpServer] = new _HttpServer.default(serverless, options, lambda);
28
+ _classPrivateFieldLooseBase(this, _httpServer)[_httpServer] = new _HttpServer.default(serverless, options, lambda, v3Utils);
29
29
  }
30
30
 
31
31
  start() {