@scloud/lambda-api 0.2.4 → 0.3.2

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 CHANGED
@@ -6,7 +6,9 @@ This is a piece of useful boilerplate to handle the mechanics of routing, header
6
6
 
7
7
  ## Releae notes
8
8
 
9
- * `0.2.4`: Allow Request.body to be `any`. Return simple text responses for handled errors (404, 500, 405)
9
+ * `0.3.2`: Add `ContextBuilder` to have the option to populate `Request.context` with access to the parsed `Request`.
10
+ * `0.3.1`: Add path parameter parsing and a `Request.context` object to allow custom values to be passed to handter functions.
11
+ * `0.2.4`: Allow Request.body to be `any`. Return simple text responses for handled errors (404, 500, 405).
10
12
  * `0.2.1`: Request headers are now made available in lowecase as well as their original case. The response body can now be `string` as well as `object`.
11
13
  * `0.2.2`: Add `Content-Type: text/plain` for string responses if not already set.
12
14
 
@@ -19,6 +21,7 @@ import { types } from '@scloud/lambda-api';
19
21
 
20
22
  const routes: types.Routes = {
21
23
  '/ping': { GET: async (request: types.Request) => ({ statusCode: 200, body: {message: 'ok'} }) },
24
+ '/path/{parameter}': { GET: async (request: types.Request) => ({ statusCode: 200, body: {message: request.pathParameters.parameter} }) },
22
25
  }
23
26
  ```
24
27
 
package/dist/handler.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
2
- import { Handler, Request, Response, Routes } from './types';
2
+ import { ContextBuilder, Handler, Request, Response, Routes } from './types';
3
3
  /**
4
4
  * API route handler
5
5
  */
6
- export declare function apiHandler(event: APIGatewayProxyEvent, context: Context, routes?: Routes, errorHandler?: (request: Request, e: Error) => Promise<Response>, catchAll?: Handler): Promise<APIGatewayProxyResult>;
6
+ export declare function apiHandler(event: APIGatewayProxyEvent, context: Context, routes?: Routes, errorHandler?: (request: Request, e: Error) => Promise<Response>, catchAll?: Handler, contextBuilder?: ContextBuilder): Promise<APIGatewayProxyResult>;
package/dist/handler.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.apiHandler = void 0;
3
+ exports.apiHandler = apiHandler;
4
4
  const helpers_1 = require("./helpers");
5
5
  function textResponse(statusCode, body) {
6
6
  return {
@@ -14,21 +14,21 @@ function textResponse(statusCode, body) {
14
14
  */
15
15
  async function apiHandler(event, context, routes = {
16
16
  '/api/ping': { GET: async (request) => ({ statusCode: 200, body: request }) },
17
- }, errorHandler = async (request) => ({ statusCode: 500, body: { error: `Internal server error: ${request.path}` } }), catchAll = async (request) => textResponse(404, `Not found: ${request.path}`)) {
17
+ }, errorHandler = async (request) => ({ statusCode: 500, body: { error: `Internal server error: ${request.path}` } }), catchAll = async (request) => textResponse(404, `Not found: ${request.path}`), contextBuilder = async () => ({})) {
18
18
  console.log(`Executing ${context.functionName} version: ${process.env.COMMIT_HASH}`);
19
19
  const request = (0, helpers_1.parseRequest)(event);
20
20
  let response;
21
21
  try {
22
- const route = (0, helpers_1.matchRoute)(routes, request.path);
23
- if (!route) {
22
+ const match = (0, helpers_1.matchRoute)(routes, request.path);
23
+ if (!match.route) {
24
24
  // Catch-all / 404
25
25
  response = await catchAll(request);
26
26
  }
27
27
  else {
28
- const handlerFunction = route[request.method];
28
+ const handlerFunction = match.route[request.method];
29
29
  // Handle the request:
30
30
  if (handlerFunction)
31
- response = await handlerFunction(request);
31
+ response = await handlerFunction({ ...request, pathParameters: match.params, context: await contextBuilder(request) });
32
32
  else
33
33
  response = textResponse(405, 'Method not allowed');
34
34
  }
@@ -43,7 +43,7 @@ async function apiHandler(event, context, routes = {
43
43
  response = await errorHandler(request, e);
44
44
  }
45
45
  catch (ee) {
46
- console.error(`Error in error handler: ${e.message}\n${e.stack}`);
46
+ console.error(`Error in error handler: ${ee.message}\n${ee.stack}`);
47
47
  }
48
48
  }
49
49
  // API Gateway Proxy result
@@ -73,5 +73,4 @@ async function apiHandler(event, context, routes = {
73
73
  }
74
74
  return result;
75
75
  }
76
- exports.apiHandler = apiHandler;
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLHVDQUFrRTtBQUVsRSxTQUFTLFlBQVksQ0FBQyxVQUFrQixFQUFFLElBQVk7SUFDcEQsT0FBTztRQUNMLFVBQVU7UUFDVixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFO1FBQ3pDLElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFVBQVUsQ0FDOUIsS0FBMkIsRUFDM0IsT0FBZ0IsRUFDaEIsU0FBaUI7SUFDZixXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO0NBQ3ZGLEVBRUQsZUFBa0UsS0FBSyxFQUFFLE9BQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSwwQkFBMEIsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUM5SyxXQUFvQixLQUFLLEVBQUUsT0FBZ0IsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxjQUFjLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUUvRixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsT0FBTyxDQUFDLFlBQVksYUFBYSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckYsTUFBTSxPQUFPLEdBQUcsSUFBQSxzQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBDLElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFVLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxrQkFBa0I7WUFDbEIsUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFxQixDQUFDLENBQUM7WUFFN0Qsc0JBQXNCO1lBQ3RCLElBQUksZUFBZTtnQkFBRSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7O2dCQUMxRCxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLDBCQUEwQjtRQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUksQ0FBVyxDQUFDLE9BQU8sS0FBTSxDQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRSxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDO1lBQ0gsaUJBQWlCO1lBQ2pCLElBQUksWUFBWTtnQkFBRSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQVUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBNEIsQ0FBVyxDQUFDLE9BQU8sS0FBTSxDQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRixDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLElBQUksR0FBVyxFQUFFLENBQUM7SUFDdEIsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEMscUJBQXFCO1FBQ3JCLG9EQUFvRDtRQUNwRCxRQUFRLENBQUMsT0FBTyxHQUFHLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6RSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsZ0NBQWdDO1FBQ2hDLG1EQUFtRDtRQUNuRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUEwQjtRQUNwQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7UUFDL0IsSUFBSTtRQUNKLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztLQUMxQixDQUFDO0lBRUYsbUJBQW1CO0lBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUEscUJBQVcsRUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixNQUFNLENBQUMsaUJBQWlCLEdBQUc7WUFDekIsTUFBTSxFQUFFLGFBQWE7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBakVELGdDQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFQSUdhdGV3YXlQcm94eUV2ZW50LFxuICBBUElHYXRld2F5UHJveHlSZXN1bHQsXG4gIENvbnRleHQsXG59IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgSGFuZGxlciwgUmVxdWVzdCwgUmVzcG9uc2UsIFJvdXRlLCBSb3V0ZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRDb29raWUsIG1hdGNoUm91dGUsIHBhcnNlUmVxdWVzdCB9IGZyb20gJy4vaGVscGVycyc7XG5cbmZ1bmN0aW9uIHRleHRSZXNwb25zZShzdGF0dXNDb2RlOiBudW1iZXIsIGJvZHk6IHN0cmluZyk6IFJlc3BvbnNlIHtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb2RlLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyB9LFxuICAgIGJvZHlcbiAgfTtcbn1cblxuLyoqXG4gKiBBUEkgcm91dGUgaGFuZGxlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpSGFuZGxlcihcbiAgZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50LFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyA9IHtcbiAgICAnL2FwaS9waW5nJzogeyBHRVQ6IGFzeW5jIChyZXF1ZXN0OiBSZXF1ZXN0KSA9PiAoeyBzdGF0dXNDb2RlOiAyMDAsIGJvZHk6IHJlcXVlc3QgfSkgfSxcbiAgfSxcblxuICBlcnJvckhhbmRsZXI6IChyZXF1ZXN0OiBSZXF1ZXN0LCBlOiBFcnJvcikgPT4gUHJvbWlzZTxSZXNwb25zZT4gPSBhc3luYyAocmVxdWVzdDogUmVxdWVzdCkgPT4gKHsgc3RhdHVzQ29kZTogNTAwLCBib2R5OiB7IGVycm9yOiBgSW50ZXJuYWwgc2VydmVyIGVycm9yOiAke3JlcXVlc3QucGF0aH1gIH0gfSksXG4gIGNhdGNoQWxsOiBIYW5kbGVyID0gYXN5bmMgKHJlcXVlc3Q6IFJlcXVlc3QpID0+IHRleHRSZXNwb25zZSg0MDQsIGBOb3QgZm91bmQ6ICR7cmVxdWVzdC5wYXRofWApLFxuKTogUHJvbWlzZTxBUElHYXRld2F5UHJveHlSZXN1bHQ+IHtcbiAgY29uc29sZS5sb2coYEV4ZWN1dGluZyAke2NvbnRleHQuZnVuY3Rpb25OYW1lfSB2ZXJzaW9uOiAke3Byb2Nlc3MuZW52LkNPTU1JVF9IQVNIfWApO1xuICBjb25zdCByZXF1ZXN0ID0gcGFyc2VSZXF1ZXN0KGV2ZW50KTtcblxuICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHJvdXRlID0gbWF0Y2hSb3V0ZShyb3V0ZXMsIHJlcXVlc3QucGF0aCk7XG4gICAgaWYgKCFyb3V0ZSkge1xuICAgICAgLy8gQ2F0Y2gtYWxsIC8gNDA0XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGNhdGNoQWxsKHJlcXVlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYW5kbGVyRnVuY3Rpb24gPSByb3V0ZVtyZXF1ZXN0Lm1ldGhvZCBhcyBrZXlvZiBSb3V0ZV07XG5cbiAgICAgIC8vIEhhbmRsZSB0aGUgcmVxdWVzdDpcbiAgICAgIGlmIChoYW5kbGVyRnVuY3Rpb24pIHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlckZ1bmN0aW9uKHJlcXVlc3QpO1xuICAgICAgZWxzZSByZXNwb25zZSA9IHRleHRSZXNwb25zZSg0MDUsICdNZXRob2Qgbm90IGFsbG93ZWQnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBGYWxsYmFjayBlcnJvciBoYW5kbGluZ1xuICAgIGNvbnNvbGUuZXJyb3IoYCR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9XFxuJHsoZSBhcyBFcnJvcikuc3RhY2t9YCk7XG4gICAgcmVzcG9uc2UgPSB0ZXh0UmVzcG9uc2UoNTAwLCBgSW50ZXJuYWwgc2VydmVyIGVycm9yOiAke3JlcXVlc3QucGF0aH1gKTtcbiAgICB0cnkge1xuICAgICAgLy8gRXJyb3IgaGFuZGxpbmdcbiAgICAgIGlmIChlcnJvckhhbmRsZXIpIHJlc3BvbnNlID0gYXdhaXQgZXJyb3JIYW5kbGVyKHJlcXVlc3QsIGUgYXMgRXJyb3IpO1xuICAgIH0gY2F0Y2ggKGVlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBpbiBlcnJvciBoYW5kbGVyOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfVxcbiR7KGUgYXMgRXJyb3IpLnN0YWNrfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFQSSBHYXRld2F5IFByb3h5IHJlc3VsdFxuICBsZXQgYm9keTogc3RyaW5nID0gJyc7XG4gIGlmICh0eXBlb2YgcmVzcG9uc2UuYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBVc2UgdGhlIGJvZHkgYXMtaXNcbiAgICAvLyBQb3RlbnRpYWxseSBhZGQgYSB0ZXh0L3BsYWluIGNvbnRlbnQgdHlwZSBoZWFkZXI6XG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJywgLi4ucmVzcG9uc2UuaGVhZGVycyB9O1xuICAgIGJvZHkgPSByZXNwb25zZS5ib2R5O1xuICB9IGVsc2UgaWYgKHJlc3BvbnNlLmJvZHkpIHtcbiAgICAvLyBTdHJpbmdpZnkgdGhlIHJlc3BvbnNlIG9iamVjdFxuICAgIC8vIEFQSSBHYXRld2F5IHJldHVybnMgYXBwbGljYXRpcG5vL2pzb24gYnkgZGVmYXVsdFxuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5ib2R5KTtcbiAgfVxuICBjb25zdCByZXN1bHQ6IEFQSUdhdGV3YXlQcm94eVJlc3VsdCA9IHtcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgIGJvZHksXG4gICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgfTtcblxuICAvLyBDb29raWVzIChpZiBzZXQpXG4gIGNvbnN0IGNvb2tpZUhlYWRlcnMgPSBidWlsZENvb2tpZShyZXNwb25zZS5jb29raWVzKTtcbiAgaWYgKGNvb2tpZUhlYWRlcnMpIHtcbiAgICByZXN1bHQubXVsdGlWYWx1ZUhlYWRlcnMgPSB7XG4gICAgICBDb29raWU6IGNvb2tpZUhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBc0JBLGdDQWlFQztBQTlFRCx1Q0FBa0U7QUFFbEUsU0FBUyxZQUFZLENBQUMsVUFBa0IsRUFBRSxJQUFZO0lBQ3BELE9BQU87UUFDTCxVQUFVO1FBQ1YsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRTtRQUN6QyxJQUFJO0tBQ0wsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxVQUFVLENBQzlCLEtBQTJCLEVBQzNCLE9BQWdCLEVBQ2hCLFNBQWlCO0lBQ2YsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtDQUN2RixFQUNELGVBQWtFLEtBQUssRUFBRSxPQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFDOUssV0FBb0IsS0FBSyxFQUFFLE9BQWdCLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsY0FBYyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDL0YsaUJBQWlDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLE9BQU8sQ0FBQyxZQUFZLGFBQWEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLElBQUEsc0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztJQUVwQyxJQUFJLFFBQWtCLENBQUM7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBQSxvQkFBVSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixrQkFBa0I7WUFDbEIsUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1lBRW5FLHNCQUFzQjtZQUN0QixJQUFJLGVBQWU7Z0JBQUUsUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzs7Z0JBQ3ZJLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsMEJBQTBCO1FBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBSSxDQUFXLENBQUMsT0FBTyxLQUFNLENBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLDBCQUEwQixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUM7WUFDSCxpQkFBaUI7WUFDakIsSUFBSSxZQUFZO2dCQUFFLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBVSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUE0QixFQUFZLENBQUMsT0FBTyxLQUFNLEVBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7SUFDSCxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUN0QixJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxxQkFBcUI7UUFDckIsb0RBQW9EO1FBQ3BELFFBQVEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pFLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixnQ0FBZ0M7UUFDaEMsbURBQW1EO1FBQ25ELElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQTBCO1FBQ3BDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtRQUMvQixJQUFJO1FBQ0osT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO0tBQzFCLENBQUM7SUFFRixtQkFBbUI7SUFDbkIsTUFBTSxhQUFhLEdBQUcsSUFBQSxxQkFBVyxFQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRztZQUN6QixNQUFNLEVBQUUsYUFBYTtTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUElHYXRld2F5UHJveHlFdmVudCxcbiAgQVBJR2F0ZXdheVByb3h5UmVzdWx0LFxuICBDb250ZXh0LFxufSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCB7XG4gIENvbnRleHRCdWlsZGVyLFxuICBIYW5kbGVyLCBSZXF1ZXN0LCBSZXNwb25zZSwgUm91dGUsIFJvdXRlcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZENvb2tpZSwgbWF0Y2hSb3V0ZSwgcGFyc2VSZXF1ZXN0IH0gZnJvbSAnLi9oZWxwZXJzJztcblxuZnVuY3Rpb24gdGV4dFJlc3BvbnNlKHN0YXR1c0NvZGU6IG51bWJlciwgYm9keTogc3RyaW5nKTogUmVzcG9uc2Uge1xuICByZXR1cm4ge1xuICAgIHN0YXR1c0NvZGUsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nIH0sXG4gICAgYm9keVxuICB9O1xufVxuXG4vKipcbiAqIEFQSSByb3V0ZSBoYW5kbGVyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlIYW5kbGVyKFxuICBldmVudDogQVBJR2F0ZXdheVByb3h5RXZlbnQsXG4gIGNvbnRleHQ6IENvbnRleHQsXG4gIHJvdXRlczogUm91dGVzID0ge1xuICAgICcvYXBpL3BpbmcnOiB7IEdFVDogYXN5bmMgKHJlcXVlc3Q6IFJlcXVlc3QpID0+ICh7IHN0YXR1c0NvZGU6IDIwMCwgYm9keTogcmVxdWVzdCB9KSB9LFxuICB9LFxuICBlcnJvckhhbmRsZXI6IChyZXF1ZXN0OiBSZXF1ZXN0LCBlOiBFcnJvcikgPT4gUHJvbWlzZTxSZXNwb25zZT4gPSBhc3luYyAocmVxdWVzdDogUmVxdWVzdCkgPT4gKHsgc3RhdHVzQ29kZTogNTAwLCBib2R5OiB7IGVycm9yOiBgSW50ZXJuYWwgc2VydmVyIGVycm9yOiAke3JlcXVlc3QucGF0aH1gIH0gfSksXG4gIGNhdGNoQWxsOiBIYW5kbGVyID0gYXN5bmMgKHJlcXVlc3Q6IFJlcXVlc3QpID0+IHRleHRSZXNwb25zZSg0MDQsIGBOb3QgZm91bmQ6ICR7cmVxdWVzdC5wYXRofWApLFxuICBjb250ZXh0QnVpbGRlcjogQ29udGV4dEJ1aWxkZXIgPSBhc3luYyAoKSA9PiAoe30pLFxuKTogUHJvbWlzZTxBUElHYXRld2F5UHJveHlSZXN1bHQ+IHtcbiAgY29uc29sZS5sb2coYEV4ZWN1dGluZyAke2NvbnRleHQuZnVuY3Rpb25OYW1lfSB2ZXJzaW9uOiAke3Byb2Nlc3MuZW52LkNPTU1JVF9IQVNIfWApO1xuICBjb25zdCByZXF1ZXN0ID0gcGFyc2VSZXF1ZXN0KGV2ZW50KTtcblxuICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hSb3V0ZShyb3V0ZXMsIHJlcXVlc3QucGF0aCk7XG4gICAgaWYgKCFtYXRjaC5yb3V0ZSkge1xuICAgICAgLy8gQ2F0Y2gtYWxsIC8gNDA0XG4gICAgICByZXNwb25zZSA9IGF3YWl0IGNhdGNoQWxsKHJlcXVlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYW5kbGVyRnVuY3Rpb24gPSBtYXRjaC5yb3V0ZVtyZXF1ZXN0Lm1ldGhvZCBhcyBrZXlvZiBSb3V0ZV07XG5cbiAgICAgIC8vIEhhbmRsZSB0aGUgcmVxdWVzdDpcbiAgICAgIGlmIChoYW5kbGVyRnVuY3Rpb24pIHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlckZ1bmN0aW9uKHsgLi4ucmVxdWVzdCwgcGF0aFBhcmFtZXRlcnM6IG1hdGNoLnBhcmFtcywgY29udGV4dDogYXdhaXQgY29udGV4dEJ1aWxkZXIocmVxdWVzdCkgfSk7XG4gICAgICBlbHNlIHJlc3BvbnNlID0gdGV4dFJlc3BvbnNlKDQwNSwgJ01ldGhvZCBub3QgYWxsb3dlZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIEZhbGxiYWNrIGVycm9yIGhhbmRsaW5nXG4gICAgY29uc29sZS5lcnJvcihgJHsoZSBhcyBFcnJvcikubWVzc2FnZX1cXG4keyhlIGFzIEVycm9yKS5zdGFja31gKTtcbiAgICByZXNwb25zZSA9IHRleHRSZXNwb25zZSg1MDAsIGBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3I6ICR7cmVxdWVzdC5wYXRofWApO1xuICAgIHRyeSB7XG4gICAgICAvLyBFcnJvciBoYW5kbGluZ1xuICAgICAgaWYgKGVycm9ySGFuZGxlcikgcmVzcG9uc2UgPSBhd2FpdCBlcnJvckhhbmRsZXIocmVxdWVzdCwgZSBhcyBFcnJvcik7XG4gICAgfSBjYXRjaCAoZWUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIGVycm9yIGhhbmRsZXI6ICR7KGVlIGFzIEVycm9yKS5tZXNzYWdlfVxcbiR7KGVlIGFzIEVycm9yKS5zdGFja31gKTtcbiAgICB9XG4gIH1cblxuICAvLyBBUEkgR2F0ZXdheSBQcm94eSByZXN1bHRcbiAgbGV0IGJvZHk6IHN0cmluZyA9ICcnO1xuICBpZiAodHlwZW9mIHJlc3BvbnNlLmJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gVXNlIHRoZSBib2R5IGFzLWlzXG4gICAgLy8gUG90ZW50aWFsbHkgYWRkIGEgdGV4dC9wbGFpbiBjb250ZW50IHR5cGUgaGVhZGVyOlxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicsIC4uLnJlc3BvbnNlLmhlYWRlcnMgfTtcbiAgICBib2R5ID0gcmVzcG9uc2UuYm9keTtcbiAgfSBlbHNlIGlmIChyZXNwb25zZS5ib2R5KSB7XG4gICAgLy8gU3RyaW5naWZ5IHRoZSByZXNwb25zZSBvYmplY3RcbiAgICAvLyBBUEkgR2F0ZXdheSByZXR1cm5zIGFwcGxpY2F0aXBuby9qc29uIGJ5IGRlZmF1bHRcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuYm9keSk7XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBBUElHYXRld2F5UHJveHlSZXN1bHQgPSB7XG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICBib2R5LFxuICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gIH07XG5cbiAgLy8gQ29va2llcyAoaWYgc2V0KVxuICBjb25zdCBjb29raWVIZWFkZXJzID0gYnVpbGRDb29raWUocmVzcG9uc2UuY29va2llcyk7XG4gIGlmIChjb29raWVIZWFkZXJzKSB7XG4gICAgcmVzdWx0Lm11bHRpVmFsdWVIZWFkZXJzID0ge1xuICAgICAgQ29va2llOiBjb29raWVIZWFkZXJzLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
package/dist/helpers.d.ts CHANGED
@@ -43,4 +43,9 @@ export declare function buildCookie(values: {
43
43
  [key: string]: string;
44
44
  } | undefined): string[] | undefined;
45
45
  export declare function parseRequest(event: APIGatewayProxyEvent): Request;
46
- export declare function matchRoute(routes: Routes, path: string): Route | undefined;
46
+ export declare function matchRoute(routes: Routes, path: string): {
47
+ route: Route | undefined;
48
+ params: {
49
+ [name: string]: string;
50
+ };
51
+ };
package/dist/helpers.js CHANGED
@@ -23,7 +23,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.matchRoute = exports.parseRequest = exports.buildCookie = exports.parseCookie = exports.parseBody = exports.standardHeaders = exports.standardQueryParameters = exports.standardPath = void 0;
26
+ exports.standardPath = standardPath;
27
+ exports.standardQueryParameters = standardQueryParameters;
28
+ exports.standardHeaders = standardHeaders;
29
+ exports.parseBody = parseBody;
30
+ exports.parseCookie = parseCookie;
31
+ exports.buildCookie = buildCookie;
32
+ exports.parseRequest = parseRequest;
33
+ exports.matchRoute = matchRoute;
27
34
  const cookie = __importStar(require("cookie"));
28
35
  /**
29
36
  * Ensures the path is lowercased, always has a leading slash and never a trailing slash
@@ -35,7 +42,6 @@ function standardPath(path) {
35
42
  // Return path
36
43
  return `/${segments.join('/').toLowerCase()}`;
37
44
  }
38
- exports.standardPath = standardPath;
39
45
  /**
40
46
  * Ensures a non-null object containing only query-string parameters that have a value.
41
47
  * @param query APIGatewayProxyEvent.query
@@ -51,7 +57,6 @@ function standardQueryParameters(query) {
51
57
  });
52
58
  return result;
53
59
  }
54
- exports.standardQueryParameters = standardQueryParameters;
55
60
  /**
56
61
  * Ensures all header names are lowercased for ease of access.
57
62
  * @param headers APIGatewayProxyEvent.headers
@@ -68,7 +73,6 @@ function standardHeaders(headers) {
68
73
  });
69
74
  return result;
70
75
  }
71
- exports.standardHeaders = standardHeaders;
72
76
  /**
73
77
  * Parses the body (if present) to a JSON string. Returns at mimimum an empty object.
74
78
  * @param body APIGatewayProxyEvent.body
@@ -86,7 +90,6 @@ function parseBody(body, isBase64Encoded) {
86
90
  }
87
91
  return result;
88
92
  }
89
- exports.parseBody = parseBody;
90
93
  /**
91
94
  * Parses the cookie, if any, returning at minimum an empty object.
92
95
  * @param headers APIGatewayProxyEvent.headers
@@ -95,7 +98,6 @@ function parseCookie(headers) {
95
98
  const header = headers.cookie || headers.Cookie || '';
96
99
  return cookie.parse(header);
97
100
  }
98
- exports.parseCookie = parseCookie;
99
101
  function buildCookie(values) {
100
102
  if (!values)
101
103
  return undefined;
@@ -118,7 +120,6 @@ function buildCookie(values) {
118
120
  });
119
121
  return header;
120
122
  }
121
- exports.buildCookie = buildCookie;
122
123
  function parseRequest(event) {
123
124
  return {
124
125
  method: event.httpMethod,
@@ -127,21 +128,48 @@ function parseRequest(event) {
127
128
  headers: standardHeaders(event.headers),
128
129
  body: parseBody(event.body, event.isBase64Encoded),
129
130
  cookies: parseCookie(event.headers),
131
+ pathParameters: {}, // These need to be parsed as part of route matching
132
+ context: {}, // You can add any custom values you need to the request via this context
130
133
  };
131
134
  }
132
- exports.parseRequest = parseRequest;
133
135
  function matchRoute(routes, path) {
134
- let route;
135
136
  // Simple match
136
137
  if (routes[path])
137
- return routes[path];
138
- // Case insensitive match
139
- Object.keys(routes).forEach((candidate) => {
138
+ return { route: routes[path], params: {} };
139
+ // List paths to check
140
+ const paths = Object.keys(routes);
141
+ // Case-insensitive match
142
+ for (let p = 0; p < paths.length; p++) {
143
+ const candidate = paths[p];
140
144
  if (candidate.toLowerCase() === path.toLowerCase())
141
- route = routes[candidate];
142
- });
143
- // TODO: path-parameter matching
144
- return route;
145
+ return { route: routes[candidate], params: {} };
146
+ }
147
+ // Path-parameter matching
148
+ const pathSegments = path.split('/');
149
+ for (let p = 0; p < paths.length; p++) {
150
+ const candidate = paths[p];
151
+ const candidateSegments = candidate.split('/');
152
+ // First check: length match
153
+ if (pathSegments.length !== candidateSegments.length)
154
+ continue;
155
+ for (let s = 0; s < pathSegments.length; s++) {
156
+ const params = {};
157
+ const pathSegment = pathSegments[s];
158
+ const candidateSegment = candidateSegments[s];
159
+ if (candidateSegment.startsWith('{') && candidateSegment.endsWith('}')) {
160
+ // Path parameter
161
+ const name = candidateSegment.slice(1, -1);
162
+ params[name] = pathSegment;
163
+ }
164
+ else if (pathSegment !== candidateSegment) {
165
+ break;
166
+ }
167
+ if (s === pathSegments.length - 1) {
168
+ // Matched all segments
169
+ return { route: routes[candidate], params };
170
+ }
171
+ }
172
+ }
173
+ return { route: undefined, params: {} };
145
174
  }
146
- exports.matchRoute = matchRoute;
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsK0NBQWlDO0FBR2pDOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLDhDQUE4QztJQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsY0FBYztJQUNkLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUxELG9DQUtDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsS0FBcUQ7SUFDM0YsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN0QixNQUFNLE1BQU0sR0FBZ0MsRUFBRSxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLElBQUksS0FBSztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBUkQsMERBUUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsT0FBZ0Q7SUFDOUUsTUFBTSxNQUFNLEdBQWdDLEVBQUUsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FB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UUFDOUIsS0FBSyxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztRQUMzRCxPQUFPLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDdkMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDbEQsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0tBQ3BDLENBQUM7QUFDSixDQUFDO0FBVEQsb0NBU0M7QUFFRCxTQUFnQixVQUFVLENBQUMsTUFBYyxFQUFFLElBQVk7SUFDckQsSUFBSSxLQUF3QixDQUFDO0lBRTdCLGVBQWU7SUFDZixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0Qyx5QkFBeUI7SUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUN4QyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztJQUVILGdDQUFnQztJQUVoQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFkRCxnQ0FjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQSUdhdGV3YXlQcm94eUV2ZW50IH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBjb29raWUgZnJvbSAnY29va2llJztcbmltcG9ydCB7IFJlcXVlc3QsIFJvdXRlLCBSb3V0ZXMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoZSBwYXRoIGlzIGxvd2VyY2FzZWQsIGFsd2F5cyBoYXMgYSBsZWFkaW5nIHNsYXNoIGFuZCBuZXZlciBhIHRyYWlsaW5nIHNsYXNoXG4gKiBAcGFyYW0gcGF0aCBBUElHYXRld2F5UHJveHlFdmVudC5wYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFuZGFyZFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gR2V0IHBhdGggc2VnbWVudHMsIGZpbHRlcmluZyBvdXQgYW55IGJsYW5rc1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIoKHNlZ21lbnQpID0+IHNlZ21lbnQpO1xuICAvLyBSZXR1cm4gcGF0aFxuICByZXR1cm4gYC8ke3NlZ21lbnRzLmpvaW4oJy8nKS50b0xvd2VyQ2FzZSgpfWA7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIG5vbi1udWxsIG9iamVjdCBjb250YWluaW5nIG9ubHkgcXVlcnktc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGEgdmFsdWUuXG4gKiBAcGFyYW0gcXVlcnkgQVBJR2F0ZXdheVByb3h5RXZlbnQucXVlcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YW5kYXJkUXVlcnlQYXJhbWV0ZXJzKHF1ZXJ5OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0gfCBudWxsKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9IHtcbiAgaWYgKCFxdWVyeSkgcmV0dXJuIHt9O1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICBPYmplY3Qua2V5cyhxdWVyeSkuZm9yRWFjaCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBxdWVyeVtwYXJhbWV0ZXJdO1xuICAgIGlmICh2YWx1ZSkgcmVzdWx0W3BhcmFtZXRlcl0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhbGwgaGVhZGVyIG5hbWVzIGFyZSBsb3dlcmNhc2VkIGZvciBlYXNlIG9mIGFjY2Vzcy5cbiAqIEBwYXJhbSBoZWFkZXJzIEFQSUdhdGV3YXlQcm94eUV2ZW50LmhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YW5kYXJkSGVhZGVycyhoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0pOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBoZWFkZXJzW25hbWVdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgLy8gUHJvdmlkZSBib3RoIG9yaWdpbmFsLWNhc2UgYW5kIGxvd2VyY2FzZWQgKHN0YW5kYXJkaXNlZCkgaGVhZGVyIG5hbWVzIGZvciBlYXNlIG9mIGFjY2VzczpcbiAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xuICAgICAgcmVzdWx0W25hbWUudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgYm9keSAoaWYgcHJlc2VudCkgdG8gYSBKU09OIHN0cmluZy4gUmV0dXJucyBhdCBtaW1pbXVtIGFuIGVtcHR5IG9iamVjdC5cbiAqIEBwYXJhbSBib2R5IEFQSUdhdGV3YXlQcm94eUV2ZW50LmJvZHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQm9keShib2R5OiBzdHJpbmcgfCBudWxsLCBpc0Jhc2U2NEVuY29kZWQ6IGJvb2xlYW4pOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBpZiAoIWJvZHkpIHJldHVybiB7fTtcbiAgY29uc3QgY29udGVudCA9IGlzQmFzZTY0RW5jb2RlZCA/IEJ1ZmZlci5mcm9tKGJvZHksICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpIDogYm9keTtcbiAgbGV0IHJlc3VsdCA9IHt9O1xuICB0cnkge1xuICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFcnJvciBwYXJzaW5nIHJlcXVlc3QgYm9keTogJHtlfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBjb29raWUsIGlmIGFueSwgcmV0dXJuaW5nIGF0IG1pbmltdW0gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIGhlYWRlcnMgQVBJR2F0ZXdheVByb3h5RXZlbnQuaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb29raWUoaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkOyB9KTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9IHtcbiAgY29uc3QgaGVhZGVyID0gaGVhZGVycy5jb29raWUgfHwgaGVhZGVycy5Db29raWUgfHwgJyc7XG4gIHJldHVybiBjb29raWUucGFyc2UoaGVhZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29va2llKHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWVzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhlYWRlcjogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgb25lWWVhciA9IDYwICogNjAgKiAyNCAqIDM2NTtcblxuICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2tleV07XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgLy8gSWYgZXhwbGljaXRseSB1bnNldCwgZXhwaXJlIHRoZSBjb29raWUgdmFsdWVcbiAgICAgIGhlYWRlci5wdXNoKGNvb2tpZS5zZXJpYWxpemUoa2V5LCAnJywge1xuICAgICAgICBleHBpcmVzOiBuZXcgRGF0ZSgpLCBzZWN1cmU6IHRydWUsIGh0dHBPbmx5OiB0cnVlLCBzYW1lU2l0ZTogJ3N0cmljdCcsXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgaXQgb25seSBpZiBhIHZhbHVlIHdhcyBnaXZlblxuICAgICAgaGVhZGVyLnB1c2goY29va2llLnNlcmlhbGl6ZShrZXksIHZhbHVlLCB7XG4gICAgICAgIG1heEFnZTogb25lWWVhciwgc2VjdXJlOiB0cnVlLCBodHRwT25seTogdHJ1ZSwgc2FtZVNpdGU6ICdzdHJpY3QnLFxuICAgICAgfSkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGhlYWRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVxdWVzdChldmVudDogQVBJR2F0ZXdheVByb3h5RXZlbnQpOiBSZXF1ZXN0IHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IGV2ZW50Lmh0dHBNZXRob2QsXG4gICAgcGF0aDogc3RhbmRhcmRQYXRoKGV2ZW50LnBhdGgpLFxuICAgIHF1ZXJ5OiBzdGFuZGFyZFF1ZXJ5UGFyYW1ldGVycyhldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMpLFxuICAgIGhlYWRlcnM6IHN0YW5kYXJkSGVhZGVycyhldmVudC5oZWFkZXJzKSxcbiAgICBib2R5OiBwYXJzZUJvZHkoZXZlbnQuYm9keSwgZXZlbnQuaXNCYXNlNjRFbmNvZGVkKSxcbiAgICBjb29raWVzOiBwYXJzZUNvb2tpZShldmVudC5oZWFkZXJzKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUm91dGUocm91dGVzOiBSb3V0ZXMsIHBhdGg6IHN0cmluZyk6IFJvdXRlIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHJvdXRlOiBSb3V0ZSB8IHVuZGVmaW5lZDtcblxuICAvLyBTaW1wbGUgbWF0Y2hcbiAgaWYgKHJvdXRlc1twYXRoXSkgcmV0dXJuIHJvdXRlc1twYXRoXTtcblxuICAvLyBDYXNlIGluc2Vuc2l0aXZlIG1hdGNoXG4gIE9iamVjdC5rZXlzKHJvdXRlcykuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG4gICAgaWYgKGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpID09PSBwYXRoLnRvTG93ZXJDYXNlKCkpIHJvdXRlID0gcm91dGVzW2NhbmRpZGF0ZV07XG4gIH0pO1xuXG4gIC8vIFRPRE86IHBhdGgtcGFyYW1ldGVyIG1hdGNoaW5nXG5cbiAgcmV0dXJuIHJvdXRlO1xufVxuIl19
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxvQ0FLQztBQU1ELDBEQVFDO0FBTUQsMENBV0M7QUFNRCw4QkFVQztBQU1ELGtDQUdDO0FBRUQsa0NBc0JDO0FBRUQsb0NBV0M7QUFFRCxnQ0EyQ0M7QUF0SkQsK0NBQWlDO0FBR2pDOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLDhDQUE4QztJQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsY0FBYztJQUNkLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQXFEO0lBQzNGLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdEIsTUFBTSxNQUFNLEdBQWdDLEVBQUUsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixJQUFJLEtBQUs7WUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFnRDtJQUM5RSxNQUFNLE1BQU0sR0FBZ0MsRUFBRSxDQUFDO0lBQy9D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LENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBJR2F0ZXdheVByb3h5RXZlbnQgfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGNvb2tpZSBmcm9tICdjb29raWUnO1xuaW1wb3J0IHsgUmVxdWVzdCwgUm91dGUsIFJvdXRlcyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhlIHBhdGggaXMgbG93ZXJjYXNlZCwgYWx3YXlzIGhhcyBhIGxlYWRpbmcgc2xhc2ggYW5kIG5ldmVyIGEgdHJhaWxpbmcgc2xhc2hcbiAqIEBwYXJhbSBwYXRoIEFQSUdhdGV3YXlQcm94eUV2ZW50LnBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YW5kYXJkUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBHZXQgcGF0aCBzZWdtZW50cywgZmlsdGVyaW5nIG91dCBhbnkgYmxhbmtzXG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcigoc2VnbWVudCkgPT4gc2VnbWVudCk7XG4gIC8vIFJldHVybiBwYXRoXG4gIHJldHVybiBgLyR7c2VnbWVudHMuam9pbignLycpLnRvTG93ZXJDYXNlKCl9YDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgbm9uLW51bGwgb2JqZWN0IGNvbnRhaW5pbmcgb25seSBxdWVyeS1zdHJpbmcgcGFyYW1ldGVycyB0aGF0IGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBxdWVyeSBBUElHYXRld2F5UHJveHlFdmVudC5xdWVyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRRdWVyeVBhcmFtZXRlcnMocXVlcnk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IG51bGwpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIE9iamVjdC5rZXlzKHF1ZXJ5KS5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W3BhcmFtZXRlcl07XG4gICAgaWYgKHZhbHVlKSByZXN1bHRbcGFyYW1ldGVyXSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGFsbCBoZWFkZXIgbmFtZXMgYXJlIGxvd2VyY2FzZWQgZm9yIGVhc2Ugb2YgYWNjZXNzLlxuICogQHBhcmFtIGhlYWRlcnMgQVBJR2F0ZXdheVByb3h5RXZlbnQuaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRIZWFkZXJzKGhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSB7XG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGhlYWRlcnNbbmFtZV07XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAvLyBQcm92aWRlIGJvdGggb3JpZ2luYWwtY2FzZSBhbmQgbG93ZXJjYXNlZCAoc3RhbmRhcmRpc2VkKSBoZWFkZXIgbmFtZXMgZm9yIGVhc2Ugb2YgYWNjZXNzOlxuICAgICAgcmVzdWx0W25hbWVdID0gdmFsdWU7XG4gICAgICByZXN1bHRbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBib2R5IChpZiBwcmVzZW50KSB0byBhIEpTT04gc3RyaW5nLiBSZXR1cm5zIGF0IG1pbWltdW0gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIGJvZHkgQVBJR2F0ZXdheVByb3h5RXZlbnQuYm9keVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCb2R5KGJvZHk6IHN0cmluZyB8IG51bGwsIGlzQmFzZTY0RW5jb2RlZDogYm9vbGVhbik6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSB7XG4gIGlmICghYm9keSkgcmV0dXJuIHt9O1xuICBjb25zdCBjb250ZW50ID0gaXNCYXNlNjRFbmNvZGVkID8gQnVmZmVyLmZyb20oYm9keSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGY4JykgOiBib2R5O1xuICBsZXQgcmVzdWx0ID0ge307XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHBhcnNpbmcgcmVxdWVzdCBib2R5OiAke2V9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGNvb2tpZSwgaWYgYW55LCByZXR1cm5pbmcgYXQgbWluaW11bSBhbiBlbXB0eSBvYmplY3QuXG4gKiBAcGFyYW0gaGVhZGVycyBBUElHYXRld2F5UHJveHlFdmVudC5oZWFkZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvb2tpZShoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0pOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBjb25zdCBoZWFkZXIgPSBoZWFkZXJzLmNvb2tpZSB8fCBoZWFkZXJzLkNvb2tpZSB8fCAnJztcbiAgcmV0dXJuIGNvb2tpZS5wYXJzZShoZWFkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb29raWUodmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZXMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgaGVhZGVyOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBvbmVZZWFyID0gNjAgKiA2MCAqIDI0ICogMzY1O1xuXG4gIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNba2V5XTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAvLyBJZiBleHBsaWNpdGx5IHVuc2V0LCBleHBpcmUgdGhlIGNvb2tpZSB2YWx1ZVxuICAgICAgaGVhZGVyLnB1c2goY29va2llLnNlcmlhbGl6ZShrZXksICcnLCB7XG4gICAgICAgIGV4cGlyZXM6IG5ldyBEYXRlKCksIHNlY3VyZTogdHJ1ZSwgaHR0cE9ubHk6IHRydWUsIHNhbWVTaXRlOiAnc3RyaWN0JyxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHNldCBpdCBvbmx5IGlmIGEgdmFsdWUgd2FzIGdpdmVuXG4gICAgICBoZWFkZXIucHVzaChjb29raWUuc2VyaWFsaXplKGtleSwgdmFsdWUsIHtcbiAgICAgICAgbWF4QWdlOiBvbmVZZWFyLCBzZWN1cmU6IHRydWUsIGh0dHBPbmx5OiB0cnVlLCBzYW1lU2l0ZTogJ3N0cmljdCcsXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaGVhZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXF1ZXN0KGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudCk6IFJlcXVlc3Qge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogZXZlbnQuaHR0cE1ldGhvZCxcbiAgICBwYXRoOiBzdGFuZGFyZFBhdGgoZXZlbnQucGF0aCksXG4gICAgcXVlcnk6IHN0YW5kYXJkUXVlcnlQYXJhbWV0ZXJzKGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyksXG4gICAgaGVhZGVyczogc3RhbmRhcmRIZWFkZXJzKGV2ZW50LmhlYWRlcnMpLFxuICAgIGJvZHk6IHBhcnNlQm9keShldmVudC5ib2R5LCBldmVudC5pc0Jhc2U2NEVuY29kZWQpLFxuICAgIGNvb2tpZXM6IHBhcnNlQ29va2llKGV2ZW50LmhlYWRlcnMpLFxuICAgIHBhdGhQYXJhbWV0ZXJzOiB7fSwgLy8gVGhlc2UgbmVlZCB0byBiZSBwYXJzZWQgYXMgcGFydCBvZiByb3V0ZSBtYXRjaGluZ1xuICAgIGNvbnRleHQ6IHt9LCAvLyBZb3UgY2FuIGFkZCBhbnkgY3VzdG9tIHZhbHVlcyB5b3UgbmVlZCB0byB0aGUgcmVxdWVzdCB2aWEgdGhpcyBjb250ZXh0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFJvdXRlKHJvdXRlczogUm91dGVzLCBwYXRoOiBzdHJpbmcpOiB7IHJvdXRlOiBSb3V0ZSB8IHVuZGVmaW5lZCwgcGFyYW1zOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH07IH0ge1xuICAvLyBTaW1wbGUgbWF0Y2hcbiAgaWYgKHJvdXRlc1twYXRoXSkgcmV0dXJuIHsgcm91dGU6IHJvdXRlc1twYXRoXSwgcGFyYW1zOiB7fSB9O1xuXG4gIC8vIExpc3QgcGF0aHMgdG8gY2hlY2tcbiAgY29uc3QgcGF0aHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG4gIC8vIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hcbiAgZm9yIChsZXQgcCA9IDA7IHAgPCBwYXRocy5sZW5ndGg7IHArKykge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHBhdGhzW3BdO1xuICAgIGlmIChjYW5kaWRhdGUudG9Mb3dlckNhc2UoKSA9PT0gcGF0aC50b0xvd2VyQ2FzZSgpKSByZXR1cm4geyByb3V0ZTogcm91dGVzW2NhbmRpZGF0ZV0sIHBhcmFtczoge30gfTtcbiAgfVxuXG4gIC8vIFBhdGgtcGFyYW1ldGVyIG1hdGNoaW5nXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGxldCBwID0gMDsgcCA8IHBhdGhzLmxlbmd0aDsgcCsrKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gcGF0aHNbcF07XG4gICAgY29uc3QgY2FuZGlkYXRlU2VnbWVudHMgPSBjYW5kaWRhdGUuc3BsaXQoJy8nKTtcblxuICAgIC8vIEZpcnN0IGNoZWNrOiBsZW5ndGggbWF0Y2hcbiAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gY2FuZGlkYXRlU2VnbWVudHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGF0aFNlZ21lbnRzLmxlbmd0aDsgcysrKSB7XG4gICAgICBjb25zdCBwYXJhbXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICAgICAgY29uc3QgcGF0aFNlZ21lbnQgPSBwYXRoU2VnbWVudHNbc107XG4gICAgICBjb25zdCBjYW5kaWRhdGVTZWdtZW50ID0gY2FuZGlkYXRlU2VnbWVudHNbc107XG4gICAgICBpZiAoY2FuZGlkYXRlU2VnbWVudC5zdGFydHNXaXRoKCd7JykgJiYgY2FuZGlkYXRlU2VnbWVudC5lbmRzV2l0aCgnfScpKSB7XG4gICAgICAgIC8vIFBhdGggcGFyYW1ldGVyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBjYW5kaWRhdGVTZWdtZW50LnNsaWNlKDEsIC0xKTtcbiAgICAgICAgcGFyYW1zW25hbWVdID0gcGF0aFNlZ21lbnQ7XG4gICAgICB9IGVsc2UgaWYgKHBhdGhTZWdtZW50ICE9PSBjYW5kaWRhdGVTZWdtZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAocyA9PT0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gTWF0Y2hlZCBhbGwgc2VnbWVudHNcbiAgICAgICAgcmV0dXJuIHsgcm91dGU6IHJvdXRlc1tjYW5kaWRhdGVdLCBwYXJhbXMgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyByb3V0ZTogdW5kZWZpbmVkLCBwYXJhbXM6IHt9IH07XG59XG4iXX0=
package/dist/types.d.ts CHANGED
@@ -16,7 +16,15 @@ export interface Request {
16
16
  cookies: {
17
17
  [name: string]: string;
18
18
  };
19
+ /** Path parameters will be parsed from the route definitions you pass to apiHandler() */
20
+ pathParameters: {
21
+ [name: string]: string;
22
+ };
19
23
  body: any;
24
+ /** You can add any custom values you need to the request via this context */
25
+ context: {
26
+ [key: string]: any;
27
+ };
20
28
  }
21
29
  export interface Response {
22
30
  statusCode: number;
@@ -39,3 +47,6 @@ export interface Route {
39
47
  export interface Routes {
40
48
  [path: string]: Route;
41
49
  }
50
+ export type ContextBuilder = (request: Request) => Promise<{
51
+ [key: string]: any;
52
+ }>;
package/dist/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2ltcGxpZmllZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgSFRUUCBSZXF1ZXN0LlxuICogVGhlIGltcGxlbWVudGF0aW9uIGd1YXJhbnRlZXMgdGhhdCB5b3UnbGwgYWx3YXlzIGhhdmUgbm9uLW51bGwgb2JqZWN0cyBmb3IgcXVlcnksIGhlYWRlcnMsIGNvb2tpZXMsIGFuZCBib2R5LlxuICogVGhlIG1ldGhvZCB3aWxsIGJlIHRoZSBIVFRQIG1ldGhvZCBmcm9tIHRoZSBBUEkgR2F0ZXdheSBwcm94dCBldmVudC5cbiAqIFRoZSBwYXRoIHdpbGwgYmUgdGhlIHBhdGggZnJvbSB0aGUgQVBJIEdhdGV3YXkgcHJveHkgZXZlbnQsIHdoaWNoIHN0YXJ0cyB3aXRoICcvJy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0IHtcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgcXVlcnk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSxcbiAgaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9LFxuICBjb29raWVzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGJvZHk6IGFueSxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZSB7XG4gIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgaGVhZGVycz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSxcbiAgY29va2llcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSxcbiAgYm9keT86IG9iamVjdCB8IHN0cmluZyxcbn1cblxuZXhwb3J0IHR5cGUgSGFuZGxlciA9IChyZXF1ZXN0OiBSZXF1ZXN0KSA9PiBQcm9taXNlPFJlc3BvbnNlPjtcbmV4cG9ydCBpbnRlcmZhY2UgUm91dGUge1xuICBHRVQ/OiBIYW5kbGVyLFxuICBQT1NUPzogSGFuZGxlcixcbiAgUFVUPzogSGFuZGxlcixcbiAgREVMRVRFPzogSGFuZGxlcixcbiAgT1BUSU9OUz86IEhhbmRsZXIsXG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlcyB7IFtwYXRoOiBzdHJpbmddOiBSb3V0ZTsgfVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2ltcGxpZmllZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgSFRUUCBSZXF1ZXN0LlxuICogVGhlIGltcGxlbWVudGF0aW9uIGd1YXJhbnRlZXMgdGhhdCB5b3UnbGwgYWx3YXlzIGhhdmUgbm9uLW51bGwgb2JqZWN0cyBmb3IgcXVlcnksIGhlYWRlcnMsIGNvb2tpZXMsIGFuZCBib2R5LlxuICogVGhlIG1ldGhvZCB3aWxsIGJlIHRoZSBIVFRQIG1ldGhvZCBmcm9tIHRoZSBBUEkgR2F0ZXdheSBwcm94dCBldmVudC5cbiAqIFRoZSBwYXRoIHdpbGwgYmUgdGhlIHBhdGggZnJvbSB0aGUgQVBJIEdhdGV3YXkgcHJveHkgZXZlbnQsIHdoaWNoIHN0YXJ0cyB3aXRoICcvJy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0IHtcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgcXVlcnk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSxcbiAgaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9LFxuICBjb29raWVzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0sXG4gIC8qKiBQYXRoIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXJzZWQgZnJvbSB0aGUgcm91dGUgZGVmaW5pdGlvbnMgeW91IHBhc3MgdG8gYXBpSGFuZGxlcigpICovXG4gIHBhdGhQYXJhbWV0ZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGJvZHk6IGFueSxcbiAgLyoqIFlvdSBjYW4gYWRkIGFueSBjdXN0b20gdmFsdWVzIHlvdSBuZWVkIHRvIHRoZSByZXF1ZXN0IHZpYSB0aGlzIGNvbnRleHQgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2Uge1xuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIGhlYWRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0sXG4gIGNvb2tpZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0sXG4gIGJvZHk/OiBvYmplY3QgfCBzdHJpbmcsXG59XG5cbmV4cG9ydCB0eXBlIEhhbmRsZXIgPSAocmVxdWVzdDogUmVxdWVzdCkgPT4gUHJvbWlzZTxSZXNwb25zZT47XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlIHtcbiAgR0VUPzogSGFuZGxlcixcbiAgUE9TVD86IEhhbmRsZXIsXG4gIFBVVD86IEhhbmRsZXIsXG4gIERFTEVURT86IEhhbmRsZXIsXG4gIE9QVElPTlM/OiBIYW5kbGVyLFxufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXMgeyBbcGF0aDogc3RyaW5nXTogUm91dGU7IH1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIENvbnRleHRCdWlsZGVyID0gKHJlcXVlc3Q6IFJlcXVlc3QpID0+IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBhbnk7IH0+OyJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scloud/lambda-api",
3
- "version": "0.2.4",
3
+ "version": "0.3.2",
4
4
  "description": "Lambda handler for API Gateway proxy requests",
5
5
  "main": "dist/index.js",
6
6
  "files": [