From a00d21557aa12e3769aed841320fb3cb876cf39e Mon Sep 17 00:00:00 2001 From: rogelio-o Date: Sat, 23 Dec 2017 15:15:08 +0100 Subject: [PATCH] Finalize and added tests. --- package-lock.json | 1868 ++++++++++++++++++++++++++++++--- package.json | 14 +- src/index.ts | 1 + src/lib/AWSHandler.ts | 29 +- src/lib/AWSTranformer.ts | 33 - src/lib/AWSTransformer.ts | 87 ++ src/lib/utils/utils.ts | 48 - test/AWSHandler.spec.ts | 36 + test/AWSRawCallback.spec.ts | 44 + test/AWSTransformer.spec.ts | 174 +++ test/S3TemplateLoader.spec.ts | 18 +- test/utils/aPIGatewayEvent.ts | 19 + tslint.json | 2 +- 13 files changed, 2137 insertions(+), 236 deletions(-) delete mode 100644 src/lib/AWSTranformer.ts create mode 100644 src/lib/AWSTransformer.ts delete mode 100644 src/lib/utils/utils.ts create mode 100644 test/AWSHandler.spec.ts create mode 100644 test/AWSRawCallback.spec.ts create mode 100644 test/AWSTransformer.spec.ts create mode 100644 test/utils/aPIGatewayEvent.ts diff --git a/package-lock.json b/package-lock.json index 659d5b7..f9690ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lambda-framework-aws", - "version": "1.0.0", + "version": "1.0.6", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -27,6 +27,12 @@ "integrity": "sha512-54Dm6NwYeiSQmRB1BLXKr5GELi0wFapR1npi8bnZhEcu84d/yQKqnwwXQ56hZ0RUbTG6L5nqDZaN3dgByQXQRQ==", "dev": true }, + "@types/sinon": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-2.3.7.tgz", + "integrity": "sha512-w+LjztaZbgZWgt/y/VMP5BUAWLtSyoIJhXyW279hehLPyubDoBNwvhcj3WaSptcekuKYeTCVxrq60rdLc6ImJA==", + "dev": true + }, "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", @@ -738,9 +744,9 @@ "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==" }, "lambda-framework": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/lambda-framework/-/lambda-framework-1.0.18.tgz", - "integrity": "sha1-eJRJNgykbR60KHXWZ/Oo2fPejso=", + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/lambda-framework/-/lambda-framework-1.0.19.tgz", + "integrity": "sha1-HMpxhac6cHurC4gW0YMDR1B1yUk=", "requires": { "accepts": "1.3.4", "bytes": "3.0.0", @@ -758,7 +764,7 @@ "qs": "6.5.1", "querystring": "0.2.0", "randomstring": "1.1.5", - "sinon": "4.1.2", + "sinon": "4.1.3", "statuses": "1.4.0", "typeis": "1.1.2", "utils-merge": "1.0.1" @@ -1018,137 +1024,1731 @@ "semver": "5.4.1" } }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-to-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.1.0.tgz", - "integrity": "sha512-dZY7QPCPp5r9cnNuQ955mOv4ZFVDXY/yvqeV7Y1W2PJA3PEFcuow9xKFfJxbBj1pIjOAP+M2B4/7xubmykLrXw==" - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "randomstring": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.1.5.tgz", - "integrity": "sha1-bfBij3XL1ZMpMNn+OrTpVqGFGMM=", - "requires": { - "array-uniq": "1.0.2" - } - }, - "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "nyc": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.4.1.tgz", + "integrity": "sha512-5eCZpvaksFVjP2rt1r60cfXmt3MUtsQDw8bAzNqNEr4WLvUMLgiVENMf/B9bE9YAX0mGVvaGA3v9IS9ekNqB1Q==", "dev": true, "requires": { - "path-parse": "1.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "samsam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - }, - "sinon": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.2.tgz", - "integrity": "sha512-5uLBZPdCWl59Lpbf45ygKj7Z0LVol+ftBe7RDIXOQV/sF58pcFmbK8raA7bt6eljNuGnvBP+/ZxlicVn0emDjA==", + "archy": "1.0.0", + "arrify": "1.0.1", + "caching-transform": "1.0.1", + "convert-source-map": "1.5.1", + "debug-log": "1.0.1", + "default-require-extensions": "1.0.0", + "find-cache-dir": "0.1.1", + "find-up": "2.1.0", + "foreground-child": "1.5.6", + "glob": "7.1.2", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-report": "1.1.2", + "istanbul-lib-source-maps": "1.2.2", + "istanbul-reports": "1.1.3", + "md5-hex": "1.3.0", + "merge-source-map": "1.0.4", + "micromatch": "2.3.11", + "mkdirp": "0.5.1", + "resolve-from": "2.0.0", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "spawn-wrap": "1.4.2", + "test-exclude": "4.1.1", + "yargs": "10.0.3", + "yargs-parser": "8.0.0" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "async": { + "version": "1.5.2", + "bundled": true, + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-generator": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "bundled": true, + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "caching-transform": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + } + }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cliui": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "core-js": { + "version": "2.5.3", + "bundled": true, + "dev": true + }, + "cross-spawn": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esutils": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "bundled": true, + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extglob": { + "version": "0.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "for-own": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreground-child": { + "version": "1.5.6", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "bundled": true, + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "invariant": { + "version": "2.2.2", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.9.1", + "bundled": true, + "dev": true, + "requires": { + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.4.1" + } + }, + "istanbul-lib-report": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.2", + "bundled": true, + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "js-tokens": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "lodash": { + "version": "4.17.4", + "bundled": true, + "dev": true + }, + "longest": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "md5-hex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "merge-source-map": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "micromatch": { + "version": "2.3.11", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mimic-fn": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "preserve": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + } + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "bundled": true, + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "bundled": true, + "dev": true + }, + "repeating": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "right-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "semver": { + "version": "5.4.1", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "1.5.6", + "mkdirp": "0.5.1", + "os-homedir": "1.0.2", + "rimraf": "2.6.2", + "signal-exit": "3.0.2", + "which": "1.3.0" + } + }, + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } + }, + "to-fast-properties": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "which": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "window-size": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "10.0.3", + "bundled": true, + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.0.0" + }, + "dependencies": { + "cliui": { + "version": "3.2.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + } + } + }, + "yargs-parser": { + "version": "8.0.0", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.1.0.tgz", + "integrity": "sha512-dZY7QPCPp5r9cnNuQ955mOv4ZFVDXY/yvqeV7Y1W2PJA3PEFcuow9xKFfJxbBj1pIjOAP+M2B4/7xubmykLrXw==" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "randomstring": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.1.5.tgz", + "integrity": "sha1-bfBij3XL1ZMpMNn+OrTpVqGFGMM=", + "requires": { + "array-uniq": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "samsam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", + "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "sinon": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.3.tgz", + "integrity": "sha512-c7u0ZuvBRX1eXuB4jN3BRCAOGiUTlM8SE3TxbJHrNiHUKL7wonujMOB6Fi1gQc00U91IscFORQHDga/eccqpbw==", "requires": { "diff": "3.4.0", "formatio": "1.2.0", diff --git a/package.json b/package.json index de7b43d..130c8e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lambda-framework-aws", - "version": "1.0.0", + "version": "1.0.6", "description": "AWS Lambda implementation of Lambda Framework", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -15,7 +15,7 @@ "test": "nyc --reporter=html --reporter=text mocha --recursive dist/test/", "posttest": "npm run lint && nyc check-coverage --statements 70 --branches 70 --functions 70 --lines 70", "compile": "tsc", - "lint": "tslint --config tslint.json --type-check --project tsconfig.json src/{,**/,**/**/,**/**/**/}*.ts", + "lint": "tslint --config tslint.json --project tsconfig.json", "coveralls": "nyc report --reporter=text-lcov | coveralls", "prepublish": "npm-auto-version" }, @@ -31,10 +31,13 @@ "@types/chai": "^4.0.4", "@types/mocha": "^2.2.43", "@types/node": "^8.0.28", + "@types/sinon": "^2.3.7", "chai": "^4.1.2", "coveralls": "^3.0.0", "mocha": "^3.5.3", "mock-fs": "^4.4.2", + "nyc": "^11.3.0", + "sinon": "^4.0.2", "tslint": "^5.7.0", "tslint-microsoft-contrib": "^5.0.1", "typescript": "^2.5.2" @@ -42,6 +45,11 @@ "dependencies": { "@types/aws-lambda": "0.0.21", "aws-sdk": "^2.161.0", - "lambda-framework": "^1.0.18" + "lambda-framework": "^1.0.19" + }, + "nyc": { + "exclude": [ + "**/*.spec.js" + ] } } diff --git a/src/index.ts b/src/index.ts index 6b15698..203612f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,4 +5,5 @@ */ export { default } from "./lib/AWSHandler"; +export { default as AWSTransformer } from "./lib/AWSTransformer"; export { default as S3TemplateLoader } from "./lib/S3TemplateLoader"; diff --git a/src/lib/AWSHandler.ts b/src/lib/AWSHandler.ts index 6ba98a8..a38d513 100644 --- a/src/lib/AWSHandler.ts +++ b/src/lib/AWSHandler.ts @@ -1,14 +1,25 @@ import { Callback, Context } from "aws-lambda"; import { IApp, IRawCallback, IRawEvent } from "lambda-framework"; -import AWSTransformer from "./AWSTranformer"; +import AWSTransformer from "./AWSTransformer"; -const AWSHandler = (app: IApp) => { - return (event: any, context: Context, callback: Callback): void => { - rawEvent: IRawEvent = AWSTransformer.rawEvent(event); - rawCallback: IRawCallback = AWSTransformer.rawCallback(callback); +/** + * The class that implements the AWS handler. + */ +export default class AWSHandler { - app.handle(rawEvent, rawCallback); - }; -} + private _app: IApp; + private _transformer: AWSTransformer; + + constructor(app: IApp) { + this._app = app; + this._transformer = new AWSTransformer(); + } + + public handle(event: any, context: Context, callback: Callback): void { + const rawEvent: IRawEvent = this._transformer.transformRawEvent(event); + const rawCallback: IRawCallback = this._transformer.transformRawCallback(callback); -export default AWSHandler; + this._app.handle(rawEvent, rawCallback); + } + +} diff --git a/src/lib/AWSTranformer.ts b/src/lib/AWSTranformer.ts deleted file mode 100644 index fc4e38b..0000000 --- a/src/lib/AWSTranformer.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { APIGatewayEvent, Callback } from "aws-lambda"; -import { IRawCallback, IRawEvent, RawEvent } from "lambda-framework"; -import AWSRawCallback from "./AWSRawCallback"; -import { getEventType } from "./utils/utils"; - -export default { - rawEvent: (event: any): IRawEvent => { - const result: IRawEvent = new RawEvent(); - result.type = getEventType(event); - result.original = event; - result.isHttp = result.type === "APIGatewayEvent"; - - if(result.isHttp) { - const httpEvent: APIGatewayEvent = event as APIGatewayEvent; - result.body = httpEvent.body; - result.headers = httpEvent.headers; - result.queryParams = httpEvent.queryStringParameters; - result.stageVariables = httpEvent.stageVariables; - result.ip = httpEvent.requestContext.identity.sourceIp.replace("\:d+$", ""); - result.path = httpEvent.path; - result.httpMethod = httpEvent.httpMethod; - } - - return result; - }, - rawCallback: (callback: Callback): IRawCallback => { - if(callback === undefined) { - return null; - } else { - return new AWSRawCallback(callback); - } - } -}; diff --git a/src/lib/AWSTransformer.ts b/src/lib/AWSTransformer.ts new file mode 100644 index 0000000..10330b1 --- /dev/null +++ b/src/lib/AWSTransformer.ts @@ -0,0 +1,87 @@ +import { APIGatewayEvent, Callback } from "aws-lambda"; +import { IRawCallback, IRawEvent, RawEvent } from "lambda-framework"; +import AWSRawCallback from "./AWSRawCallback"; + +/** + * The class that transform the AWS event and callback to LF raws. + */ +export default class AWSTransformer { + + public transformRawEvent(event: any): IRawEvent { + const result: IRawEvent = new RawEvent(); + result.type = this.getEventType(event); + result.original = event; + result.isHttp = result.type === "APIGatewayEvent"; + + if (result.isHttp) { + const httpEvent: APIGatewayEvent = event as APIGatewayEvent; + result.body = httpEvent.body; + result.headers = httpEvent.headers; + result.queryParams = httpEvent.queryStringParameters; + result.stageVariables = httpEvent.stageVariables; + result.ip = httpEvent.requestContext ? httpEvent.requestContext.identity.sourceIp.replace("\:d+$", "") : null; + result.path = httpEvent.path; + result.httpMethod = httpEvent.httpMethod; + } + + return result; + } + + public transformRawCallback(callback: Callback): IRawCallback { + if (callback === undefined) { + return null; + } else { + return new AWSRawCallback(callback); + } + } + + private getEventType(obj: any): string { + if ("httpMethod" in obj) { + return "APIGatewayEvent"; + } else if ("authorizationToken" in obj) { + return "CustomAuthorizerEvent"; + } else if ("Records" in obj) { + const obj2 = obj.Records[0] || {}; + if ("Sns" in obj2) { + return "SNSEvent"; + } else if ("s3" in obj2) { + return "S3CreateEvent"; + } else if ("kinesis" in obj2) { + return "KinesisEvent"; + } else if ("dynamodb" in obj2) { + return "DynamoDbEvent"; + } else { + return null; + } + } else if ("triggerSource" in obj) { + return "CognitoUserPoolEvent"; + } else if ("RequestType" in obj) { + const obj2 = obj.RequestType; + switch (obj2) { + case "Create": + return "CloudFormationCustomResourceCreateEvent"; + case "Update": + return "CloudFormationCustomResourceUpdateEvent"; + case "Delete": + return "CloudFormationCustomResourceDeleteEvent"; + default: + return null; + } + } else if ("Status" in obj) { + const obj2 = obj.Status; + switch (obj2) { + case "SUCCESS": + return "CloudFormationCustomResourceSuccessResponse"; + case "FAILED": + return "CloudFormationCustomResourceFailedResponse"; + default: + return null; + } + } else if ("time" in obj) { + return "ScheduledEvent"; + } else { + return null; + } + } + +} diff --git a/src/lib/utils/utils.ts b/src/lib/utils/utils.ts deleted file mode 100644 index 91aa313..0000000 --- a/src/lib/utils/utils.ts +++ /dev/null @@ -1,48 +0,0 @@ -export function getEventType(obj: any): string { - if ("httpMethod" in obj) { - return "APIGatewayEvent"; - } else if ("authorizationToken" in obj) { - return "CustomAuthorizerEvent"; - } else if ("Records" in obj) { - const obj2 = obj.Records[0] || {}; - if ("Sns" in obj2) { - return "SNSEvent"; - } else if ("s3" in obj2) { - return "S3CreateEvent"; - } else if ("kinesis" in obj2) { - return "KinesisEvent"; - } else if ("dynamodb" in obj2) { - return "DynamoDbEvent"; - } else { - return null; - } - } else if ("triggerSource" in obj) { - return "CognitoUserPoolEvent"; - } else if ("RequestType" in obj) { - const obj2 = obj.RequestType; - switch (obj2) { - case "Create": - return "CloudFormationCustomResourceCreateEvent"; - case "Update": - return "CloudFormationCustomResourceUpdateEvent"; - case "Delete": - return "CloudFormationCustomResourceDeleteEvent"; - default: - return null; - } - } else if ("Status" in obj) { - const obj2 = obj.Status; - switch (obj2) { - case "SUCCESS": - return "CloudFormationCustomResourceSuccessResponse"; - case "FAILED": - return "CloudFormationCustomResourceFailedResponse"; - default: - return null; - } - } else if ("time" in obj) { - return "ScheduledEvent"; - } else { - return null; - } -} diff --git a/test/AWSHandler.spec.ts b/test/AWSHandler.spec.ts new file mode 100644 index 0000000..bb524f5 --- /dev/null +++ b/test/AWSHandler.spec.ts @@ -0,0 +1,36 @@ +/* tslint:disable:no-unused-expression */ +import { APIGatewayEvent, Callback, Context } from "aws-lambda"; +import * as Chai from "chai"; +import lambdaFramework, { IApp, RawEvent } from "lambda-framework"; +import { SinonStub, stub } from "sinon"; +import AWSHandler from "./../src/lib/AWSHandler"; +import AWSRawCallback from "./../src/lib/AWSRawCallback"; +import aPIGatewayEvent from "./utils/aPIGatewayEvent"; + +/** + * Test for AWSHandler. + */ +describe("AWSHandler", () => { + const event: APIGatewayEvent = aPIGatewayEvent; + const context: Context = null; + const callback: Callback = null; + const app: IApp = new lambdaFramework(); + const appHandle: SinonStub = stub(app, "handle"); + const handler: AWSHandler = new AWSHandler(app); + + afterEach(() => { + appHandle.reset(); + }); + + describe("#handle", () => { + + it("calls the app `handle` method with a raw event and a raw callback.", () => { + handler.handle(event, context, callback); + + Chai.expect(appHandle.args[0][0]).instanceOf(RawEvent); + Chai.expect(appHandle.args[0][1]).instanceOf(AWSRawCallback); + }); + + }); + +}); diff --git a/test/AWSRawCallback.spec.ts b/test/AWSRawCallback.spec.ts new file mode 100644 index 0000000..9a60f13 --- /dev/null +++ b/test/AWSRawCallback.spec.ts @@ -0,0 +1,44 @@ +/* tslint:disable:no-unused-expression */ +import { Callback } from "aws-lambda"; +import * as Chai from "chai"; +import { SinonSpy, spy } from "sinon"; +import AWSRawCallback from "./../src/lib/AWSRawCallback"; + +/** + * Test for AWSRawCallback. + */ +describe("AWSRawCallback", () => { + const callback: SinonSpy = spy(); + const rawCallback: AWSRawCallback = new AWSRawCallback(callback as Callback); + + afterEach(() => { + callback.reset(); + }); + + describe("#sendError", () => { + + it("calls the original `callback` function with the error as first argument and null as second argument.", () => { + const error: Error = new Error("Produced error."); + + rawCallback.sendError(error); + + Chai.expect(callback.args[0][0]).to.be.equal(error); + Chai.expect(callback.args[0][1]).to.be.null; + }); + + }); + + describe("#send", () => { + + it("calls the original `callback` function with the null as first argument and {statusCode, headers, body} object as second argument.", () => { + const resultObject = {statusCode: 200, headers: {header1: "value 1"}, body: new Buffer("body")}; + + rawCallback.send(resultObject.statusCode, resultObject.headers, resultObject.body); + + Chai.expect(callback.args[0][0]).to.be.null; + Chai.expect(callback.args[0][1]).to.be.deep.equal(resultObject); + }); + + }); + +}); diff --git a/test/AWSTransformer.spec.ts b/test/AWSTransformer.spec.ts new file mode 100644 index 0000000..b8d007b --- /dev/null +++ b/test/AWSTransformer.spec.ts @@ -0,0 +1,174 @@ +/* tslint:disable:no-unused-expression */ +import { Callback } from "aws-lambda"; +import * as Chai from "chai"; +import { IRawCallback, IRawEvent } from "lambda-framework"; +import AWSRawCallback from "./../src/lib/AWSRawCallback"; +import AWSTransformer from "./../src/lib/AWSTransformer"; +import aPIGatewayEvent from "./utils/aPIGatewayEvent"; + +/** + * Test for AWSTransformer. + */ +describe("AWSTransformer", () => { + const transformer: AWSTransformer = new AWSTransformer(); + + describe("#transformRawEvent", () => { + + it("creates a raw event with the original event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent(aPIGatewayEvent); + + Chai.expect(rawEvent.original).to.be.equal(aPIGatewayEvent); + }); + + it("creates a raw event with `is http` to false if it isn't a HTTP event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({}); + + Chai.expect(rawEvent.isHttp).to.be.false; + }); + + it("creates a raw event with `is http` to true if it's a HTTP event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent(aPIGatewayEvent); + + Chai.expect(rawEvent.isHttp).to.be.true; + }); + + it("creates a raw event with the body, headers, params, IP, path and HTTP method if it's a HTTP event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent(aPIGatewayEvent); + + Chai.expect(rawEvent.body).to.be.equal(aPIGatewayEvent.body); + Chai.expect(rawEvent.headers).to.be.equal(aPIGatewayEvent.headers); + Chai.expect(rawEvent.queryParams).to.be.equal(aPIGatewayEvent.queryStringParameters); + Chai.expect(rawEvent.stageVariables).to.be.equal(aPIGatewayEvent.stageVariables); + Chai.expect(rawEvent.ip).to.be.null; + Chai.expect(rawEvent.path).to.be.equal(aPIGatewayEvent.path); + Chai.expect(rawEvent.httpMethod).to.be.equal(aPIGatewayEvent.httpMethod); + }); + + it("creates a raw event without the body, headers, params, IP, path and HTTP method if it isn't a HTTP event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({}); + + Chai.expect(rawEvent.body).to.be.undefined; + Chai.expect(rawEvent.headers).to.be.undefined; + Chai.expect(rawEvent.queryParams).to.be.undefined; + Chai.expect(rawEvent.stageVariables).to.be.undefined; + Chai.expect(rawEvent.ip).to.be.undefined; + Chai.expect(rawEvent.path).to.be.undefined; + Chai.expect(rawEvent.httpMethod).to.be.undefined; + }); + + it("creates a raw event with the right event type if it's `APIGatewayEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent(aPIGatewayEvent); + + Chai.expect(rawEvent.type).to.be.equal("APIGatewayEvent"); + }); + + it("creates a raw event with the right event type if it's `CustomAuthorizerEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({authorizationToken: "1234"}); + + Chai.expect(rawEvent.type).to.be.equal("CustomAuthorizerEvent"); + }); + + it("creates a raw event with the right event type if it's `SNSEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Records: [{Sns: ""}]}); + + Chai.expect(rawEvent.type).to.be.equal("SNSEvent"); + }); + + it("creates a raw event with the right event type if it's `S3CreateEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Records: [{s3: ""}]}); + + Chai.expect(rawEvent.type).to.be.equal("S3CreateEvent"); + }); + + it("creates a raw event with the right event type if it's `KinesisEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Records: [{kinesis: ""}]}); + + Chai.expect(rawEvent.type).to.be.equal("KinesisEvent"); + }); + + it("creates a raw event with the right event type if it's `DynamoDbEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Records: [{dynamodb: ""}]}); + + Chai.expect(rawEvent.type).to.be.equal("DynamoDbEvent"); + }); + + it("creates a raw event with the right event type if it's `CognitoUserPoolEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({triggerSource: ""}); + + Chai.expect(rawEvent.type).to.be.equal("CognitoUserPoolEvent"); + }); + + it("creates a raw event with the right event type if it's `CloudFormationCustomResourceCreateEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({RequestType: "Create"}); + + Chai.expect(rawEvent.type).to.be.equal("CloudFormationCustomResourceCreateEvent"); + }); + + it("creates a raw event with the right event type if it's `CloudFormationCustomResourceUpdateEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({RequestType: "Update"}); + + Chai.expect(rawEvent.type).to.be.equal("CloudFormationCustomResourceUpdateEvent"); + }); + + it("creates a raw event with the right event type if it's `CloudFormationCustomResourceDeleteEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({RequestType: "Delete"}); + + Chai.expect(rawEvent.type).to.be.equal("CloudFormationCustomResourceDeleteEvent"); + }); + + it("creates a raw event with the right event type if it's `CloudFormationCustomResourceSuccessResponse` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Status: "SUCCESS"}); + + Chai.expect(rawEvent.type).to.be.equal("CloudFormationCustomResourceSuccessResponse"); + }); + + it("creates a raw event with the right event type if it's `CloudFormationCustomResourceFailedResponse` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Status: "FAILED"}); + + Chai.expect(rawEvent.type).to.be.equal("CloudFormationCustomResourceFailedResponse"); + }); + + it("creates a raw event with the right event type if it's `ScheduledEvent` event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({time: ""}); + + Chai.expect(rawEvent.type).to.be.equal("ScheduledEvent"); + }); + + it("creates a raw event with null event type if the event has a unknown Record.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Records: [{unknown: ""}]}); + + Chai.expect(rawEvent.type).to.be.null; + }); + + it("creates a raw event with null event type if the event has a unknown Cloud Formation event.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({RequestType: "Unknown"}); + + Chai.expect(rawEvent.type).to.be.null; + }); + + it("creates a raw event with null event type if the event has a unknown Cloud Formation event result.", () => { + const rawEvent: IRawEvent = transformer.transformRawEvent({Status: "Unknown"}); + + Chai.expect(rawEvent.type).to.be.null; + }); + + }); + + describe("#transformRawCallback", () => { + + it("returns undefined if the given `callback` is undefined.", () => { + const rawCallback: IRawCallback = transformer.transformRawCallback(undefined); + + Chai.expect(rawCallback).to.be.null; + }); + + it("returns an `AWSRawCallback` if the given `callback` isn't undefined.", () => { + const callback: Callback = (err, succ) => console.log("OK"); + const rawCallback: IRawCallback = transformer.transformRawCallback(callback); + + Chai.expect(rawCallback).to.be.instanceOf(AWSRawCallback); + }); + + }); + +}); diff --git a/test/S3TemplateLoader.spec.ts b/test/S3TemplateLoader.spec.ts index e6fec55..59d42d1 100644 --- a/test/S3TemplateLoader.spec.ts +++ b/test/S3TemplateLoader.spec.ts @@ -1,23 +1,25 @@ +/* tslint:disable:no-unused-expression */ import * as S3 from "aws-sdk/clients/s3"; import * as Chai from "chai"; +import { ITemplate, ITemplateLoader, Template } from "lambda-framework"; import * as NodeCache from "node-cache"; -import { stub, SinonStub } from "sinon"; -import { DefaultTemplateLoader, ITemplate, ITemplateLoader, Template } from "lambda-framework"; +import { SinonStub, stub } from "sinon"; +import S3TemplateLoader from "./../src/lib/S3TemplateLoader"; /** * Test for S3TemplateLoader. */ describe("S3TemplateLoader", () => { - const getCacheStub = stub(NodeCache.prototype, "get"); - const getObjectStub = stub(S3.prototype, "makeRequest").withArgs("getObject"); - const loader: ITemplateLoader = new DefaultTemplateLoader("bucket", 30000); + const getCacheStub: SinonStub = stub(NodeCache.prototype, "get"); + const getObjectStub: SinonStub = stub(S3.prototype, "makeRequest").withArgs("getObject"); + const loader: ITemplateLoader = new S3TemplateLoader("bucket", 30000); afterEach(() => { getObjectStub.reset(); getCacheStub.reset(); }); - describe("load", () => { + describe("#load", () => { it("should load from cache the template if has been previously loaded and run the callback with the cached content.", (done) => { getCacheStub.callsFake((key: string, callback) => { callback(null, new Template("prueba.pug", "Cached content.")); @@ -43,13 +45,13 @@ describe("S3TemplateLoader", () => { }); it("should load from S3 if the cache is not defined and run the callback with the content.", (done) => { - const loader: ITemplateLoader = new DefaultTemplateLoader("bucket", null); + const newLoader: ITemplateLoader = new S3TemplateLoader("bucket", null); getObjectStub.callsFake((operation: string, params?: {[key: string]: any}, callback?: (err: Error, data: any) => void) => { callback(null, { Body: "Test content." }); }); - loader.load("prueba.pug", (err: Error, template: ITemplate) => { + newLoader.load("prueba.pug", (err: Error, template: ITemplate) => { Chai.expect(getObjectStub.called).to.be.true; Chai.expect(template.fileName).to.be.equal("prueba.pug"); Chai.expect(template.content).to.be.equal("Test content."); diff --git a/test/utils/aPIGatewayEvent.ts b/test/utils/aPIGatewayEvent.ts new file mode 100644 index 0000000..d9b3e9b --- /dev/null +++ b/test/utils/aPIGatewayEvent.ts @@ -0,0 +1,19 @@ +import { APIGatewayEvent } from "aws-lambda"; + +/** + * APIGatewayEvent event + */ +const aPIGatewayEvent: APIGatewayEvent = { + body: "BODY", + headers: {header1: "header value 1"}, + httpMethod: "POST", + isBase64Encoded: false, + path: "/test", + pathParameters: {}, + queryStringParameters: {}, + stageVariables: {}, + requestContext: null, + resource: "RESOURCE" +}; + +export default aPIGatewayEvent; diff --git a/tslint.json b/tslint.json index f6fd344..2173da3 100644 --- a/tslint.json +++ b/tslint.json @@ -29,7 +29,7 @@ * Common Bugs and Correctness. The following rules should be turned on because they find * common bug patterns in the code or enforce type safety. */ - "chai-vague-errors": true, + "chai-vague-errors": false, "forin": true, "jquery-deferred-must-complete": true, "label-position": true,