serverless-offline 8.3.1 → 8.4.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
+
5
+ ## [8.4.0](https://github.com/dherault/serverless-offline/compare/v8.3.1...v8.4.0) (2022-01-28)
6
+
7
+ ### Features
8
+
9
+ - `go-runner` implementation ([#1320](https://github.com/dherault/serverless-offline/issues/1320)) ([6bb54fd](https://github.com/dherault/serverless-offline/commit/6bb54fdccebd3db61221a9b8f709414876086324))
10
+ - `--disableScheduledEvents` CLI param support ([#1185](https://github.com/dherault/serverless-offline/issues/1185)) ([4503567](https://github.com/dherault/serverless-offline/commit/4503567cdb8fa31ac9df98b667a403b0408f8444))
11
+
12
+ ### Bug Fixes
13
+
14
+ - Handle custom authorizer 401 in non in-process runners ([#1319](https://github.com/dherault/serverless-offline/issues/1319)) ([8d61bde](https://github.com/dherault/serverless-offline/commit/8d61bde74cdfb37410a5c1952ca608e815eeb1cf))
15
+ - Support `httpApi` payload override on function level ([#1312](https://github.com/dherault/serverless-offline/issues/1312)) ([8db63dd](https://github.com/dherault/serverless-offline/commit/8db63dda6054198775ed3b567dc3c1dbf73eb574))
16
+
17
+ ### [8.3.1](https://github.com/dherault/serverless-offline/compare/v8.3.0...v8.3.1) (2021-11-25)
18
+
19
+ ### Bug Fixes
20
+
21
+ - Fix handling of modern logs (`Cannot read properties of undefined (reading 'notice')` error)
package/README.md CHANGED
@@ -31,7 +31,7 @@ To do so, it starts an HTTP server that handles the request's lifecycle like API
31
31
 
32
32
  **Features:**
33
33
 
34
- - [Node.js](https://nodejs.org), [Python](https://www.python.org), [Ruby](https://www.ruby-lang.org) <!-- and [Go](https://golang.org) --> λ runtimes.
34
+ - [Node.js](https://nodejs.org), [Python](https://www.python.org), [Ruby](https://www.ruby-lang.org) and [Go](https://golang.org) λ runtimes.
35
35
  - Velocity templates support.
36
36
  - Lazy loading of your handler files.
37
37
  - And more: integrations, authorizers, proxies, timeouts, responseParameters, HTTPS, CORS, etc...
@@ -115,6 +115,7 @@ All CLI options are optional:
115
115
  --corsDisallowCredentials When provided, the default Access-Control-Allow-Credentials header value will be passed as 'false'. Default: true
116
116
  --corsExposedHeaders Used as additional Access-Control-Exposed-Headers header value for responses. Delimit multiple values with commas. Default: 'WWW-Authenticate,Server-Authorization'
117
117
  --disableCookieValidation Used to disable cookie-validation on hapi.js-server
118
+ --disableScheduledEvents Disables all scheduled events. Overrides configurations in serverless.yml.
118
119
  --dockerHost The host name of Docker. Default: localhost
119
120
  --dockerHostServicePath Defines service path which is used by SLS running inside Docker container
120
121
  --dockerNetwork The network that the Docker container will connect to
@@ -150,7 +150,7 @@ class ServerlessOffline {
150
150
  eventModules.push(this._createHttp(httpEvents));
151
151
  }
152
152
 
153
- if (scheduleEvents.length > 0) {
153
+ if (!_classPrivateFieldLooseBase(this, _options)[_options].disableScheduledEvents && scheduleEvents.length > 0) {
154
154
  eventModules.push(this._createSchedule(scheduleEvents));
155
155
  }
156
156
 
@@ -398,7 +398,12 @@ class ServerlessOffline {
398
398
  }
399
399
 
400
400
  httpEvent.http.isHttpApi = true;
401
- 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
+ }
402
407
  }
403
408
 
404
409
  if (http && http.private) {
@@ -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'
@@ -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,
@@ -112,7 +112,8 @@ function createAuthScheme(authorizerOptions, provider, lambda, {
112
112
  lambdaFunction.setEvent(event);
113
113
 
114
114
  try {
115
- const result = await lambdaFunction.runHandler(); // return processResponse(null, result)
115
+ const result = await lambdaFunction.runHandler();
116
+ if (result === 'Unauthorized') return _boom.default.unauthorized('Unauthorized'); // return processResponse(null, result)
116
117
 
117
118
  const policy = result; // Validate that the policy document has the principalId set
118
119
 
@@ -144,6 +144,13 @@ class HandlerRunner {
144
144
  return new InProcessRunner(functionKey, handlerPath, handlerName, _classPrivateFieldLooseBase(this, _env)[_env], timeout, allowCache);
145
145
  }
146
146
 
147
+ if (_index.supportedGo.has(runtime)) {
148
+ const {
149
+ default: GoRunner
150
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('./go-runner/index.js')));
151
+ return new GoRunner(_classPrivateFieldLooseBase(this, _funOptions)[_funOptions], _classPrivateFieldLooseBase(this, _env)[_env], this.v3Utils);
152
+ }
153
+
147
154
  if (_index.supportedPython.has(runtime)) {
148
155
  const {
149
156
  default: PythonRunner
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _os = require("os");
9
+
10
+ var _fs = require("fs");
11
+
12
+ var _path = require("path");
13
+
14
+ var _execa = _interopRequireWildcard(require("execa"));
15
+
16
+ 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); }
17
+
18
+ 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; }
19
+
20
+ 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
+
22
+ var id = 0;
23
+
24
+ function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
25
+
26
+ const {
27
+ writeFile,
28
+ readFile,
29
+ mkdir,
30
+ rmdir
31
+ } = _fs.promises;
32
+ const {
33
+ parse,
34
+ stringify
35
+ } = JSON;
36
+ const {
37
+ cwd
38
+ } = process;
39
+ const PAYLOAD_IDENTIFIER = 'offline_payload';
40
+
41
+ var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
42
+
43
+ var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
44
+
45
+ var _tmpPath = /*#__PURE__*/_classPrivateFieldLooseKey("tmpPath");
46
+
47
+ var _tmpFile = /*#__PURE__*/_classPrivateFieldLooseKey("tmpFile");
48
+
49
+ var _goEnv = /*#__PURE__*/_classPrivateFieldLooseKey("goEnv");
50
+
51
+ class GoRunner {
52
+ constructor(funOptions, env, v3Utils) {
53
+ Object.defineProperty(this, _env, {
54
+ writable: true,
55
+ value: null
56
+ });
57
+ Object.defineProperty(this, _handlerPath, {
58
+ writable: true,
59
+ value: null
60
+ });
61
+ Object.defineProperty(this, _tmpPath, {
62
+ writable: true,
63
+ value: null
64
+ });
65
+ Object.defineProperty(this, _tmpFile, {
66
+ writable: true,
67
+ value: null
68
+ });
69
+ Object.defineProperty(this, _goEnv, {
70
+ writable: true,
71
+ value: null
72
+ });
73
+ const {
74
+ handlerPath
75
+ } = funOptions;
76
+ _classPrivateFieldLooseBase(this, _env)[_env] = env;
77
+ _classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
78
+
79
+ if (v3Utils) {
80
+ this.log = v3Utils.log;
81
+ this.progress = v3Utils.progress;
82
+ this.writeText = v3Utils.writeText;
83
+ 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']);
88
+ }
89
+
90
+ async cleanup() {
91
+ try {
92
+ await rmdir(_classPrivateFieldLooseBase(this, _tmpPath)[_tmpPath], {
93
+ recursive: true
94
+ });
95
+ } catch (e) {// @ignore
96
+ }
97
+
98
+ _classPrivateFieldLooseBase(this, _tmpFile)[_tmpFile] = null;
99
+ _classPrivateFieldLooseBase(this, _tmpPath)[_tmpPath] = null;
100
+ }
101
+
102
+ _parsePayload(value) {
103
+ const log = [];
104
+ let payload;
105
+
106
+ for (const item of value.split(_os.EOL)) {
107
+ if (item.indexOf(PAYLOAD_IDENTIFIER) === -1) {
108
+ log.push(item);
109
+ } else if (item.indexOf(PAYLOAD_IDENTIFIER) !== -1) {
110
+ try {
111
+ const {
112
+ offline_payload: {
113
+ success,
114
+ error
115
+ }
116
+ } = parse(item);
117
+
118
+ if (success) {
119
+ payload = success;
120
+ } else if (error) {
121
+ payload = error;
122
+ }
123
+ } catch (err) {// @ignore
124
+ }
125
+ }
126
+ } // Log to console in case engineers want to see the rest of the info
127
+
128
+
129
+ if (this.log) {
130
+ this.log(log.join(_os.EOL));
131
+ } else {
132
+ console.log(log.join(_os.EOL));
133
+ }
134
+
135
+ return payload;
136
+ }
137
+
138
+ async run(event, context) {
139
+ const {
140
+ dir
141
+ } = (0, _path.parse)(_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]);
142
+ const handlerCodeRoot = dir.split(_path.sep).slice(0, -1).join(_path.sep);
143
+ const handlerCode = await readFile(`${_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath]}.go`, 'utf8');
144
+ _classPrivateFieldLooseBase(this, _tmpPath)[_tmpPath] = (0, _path.resolve)(handlerCodeRoot, 'tmp');
145
+ _classPrivateFieldLooseBase(this, _tmpFile)[_tmpFile] = (0, _path.resolve)(_classPrivateFieldLooseBase(this, _tmpPath)[_tmpPath], 'main.go');
146
+ const out = handlerCode.replace('"github.com/aws/aws-lambda-go/lambda"', 'lambda "github.com/icarus-sullivan/mock-lambda"');
147
+
148
+ try {
149
+ await mkdir(_classPrivateFieldLooseBase(this, _tmpPath)[_tmpPath], {
150
+ recursive: true
151
+ });
152
+ } catch (e) {// @ignore
153
+ }
154
+
155
+ try {
156
+ await writeFile(_classPrivateFieldLooseBase(this, _tmpFile)[_tmpFile], out, 'utf8');
157
+ } catch (e) {// @ignore
158
+ } // Get go env to run this locally
159
+
160
+
161
+ if (!_classPrivateFieldLooseBase(this, _goEnv)[_goEnv]) {
162
+ const goEnvResponse = await (0, _execa.default)('go', ['env'], {
163
+ stdio: 'pipe',
164
+ encoding: 'utf-8'
165
+ });
166
+ const goEnvString = goEnvResponse.stdout || goEnvResponse.stderr;
167
+ _classPrivateFieldLooseBase(this, _goEnv)[_goEnv] = goEnvString.split(_os.EOL).reduce((a, b) => {
168
+ const [k, v] = b.split('="'); // eslint-disable-next-line no-param-reassign
169
+
170
+ a[k] = v ? v.slice(0, -1) : '';
171
+ return a;
172
+ }, {});
173
+ } // Remove our root, since we want to invoke go relatively
174
+
175
+
176
+ const cwdPath = `${_classPrivateFieldLooseBase(this, _tmpFile)[_tmpFile]}`.replace(`${cwd()}${_path.sep}`, '');
177
+ const {
178
+ stdout,
179
+ stderr
180
+ } = await (0, _execa.default)(`go`, ['run', cwdPath], {
181
+ stdio: 'pipe',
182
+ env: { ..._classPrivateFieldLooseBase(this, _env)[_env],
183
+ ..._classPrivateFieldLooseBase(this, _goEnv)[_goEnv],
184
+ AWS_LAMBDA_LOG_GROUP_NAME: context.logGroupName,
185
+ AWS_LAMBDA_LOG_STREAM_NAME: context.logStreamName,
186
+ AWS_LAMBDA_FUNCTION_NAME: context.functionName,
187
+ AWS_LAMBDA_FUNCTION_MEMORY_SIZE: context.memoryLimitInMB,
188
+ AWS_LAMBDA_FUNCTION_VERSION: context.functionVersion,
189
+ LAMBDA_EVENT: stringify(event),
190
+ LAMBDA_TEST_EVENT: `${event}`,
191
+ LAMBDA_CONTEXT: stringify(context),
192
+ IS_LAMBDA_AUTHORIZER: event.type === 'REQUEST' || event.type === 'TOKEN',
193
+ IS_LAMBDA_REQUEST_AUTHORIZER: event.type === 'REQUEST',
194
+ IS_LAMBDA_TOKEN_AUTHORIZER: event.type === 'TOKEN',
195
+ PATH: process.env.PATH
196
+ },
197
+ encoding: 'utf-8'
198
+ }); // Clean up after we created the temporary file
199
+
200
+ await this.cleanup();
201
+
202
+ if (stderr) {
203
+ return stderr;
204
+ }
205
+
206
+ return this._parsePayload(stdout);
207
+ }
208
+
209
+ }
210
+
211
+ exports.default = GoRunner;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _GoRunner.default;
10
+ }
11
+ });
12
+
13
+ var _GoRunner = _interopRequireDefault(require("./GoRunner.js"));
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -163,8 +163,14 @@ class InProcessRunner {
163
163
  let callback;
164
164
  const callbackCalled = new Promise((resolve, reject) => {
165
165
  callback = (err, data) => {
166
+ if (err === 'Unauthorized') {
167
+ resolve('Unauthorized');
168
+ return;
169
+ }
170
+
166
171
  if (err) {
167
172
  reject(err);
173
+ return;
168
174
  }
169
175
 
170
176
  resolve(data);
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = checkGoVersion;
7
+
8
+ var _execa = _interopRequireDefault(require("execa"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ async function checkGoVersion() {
13
+ let goVersion;
14
+
15
+ try {
16
+ const {
17
+ stdout
18
+ } = await (0, _execa.default)('go', ['version']);
19
+
20
+ if (stdout.match(/go1.\d+/g)) {
21
+ goVersion = '1.x';
22
+ }
23
+ } catch (err) {// @ignore
24
+ }
25
+
26
+ return goVersion;
27
+ }
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "checkDockerDaemon", {
9
9
  return _checkDockerDaemon.default;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "checkGoVersion", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _checkGoVersion.default;
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "createApiKey", {
13
19
  enumerable: true,
14
20
  get: function () {
@@ -118,6 +124,8 @@ var _splitHandlerPathAndName = _interopRequireDefault(require("./splitHandlerPat
118
124
 
119
125
  var _checkDockerDaemon = _interopRequireDefault(require("./checkDockerDaemon.js"));
120
126
 
127
+ var _checkGoVersion = _interopRequireDefault(require("./checkGoVersion.js"));
128
+
121
129
  var _generateHapiPath = _interopRequireDefault(require("./generateHapiPath.js"));
122
130
 
123
131
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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.3.1",
4
+ "version": "8.4.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",
@@ -13,6 +13,7 @@
13
13
  "lint:updated": "pipe-git-updated --ext=js -- eslint",
14
14
  "list-contributors": "echo 'clone https://github.com/mgechev/github-contributors-list.git first, then run npm install' && cd ../github-contributors-list && node bin/githubcontrib --owner dherault --repo serverless-offline --sortBy contributions --showlogin true --sortOrder desc > contributors.md",
15
15
  "prepare": "npm run build",
16
+ "prepare-release": "standard-version && prettier --write CHANGELOG.md",
16
17
  "prepublishOnly": "npm run lint && npm run build",
17
18
  "prettier-check": "prettier -c --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
18
19
  "prettier-check:updated": "pipe-git-updated --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier -c",
@@ -101,6 +102,7 @@
101
102
  "Gert Jansen van Rensburg (https://github.com/gertjvr)",
102
103
  "Guillaume Carbonneau (https://github.com/guillaume)",
103
104
  "György Balássy (https://github.com/balassy)",
105
+ "James Relyea (https://github.com/james-relyea)",
104
106
  "Jarda Snajdr (https://github.com/jsnajdr)",
105
107
  "Jaryd Carolin (https://github.com/horyd)",
106
108
  "Jeff Hall (https://github.com/electrikdevelopment)",
@@ -172,11 +174,35 @@
172
174
  "engines": {
173
175
  "node": ">=12.0.0"
174
176
  },
177
+ "standard-version": {
178
+ "skip": {
179
+ "commit": true,
180
+ "tag": true
181
+ },
182
+ "types": [
183
+ {
184
+ "type": "feat",
185
+ "section": "Features"
186
+ },
187
+ {
188
+ "type": "fix",
189
+ "section": "Bug Fixes"
190
+ },
191
+ {
192
+ "type": "perf",
193
+ "section": "Performance Improvements"
194
+ },
195
+ {
196
+ "type": "refactor",
197
+ "section": "Maintenance Improvements"
198
+ }
199
+ ]
200
+ },
175
201
  "dependencies": {
176
202
  "@hapi/boom": "^9.1.4",
177
203
  "@hapi/h2o2": "^9.1.0",
178
204
  "@hapi/hapi": "^20.2.1",
179
- "aws-sdk": "^2.1036.0",
205
+ "aws-sdk": "^2.1065.0",
180
206
  "boxen": "^5.1.2",
181
207
  "chalk": "^4.1.2",
182
208
  "cuid": "^2.1.8",
@@ -190,44 +216,45 @@
190
216
  "jsonwebtoken": "^8.5.1",
191
217
  "jszip": "^3.7.1",
192
218
  "luxon": "^1.28.0",
193
- "node-fetch": "^2.6.6",
219
+ "node-fetch": "^2.6.7",
194
220
  "node-schedule": "^1.3.3",
195
221
  "object.fromentries": "^2.0.5",
196
- "p-memoize": "^4.0.3",
222
+ "p-memoize": "^4.0.4",
197
223
  "p-queue": "^6.6.2",
198
224
  "p-retry": "^4.6.1",
199
225
  "please-upgrade-node": "^3.2.0",
200
226
  "portfinder": "^1.0.28",
201
227
  "semver": "^7.3.5",
202
228
  "update-notifier": "^5.1.0",
203
- "velocityjs": "^2.0.5",
229
+ "velocityjs": "^2.0.6",
204
230
  "ws": "^7.5.6"
205
231
  },
206
232
  "devDependencies": {
207
- "@babel/cli": "^7.16.0",
208
- "@babel/core": "^7.16.0",
209
- "@babel/plugin-proposal-class-properties": "^7.16.0",
210
- "@babel/plugin-proposal-dynamic-import": "^7.16.0",
211
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
212
- "@babel/plugin-proposal-optional-chaining": "^7.16.0",
213
- "@babel/plugin-transform-modules-commonjs": "^7.16.0",
214
- "@babel/register": "^7.16.0",
233
+ "@babel/cli": "^7.16.8",
234
+ "@babel/core": "^7.16.12",
235
+ "@babel/plugin-proposal-class-properties": "^7.16.7",
236
+ "@babel/plugin-proposal-dynamic-import": "^7.16.7",
237
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
238
+ "@babel/plugin-proposal-optional-chaining": "^7.16.7",
239
+ "@babel/plugin-transform-modules-commonjs": "^7.16.8",
240
+ "@babel/register": "^7.16.9",
215
241
  "archiver": "^5.3.0",
216
242
  "babel-eslint": "^10.1.0",
217
243
  "copyfiles": "^2.4.1",
218
244
  "eslint": "^7.32.0",
219
245
  "eslint-config-airbnb-base": "^14.2.1",
220
246
  "eslint-config-prettier": "^7.2.0",
221
- "eslint-plugin-import": "^2.25.3",
247
+ "eslint-plugin-import": "^2.25.4",
222
248
  "eslint-plugin-prettier": "^3.4.1",
223
249
  "git-list-updated": "^1.2.1",
224
250
  "husky": "^4.3.8",
225
251
  "jest": "^26.6.3",
226
252
  "lint-staged": "^11.2.6",
227
253
  "p-map": "^4.0.0",
228
- "prettier": "^2.4.1",
254
+ "prettier": "^2.5.1",
229
255
  "rimraf": "^3.0.2",
230
- "serverless": "^2.66.2"
256
+ "serverless": "^2.72.2",
257
+ "standard-version": "^9.3.2"
231
258
  },
232
259
  "peerDependencies": {
233
260
  "serverless": "^1.60.0 || 2 || 3"