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 +21 -0
- package/README.md +2 -1
- package/dist/ServerlessOffline.js +7 -2
- package/dist/config/commandOptions.js +4 -0
- package/dist/config/defaultOptions.js +1 -0
- package/dist/events/http/createAuthScheme.js +2 -1
- package/dist/lambda/handler-runner/HandlerRunner.js +7 -0
- package/dist/lambda/handler-runner/go-runner/GoRunner.js +211 -0
- package/dist/lambda/handler-runner/go-runner/index.js +15 -0
- package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +6 -0
- package/dist/utils/checkGoVersion.js +27 -0
- package/dist/utils/index.js +8 -0
- package/package.json +43 -16
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)
|
|
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
|
-
|
|
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'
|
|
@@ -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();
|
|
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
|
+
}
|
package/dist/utils/index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
229
|
+
"velocityjs": "^2.0.6",
|
|
204
230
|
"ws": "^7.5.6"
|
|
205
231
|
},
|
|
206
232
|
"devDependencies": {
|
|
207
|
-
"@babel/cli": "^7.16.
|
|
208
|
-
"@babel/core": "^7.16.
|
|
209
|
-
"@babel/plugin-proposal-class-properties": "^7.16.
|
|
210
|
-
"@babel/plugin-proposal-dynamic-import": "^7.16.
|
|
211
|
-
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.
|
|
212
|
-
"@babel/plugin-proposal-optional-chaining": "^7.16.
|
|
213
|
-
"@babel/plugin-transform-modules-commonjs": "^7.16.
|
|
214
|
-
"@babel/register": "^7.16.
|
|
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.
|
|
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.
|
|
254
|
+
"prettier": "^2.5.1",
|
|
229
255
|
"rimraf": "^3.0.2",
|
|
230
|
-
"serverless": "^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"
|