serverless-offline 7.1.0 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -112
- package/dist/ServerlessOffline.js +91 -24
- package/dist/config/constants.js +1 -1
- package/dist/config/supportedRuntimes.js +1 -1
- package/dist/events/http/Endpoint.js +27 -9
- package/dist/events/http/Http.js +3 -3
- package/dist/events/http/HttpServer.js +311 -76
- package/dist/events/http/authFunctionNameExtractor.js +14 -8
- package/dist/events/http/authJWTSettingsExtractor.js +14 -7
- package/dist/events/http/createAuthScheme.js +42 -8
- package/dist/events/http/createJWTAuthScheme.js +52 -13
- package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +7 -6
- package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +18 -7
- package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +17 -6
- package/dist/events/http/lambda-events/VelocityContext.js +4 -4
- package/dist/events/http/lambda-events/index.js +4 -4
- package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +19 -7
- package/dist/events/schedule/Schedule.js +64 -20
- package/dist/events/websocket/HttpServer.js +24 -7
- package/dist/events/websocket/WebSocket.js +14 -6
- package/dist/events/websocket/WebSocketClients.js +65 -17
- package/dist/events/websocket/WebSocketServer.js +28 -6
- package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +9 -2
- package/dist/events/websocket/http-routes/connections/ConnectionsController.js +1 -1
- package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +28 -5
- package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +5 -5
- package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +1 -1
- package/dist/events/websocket/lambda-events/WebSocketEvent.js +3 -3
- package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +4 -4
- package/dist/lambda/HttpServer.js +34 -10
- package/dist/lambda/Lambda.js +15 -7
- package/dist/lambda/LambdaContext.js +1 -1
- package/dist/lambda/LambdaFunction.js +40 -23
- package/dist/lambda/LambdaFunctionPool.js +9 -8
- package/dist/lambda/handler-runner/HandlerRunner.js +48 -15
- package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +21 -8
- package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +1 -10
- package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +168 -69
- package/dist/lambda/handler-runner/docker-runner/DockerImage.js +21 -5
- package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +4 -4
- package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +9 -21
- package/dist/lambda/handler-runner/java-runner/JavaRunner.js +26 -14
- package/dist/lambda/handler-runner/python-runner/PythonRunner.js +20 -7
- package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +22 -24
- package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +2 -2
- package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +1 -11
- package/dist/lambda/routes/invocations/InvocationsController.js +37 -11
- package/dist/lambda/routes/invocations/invocationsRoute.js +2 -2
- package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +2 -6
- package/dist/serverlessLog.js +1 -1
- package/dist/utils/getHttpApiCorsConfig.js +18 -5
- package/dist/utils/index.js +16 -16
- package/package.json +58 -37
|
@@ -49,34 +49,34 @@ const {
|
|
|
49
49
|
keys
|
|
50
50
|
} = Object;
|
|
51
51
|
|
|
52
|
-
var _containerId = _classPrivateFieldLooseKey("containerId");
|
|
52
|
+
var _containerId = /*#__PURE__*/_classPrivateFieldLooseKey("containerId");
|
|
53
53
|
|
|
54
|
-
var _dockerOptions = _classPrivateFieldLooseKey("dockerOptions");
|
|
54
|
+
var _dockerOptions = /*#__PURE__*/_classPrivateFieldLooseKey("dockerOptions");
|
|
55
55
|
|
|
56
|
-
var _env = _classPrivateFieldLooseKey("env");
|
|
56
|
+
var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
|
|
57
57
|
|
|
58
|
-
var _functionKey = _classPrivateFieldLooseKey("functionKey");
|
|
58
|
+
var _functionKey = /*#__PURE__*/_classPrivateFieldLooseKey("functionKey");
|
|
59
59
|
|
|
60
|
-
var _handler = _classPrivateFieldLooseKey("handler");
|
|
60
|
+
var _handler = /*#__PURE__*/_classPrivateFieldLooseKey("handler");
|
|
61
61
|
|
|
62
|
-
var _image = _classPrivateFieldLooseKey("image");
|
|
62
|
+
var _image = /*#__PURE__*/_classPrivateFieldLooseKey("image");
|
|
63
63
|
|
|
64
|
-
var _imageNameTag = _classPrivateFieldLooseKey("imageNameTag");
|
|
64
|
+
var _imageNameTag = /*#__PURE__*/_classPrivateFieldLooseKey("imageNameTag");
|
|
65
65
|
|
|
66
|
-
var _lambda = _classPrivateFieldLooseKey("lambda");
|
|
66
|
+
var _lambda = /*#__PURE__*/_classPrivateFieldLooseKey("lambda");
|
|
67
67
|
|
|
68
|
-
var _layers = _classPrivateFieldLooseKey("layers");
|
|
68
|
+
var _layers = /*#__PURE__*/_classPrivateFieldLooseKey("layers");
|
|
69
69
|
|
|
70
|
-
var _port = _classPrivateFieldLooseKey("port");
|
|
70
|
+
var _port = /*#__PURE__*/_classPrivateFieldLooseKey("port");
|
|
71
71
|
|
|
72
|
-
var _provider = _classPrivateFieldLooseKey("provider");
|
|
72
|
+
var _provider = /*#__PURE__*/_classPrivateFieldLooseKey("provider");
|
|
73
73
|
|
|
74
|
-
var _runtime = _classPrivateFieldLooseKey("runtime");
|
|
74
|
+
var _runtime = /*#__PURE__*/_classPrivateFieldLooseKey("runtime");
|
|
75
75
|
|
|
76
|
-
var _servicePath = _classPrivateFieldLooseKey("servicePath");
|
|
76
|
+
var _servicePath = /*#__PURE__*/_classPrivateFieldLooseKey("servicePath");
|
|
77
77
|
|
|
78
78
|
class DockerContainer {
|
|
79
|
-
constructor(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions) {
|
|
79
|
+
constructor(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions, v3Utils) {
|
|
80
80
|
Object.defineProperty(this, _containerId, {
|
|
81
81
|
writable: true,
|
|
82
82
|
value: null
|
|
@@ -133,12 +133,19 @@ class DockerContainer {
|
|
|
133
133
|
_classPrivateFieldLooseBase(this, _functionKey)[_functionKey] = functionKey;
|
|
134
134
|
_classPrivateFieldLooseBase(this, _handler)[_handler] = handler;
|
|
135
135
|
_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag] = this._baseImage(runtime);
|
|
136
|
-
_classPrivateFieldLooseBase(this, _image)[_image] = new _DockerImage.default(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag]);
|
|
136
|
+
_classPrivateFieldLooseBase(this, _image)[_image] = new _DockerImage.default(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag], v3Utils);
|
|
137
137
|
_classPrivateFieldLooseBase(this, _runtime)[_runtime] = runtime;
|
|
138
138
|
_classPrivateFieldLooseBase(this, _layers)[_layers] = layers;
|
|
139
139
|
_classPrivateFieldLooseBase(this, _provider)[_provider] = provider;
|
|
140
140
|
_classPrivateFieldLooseBase(this, _servicePath)[_servicePath] = servicePath;
|
|
141
141
|
_classPrivateFieldLooseBase(this, _dockerOptions)[_dockerOptions] = dockerOptions;
|
|
142
|
+
|
|
143
|
+
if (v3Utils) {
|
|
144
|
+
this.log = v3Utils.log;
|
|
145
|
+
this.progress = v3Utils.progress;
|
|
146
|
+
this.writeText = v3Utils.writeText;
|
|
147
|
+
this.v3Utils = v3Utils;
|
|
148
|
+
}
|
|
142
149
|
}
|
|
143
150
|
|
|
144
151
|
_baseImage(runtime) {
|
|
@@ -147,7 +154,13 @@ class DockerContainer {
|
|
|
147
154
|
|
|
148
155
|
async start(codeDir) {
|
|
149
156
|
await _classPrivateFieldLooseBase(this, _image)[_image].pull();
|
|
150
|
-
|
|
157
|
+
|
|
158
|
+
if (this.log) {
|
|
159
|
+
this.log.debug('Run Docker container...');
|
|
160
|
+
} else {
|
|
161
|
+
(0, _debugLog.default)('Run Docker container...');
|
|
162
|
+
}
|
|
163
|
+
|
|
151
164
|
let permissions = 'ro';
|
|
152
165
|
|
|
153
166
|
if (!_classPrivateFieldLooseBase(this, _dockerOptions)[_dockerOptions].readOnly) {
|
|
@@ -160,10 +173,18 @@ class DockerContainer {
|
|
|
160
173
|
];
|
|
161
174
|
|
|
162
175
|
if (_classPrivateFieldLooseBase(this, _layers)[_layers].length > 0) {
|
|
163
|
-
(
|
|
176
|
+
if (this.log) {
|
|
177
|
+
this.log.verbose(`Found layers, checking provider type`);
|
|
178
|
+
} else {
|
|
179
|
+
(0, _serverlessLog.logLayers)(`Found layers, checking provider type`);
|
|
180
|
+
}
|
|
164
181
|
|
|
165
182
|
if (_classPrivateFieldLooseBase(this, _provider)[_provider].name.toLowerCase() !== 'aws') {
|
|
166
|
-
(
|
|
183
|
+
if (this.log) {
|
|
184
|
+
this.log.warning(`Provider ${_classPrivateFieldLooseBase(this, _provider)[_provider].name} is Unsupported. Layers are only supported on aws.`);
|
|
185
|
+
} else {
|
|
186
|
+
(0, _serverlessLog.logLayers)(`Provider ${_classPrivateFieldLooseBase(this, _provider)[_provider].name} is Unsupported. Layers are only supported on aws.`);
|
|
187
|
+
}
|
|
167
188
|
} else {
|
|
168
189
|
let layerDir = _classPrivateFieldLooseBase(this, _dockerOptions)[_dockerOptions].layersDir;
|
|
169
190
|
|
|
@@ -174,16 +195,31 @@ class DockerContainer {
|
|
|
174
195
|
layerDir = (0, _path.join)(layerDir, this._getLayersSha256());
|
|
175
196
|
|
|
176
197
|
if (await (0, _fsExtra.pathExists)(layerDir)) {
|
|
177
|
-
|
|
198
|
+
if (this.log) {
|
|
199
|
+
this.log.verbose(`Layers already exist for this function. Skipping download.`);
|
|
200
|
+
} else {
|
|
201
|
+
(0, _serverlessLog.logLayers)(`Layers already exist for this function. Skipping download.`);
|
|
202
|
+
}
|
|
178
203
|
} else {
|
|
179
204
|
const layers = [];
|
|
180
|
-
|
|
205
|
+
|
|
206
|
+
if (this.log) {
|
|
207
|
+
this.log.verbose(`Storing layers at ${layerDir}`);
|
|
208
|
+
} else {
|
|
209
|
+
(0, _serverlessLog.logLayers)(`Storing layers at ${layerDir}`);
|
|
210
|
+
} // Only initialise if we have layers, we're using AWS, and they don't already exist
|
|
211
|
+
|
|
181
212
|
|
|
182
213
|
_classPrivateFieldLooseBase(this, _lambda)[_lambda] = new _awsSdk.Lambda({
|
|
183
214
|
apiVersion: '2015-03-31',
|
|
184
215
|
region: _classPrivateFieldLooseBase(this, _provider)[_provider].region
|
|
185
216
|
});
|
|
186
|
-
|
|
217
|
+
|
|
218
|
+
if (this.log) {
|
|
219
|
+
this.log.verbose(`Getting layers`);
|
|
220
|
+
} else {
|
|
221
|
+
(0, _serverlessLog.logLayers)(`Getting layers`);
|
|
222
|
+
}
|
|
187
223
|
|
|
188
224
|
for (const layerArn of _classPrivateFieldLooseBase(this, _layers)[_layers]) {
|
|
189
225
|
layers.push(this._downloadLayer(layerArn, layerDir));
|
|
@@ -275,66 +311,119 @@ class DockerContainer {
|
|
|
275
311
|
async _downloadLayer(layerArn, layerDir) {
|
|
276
312
|
const layerName = layerArn.split(':layer:')[1];
|
|
277
313
|
const layerZipFile = `${layerDir}/${layerName}.zip`;
|
|
278
|
-
|
|
314
|
+
const layerProgress = this.progress && this.progress.get(`layer-${layerName}`);
|
|
315
|
+
|
|
316
|
+
if (this.log) {
|
|
317
|
+
this.log.verbose(`[${layerName}] ARN: ${layerArn}`);
|
|
318
|
+
} else {
|
|
319
|
+
(0, _serverlessLog.logLayers)(`[${layerName}] ARN: ${layerArn}`);
|
|
320
|
+
}
|
|
321
|
+
|
|
279
322
|
const params = {
|
|
280
323
|
Arn: layerArn
|
|
281
324
|
};
|
|
282
|
-
(0, _serverlessLog.logLayers)(`[${layerName}] Getting Info`);
|
|
283
|
-
let layer = null;
|
|
284
325
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
(0, _serverlessLog.
|
|
289
|
-
return;
|
|
326
|
+
if (this.log) {
|
|
327
|
+
this.log.verbose(`[${layerName}] Getting Info`);
|
|
328
|
+
} else {
|
|
329
|
+
(0, _serverlessLog.logLayers)(`[${layerName}] Getting Info`);
|
|
290
330
|
}
|
|
291
331
|
|
|
292
|
-
|
|
293
|
-
(0, _serverlessLog.logWarning)(`[${layerName}] Layer is not compatible with ${_classPrivateFieldLooseBase(this, _runtime)[_runtime]} runtime`);
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
332
|
+
layerProgress.notice(`Retrieving "${layerName}": Getting info`);
|
|
296
333
|
|
|
297
|
-
|
|
334
|
+
try {
|
|
335
|
+
let layer = null;
|
|
298
336
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
337
|
+
try {
|
|
338
|
+
layer = await _classPrivateFieldLooseBase(this, _lambda)[_lambda].getLayerVersionByArn(params).promise();
|
|
339
|
+
} catch (e) {
|
|
340
|
+
if (this.log) {
|
|
341
|
+
this.log.warning(`[${layerName}] ${e.code}: ${e.message}`);
|
|
342
|
+
} else {
|
|
343
|
+
(0, _serverlessLog.logWarning)(`[${layerName}] ${e.code}: ${e.message}`);
|
|
344
|
+
}
|
|
305
345
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
310
348
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
349
|
+
if (Object.prototype.hasOwnProperty.call(layer, 'CompatibleRuntimes') && !layer.CompatibleRuntimes.includes(_classPrivateFieldLooseBase(this, _runtime)[_runtime])) {
|
|
350
|
+
if (this.log) {
|
|
351
|
+
this.log.warning(`[${layerName}] Layer is not compatible with ${_classPrivateFieldLooseBase(this, _runtime)[_runtime]} runtime`);
|
|
352
|
+
} else {
|
|
353
|
+
(0, _serverlessLog.logWarning)(`[${layerName}] Layer is not compatible with ${_classPrivateFieldLooseBase(this, _runtime)[_runtime]} runtime`);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const layerUrl = layer.Content.Location; // const layerSha = layer.Content.CodeSha256
|
|
360
|
+
|
|
361
|
+
const layerSize = layer.Content.CodeSize;
|
|
362
|
+
await (0, _fsExtra.ensureDir)(layerDir);
|
|
363
|
+
(0, _serverlessLog.logLayers)(`[${layerName}] Downloading ${this._formatBytes(layerSize)}...`);
|
|
364
|
+
|
|
365
|
+
if (this.log) {
|
|
366
|
+
this.log.verbose(`[${layerName}] Downloading ${this._formatBytes(layerSize)}...`);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
layerProgress.notice(`Retrieving "${layerName}": Downloading ${this._formatBytes(layerSize)}`);
|
|
370
|
+
const res = await (0, _nodeFetch.default)(layerUrl, {
|
|
371
|
+
method: 'get'
|
|
319
372
|
});
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
return
|
|
373
|
+
|
|
374
|
+
if (!res.ok) {
|
|
375
|
+
if (this.log) {
|
|
376
|
+
this.log.warning(`[${layerName}] Failed to fetch from ${layerUrl} with ${res.statusText}`);
|
|
377
|
+
} else {
|
|
378
|
+
(0, _serverlessLog.logWarning)(`[${layerName}] Failed to fetch from ${layerUrl} with ${res.statusText}`);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return;
|
|
329
382
|
}
|
|
330
383
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
384
|
+
const fileStream = (0, _fs.createWriteStream)(`${layerZipFile}`);
|
|
385
|
+
await new Promise((resolve, reject) => {
|
|
386
|
+
res.body.pipe(fileStream);
|
|
387
|
+
res.body.on('error', err => {
|
|
388
|
+
reject(err);
|
|
389
|
+
});
|
|
390
|
+
fileStream.on('finish', () => {
|
|
391
|
+
resolve();
|
|
392
|
+
});
|
|
334
393
|
});
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
394
|
+
|
|
395
|
+
if (this.log) {
|
|
396
|
+
this.log.verbose(`[${layerName}] Unzipping to .layers directory`);
|
|
397
|
+
} else {
|
|
398
|
+
(0, _serverlessLog.logLayers)(`[${layerName}] Unzipping to .layers directory`);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
layerProgress.notice(`Retrieving "${layerName}": Unzipping to .layers directory`);
|
|
402
|
+
const data = await (0, _fsExtra.readFile)(`${layerZipFile}`);
|
|
403
|
+
const zip = await _jszip.default.loadAsync(data);
|
|
404
|
+
await Promise.all(keys(zip.files).map(async filename => {
|
|
405
|
+
const fileData = await zip.files[filename].async('nodebuffer');
|
|
406
|
+
|
|
407
|
+
if (filename.endsWith(_path.sep)) {
|
|
408
|
+
return Promise.resolve();
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
await (0, _fsExtra.ensureDir)((0, _path.join)(layerDir, (0, _path.dirname)(filename)));
|
|
412
|
+
return (0, _fsExtra.writeFile)((0, _path.join)(layerDir, filename), fileData, {
|
|
413
|
+
mode: zip.files[filename].unixPermissions
|
|
414
|
+
});
|
|
415
|
+
}));
|
|
416
|
+
|
|
417
|
+
if (this.log) {
|
|
418
|
+
this.log.verbose(`[${layerName}] Removing zip file`);
|
|
419
|
+
} else {
|
|
420
|
+
(0, _serverlessLog.logLayers)(`[${layerName}] Removing zip file`);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
(0, _fs.unlinkSync)(`${layerZipFile}`);
|
|
424
|
+
} finally {
|
|
425
|
+
layerProgress.remove();
|
|
426
|
+
}
|
|
338
427
|
}
|
|
339
428
|
|
|
340
429
|
async _getBridgeGatewayIp() {
|
|
@@ -346,7 +435,12 @@ class DockerContainer {
|
|
|
346
435
|
stdout: gateway
|
|
347
436
|
} = await (0, _execa.default)('docker', ['network', 'inspect', 'bridge', '--format', '{{(index .IPAM.Config 0).Gateway}}']));
|
|
348
437
|
} catch (err) {
|
|
349
|
-
|
|
438
|
+
if (this.log) {
|
|
439
|
+
this.log.error(err.stderr);
|
|
440
|
+
} else {
|
|
441
|
+
console.error(err.stderr);
|
|
442
|
+
}
|
|
443
|
+
|
|
350
444
|
throw err;
|
|
351
445
|
}
|
|
352
446
|
|
|
@@ -387,7 +481,12 @@ class DockerContainer {
|
|
|
387
481
|
await (0, _execa.default)('docker', ['stop', _classPrivateFieldLooseBase(this, _containerId)[_containerId]]);
|
|
388
482
|
await (0, _execa.default)('docker', ['rm', _classPrivateFieldLooseBase(this, _containerId)[_containerId]]);
|
|
389
483
|
} catch (err) {
|
|
390
|
-
|
|
484
|
+
if (this.log) {
|
|
485
|
+
this.log.error(err.stderr);
|
|
486
|
+
} else {
|
|
487
|
+
console.error(err.stderr);
|
|
488
|
+
}
|
|
489
|
+
|
|
391
490
|
throw err;
|
|
392
491
|
}
|
|
393
492
|
}
|
|
@@ -19,30 +19,46 @@ var id = 0;
|
|
|
19
19
|
|
|
20
20
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
21
21
|
|
|
22
|
-
var _imageNameTag = _classPrivateFieldLooseKey("imageNameTag");
|
|
22
|
+
var _imageNameTag = /*#__PURE__*/_classPrivateFieldLooseKey("imageNameTag");
|
|
23
23
|
|
|
24
24
|
class DockerImage {
|
|
25
|
-
constructor(imageNameTag) {
|
|
25
|
+
constructor(imageNameTag, v3Utils) {
|
|
26
26
|
Object.defineProperty(this, _imageNameTag, {
|
|
27
27
|
writable: true,
|
|
28
28
|
value: null
|
|
29
29
|
});
|
|
30
30
|
_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag] = imageNameTag;
|
|
31
|
+
|
|
32
|
+
if (v3Utils) {
|
|
33
|
+
this.log = v3Utils.log;
|
|
34
|
+
this.progress = v3Utils.progress;
|
|
35
|
+
this.writeText = v3Utils.writeText;
|
|
36
|
+
this.v3Utils = v3Utils;
|
|
37
|
+
}
|
|
31
38
|
}
|
|
32
39
|
|
|
33
40
|
static async _pullImage(imageNameTag) {
|
|
34
|
-
(
|
|
41
|
+
if (this.log) {
|
|
42
|
+
this.log.debug(`Downloading base Docker image... (${imageNameTag})`);
|
|
43
|
+
} else {
|
|
44
|
+
(0, _debugLog.default)(`Downloading base Docker image... (${imageNameTag})`);
|
|
45
|
+
}
|
|
35
46
|
|
|
36
47
|
try {
|
|
37
48
|
await (0, _execa.default)('docker', ['pull', '--disable-content-trust=false', imageNameTag]);
|
|
38
49
|
} catch (err) {
|
|
39
|
-
|
|
50
|
+
if (this.log) {
|
|
51
|
+
this.log.error(err.stderr);
|
|
52
|
+
} else {
|
|
53
|
+
console.error(err.stderr);
|
|
54
|
+
}
|
|
55
|
+
|
|
40
56
|
throw err;
|
|
41
57
|
}
|
|
42
58
|
}
|
|
43
59
|
|
|
44
60
|
async pull() {
|
|
45
|
-
return DockerImage._memoizedPull(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag]);
|
|
61
|
+
return DockerImage._memoizedPull(_classPrivateFieldLooseBase(this, _imageNameTag)[_imageNameTag], this.v3Utils);
|
|
46
62
|
}
|
|
47
63
|
|
|
48
64
|
}
|
|
@@ -17,12 +17,12 @@ var id = 0;
|
|
|
17
17
|
|
|
18
18
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
19
19
|
|
|
20
|
-
var _codeDir = _classPrivateFieldLooseKey("codeDir");
|
|
20
|
+
var _codeDir = /*#__PURE__*/_classPrivateFieldLooseKey("codeDir");
|
|
21
21
|
|
|
22
|
-
var _container = _classPrivateFieldLooseKey("container");
|
|
22
|
+
var _container = /*#__PURE__*/_classPrivateFieldLooseKey("container");
|
|
23
23
|
|
|
24
24
|
class DockerRunner {
|
|
25
|
-
constructor(funOptions, env, dockerOptions) {
|
|
25
|
+
constructor(funOptions, env, dockerOptions, v3Utils) {
|
|
26
26
|
Object.defineProperty(this, _codeDir, {
|
|
27
27
|
writable: true,
|
|
28
28
|
value: null
|
|
@@ -46,7 +46,7 @@ class DockerRunner {
|
|
|
46
46
|
_classPrivateFieldLooseBase(this, _codeDir)[_codeDir] = _classPrivateFieldLooseBase(this, _codeDir)[_codeDir].replace(servicePath, dockerOptions.hostServicePath);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
_classPrivateFieldLooseBase(this, _container)[_container] = new _DockerContainer.default(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions);
|
|
49
|
+
_classPrivateFieldLooseBase(this, _container)[_container] = new _DockerContainer.default(env, functionKey, handler, runtime, layers, provider, servicePath, dockerOptions, v3Utils);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
cleanup() {
|
|
@@ -11,9 +11,9 @@ var path = _interopRequireWildcard(require("path"));
|
|
|
11
11
|
|
|
12
12
|
var fs = _interopRequireWildcard(require("fs"));
|
|
13
13
|
|
|
14
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var
|
|
14
|
+
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
15
|
|
|
16
|
-
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; }
|
|
16
|
+
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; }
|
|
17
17
|
|
|
18
18
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
19
19
|
|
|
@@ -84,17 +84,17 @@ const clearModule = (fP, opts) => {
|
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
-
var _env = _classPrivateFieldLooseKey("env");
|
|
87
|
+
var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
|
|
88
88
|
|
|
89
|
-
var _functionKey = _classPrivateFieldLooseKey("functionKey");
|
|
89
|
+
var _functionKey = /*#__PURE__*/_classPrivateFieldLooseKey("functionKey");
|
|
90
90
|
|
|
91
|
-
var _handlerName = _classPrivateFieldLooseKey("handlerName");
|
|
91
|
+
var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
|
|
92
92
|
|
|
93
|
-
var _handlerPath = _classPrivateFieldLooseKey("handlerPath");
|
|
93
|
+
var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
|
|
94
94
|
|
|
95
|
-
var _timeout = _classPrivateFieldLooseKey("timeout");
|
|
95
|
+
var _timeout = /*#__PURE__*/_classPrivateFieldLooseKey("timeout");
|
|
96
96
|
|
|
97
|
-
var _allowCache = _classPrivateFieldLooseKey("allowCache");
|
|
97
|
+
var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
|
|
98
98
|
|
|
99
99
|
class InProcessRunner {
|
|
100
100
|
constructor(functionKey, handlerPath, handlerName, env, timeout, allowCache) {
|
|
@@ -191,9 +191,6 @@ class InProcessRunner {
|
|
|
191
191
|
try {
|
|
192
192
|
result = handler(event, lambdaContext, callback);
|
|
193
193
|
} catch (err) {
|
|
194
|
-
// this only executes when we have an exception caused by synchronous code
|
|
195
|
-
// TODO logging
|
|
196
|
-
console.log(err);
|
|
197
194
|
throw new Error(`Uncaught error in '${_classPrivateFieldLooseBase(this, _functionKey)[_functionKey]}' handler.`);
|
|
198
195
|
} // // not a Promise, which is not supported by aws
|
|
199
196
|
// if (result == null || typeof result.then !== 'function') {
|
|
@@ -207,16 +204,7 @@ class InProcessRunner {
|
|
|
207
204
|
callbacks.push(result);
|
|
208
205
|
}
|
|
209
206
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
try {
|
|
213
|
-
callbackResult = await Promise.race(callbacks);
|
|
214
|
-
} catch (err) {
|
|
215
|
-
// TODO logging
|
|
216
|
-
console.log(err);
|
|
217
|
-
throw err;
|
|
218
|
-
}
|
|
219
|
-
|
|
207
|
+
const callbackResult = await Promise.race(callbacks);
|
|
220
208
|
return callbackResult;
|
|
221
209
|
}
|
|
222
210
|
|
|
@@ -27,18 +27,18 @@ const {
|
|
|
27
27
|
has
|
|
28
28
|
} = Reflect;
|
|
29
29
|
|
|
30
|
-
var _env = _classPrivateFieldLooseKey("env");
|
|
30
|
+
var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
|
|
31
31
|
|
|
32
|
-
var _functionName = _classPrivateFieldLooseKey("functionName");
|
|
32
|
+
var _functionName = /*#__PURE__*/_classPrivateFieldLooseKey("functionName");
|
|
33
33
|
|
|
34
|
-
var _handler = _classPrivateFieldLooseKey("handler");
|
|
34
|
+
var _handler = /*#__PURE__*/_classPrivateFieldLooseKey("handler");
|
|
35
35
|
|
|
36
|
-
var _deployPackage = _classPrivateFieldLooseKey("deployPackage");
|
|
36
|
+
var _deployPackage = /*#__PURE__*/_classPrivateFieldLooseKey("deployPackage");
|
|
37
37
|
|
|
38
|
-
var _allowCache = _classPrivateFieldLooseKey("allowCache");
|
|
38
|
+
var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
|
|
39
39
|
|
|
40
40
|
class JavaRunner {
|
|
41
|
-
constructor(funOptions, env, allowCache) {
|
|
41
|
+
constructor(funOptions, env, allowCache, v3Utils) {
|
|
42
42
|
Object.defineProperty(this, _env, {
|
|
43
43
|
writable: true,
|
|
44
44
|
value: null
|
|
@@ -70,6 +70,13 @@ class JavaRunner {
|
|
|
70
70
|
_classPrivateFieldLooseBase(this, _handler)[_handler] = handler;
|
|
71
71
|
_classPrivateFieldLooseBase(this, _deployPackage)[_deployPackage] = functionPackage || servicePackage;
|
|
72
72
|
_classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
|
|
73
|
+
|
|
74
|
+
if (v3Utils) {
|
|
75
|
+
this.log = v3Utils.log;
|
|
76
|
+
this.progress = v3Utils.progress;
|
|
77
|
+
this.writeText = v3Utils.writeText;
|
|
78
|
+
this.v3Utils = v3Utils;
|
|
79
|
+
}
|
|
73
80
|
} // no-op
|
|
74
81
|
// () => void
|
|
75
82
|
|
|
@@ -120,19 +127,24 @@ class JavaRunner {
|
|
|
120
127
|
const response = await (0, _nodeFetch.default)(`http://localhost:${port}/invoke`, httpOptions);
|
|
121
128
|
result = await response.text();
|
|
122
129
|
} catch (e) {
|
|
123
|
-
|
|
130
|
+
if (this.log) {
|
|
131
|
+
this.log.notice('Local java server not running. For faster local invocations, run "java-invoke-local --server" in your project directory');
|
|
132
|
+
} else {
|
|
133
|
+
console.log('Local java server not running. For faster local invocations, run "java-invoke-local --server" in your project directory');
|
|
134
|
+
} // Fallback invocation
|
|
135
|
+
|
|
124
136
|
|
|
125
137
|
const args = ['-c', _classPrivateFieldLooseBase(this, _handler)[_handler], '-a', _classPrivateFieldLooseBase(this, _deployPackage)[_deployPackage], '-f', _classPrivateFieldLooseBase(this, _functionName)[_functionName], '-d', input, '--json-output', '--serverless-offline'];
|
|
126
138
|
result = (0, _javaInvokeLocal.invokeJavaLocal)(args, _classPrivateFieldLooseBase(this, _env)[_env]);
|
|
127
|
-
console.log(result);
|
|
128
|
-
}
|
|
129
139
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
140
|
+
if (this.log) {
|
|
141
|
+
this.log.notice(result);
|
|
142
|
+
} else {
|
|
143
|
+
console.log(result);
|
|
144
|
+
}
|
|
135
145
|
}
|
|
146
|
+
|
|
147
|
+
return this._parsePayload(result);
|
|
136
148
|
}
|
|
137
149
|
|
|
138
150
|
}
|
|
@@ -34,18 +34,18 @@ const {
|
|
|
34
34
|
has
|
|
35
35
|
} = Reflect;
|
|
36
36
|
|
|
37
|
-
var _env = _classPrivateFieldLooseKey("env");
|
|
37
|
+
var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
|
|
38
38
|
|
|
39
|
-
var _handlerName = _classPrivateFieldLooseKey("handlerName");
|
|
39
|
+
var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
|
|
40
40
|
|
|
41
|
-
var _handlerPath = _classPrivateFieldLooseKey("handlerPath");
|
|
41
|
+
var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
|
|
42
42
|
|
|
43
|
-
var _runtime = _classPrivateFieldLooseKey("runtime");
|
|
43
|
+
var _runtime = /*#__PURE__*/_classPrivateFieldLooseKey("runtime");
|
|
44
44
|
|
|
45
|
-
var _allowCache = _classPrivateFieldLooseKey("allowCache");
|
|
45
|
+
var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
|
|
46
46
|
|
|
47
47
|
class PythonRunner {
|
|
48
|
-
constructor(funOptions, env, allowCache) {
|
|
48
|
+
constructor(funOptions, env, allowCache, v3Utils) {
|
|
49
49
|
Object.defineProperty(this, _env, {
|
|
50
50
|
writable: true,
|
|
51
51
|
value: null
|
|
@@ -77,6 +77,13 @@ class PythonRunner {
|
|
|
77
77
|
_classPrivateFieldLooseBase(this, _runtime)[_runtime] = (0, _os.platform)() === 'win32' ? 'python.exe' : runtime;
|
|
78
78
|
_classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
|
|
79
79
|
|
|
80
|
+
if (v3Utils) {
|
|
81
|
+
this.log = v3Utils.log;
|
|
82
|
+
this.progress = v3Utils.progress;
|
|
83
|
+
this.writeText = v3Utils.writeText;
|
|
84
|
+
this.v3Utils = v3Utils;
|
|
85
|
+
}
|
|
86
|
+
|
|
80
87
|
if (process.env.VIRTUAL_ENV) {
|
|
81
88
|
const runtimeDir = (0, _os.platform)() === 'win32' ? 'Scripts' : 'bin';
|
|
82
89
|
process.env.PATH = [(0, _path.join)(process.env.VIRTUAL_ENV, runtimeDir), _path.delimiter, process.env.PATH].join('');
|
|
@@ -112,6 +119,8 @@ class PythonRunner {
|
|
|
112
119
|
|
|
113
120
|
if (json && typeof json === 'object' && has(json, '__offline_payload__')) {
|
|
114
121
|
payload = json.__offline_payload__; // everything else is print(), logging, ...
|
|
122
|
+
} else if (this.log) {
|
|
123
|
+
this.log.notice(item);
|
|
115
124
|
} else {
|
|
116
125
|
console.log(item);
|
|
117
126
|
}
|
|
@@ -134,7 +143,11 @@ class PythonRunner {
|
|
|
134
143
|
|
|
135
144
|
const onErr = data => {
|
|
136
145
|
// TODO
|
|
137
|
-
|
|
146
|
+
if (this.log) {
|
|
147
|
+
this.log.notice(data.toString());
|
|
148
|
+
} else {
|
|
149
|
+
console.log(data.toString());
|
|
150
|
+
}
|
|
138
151
|
};
|
|
139
152
|
|
|
140
153
|
const onLine = line => {
|