serverless-offline 8.5.0 → 8.8.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 (44) hide show
  1. package/README.md +118 -77
  2. package/dist/ServerlessOffline.js +27 -8
  3. package/dist/config/supportedRuntimes.js +1 -1
  4. package/dist/debugLog.js +3 -1
  5. package/dist/events/{http/authCanExecuteResource.js → authCanExecuteResource.js} +0 -0
  6. package/dist/events/{http/authFunctionNameExtractor.js → authFunctionNameExtractor.js} +1 -1
  7. package/dist/events/{http/authMatchPolicyResource.js → authMatchPolicyResource.js} +0 -0
  8. package/dist/events/authValidateContext.js +53 -0
  9. package/dist/events/http/Endpoint.js +3 -1
  10. package/dist/events/http/HttpServer.js +28 -21
  11. package/dist/events/http/OfflineEndpoint.js +23 -25
  12. package/dist/events/http/createAuthScheme.js +23 -12
  13. package/dist/events/http/createJWTAuthScheme.js +6 -2
  14. package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +26 -0
  15. package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +16 -14
  16. package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +22 -12
  17. package/dist/events/http/lambda-events/VelocityContext.js +3 -1
  18. package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +4 -1
  19. package/dist/events/schedule/Schedule.js +10 -9
  20. package/dist/events/websocket/HttpServer.js +3 -1
  21. package/dist/events/websocket/WebSocketClients.js +224 -5
  22. package/dist/events/websocket/WebSocketServer.js +5 -6
  23. package/dist/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +99 -0
  24. package/dist/events/websocket/lambda-events/index.js +8 -0
  25. package/dist/index.js +0 -4
  26. package/dist/lambda/HttpServer.js +3 -1
  27. package/dist/lambda/Lambda.js +5 -1
  28. package/dist/lambda/LambdaFunction.js +1 -1
  29. package/dist/lambda/handler-runner/HandlerRunner.js +0 -27
  30. package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +15 -6
  31. package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +6 -5
  32. package/dist/lambda/handler-runner/go-runner/GoRunner.js +34 -15
  33. package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +23 -14
  34. package/dist/lambda/handler-runner/java-runner/JavaRunner.js +4 -3
  35. package/dist/lambda/handler-runner/python-runner/PythonRunner.js +15 -10
  36. package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +3 -6
  37. package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +3 -1
  38. package/dist/utils/generateHapiPath.js +1 -1
  39. package/dist/utils/getHttpApiCorsConfig.js +4 -8
  40. package/dist/utils/index.js +11 -4
  41. package/dist/utils/lowerCaseKeys.js +14 -0
  42. package/dist/utils/resolveJoins.js +4 -2
  43. package/package.json +26 -29
  44. package/dist/checkEngine.js +0 -21
@@ -5,12 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _os = require("os");
9
-
10
8
  var _fs = require("fs");
11
9
 
10
+ var _os = require("os");
11
+
12
12
  var _path = require("path");
13
13
 
14
+ var _process = _interopRequireWildcard(require("process"));
15
+
14
16
  var _execa = _interopRequireWildcard(require("execa"));
15
17
 
16
18
  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); }
@@ -33,9 +35,6 @@ const {
33
35
  parse,
34
36
  stringify
35
37
  } = JSON;
36
- const {
37
- cwd
38
- } = process;
39
38
  const PAYLOAD_IDENTIFIER = 'offline_payload';
40
39
 
41
40
  var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
@@ -48,6 +47,8 @@ var _tmpFile = /*#__PURE__*/_classPrivateFieldLooseKey("tmpFile");
48
47
 
49
48
  var _goEnv = /*#__PURE__*/_classPrivateFieldLooseKey("goEnv");
50
49
 
50
+ var _codeDir = /*#__PURE__*/_classPrivateFieldLooseKey("codeDir");
51
+
51
52
  class GoRunner {
52
53
  constructor(funOptions, env, v3Utils) {
53
54
  Object.defineProperty(this, _env, {
@@ -70,21 +71,24 @@ class GoRunner {
70
71
  writable: true,
71
72
  value: null
72
73
  });
74
+ Object.defineProperty(this, _codeDir, {
75
+ writable: true,
76
+ value: null
77
+ });
73
78
  const {
74
- handlerPath
79
+ handlerPath,
80
+ codeDir
75
81
  } = funOptions;
76
82
  _classPrivateFieldLooseBase(this, _env)[_env] = env;
77
83
  _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
84
+ _classPrivateFieldLooseBase(this, _codeDir)[_codeDir] = codeDir;
78
85
 
79
86
  if (v3Utils) {
80
87
  this.log = v3Utils.log;
81
88
  this.progress = v3Utils.progress;
82
89
  this.writeText = v3Utils.writeText;
83
90
  this.v3Utils = v3Utils;
84
- } // Make sure we have the mock-lambda runner
85
-
86
-
87
- (0, _execa.sync)('go', ['get', 'github.com/icarus-sullivan/mock-lambda@e065469']);
91
+ }
88
92
  }
89
93
 
90
94
  async cleanup() {
@@ -173,11 +177,20 @@ class GoRunner {
173
177
  } // Remove our root, since we want to invoke go relatively
174
178
 
175
179
 
176
- const cwdPath = `${_classPrivateFieldLooseBase(this, _tmpFile)[_tmpFile]}`.replace(`${cwd()}${_path.sep}`, '');
180
+ const cwdPath = `${_classPrivateFieldLooseBase(this, _tmpFile)[_tmpFile]}`.replace(`${(0, _process.cwd)()}${_path.sep}`, '');
181
+
182
+ try {
183
+ (0, _process.chdir)(cwdPath.substring(0, cwdPath.indexOf('main.go'))); // Make sure we have the mock-lambda runner
184
+
185
+ (0, _execa.sync)('go', ['get', 'github.com/icarus-sullivan/mock-lambda@e065469']);
186
+ (0, _execa.sync)('go', ['build']);
187
+ } catch (e) {// @ignore
188
+ }
189
+
177
190
  const {
178
191
  stdout,
179
192
  stderr
180
- } = await (0, _execa.default)(`go`, ['run', cwdPath], {
193
+ } = await (0, _execa.default)(`./tmp`, {
181
194
  stdio: 'pipe',
182
195
  env: { ..._classPrivateFieldLooseBase(this, _env)[_env],
183
196
  ..._classPrivateFieldLooseBase(this, _goEnv)[_goEnv],
@@ -192,17 +205,23 @@ class GoRunner {
192
205
  IS_LAMBDA_AUTHORIZER: event.type === 'REQUEST' || event.type === 'TOKEN',
193
206
  IS_LAMBDA_REQUEST_AUTHORIZER: event.type === 'REQUEST',
194
207
  IS_LAMBDA_TOKEN_AUTHORIZER: event.type === 'TOKEN',
195
- PATH: process.env.PATH
208
+ PATH: _process.default.env.PATH
196
209
  },
197
210
  encoding: 'utf-8'
198
- }); // Clean up after we created the temporary file
199
-
211
+ });
200
212
  await this.cleanup();
201
213
 
202
214
  if (stderr) {
203
215
  return stderr;
204
216
  }
205
217
 
218
+ try {
219
+ // refresh go.mod
220
+ (0, _execa.sync)('go', ['mod', 'tidy']);
221
+ (0, _process.chdir)(_classPrivateFieldLooseBase(this, _codeDir)[_codeDir]);
222
+ } catch (e) {// @ignore
223
+ }
224
+
206
225
  return this._parsePayload(stdout);
207
226
  }
208
227
 
@@ -5,11 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ var _fs = require("fs");
9
+
10
+ var _path = require("path");
11
+
8
12
  var _perf_hooks = require("perf_hooks");
9
13
 
10
- var path = _interopRequireWildcard(require("path"));
14
+ var _process = _interopRequireDefault(require("process"));
11
15
 
12
- var fs = _interopRequireWildcard(require("fs"));
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
17
 
14
18
  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
19
 
@@ -21,15 +25,20 @@ var id = 0;
21
25
 
22
26
  function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
23
27
 
28
+ const {
29
+ assign,
30
+ keys
31
+ } = Object;
32
+
24
33
  const clearModule = (fP, opts) => {
25
34
  const options = opts !== null && opts !== void 0 ? opts : {};
26
35
  let filePath = fP;
27
36
 
28
37
  if (!require.cache[filePath]) {
29
- const dirname = path.dirname(filePath);
38
+ const dirName = (0, _path.dirname)(filePath);
30
39
 
31
- for (const fn of fs.readdirSync(dirname)) {
32
- const fullPath = path.resolve(dirname, fn);
40
+ for (const fn of (0, _fs.readdirSync)(dirName)) {
41
+ const fullPath = (0, _path.resolve)(dirName, fn);
33
42
 
34
43
  if (fullPath.substr(0, filePath.length + 1) === `${filePath}.` && require.cache[fullPath]) {
35
44
  filePath = fullPath;
@@ -58,8 +67,8 @@ const clearModule = (fP, opts) => {
58
67
  delete require.cache[filePath];
59
68
 
60
69
  for (const c of cld) {
61
- // Unload any non node_modules children
62
- if (!c.filename.match(/node_modules/)) {
70
+ // Unload any non node_modules and non-binary children
71
+ if (!c.filename.match(/\/node_modules\//i) && !c.filename.match(/\.node$/i)) {
63
72
  clearModule(c.id, { ...options,
64
73
  cleanup: false
65
74
  });
@@ -73,8 +82,8 @@ const clearModule = (fP, opts) => {
73
82
  do {
74
83
  cleanup = false;
75
84
 
76
- for (const fn of Object.keys(require.cache)) {
77
- if (require.cache[fn] && require.cache[fn].id !== '.' && require.cache[fn].parent && require.cache[fn].parent.id !== '.' && !require.cache[require.cache[fn].parent.id]) {
85
+ for (const fn of keys(require.cache)) {
86
+ if (require.cache[fn] && require.cache[fn].id !== '.' && require.cache[fn].parent && require.cache[fn].parent.id !== '.' && !require.cache[require.cache[fn].parent.id] && !fn.match(/\/node_modules\//i) && !fn.match(/\.node$/i)) {
78
87
  delete require.cache[fn];
79
88
  cleanup = true;
80
89
  }
@@ -144,7 +153,7 @@ class InProcessRunner {
144
153
  // e.g. process.env.foo = 1 should be coerced to '1' (string)
145
154
 
146
155
 
147
- Object.assign(process.env, _classPrivateFieldLooseBase(this, _env)[_env]); // lazy load handler with first usage
156
+ assign(_process.default.env, _classPrivateFieldLooseBase(this, _env)[_env]); // lazy load handler with first usage
148
157
 
149
158
  if (!_classPrivateFieldLooseBase(this, _allowCache)[_allowCache]) {
150
159
  clearModule(_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath], {
@@ -161,19 +170,19 @@ class InProcessRunner {
161
170
  }
162
171
 
163
172
  let callback;
164
- const callbackCalled = new Promise((resolve, reject) => {
173
+ const callbackCalled = new Promise((res, rej) => {
165
174
  callback = (err, data) => {
166
175
  if (err === 'Unauthorized') {
167
- resolve('Unauthorized');
176
+ res('Unauthorized');
168
177
  return;
169
178
  }
170
179
 
171
180
  if (err) {
172
- reject(err);
181
+ rej(err);
173
182
  return;
174
183
  }
175
184
 
176
- resolve(data);
185
+ res(data);
177
186
  };
178
187
  });
179
188
 
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
 
8
8
  var _os = require("os");
9
9
 
10
+ var _process = _interopRequireDefault(require("process"));
11
+
10
12
  var _nodeFetch = _interopRequireDefault(require("node-fetch"));
11
13
 
12
14
  var _javaInvokeLocal = require("java-invoke-local");
@@ -116,14 +118,13 @@ class JavaRunner {
116
118
  data: input,
117
119
  function: _classPrivateFieldLooseBase(this, _functionName)[_functionName],
118
120
  jsonOutput: true,
119
- serverlessOffline: true,
120
- allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache]
121
+ serverlessOffline: true
121
122
  });
122
123
  const httpOptions = {
123
124
  method: 'POST',
124
125
  body: data
125
126
  };
126
- const port = process.env.JAVA_OFFLINE_SERVER || 8080;
127
+ const port = _process.default.env.JAVA_OFFLINE_SERVER || 8080;
127
128
  const response = await (0, _nodeFetch.default)(`http://localhost:${port}/invoke`, httpOptions);
128
129
  result = await response.text();
129
130
  } catch (e) {
@@ -5,18 +5,22 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ var _child_process = require("child_process");
9
+
8
10
  var _os = require("os");
9
11
 
10
12
  var _path = require("path");
11
13
 
12
- var _child_process = require("child_process");
13
-
14
- var _extend = _interopRequireDefault(require("extend"));
14
+ var _process = _interopRequireWildcard(require("process"));
15
15
 
16
16
  var _readline = _interopRequireDefault(require("readline"));
17
17
 
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
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
+
20
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; }
21
25
 
22
26
  var id = 0;
@@ -28,8 +32,8 @@ const {
28
32
  stringify
29
33
  } = JSON;
30
34
  const {
31
- cwd
32
- } = process;
35
+ assign
36
+ } = Object;
33
37
  const {
34
38
  has
35
39
  } = Reflect;
@@ -84,15 +88,15 @@ class PythonRunner {
84
88
  this.v3Utils = v3Utils;
85
89
  }
86
90
 
87
- if (process.env.VIRTUAL_ENV) {
91
+ if (_process.default.env.VIRTUAL_ENV) {
88
92
  const runtimeDir = (0, _os.platform)() === 'win32' ? 'Scripts' : 'bin';
89
- process.env.PATH = [(0, _path.join)(process.env.VIRTUAL_ENV, runtimeDir), _path.delimiter, process.env.PATH].join('');
93
+ _process.default.env.PATH = [(0, _path.join)(_process.default.env.VIRTUAL_ENV, runtimeDir), _path.delimiter, _process.default.env.PATH].join('');
90
94
  }
91
95
 
92
96
  const [pythonExecutable] = _classPrivateFieldLooseBase(this, _runtime)[_runtime].split('.');
93
97
 
94
- this.handlerProcess = (0, _child_process.spawn)(pythonExecutable, ['-u', (0, _path.resolve)(__dirname, 'invoke.py'), (0, _path.relative)(cwd(), _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]), _classPrivateFieldLooseBase(this, _handlerName)[_handlerName]], {
95
- env: (0, _extend.default)(process.env, _classPrivateFieldLooseBase(this, _env)[_env]),
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]),
96
100
  shell: true
97
101
  });
98
102
  this.handlerProcess.stdout.readline = _readline.default.createInterface({
@@ -168,7 +172,8 @@ class PythonRunner {
168
172
 
169
173
  this.handlerProcess.stdout.readline.on('line', onLine);
170
174
  this.handlerProcess.stderr.on('data', onErr);
171
- process.nextTick(() => {
175
+
176
+ _process.default.nextTick(() => {
172
177
  this.handlerProcess.stdin.write(input);
173
178
  this.handlerProcess.stdin.write('\n');
174
179
  });
@@ -9,6 +9,8 @@ var _os = require("os");
9
9
 
10
10
  var _path = require("path");
11
11
 
12
+ var _process = require("process");
13
+
12
14
  var _execa = _interopRequireDefault(require("execa"));
13
15
 
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -23,9 +25,6 @@ const {
23
25
  parse,
24
26
  stringify
25
27
  } = JSON;
26
- const {
27
- cwd
28
- } = process;
29
28
  const {
30
29
  has
31
30
  } = Reflect;
@@ -120,7 +119,7 @@ class RubyRunner {
120
119
  allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache]
121
120
  }); // console.log(input)
122
121
 
123
- const ruby = (0, _execa.default)(runtime, [(0, _path.resolve)(__dirname, 'invoke.rb'), (0, _path.relative)(cwd(), _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]), _classPrivateFieldLooseBase(this, _handlerName)[_handlerName]], {
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]], {
124
123
  env: _classPrivateFieldLooseBase(this, _env)[_env],
125
124
  input // shell: true,
126
125
 
@@ -138,8 +137,6 @@ class RubyRunner {
138
137
  } else {
139
138
  console.log(stderr);
140
139
  }
141
-
142
- return stderr;
143
140
  }
144
141
 
145
142
  return this._parsePayload(stdout);
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _process = require("process");
4
+
3
5
  var _worker_threads = require("worker_threads");
4
6
 
5
7
  var _index = _interopRequireDefault(require("../in-process-runner/index.js"));
@@ -22,7 +24,7 @@ _worker_threads.parentPort.on('message', async messageData => {
22
24
  allowCache
23
25
  } = messageData; // TODO we could probably cache this in the module scope?
24
26
 
25
- const inProcessRunner = new _index.default(functionKey, handlerPath, handlerName, process.env, timeout, allowCache);
27
+ const inProcessRunner = new _index.default(functionKey, handlerPath, handlerName, _process.env, timeout, allowCache);
26
28
  const result = await inProcessRunner.run(event, context); // TODO check serializeability (contains function, symbol etc)
27
29
 
28
30
  port.postMessage(result);
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = generateHapiPath;
7
7
 
8
- function generateHapiPath(path = '', options, serverless) {
8
+ function generateHapiPath(path, options, serverless) {
9
9
  // path must start with '/'
10
10
  let hapiPath = path.startsWith('/') ? path : `/${path}`;
11
11
 
@@ -7,8 +7,6 @@ exports.default = getHttpApiCorsConfig;
7
7
 
8
8
  var _debugLog = _interopRequireDefault(require("../debugLog.js"));
9
9
 
10
- var _serverlessLog = require("../serverlessLog.js");
11
-
12
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
11
 
14
12
  function getHttpApiCorsConfig(httpApiCors, {
@@ -24,20 +22,18 @@ function getHttpApiCorsConfig(httpApiCors, {
24
22
  };
25
23
 
26
24
  if (log) {
27
- log.warning(c);
25
+ log.debug('Using CORS policy', c);
28
26
  } else {
29
- (0, _debugLog.default)(c);
30
- (0, _serverlessLog.logWarning)(c);
27
+ (0, _debugLog.default)('Using CORS policy', c);
31
28
  }
32
29
 
33
30
  return c;
34
31
  }
35
32
 
36
33
  if (log) {
37
- log.warning(httpApiCors);
34
+ log.debug('Using CORS policy', httpApiCors);
38
35
  } else {
39
- (0, _debugLog.default)(httpApiCors);
40
- (0, _serverlessLog.logWarning)(httpApiCors);
36
+ (0, _debugLog.default)('Using CORS policy', httpApiCors);
41
37
  }
42
38
 
43
39
  return httpApiCors;
@@ -59,6 +59,12 @@ Object.defineProperty(exports, "jsonPath", {
59
59
  return _jsonPath.default;
60
60
  }
61
61
  });
62
+ Object.defineProperty(exports, "lowerCaseKeys", {
63
+ enumerable: true,
64
+ get: function () {
65
+ return _lowerCaseKeys.default;
66
+ }
67
+ });
62
68
  exports.nullIfEmpty = nullIfEmpty;
63
69
  Object.defineProperty(exports, "parseHeaders", {
64
70
  enumerable: true,
@@ -110,6 +116,8 @@ var _getHttpApiCorsConfig = _interopRequireDefault(require("./getHttpApiCorsConf
110
116
 
111
117
  var _jsonPath = _interopRequireDefault(require("./jsonPath.js"));
112
118
 
119
+ var _lowerCaseKeys = _interopRequireDefault(require("./lowerCaseKeys.js"));
120
+
113
121
  var _parseHeaders = _interopRequireDefault(require("./parseHeaders.js"));
114
122
 
115
123
  var _parseMultiValueHeaders = _interopRequireDefault(require("./parseMultiValueHeaders.js"));
@@ -130,16 +138,15 @@ var _generateHapiPath = _interopRequireDefault(require("./generateHapiPath.js"))
130
138
 
131
139
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
132
140
 
141
+ // export { default as baseImage } from './baseImage.js'
133
142
  const {
134
143
  isArray
135
144
  } = Array;
136
145
  const {
137
146
  keys
138
- } = Object;
139
-
140
- // export { default as baseImage } from './baseImage.js'
141
- // Detect the toString encoding from the request headers content-type
147
+ } = Object; // Detect the toString encoding from the request headers content-type
142
148
  // enhance if further content types need to be non utf8 encoded.
149
+
143
150
  function detectEncoding(request) {
144
151
  const contentType = request.headers['content-type'];
145
152
  return typeof contentType === 'string' && contentType.includes('multipart/form-data') ? 'binary' : 'utf8';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = parseHeaders;
7
+ const {
8
+ entries,
9
+ fromEntries
10
+ } = Object; // (obj: { [string]: string }): { [Lowercase<string>]: string }
11
+
12
+ function parseHeaders(obj) {
13
+ return fromEntries(entries(obj).map(([k, v]) => [k.toLowerCase(), v]));
14
+ }
@@ -4,15 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = resolveJoins;
7
+ const {
8
+ keys
9
+ } = Object; // Used to resolve Fn::Join in environment variables
7
10
 
8
- // Used to resolve Fn::Join in environment variables
9
11
  function resolveJoins(environment) {
10
12
  if (!environment) {
11
13
  return undefined;
12
14
  }
13
15
 
14
16
  const newEnv = {};
15
- Object.keys(environment).forEach(key => {
17
+ keys(environment).forEach(key => {
16
18
  const value = environment[key];
17
19
 
18
20
  if (!value) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "dedicatedTo": "Blue, a great migrating bird.",
3
3
  "name": "serverless-offline",
4
- "version": "8.5.0",
4
+ "version": "8.8.0",
5
5
  "description": "Emulate AWS λ and API Gateway locally when developing your Serverless project",
6
6
  "license": "MIT",
7
7
  "main": "dist/main.js",
@@ -117,6 +117,8 @@
117
117
  "Kiryl Yermakou (https://github.com/rma4ok)",
118
118
  "kobanyan (https://github.com/kobanyan)",
119
119
  "Leonardo Alifraco (https://github.com/lalifraco-devspark)",
120
+ "Leonardo Medici (https://github.com/doclm)",
121
+ "Luciano Jesus Lima (https://github.com/brazilianbytes)",
120
122
  "Luke Chavers (https://github.com/vmadman)",
121
123
  "Manuel Böhm (https://github.com/boehmers)",
122
124
  "Marc Campbell (https://github.com/marccampbell)",
@@ -203,60 +205,55 @@
203
205
  "dependencies": {
204
206
  "@hapi/boom": "^9.1.4",
205
207
  "@hapi/h2o2": "^9.1.0",
206
- "@hapi/hapi": "^20.2.1",
207
- "aws-sdk": "^2.1076.0",
208
+ "@hapi/hapi": "^20.2.2",
209
+ "aws-sdk": "^2.1136.0",
208
210
  "boxen": "^5.1.2",
209
211
  "chalk": "^4.1.2",
210
212
  "cuid": "^2.1.8",
211
213
  "execa": "^5.1.1",
212
- "extend": "^3.0.2",
213
- "fs-extra": "^9.1.0",
214
+ "fs-extra": "^10.1.0",
214
215
  "java-invoke-local": "0.0.6",
215
216
  "js-string-escape": "^1.0.1",
216
217
  "jsonpath-plus": "^5.1.0",
217
218
  "jsonschema": "^1.4.0",
218
219
  "jsonwebtoken": "^8.5.1",
219
- "jszip": "^3.7.1",
220
- "luxon": "^1.28.0",
220
+ "jszip": "^3.9.1",
221
+ "luxon": "^2.4.0",
221
222
  "node-fetch": "^2.6.7",
222
- "node-schedule": "^1.3.3",
223
- "object.fromentries": "^2.0.5",
223
+ "node-schedule": "^2.1.0",
224
224
  "p-memoize": "^4.0.4",
225
225
  "p-queue": "^6.6.2",
226
- "p-retry": "^4.6.1",
227
- "please-upgrade-node": "^3.2.0",
228
- "portfinder": "^1.0.28",
229
- "semver": "^7.3.5",
226
+ "p-retry": "^4.6.2",
227
+ "semver": "^7.3.7",
230
228
  "update-notifier": "^5.1.0",
231
229
  "velocityjs": "^2.0.6",
232
230
  "ws": "^7.5.7"
233
231
  },
234
232
  "devDependencies": {
235
- "@babel/cli": "^7.17.3",
236
- "@babel/core": "^7.17.5",
237
- "@babel/plugin-proposal-class-properties": "^7.16.7",
233
+ "@babel/cli": "^7.17.10",
234
+ "@babel/core": "^7.17.12",
235
+ "@babel/plugin-proposal-class-properties": "^7.17.12",
238
236
  "@babel/plugin-proposal-dynamic-import": "^7.16.7",
239
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
240
- "@babel/plugin-proposal-optional-chaining": "^7.16.7",
241
- "@babel/plugin-transform-modules-commonjs": "^7.16.8",
242
- "@babel/register": "^7.17.0",
243
- "archiver": "^5.3.0",
244
- "babel-eslint": "^10.1.0",
237
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12",
238
+ "@babel/plugin-proposal-optional-chaining": "^7.17.12",
239
+ "@babel/plugin-transform-modules-commonjs": "^7.17.12",
240
+ "@babel/register": "^7.17.7",
241
+ "archiver": "^5.3.1",
245
242
  "copyfiles": "^2.4.1",
246
- "eslint": "^7.32.0",
247
- "eslint-config-airbnb-base": "^14.2.1",
248
- "eslint-config-prettier": "^7.2.0",
243
+ "eslint": "^8.15.0",
244
+ "eslint-config-airbnb-base": "^15.0.0",
245
+ "eslint-config-prettier": "^8.5.0",
249
246
  "eslint-plugin-import": "^2.25.4",
250
- "eslint-plugin-prettier": "^3.4.1",
247
+ "eslint-plugin-prettier": "^4.0.0",
251
248
  "git-list-updated": "^1.2.1",
252
249
  "husky": "^4.3.8",
253
250
  "jest": "^26.6.3",
254
251
  "lint-staged": "^11.2.6",
255
252
  "p-map": "^4.0.0",
256
- "prettier": "^2.5.1",
253
+ "prettier": "^2.6.2",
257
254
  "rimraf": "^3.0.2",
258
- "serverless": "^2.72.2",
259
- "standard-version": "^9.3.2"
255
+ "serverless": "^2.72.3",
256
+ "standard-version": "^9.5.0"
260
257
  },
261
258
  "peerDependencies": {
262
259
  "serverless": "^1.60.0 || 2 || 3"
@@ -1,21 +0,0 @@
1
- "use strict";
2
-
3
- var _pleaseUpgradeNode = _interopRequireDefault(require("please-upgrade-node"));
4
-
5
- var _package = _interopRequireDefault(require("../package.json"));
6
-
7
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
-
9
- // NOTE: important, don't use any new javascript language features in this file!
10
- // (other than es6 modules, which are transpiled)
11
- const currentNodeVersion = process.versions.node;
12
-
13
- const requiredNodeVersion = _package.default.engines.node.replace('>=', '');
14
-
15
- (0, _pleaseUpgradeNode.default)(_package.default, {
16
- message: function message() {
17
- return (// eslint-disable-next-line prefer-template
18
- 'serverless-offline requires node.js version ' + requiredNodeVersion + ' or higher, but found version ' + currentNodeVersion + '. Please upgrade!'
19
- );
20
- }
21
- });