serverless-offline 8.2.0 → 8.5.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 (57) hide show
  1. package/README.md +157 -116
  2. package/dist/ServerlessOffline.js +98 -26
  3. package/dist/config/commandOptions.js +4 -0
  4. package/dist/config/constants.js +1 -1
  5. package/dist/config/defaultOptions.js +1 -0
  6. package/dist/events/http/Endpoint.js +27 -9
  7. package/dist/events/http/Http.js +3 -3
  8. package/dist/events/http/HttpServer.js +355 -82
  9. package/dist/events/http/authFunctionNameExtractor.js +14 -8
  10. package/dist/events/http/authJWTSettingsExtractor.js +14 -7
  11. package/dist/events/http/createAuthScheme.js +44 -9
  12. package/dist/events/http/createJWTAuthScheme.js +52 -13
  13. package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +7 -6
  14. package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +38 -7
  15. package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +37 -6
  16. package/dist/events/http/lambda-events/VelocityContext.js +4 -4
  17. package/dist/events/http/lambda-events/index.js +4 -4
  18. package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +19 -7
  19. package/dist/events/schedule/Schedule.js +45 -10
  20. package/dist/events/websocket/HttpServer.js +24 -7
  21. package/dist/events/websocket/WebSocket.js +14 -6
  22. package/dist/events/websocket/WebSocketClients.js +127 -38
  23. package/dist/events/websocket/WebSocketServer.js +79 -11
  24. package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +9 -2
  25. package/dist/events/websocket/http-routes/connections/ConnectionsController.js +1 -1
  26. package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +28 -5
  27. package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +5 -5
  28. package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +1 -1
  29. package/dist/events/websocket/lambda-events/WebSocketEvent.js +3 -3
  30. package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +4 -4
  31. package/dist/lambda/HttpServer.js +34 -10
  32. package/dist/lambda/Lambda.js +15 -7
  33. package/dist/lambda/LambdaContext.js +1 -1
  34. package/dist/lambda/LambdaFunction.js +40 -23
  35. package/dist/lambda/LambdaFunctionPool.js +9 -8
  36. package/dist/lambda/handler-runner/HandlerRunner.js +51 -16
  37. package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +21 -8
  38. package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +1 -10
  39. package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +168 -69
  40. package/dist/lambda/handler-runner/docker-runner/DockerImage.js +21 -5
  41. package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +4 -4
  42. package/dist/lambda/handler-runner/go-runner/GoRunner.js +211 -0
  43. package/dist/lambda/handler-runner/go-runner/index.js +15 -0
  44. package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +16 -22
  45. package/dist/lambda/handler-runner/java-runner/JavaRunner.js +26 -14
  46. package/dist/lambda/handler-runner/python-runner/PythonRunner.js +20 -7
  47. package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +22 -24
  48. package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +2 -2
  49. package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +1 -11
  50. package/dist/lambda/routes/invocations/InvocationsController.js +30 -11
  51. package/dist/lambda/routes/invocations/invocationsRoute.js +4 -3
  52. package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +2 -6
  53. package/dist/serverlessLog.js +1 -1
  54. package/dist/utils/checkGoVersion.js +27 -0
  55. package/dist/utils/getHttpApiCorsConfig.js +18 -5
  56. package/dist/utils/index.js +24 -16
  57. package/package.json +86 -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
 
@@ -134,7 +150,7 @@ class ServerlessOffline {
134
150
  eventModules.push(this._createHttp(httpEvents));
135
151
  }
136
152
 
137
- if (scheduleEvents.length > 0) {
153
+ if (!_classPrivateFieldLooseBase(this, _options)[_options].disableScheduledEvents && scheduleEvents.length > 0) {
138
154
  eventModules.push(this._createSchedule(scheduleEvents));
139
155
  }
140
156
 
@@ -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,12 +388,22 @@ 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
 
356
400
  httpEvent.http.isHttpApi = true;
357
- httpEvent.http.payload = service.provider.httpApi && service.provider.httpApi.payload ? service.provider.httpApi.payload : '2.0';
401
+
402
+ if (functionDefinition.httpApi && functionDefinition.httpApi.payload) {
403
+ httpEvent.http.payload = functionDefinition.httpApi.payload;
404
+ } else {
405
+ httpEvent.http.payload = service.provider.httpApi && service.provider.httpApi.payload ? service.provider.httpApi.payload : '2.0';
406
+ }
358
407
  }
359
408
 
360
409
  if (http && http.private) {
@@ -381,10 +430,20 @@ class ServerlessOffline {
381
430
  }); // for simple API Key authentication model
382
431
 
383
432
  if (hasPrivateHttpEvent) {
384
- (0, _serverlessLog.default)(`Key with token: ${_classPrivateFieldLooseBase(this, _options)[_options].apiKey}`);
433
+ if (this.log) {
434
+ this.log.notice(`Key with token: ${_classPrivateFieldLooseBase(this, _options)[_options].apiKey}`);
435
+ } else {
436
+ (0, _serverlessLog.default)(`Key with token: ${_classPrivateFieldLooseBase(this, _options)[_options].apiKey}`);
437
+ }
385
438
 
386
439
  if (_classPrivateFieldLooseBase(this, _options)[_options].noAuth) {
387
- (0, _serverlessLog.default)('Authorizers are turned off. You do not need to use x-api-key header.');
440
+ if (this.log) {
441
+ this.log.notice('Authorizers are turned off. You do not need to use x-api-key header.');
442
+ } else {
443
+ (0, _serverlessLog.default)('Authorizers are turned off. You do not need to use x-api-key header.');
444
+ }
445
+ } else if (this.log) {
446
+ this.log.notice('Remember to use x-api-key on the request headers');
388
447
  } else {
389
448
  (0, _serverlessLog.default)('Remember to use x-api-key on the request headers');
390
449
  }
@@ -408,13 +467,26 @@ class ServerlessOffline {
408
467
  const currentVersion = _classPrivateFieldLooseBase(this, _serverless)[_serverless].version;
409
468
 
410
469
  const requiredVersionRange = _package.default.peerDependencies.serverless;
470
+
471
+ if ((0, _semver.parse)(currentVersion).prerelease.length) {
472
+ // Do not validate, if run against serverless pre-release
473
+ return;
474
+ }
475
+
411
476
  const versionIsSatisfied = (0, _index.satisfiesVersionRange)(currentVersion, requiredVersionRange);
412
477
 
413
478
  if (!versionIsSatisfied) {
414
- (0, _serverlessLog.logWarning)(`serverless-offline requires serverless version ${requiredVersionRange} but found version ${currentVersion}.
479
+ if (this.log) {
480
+ this.log.warning(`serverless-offline requires serverless version ${requiredVersionRange} but found version ${currentVersion}.
415
481
  Be aware that functionality might be limited or contains bugs.
416
482
  To avoid any issues update serverless to a later version.
417
483
  `);
484
+ } else {
485
+ (0, _serverlessLog.logWarning)(`serverless-offline requires serverless version ${requiredVersionRange} but found version ${currentVersion}.
486
+ Be aware that functionality might be limited or contains bugs.
487
+ To avoid any issues update serverless to a later version.
488
+ `);
489
+ }
418
490
  }
419
491
  }
420
492
 
@@ -29,6 +29,10 @@ var _default = {
29
29
  usage: 'Used to disable cookie-validation on hapi.js-server',
30
30
  type: 'boolean'
31
31
  },
32
+ disableScheduledEvents: {
33
+ usage: 'Disables all scheduled events. Overrides configurations in serverless.yml. Default: false',
34
+ type: 'boolean'
35
+ },
32
36
  enforceSecureCookies: {
33
37
  usage: 'Enforce secure cookies',
34
38
  type: 'boolean'
@@ -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';
@@ -16,6 +16,7 @@ var _default = {
16
16
  corsAllowOrigin: '*',
17
17
  corsExposedHeaders: 'WWW-Authenticate,Server-Authorization',
18
18
  disableCookieValidation: false,
19
+ disableScheduledEvents: false,
19
20
  dockerHost: 'localhost',
20
21
  dockerHostServicePath: null,
21
22
  dockerNetwork: null,
@@ -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() {