serverless-offline 8.8.1 → 9.0.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 +3 -3
- package/package.json +33 -57
- package/src/ServerlessOffline.js +412 -0
- package/src/config/commandOptions.js +155 -0
- package/src/config/constants.js +22 -0
- package/{dist → src}/config/defaultOptions.js +8 -17
- package/src/config/index.js +4 -0
- package/src/config/supportedRuntimes.js +47 -0
- package/src/events/authCanExecuteResource.js +35 -0
- package/src/events/authFunctionNameExtractor.js +75 -0
- package/src/events/authMatchPolicyResource.js +71 -0
- package/src/events/authValidateContext.js +51 -0
- package/src/events/http/Endpoint.js +135 -0
- package/src/events/http/Http.js +50 -0
- package/src/events/http/HttpEventDefinition.js +20 -0
- package/src/events/http/HttpServer.js +1277 -0
- package/src/events/http/OfflineEndpoint.js +33 -0
- package/src/events/http/authJWTSettingsExtractor.js +70 -0
- package/src/events/http/createAuthScheme.js +176 -0
- package/src/events/http/createJWTAuthScheme.js +106 -0
- package/src/events/http/index.js +1 -0
- package/src/events/http/javaHelpers.js +102 -0
- package/src/events/http/lambda-events/LambdaIntegrationEvent.js +57 -0
- package/src/events/http/lambda-events/LambdaProxyIntegrationEvent.js +233 -0
- package/src/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +190 -0
- package/src/events/http/lambda-events/VelocityContext.js +147 -0
- package/src/events/http/lambda-events/index.js +4 -0
- package/src/events/http/lambda-events/renderVelocityTemplateObject.js +93 -0
- package/{dist → src}/events/http/parseResources.js +73 -78
- package/src/events/http/payloadSchemaValidator.js +13 -0
- package/{dist → src}/events/http/templates/offline-default.req.vm +0 -0
- package/{dist → src}/events/http/templates/offline-default.res.vm +0 -0
- package/src/events/schedule/Schedule.js +131 -0
- package/src/events/schedule/ScheduleEvent.js +18 -0
- package/src/events/schedule/ScheduleEventDefinition.js +21 -0
- package/src/events/schedule/index.js +1 -0
- package/src/events/websocket/HttpServer.js +69 -0
- package/src/events/websocket/WebSocket.js +52 -0
- package/src/events/websocket/WebSocketClients.js +462 -0
- package/src/events/websocket/WebSocketEventDefinition.js +18 -0
- package/src/events/websocket/WebSocketServer.js +73 -0
- package/src/events/websocket/http-routes/_catchAll/catchAllRoute.js +16 -0
- package/src/events/websocket/http-routes/_catchAll/index.js +1 -0
- package/src/events/websocket/http-routes/connections/ConnectionsController.js +28 -0
- package/src/events/websocket/http-routes/connections/connectionsRoutes.js +70 -0
- package/src/events/websocket/http-routes/connections/index.js +1 -0
- package/src/events/websocket/http-routes/index.js +2 -0
- package/src/events/websocket/index.js +1 -0
- package/src/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +65 -0
- package/src/events/websocket/lambda-events/WebSocketConnectEvent.js +68 -0
- package/src/events/websocket/lambda-events/WebSocketDisconnectEvent.js +31 -0
- package/src/events/websocket/lambda-events/WebSocketEvent.js +29 -0
- package/src/events/websocket/lambda-events/WebSocketRequestContext.js +67 -0
- package/src/events/websocket/lambda-events/index.js +4 -0
- package/src/index.js +12 -0
- package/src/lambda/HttpServer.js +108 -0
- package/src/lambda/Lambda.js +68 -0
- package/src/lambda/LambdaContext.js +33 -0
- package/src/lambda/LambdaFunction.js +308 -0
- package/src/lambda/LambdaFunctionPool.js +109 -0
- package/src/lambda/__tests__/LambdaContext.test.js +30 -0
- package/src/lambda/__tests__/LambdaFunction.test.js +196 -0
- package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsJSONObject.fixture.js +47 -0
- package/src/lambda/__tests__/fixtures/Lambda/LambdaFunctionThatReturnsNativeString.fixture.js +46 -0
- package/src/lambda/__tests__/fixtures/Lambda/package.json +3 -0
- package/src/lambda/__tests__/fixtures/lambdaFunction.fixture.js +145 -0
- package/src/lambda/__tests__/fixtures/package.json +3 -0
- package/src/lambda/__tests__/routes/invocations/InvocationsController.test.js +42 -0
- package/src/lambda/handler-runner/HandlerRunner.js +136 -0
- package/src/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +72 -0
- package/src/lambda/handler-runner/child-process-runner/childProcessHelper.js +42 -0
- package/src/lambda/handler-runner/child-process-runner/index.js +1 -0
- package/src/lambda/handler-runner/docker-runner/DockerContainer.js +417 -0
- package/src/lambda/handler-runner/docker-runner/DockerImage.js +35 -0
- package/src/lambda/handler-runner/docker-runner/DockerRunner.js +63 -0
- package/src/lambda/handler-runner/docker-runner/index.js +1 -0
- package/src/lambda/handler-runner/go-runner/GoRunner.js +166 -0
- package/src/lambda/handler-runner/go-runner/index.js +1 -0
- package/src/lambda/handler-runner/in-process-runner/InProcessRunner.js +125 -0
- package/src/lambda/handler-runner/in-process-runner/index.js +1 -0
- package/src/lambda/handler-runner/index.js +1 -0
- package/src/lambda/handler-runner/java-runner/JavaRunner.js +114 -0
- package/src/lambda/handler-runner/java-runner/index.js +1 -0
- package/src/lambda/handler-runner/python-runner/PythonRunner.js +138 -0
- package/src/lambda/handler-runner/python-runner/index.js +1 -0
- package/{dist → src}/lambda/handler-runner/python-runner/invoke.py +0 -0
- package/src/lambda/handler-runner/ruby-runner/RubyRunner.js +107 -0
- package/src/lambda/handler-runner/ruby-runner/index.js +1 -0
- package/{dist → src}/lambda/handler-runner/ruby-runner/invoke.rb +0 -0
- package/src/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +70 -0
- package/src/lambda/handler-runner/worker-thread-runner/index.js +1 -0
- package/src/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +29 -0
- package/src/lambda/index.js +1 -0
- package/src/lambda/routes/index.js +2 -0
- package/src/lambda/routes/invocations/InvocationsController.js +102 -0
- package/src/lambda/routes/invocations/index.js +1 -0
- package/src/lambda/routes/invocations/invocationsRoute.js +77 -0
- package/src/lambda/routes/invoke-async/InvokeAsyncController.js +20 -0
- package/src/lambda/routes/invoke-async/index.js +1 -0
- package/src/lambda/routes/invoke-async/invokeAsyncRoute.js +33 -0
- package/src/utils/__tests__/createUniqueId.test.js +18 -0
- package/src/utils/__tests__/formatToClfTime.test.js +14 -0
- package/src/utils/__tests__/generateHapiPath.test.js +46 -0
- package/src/utils/__tests__/lowerCaseKeys.test.js +30 -0
- package/src/utils/__tests__/parseHeaders.test.js +13 -0
- package/src/utils/__tests__/parseMultiValueHeaders.test.js +24 -0
- package/src/utils/__tests__/parseMultiValueQueryStringParameters.test.js +159 -0
- package/src/utils/__tests__/parseQueryStringParameters.test.js +15 -0
- package/src/utils/__tests__/splitHandlerPathAndName.test.js +54 -0
- package/src/utils/__tests__/unflatten.test.js +32 -0
- package/src/utils/checkDockerDaemon.js +19 -0
- package/src/utils/checkGoVersion.js +16 -0
- package/src/utils/createApiKey.js +5 -0
- package/src/utils/createUniqueId.js +5 -0
- package/src/utils/detectExecutable.js +11 -0
- package/{dist → src}/utils/formatToClfTime.js +6 -14
- package/src/utils/generateHapiPath.js +26 -0
- package/src/utils/getHttpApiCorsConfig.js +28 -0
- package/src/utils/index.js +42 -0
- package/src/utils/jsonPath.js +13 -0
- package/src/utils/logRoutes.js +64 -0
- package/src/utils/lowerCaseKeys.js +6 -0
- package/src/utils/parseHeaders.js +14 -0
- package/src/utils/parseMultiValueHeaders.js +27 -0
- package/src/utils/parseMultiValueQueryStringParameters.js +31 -0
- package/src/utils/parseQueryStringParameters.js +15 -0
- package/src/utils/resolveJoins.js +29 -0
- package/src/utils/splitHandlerPathAndName.js +31 -0
- package/src/utils/unflatten.js +11 -0
- package/CHANGELOG.md +0 -78
- package/dist/ServerlessOffline.js +0 -508
- package/dist/config/commandOptions.js +0 -149
- package/dist/config/constants.js +0 -30
- package/dist/config/index.js +0 -55
- package/dist/config/supportedRuntimes.js +0 -40
- package/dist/debugLog.js +0 -12
- package/dist/events/authCanExecuteResource.js +0 -35
- package/dist/events/authFunctionNameExtractor.js +0 -87
- package/dist/events/authMatchPolicyResource.js +0 -62
- package/dist/events/authValidateContext.js +0 -53
- package/dist/events/http/Endpoint.js +0 -173
- package/dist/events/http/Http.js +0 -77
- package/dist/events/http/HttpEventDefinition.js +0 -36
- package/dist/events/http/HttpServer.js +0 -1370
- package/dist/events/http/OfflineEndpoint.js +0 -38
- package/dist/events/http/authJWTSettingsExtractor.js +0 -76
- package/dist/events/http/createAuthScheme.js +0 -184
- package/dist/events/http/createJWTAuthScheme.js +0 -159
- package/dist/events/http/index.js +0 -15
- package/dist/events/http/javaHelpers.js +0 -99
- package/dist/events/http/lambda-events/LambdaIntegrationEvent.js +0 -87
- package/dist/events/http/lambda-events/LambdaProxyIntegrationEvent.js +0 -246
- package/dist/events/http/lambda-events/LambdaProxyIntegrationEventV2.js +0 -225
- package/dist/events/http/lambda-events/VelocityContext.js +0 -170
- package/dist/events/http/lambda-events/index.js +0 -39
- package/dist/events/http/lambda-events/renderVelocityTemplateObject.js +0 -111
- package/dist/events/http/payloadSchemaValidator.js +0 -13
- package/dist/events/schedule/Schedule.js +0 -183
- package/dist/events/schedule/ScheduleEvent.js +0 -27
- package/dist/events/schedule/ScheduleEventDefinition.js +0 -36
- package/dist/events/schedule/index.js +0 -15
- package/dist/events/websocket/HttpServer.js +0 -114
- package/dist/events/websocket/WebSocket.js +0 -78
- package/dist/events/websocket/WebSocketClients.js +0 -577
- package/dist/events/websocket/WebSocketEventDefinition.js +0 -32
- package/dist/events/websocket/WebSocketServer.js +0 -139
- package/dist/events/websocket/http-routes/_catchAll/catchAllRoute.js +0 -33
- package/dist/events/websocket/http-routes/_catchAll/index.js +0 -15
- package/dist/events/websocket/http-routes/connections/ConnectionsController.js +0 -45
- package/dist/events/websocket/http-routes/connections/connectionsRoutes.js +0 -95
- package/dist/events/websocket/http-routes/connections/index.js +0 -15
- package/dist/events/websocket/http-routes/index.js +0 -23
- package/dist/events/websocket/index.js +0 -15
- package/dist/events/websocket/lambda-events/WebSocketAuthorizerEvent.js +0 -99
- package/dist/events/websocket/lambda-events/WebSocketConnectEvent.js +0 -101
- package/dist/events/websocket/lambda-events/WebSocketDisconnectEvent.js +0 -47
- package/dist/events/websocket/lambda-events/WebSocketEvent.js +0 -54
- package/dist/events/websocket/lambda-events/WebSocketRequestContext.js +0 -98
- package/dist/events/websocket/lambda-events/index.js +0 -39
- package/dist/index.js +0 -15
- package/dist/lambda/HttpServer.js +0 -124
- package/dist/lambda/Lambda.js +0 -117
- package/dist/lambda/LambdaContext.js +0 -53
- package/dist/lambda/LambdaFunction.js +0 -390
- package/dist/lambda/LambdaFunctionPool.js +0 -127
- package/dist/lambda/handler-runner/HandlerRunner.js +0 -195
- package/dist/lambda/handler-runner/child-process-runner/ChildProcessRunner.js +0 -124
- package/dist/lambda/handler-runner/child-process-runner/childProcessHelper.js +0 -49
- package/dist/lambda/handler-runner/child-process-runner/index.js +0 -15
- package/dist/lambda/handler-runner/docker-runner/DockerContainer.js +0 -515
- package/dist/lambda/handler-runner/docker-runner/DockerImage.js +0 -67
- package/dist/lambda/handler-runner/docker-runner/DockerRunner.js +0 -74
- package/dist/lambda/handler-runner/docker-runner/index.js +0 -15
- package/dist/lambda/handler-runner/go-runner/GoRunner.js +0 -230
- package/dist/lambda/handler-runner/go-runner/index.js +0 -15
- package/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js +0 -228
- package/dist/lambda/handler-runner/in-process-runner/index.js +0 -15
- package/dist/lambda/handler-runner/index.js +0 -15
- package/dist/lambda/handler-runner/java-runner/JavaRunner.js +0 -153
- package/dist/lambda/handler-runner/java-runner/index.js +0 -15
- package/dist/lambda/handler-runner/python-runner/PythonRunner.js +0 -185
- package/dist/lambda/handler-runner/python-runner/index.js +0 -15
- package/dist/lambda/handler-runner/ruby-runner/RubyRunner.js +0 -147
- package/dist/lambda/handler-runner/ruby-runner/index.js +0 -15
- package/dist/lambda/handler-runner/worker-thread-runner/WorkerThreadRunner.js +0 -92
- package/dist/lambda/handler-runner/worker-thread-runner/index.js +0 -15
- package/dist/lambda/handler-runner/worker-thread-runner/workerThreadHelper.js +0 -31
- package/dist/lambda/index.js +0 -15
- package/dist/lambda/routes/index.js +0 -23
- package/dist/lambda/routes/invocations/InvocationsController.js +0 -142
- package/dist/lambda/routes/invocations/index.js +0 -15
- package/dist/lambda/routes/invocations/invocationsRoute.js +0 -90
- package/dist/lambda/routes/invoke-async/InvokeAsyncController.js +0 -38
- package/dist/lambda/routes/invoke-async/index.js +0 -15
- package/dist/lambda/routes/invoke-async/invokeAsyncRoute.js +0 -43
- package/dist/main.js +0 -11
- package/dist/serverlessLog.js +0 -91
- package/dist/utils/checkDockerDaemon.js +0 -27
- package/dist/utils/checkGoVersion.js +0 -27
- package/dist/utils/createApiKey.js +0 -12
- package/dist/utils/createUniqueId.js +0 -14
- package/dist/utils/detectExecutable.js +0 -21
- package/dist/utils/generateHapiPath.js +0 -28
- package/dist/utils/getHttpApiCorsConfig.js +0 -40
- package/dist/utils/index.js +0 -165
- package/dist/utils/jsonPath.js +0 -21
- package/dist/utils/lowerCaseKeys.js +0 -14
- package/dist/utils/parseHeaders.js +0 -23
- package/dist/utils/parseMultiValueHeaders.js +0 -36
- package/dist/utils/parseMultiValueQueryStringParameters.js +0 -40
- package/dist/utils/parseQueryStringParameters.js +0 -26
- package/dist/utils/resolveJoins.js +0 -36
- package/dist/utils/satisfiesVersionRange.js +0 -20
- package/dist/utils/splitHandlerPathAndName.js +0 -37
- package/dist/utils/unflatten.js +0 -18
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _child_process = require("child_process");
|
|
9
|
-
|
|
10
|
-
var _os = require("os");
|
|
11
|
-
|
|
12
|
-
var _path = require("path");
|
|
13
|
-
|
|
14
|
-
var _process = _interopRequireWildcard(require("process"));
|
|
15
|
-
|
|
16
|
-
var _readline = _interopRequireDefault(require("readline"));
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
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
|
-
|
|
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; }
|
|
25
|
-
|
|
26
|
-
var id = 0;
|
|
27
|
-
|
|
28
|
-
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
29
|
-
|
|
30
|
-
const {
|
|
31
|
-
parse,
|
|
32
|
-
stringify
|
|
33
|
-
} = JSON;
|
|
34
|
-
const {
|
|
35
|
-
assign
|
|
36
|
-
} = Object;
|
|
37
|
-
const {
|
|
38
|
-
has
|
|
39
|
-
} = Reflect;
|
|
40
|
-
|
|
41
|
-
var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
|
|
42
|
-
|
|
43
|
-
var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
|
|
44
|
-
|
|
45
|
-
var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
|
|
46
|
-
|
|
47
|
-
var _runtime = /*#__PURE__*/_classPrivateFieldLooseKey("runtime");
|
|
48
|
-
|
|
49
|
-
var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
|
|
50
|
-
|
|
51
|
-
class PythonRunner {
|
|
52
|
-
constructor(funOptions, env, allowCache, v3Utils) {
|
|
53
|
-
Object.defineProperty(this, _env, {
|
|
54
|
-
writable: true,
|
|
55
|
-
value: null
|
|
56
|
-
});
|
|
57
|
-
Object.defineProperty(this, _handlerName, {
|
|
58
|
-
writable: true,
|
|
59
|
-
value: null
|
|
60
|
-
});
|
|
61
|
-
Object.defineProperty(this, _handlerPath, {
|
|
62
|
-
writable: true,
|
|
63
|
-
value: null
|
|
64
|
-
});
|
|
65
|
-
Object.defineProperty(this, _runtime, {
|
|
66
|
-
writable: true,
|
|
67
|
-
value: null
|
|
68
|
-
});
|
|
69
|
-
Object.defineProperty(this, _allowCache, {
|
|
70
|
-
writable: true,
|
|
71
|
-
value: false
|
|
72
|
-
});
|
|
73
|
-
const {
|
|
74
|
-
handlerName,
|
|
75
|
-
handlerPath,
|
|
76
|
-
runtime
|
|
77
|
-
} = funOptions;
|
|
78
|
-
_classPrivateFieldLooseBase(this, _env)[_env] = env;
|
|
79
|
-
_classPrivateFieldLooseBase(this, _handlerName)[_handlerName] = handlerName;
|
|
80
|
-
_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
|
|
81
|
-
_classPrivateFieldLooseBase(this, _runtime)[_runtime] = (0, _os.platform)() === 'win32' ? 'python.exe' : runtime;
|
|
82
|
-
_classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
|
|
83
|
-
|
|
84
|
-
if (v3Utils) {
|
|
85
|
-
this.log = v3Utils.log;
|
|
86
|
-
this.progress = v3Utils.progress;
|
|
87
|
-
this.writeText = v3Utils.writeText;
|
|
88
|
-
this.v3Utils = v3Utils;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (_process.default.env.VIRTUAL_ENV) {
|
|
92
|
-
const runtimeDir = (0, _os.platform)() === 'win32' ? 'Scripts' : 'bin';
|
|
93
|
-
_process.default.env.PATH = [(0, _path.join)(_process.default.env.VIRTUAL_ENV, runtimeDir), _path.delimiter, _process.default.env.PATH].join('');
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const [pythonExecutable] = _classPrivateFieldLooseBase(this, _runtime)[_runtime].split('.');
|
|
97
|
-
|
|
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]),
|
|
100
|
-
shell: true
|
|
101
|
-
});
|
|
102
|
-
this.handlerProcess.stdout.readline = _readline.default.createInterface({
|
|
103
|
-
input: this.handlerProcess.stdout
|
|
104
|
-
});
|
|
105
|
-
} // () => void
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
cleanup() {
|
|
109
|
-
this.handlerProcess.kill();
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
_parsePayload(value) {
|
|
113
|
-
let payload;
|
|
114
|
-
|
|
115
|
-
for (const item of value.split(_os.EOL)) {
|
|
116
|
-
let json; // first check if it's JSON
|
|
117
|
-
|
|
118
|
-
try {
|
|
119
|
-
json = parse(item); // nope, it's not JSON
|
|
120
|
-
} catch (err) {// no-op
|
|
121
|
-
} // now let's see if we have a property __offline_payload__
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (json && typeof json === 'object' && has(json, '__offline_payload__')) {
|
|
125
|
-
payload = json.__offline_payload__; // everything else is print(), logging, ...
|
|
126
|
-
} else if (this.log) {
|
|
127
|
-
this.log.notice(item);
|
|
128
|
-
} else {
|
|
129
|
-
console.log(item);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return payload;
|
|
134
|
-
} // invokeLocalPython, loosely based on:
|
|
135
|
-
// https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/index.js#L410
|
|
136
|
-
// invoke.py, based on:
|
|
137
|
-
// https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/invoke.py
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
async run(event, context) {
|
|
141
|
-
return new Promise((accept, reject) => {
|
|
142
|
-
const input = stringify({
|
|
143
|
-
context,
|
|
144
|
-
event,
|
|
145
|
-
allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache]
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
const onErr = data => {
|
|
149
|
-
// TODO
|
|
150
|
-
if (this.log) {
|
|
151
|
-
this.log.notice(data.toString());
|
|
152
|
-
} else {
|
|
153
|
-
console.log(data.toString());
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
const onLine = line => {
|
|
158
|
-
try {
|
|
159
|
-
const parsed = this._parsePayload(line.toString());
|
|
160
|
-
|
|
161
|
-
if (parsed) {
|
|
162
|
-
this.handlerProcess.stdout.readline.removeListener('line', onLine);
|
|
163
|
-
this.handlerProcess.stderr.removeListener('data', onErr);
|
|
164
|
-
return accept(parsed);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return null;
|
|
168
|
-
} catch (err) {
|
|
169
|
-
return reject(err);
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
this.handlerProcess.stdout.readline.on('line', onLine);
|
|
174
|
-
this.handlerProcess.stderr.on('data', onErr);
|
|
175
|
-
|
|
176
|
-
_process.default.nextTick(() => {
|
|
177
|
-
this.handlerProcess.stdin.write(input);
|
|
178
|
-
this.handlerProcess.stdin.write('\n');
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
exports.default = PythonRunner;
|
|
@@ -1,15 +0,0 @@
|
|
|
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 _PythonRunner.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
var _PythonRunner = _interopRequireDefault(require("./PythonRunner.js"));
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -1,147 +0,0 @@
|
|
|
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 _path = require("path");
|
|
11
|
-
|
|
12
|
-
var _process = require("process");
|
|
13
|
-
|
|
14
|
-
var _execa = _interopRequireDefault(require("execa"));
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
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
|
-
|
|
20
|
-
var id = 0;
|
|
21
|
-
|
|
22
|
-
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
23
|
-
|
|
24
|
-
const {
|
|
25
|
-
parse,
|
|
26
|
-
stringify
|
|
27
|
-
} = JSON;
|
|
28
|
-
const {
|
|
29
|
-
has
|
|
30
|
-
} = Reflect;
|
|
31
|
-
|
|
32
|
-
var _env = /*#__PURE__*/_classPrivateFieldLooseKey("env");
|
|
33
|
-
|
|
34
|
-
var _handlerName = /*#__PURE__*/_classPrivateFieldLooseKey("handlerName");
|
|
35
|
-
|
|
36
|
-
var _handlerPath = /*#__PURE__*/_classPrivateFieldLooseKey("handlerPath");
|
|
37
|
-
|
|
38
|
-
var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
|
|
39
|
-
|
|
40
|
-
class RubyRunner {
|
|
41
|
-
constructor(funOptions, env, allowCache, v3Utils) {
|
|
42
|
-
Object.defineProperty(this, _env, {
|
|
43
|
-
writable: true,
|
|
44
|
-
value: null
|
|
45
|
-
});
|
|
46
|
-
Object.defineProperty(this, _handlerName, {
|
|
47
|
-
writable: true,
|
|
48
|
-
value: null
|
|
49
|
-
});
|
|
50
|
-
Object.defineProperty(this, _handlerPath, {
|
|
51
|
-
writable: true,
|
|
52
|
-
value: null
|
|
53
|
-
});
|
|
54
|
-
Object.defineProperty(this, _allowCache, {
|
|
55
|
-
writable: true,
|
|
56
|
-
value: false
|
|
57
|
-
});
|
|
58
|
-
const {
|
|
59
|
-
handlerName,
|
|
60
|
-
handlerPath
|
|
61
|
-
} = funOptions;
|
|
62
|
-
_classPrivateFieldLooseBase(this, _env)[_env] = env;
|
|
63
|
-
_classPrivateFieldLooseBase(this, _handlerName)[_handlerName] = handlerName;
|
|
64
|
-
_classPrivateFieldLooseBase(this, _handlerPath)[_handlerPath] = handlerPath;
|
|
65
|
-
_classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
|
|
66
|
-
|
|
67
|
-
if (v3Utils) {
|
|
68
|
-
this.log = v3Utils.log;
|
|
69
|
-
this.progress = v3Utils.progress;
|
|
70
|
-
this.writeText = v3Utils.writeText;
|
|
71
|
-
this.v3Utils = v3Utils;
|
|
72
|
-
}
|
|
73
|
-
} // no-op
|
|
74
|
-
// () => void
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
cleanup() {}
|
|
78
|
-
|
|
79
|
-
_parsePayload(value) {
|
|
80
|
-
let payload;
|
|
81
|
-
|
|
82
|
-
for (const item of value.split(_os.EOL)) {
|
|
83
|
-
let json; // first check if it's JSON
|
|
84
|
-
|
|
85
|
-
try {
|
|
86
|
-
json = parse(item); // nope, it's not JSON
|
|
87
|
-
} catch (err) {// no-op
|
|
88
|
-
} // now let's see if we have a property __offline_payload__
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (json && typeof json === 'object' && has(json, '__offline_payload__')) {
|
|
92
|
-
payload = json.__offline_payload__;
|
|
93
|
-
} else if (this.log) {
|
|
94
|
-
this.log.notice(item);
|
|
95
|
-
} else {
|
|
96
|
-
console.log(item); // log non-JSON stdout to console (puts, p, logger.info, ...)
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return payload;
|
|
101
|
-
} // invokeLocalRuby, loosely based on:
|
|
102
|
-
// https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/index.js#L556
|
|
103
|
-
// invoke.rb, copy/pasted entirely as is:
|
|
104
|
-
// https://github.com/serverless/serverless/blob/v1.50.0/lib/plugins/aws/invokeLocal/invoke.rb
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
async run(event, context) {
|
|
108
|
-
const runtime = (0, _os.platform)() === 'win32' ? 'ruby.exe' : 'ruby'; // https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html
|
|
109
|
-
// https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html
|
|
110
|
-
// exclude callbackWaitsForEmptyEventLoop, don't mutate context
|
|
111
|
-
|
|
112
|
-
const {
|
|
113
|
-
callbackWaitsForEmptyEventLoop,
|
|
114
|
-
..._context
|
|
115
|
-
} = context;
|
|
116
|
-
const input = stringify({
|
|
117
|
-
context: _context,
|
|
118
|
-
event,
|
|
119
|
-
allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache]
|
|
120
|
-
}); // console.log(input)
|
|
121
|
-
|
|
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]], {
|
|
123
|
-
env: _classPrivateFieldLooseBase(this, _env)[_env],
|
|
124
|
-
input // shell: true,
|
|
125
|
-
|
|
126
|
-
});
|
|
127
|
-
const result = await ruby;
|
|
128
|
-
const {
|
|
129
|
-
stderr,
|
|
130
|
-
stdout
|
|
131
|
-
} = result;
|
|
132
|
-
|
|
133
|
-
if (stderr) {
|
|
134
|
-
// TODO
|
|
135
|
-
if (this.log) {
|
|
136
|
-
this.log.notice(stderr);
|
|
137
|
-
} else {
|
|
138
|
-
console.log(stderr);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return this._parsePayload(stdout);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
exports.default = RubyRunner;
|
|
@@ -1,15 +0,0 @@
|
|
|
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 _RubyRunner.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
var _RubyRunner = _interopRequireDefault(require("./RubyRunner.js"));
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _path = require("path");
|
|
9
|
-
|
|
10
|
-
var _worker_threads = require("worker_threads");
|
|
11
|
-
|
|
12
|
-
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
13
|
-
|
|
14
|
-
var id = 0;
|
|
15
|
-
|
|
16
|
-
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
17
|
-
|
|
18
|
-
// eslint-disable-line import/no-unresolved
|
|
19
|
-
const workerThreadHelperPath = (0, _path.resolve)(__dirname, './workerThreadHelper.js');
|
|
20
|
-
|
|
21
|
-
var _workerThread = /*#__PURE__*/_classPrivateFieldLooseKey("workerThread");
|
|
22
|
-
|
|
23
|
-
var _allowCache = /*#__PURE__*/_classPrivateFieldLooseKey("allowCache");
|
|
24
|
-
|
|
25
|
-
class WorkerThreadRunner {
|
|
26
|
-
constructor(funOptions
|
|
27
|
-
/* options */
|
|
28
|
-
, env, allowCache) {
|
|
29
|
-
Object.defineProperty(this, _workerThread, {
|
|
30
|
-
writable: true,
|
|
31
|
-
value: null
|
|
32
|
-
});
|
|
33
|
-
Object.defineProperty(this, _allowCache, {
|
|
34
|
-
writable: true,
|
|
35
|
-
value: false
|
|
36
|
-
});
|
|
37
|
-
// this._options = options
|
|
38
|
-
const {
|
|
39
|
-
functionKey,
|
|
40
|
-
handlerName,
|
|
41
|
-
handlerPath,
|
|
42
|
-
timeout
|
|
43
|
-
} = funOptions;
|
|
44
|
-
_classPrivateFieldLooseBase(this, _allowCache)[_allowCache] = allowCache;
|
|
45
|
-
_classPrivateFieldLooseBase(this, _workerThread)[_workerThread] = new _worker_threads.Worker(workerThreadHelperPath, {
|
|
46
|
-
// don't pass process.env from the main process!
|
|
47
|
-
env,
|
|
48
|
-
workerData: {
|
|
49
|
-
functionKey,
|
|
50
|
-
handlerName,
|
|
51
|
-
handlerPath,
|
|
52
|
-
timeout
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
} // () => Promise<number>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
cleanup() {
|
|
59
|
-
// TODO console.log('worker thread cleanup')
|
|
60
|
-
// NOTE: terminate returns a Promise with exit code in node.js v12.5+
|
|
61
|
-
return _classPrivateFieldLooseBase(this, _workerThread)[_workerThread].terminate();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
run(event, context) {
|
|
65
|
-
return new Promise((_resolve, reject) => {
|
|
66
|
-
const {
|
|
67
|
-
port1,
|
|
68
|
-
port2
|
|
69
|
-
} = new _worker_threads.MessageChannel();
|
|
70
|
-
port1.on('message', _resolve) // emitted if the worker thread throws an uncaught exception.
|
|
71
|
-
// In that case, the worker will be terminated.
|
|
72
|
-
.on('error', reject) // TODO
|
|
73
|
-
.on('exit', code => {
|
|
74
|
-
if (code !== 0) {
|
|
75
|
-
reject(new Error(`Worker stopped with exit code ${code}`));
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
_classPrivateFieldLooseBase(this, _workerThread)[_workerThread].postMessage({
|
|
80
|
-
context,
|
|
81
|
-
event,
|
|
82
|
-
allowCache: _classPrivateFieldLooseBase(this, _allowCache)[_allowCache],
|
|
83
|
-
// port2 is part of the payload, for the other side to answer messages
|
|
84
|
-
port: port2
|
|
85
|
-
}, // port2 is also required to be part of the transfer list
|
|
86
|
-
[port2]);
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
exports.default = WorkerThreadRunner;
|
|
@@ -1,15 +0,0 @@
|
|
|
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 _WorkerThreadRunner.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
var _WorkerThreadRunner = _interopRequireDefault(require("./WorkerThreadRunner.js"));
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _process = require("process");
|
|
4
|
-
|
|
5
|
-
var _worker_threads = require("worker_threads");
|
|
6
|
-
|
|
7
|
-
var _index = _interopRequireDefault(require("../in-process-runner/index.js"));
|
|
8
|
-
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
11
|
-
// eslint-disable-line import/no-unresolved
|
|
12
|
-
const {
|
|
13
|
-
functionKey,
|
|
14
|
-
handlerName,
|
|
15
|
-
handlerPath
|
|
16
|
-
} = _worker_threads.workerData;
|
|
17
|
-
|
|
18
|
-
_worker_threads.parentPort.on('message', async messageData => {
|
|
19
|
-
const {
|
|
20
|
-
context,
|
|
21
|
-
event,
|
|
22
|
-
port,
|
|
23
|
-
timeout,
|
|
24
|
-
allowCache
|
|
25
|
-
} = messageData; // TODO we could probably cache this in the module scope?
|
|
26
|
-
|
|
27
|
-
const inProcessRunner = new _index.default(functionKey, handlerPath, handlerName, _process.env, timeout, allowCache);
|
|
28
|
-
const result = await inProcessRunner.run(event, context); // TODO check serializeability (contains function, symbol etc)
|
|
29
|
-
|
|
30
|
-
port.postMessage(result);
|
|
31
|
-
});
|
package/dist/lambda/index.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
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 _Lambda.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
var _Lambda = _interopRequireDefault(require("./Lambda.js"));
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "invocationsRoute", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _index.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "invokeAsyncRoute", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _index2.default;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
var _index = _interopRequireDefault(require("./invocations/index.js"));
|
|
20
|
-
|
|
21
|
-
var _index2 = _interopRequireDefault(require("./invoke-async/index.js"));
|
|
22
|
-
|
|
23
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _serverlessLog = _interopRequireDefault(require("../../../serverlessLog.js"));
|
|
9
|
-
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
|
13
|
-
|
|
14
|
-
var id = 0;
|
|
15
|
-
|
|
16
|
-
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
|
17
|
-
|
|
18
|
-
var _lambda = /*#__PURE__*/_classPrivateFieldLooseKey("lambda");
|
|
19
|
-
|
|
20
|
-
class InvocationsController {
|
|
21
|
-
constructor(lambda, v3Utils) {
|
|
22
|
-
Object.defineProperty(this, _lambda, {
|
|
23
|
-
writable: true,
|
|
24
|
-
value: null
|
|
25
|
-
});
|
|
26
|
-
_classPrivateFieldLooseBase(this, _lambda)[_lambda] = lambda;
|
|
27
|
-
|
|
28
|
-
if (v3Utils) {
|
|
29
|
-
this.log = v3Utils.log;
|
|
30
|
-
this.progress = v3Utils.progress;
|
|
31
|
-
this.writeText = v3Utils.writeText;
|
|
32
|
-
this.v3Utils = v3Utils;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async invoke(functionName, invocationType, event, clientContext) {
|
|
37
|
-
// Reject gracefully if functionName does not exist
|
|
38
|
-
const functionNames = _classPrivateFieldLooseBase(this, _lambda)[_lambda].listFunctionNames();
|
|
39
|
-
|
|
40
|
-
if (functionNames.length === 0 || !functionNames.includes(functionName)) {
|
|
41
|
-
if (this.log) {
|
|
42
|
-
this.log.error(`Attempt to invoke function '${functionName}' failed. Function does not exists.`);
|
|
43
|
-
} else {
|
|
44
|
-
(0, _serverlessLog.default)(`Attempt to invoke function '${functionName}' failed. Function does not exists.`);
|
|
45
|
-
} // Conforms to the actual response from AWS Lambda when invoking a non-existent
|
|
46
|
-
// function. Details on the error are provided in the Payload.Message key
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return {
|
|
50
|
-
FunctionError: 'ResourceNotFoundException',
|
|
51
|
-
Payload: {
|
|
52
|
-
Message: `Function not found: ${functionName}`,
|
|
53
|
-
Type: 'User'
|
|
54
|
-
},
|
|
55
|
-
StatusCode: 404
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const lambdaFunction = _classPrivateFieldLooseBase(this, _lambda)[_lambda].getByFunctionName(functionName);
|
|
60
|
-
|
|
61
|
-
lambdaFunction.setClientContext(clientContext);
|
|
62
|
-
lambdaFunction.setEvent(event);
|
|
63
|
-
|
|
64
|
-
if (invocationType === 'Event') {
|
|
65
|
-
// don't await result!
|
|
66
|
-
lambdaFunction.runHandler();
|
|
67
|
-
return {
|
|
68
|
-
Payload: '',
|
|
69
|
-
StatusCode: 202
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (!invocationType || invocationType === 'RequestResponse') {
|
|
74
|
-
let result;
|
|
75
|
-
|
|
76
|
-
try {
|
|
77
|
-
result = await lambdaFunction.runHandler();
|
|
78
|
-
} catch (err) {
|
|
79
|
-
if (this.log) {
|
|
80
|
-
this.log.error(`Unhandled Lambda Error during invoke of '${functionName}': ${err}`);
|
|
81
|
-
} else {
|
|
82
|
-
(0, _serverlessLog.default)(`Unhandled Lambda Error during invoke of '${functionName}'`);
|
|
83
|
-
console.log(err);
|
|
84
|
-
} // In most circumstances this is the correct error type/structure.
|
|
85
|
-
// The API returns a StreamingBody with status code of 200
|
|
86
|
-
// that eventually spits out the error and stack trace.
|
|
87
|
-
// When the request is synchronous, aws-sdk should buffer
|
|
88
|
-
// the whole error stream, however this has not been validated.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
Payload: {
|
|
93
|
-
errorType: 'Error',
|
|
94
|
-
errorMessage: err.message,
|
|
95
|
-
trace: err.stack.split('\n')
|
|
96
|
-
},
|
|
97
|
-
UnhandledError: true,
|
|
98
|
-
StatusCode: 200
|
|
99
|
-
}; // TODO: Additional pre and post-handler validation can expose
|
|
100
|
-
// the following error types:
|
|
101
|
-
// RequestTooLargeException, InvalidParameterValueException,
|
|
102
|
-
// and whatever response is thrown when the response is too large.
|
|
103
|
-
} // Checking if the result of the Lambda Invoke is a primitive string to wrap it. this is for future post-processing such as Step Functions Tasks
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (result) {
|
|
107
|
-
if (typeof result === 'string') {
|
|
108
|
-
result = `"${result}"`;
|
|
109
|
-
}
|
|
110
|
-
} // result is actually the Payload.
|
|
111
|
-
// So return in a standard structure so Hapi can
|
|
112
|
-
// respond with the correct status codes
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return {
|
|
116
|
-
Payload: result,
|
|
117
|
-
StatusCode: 200
|
|
118
|
-
};
|
|
119
|
-
} // TODO FIXME
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const errMsg = `invocationType: '${invocationType}' not supported by serverless-offline`;
|
|
123
|
-
|
|
124
|
-
if (this.log) {
|
|
125
|
-
this.log.error(errMsg);
|
|
126
|
-
} else {
|
|
127
|
-
console.log(errMsg);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
FunctionError: 'InvalidParameterValueException',
|
|
132
|
-
Payload: {
|
|
133
|
-
Message: errMsg,
|
|
134
|
-
Type: 'User'
|
|
135
|
-
},
|
|
136
|
-
StatusCode: 400
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
exports.default = InvocationsController;
|