From 204b5975d5667018652f976898973abbc98136b9 Mon Sep 17 00:00:00 2001 From: Andrew Hlynskyi Date: Thu, 9 Apr 2020 17:49:27 +0300 Subject: [PATCH 01/16] fix: resolved conflict for dependent botocore library (#34) --- .gitignore | 4 ++++ bin/test_lambda_local.sh | 2 +- requirements.txt | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 222e4e9..94674ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Distribution / packaging +__pycache__ .Python env/ build/ @@ -26,3 +27,6 @@ output/* # Graph image graph.png + +/.venv +/.idea diff --git a/bin/test_lambda_local.sh b/bin/test_lambda_local.sh index a5aefed..14328e9 100755 --- a/bin/test_lambda_local.sh +++ b/bin/test_lambda_local.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -/usr/local/bin/python-lambda-local -t 10 -f $1 $2 $3 +python-lambda-local -t 10 -f "$1" "$2" "$3" diff --git a/requirements.txt b/requirements.txt index b65ab6c..bed0bf2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,5 @@ aws-xray-sdk>=2.0 -boto3==1.7.3 -botocore<1.11.0,>=1.10.3 +boto3<1.13 cookiecutter==1.7.0 networkx==2.4 petname==2.6 From 3376f9fba81e57188c07232a9b1c5f85ff458d90 Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Mon, 13 Apr 2020 12:50:07 +0200 Subject: [PATCH 02/16] fix: Fixed version of minimist package (#35) --- package-lock.json | 8 ++++---- package.json | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb94093..601b5fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2730,9 +2730,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mixin-deep": { "version": "1.3.2", @@ -4501,7 +4501,7 @@ "dependencies": { "minimist": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" } } diff --git a/package.json b/package.json index e176c32..e844cfa 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "serverless": "1.65.0", "serverless-plugin-thundra": "^2.4.2", "serverless-plugin-tracing": "^2.0.0", - "serverless-python-requirements": "^5.1.0" + "serverless-python-requirements": "^5.1.0", + "minimist": ">=1.2.3" }, "collective": { "type": "opencollective", From f83350043c0f15f9d4d15700d5e98347dcdfb8bb Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Tue, 28 Apr 2020 12:54:19 +0200 Subject: [PATCH 03/16] docs: Updated link to modules.tf-lambda-infra repo --- DEVELOPMENT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 8789192..a506546 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -40,7 +40,7 @@ $ serverless deploy function --function generate-cloudcraft --stage prod modules.tf can be self-hosted on your own infrastructure (if you want to expand it for some reason). -See [modules.tf-infra](https://github.com/antonbabenko/modules.tf-infra) repository for complete setup. +See [modules.tf-lambda-infra](https://github.com/antonbabenko/modules.tf-lambda-infra) repository for complete setup. ## Spellchecker From 30954c29c8361364a79632349aa8de47efb62735 Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Fri, 1 May 2020 11:16:48 +0300 Subject: [PATCH 04/16] [Snyk] Fix for 1 vulnerabilities (#38) --- .snyk | 32 + package-lock.json | 1856 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 10 +- 3 files changed, 1868 insertions(+), 30 deletions(-) create mode 100644 .snyk diff --git a/.snyk b/.snyk new file mode 100644 index 0000000..61d3af4 --- /dev/null +++ b/.snyk @@ -0,0 +1,32 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.14.1 +ignore: {} +# patches apply the minimum changes required to fix a vulnerability +patch: + SNYK-JS-LODASH-567746: + - serverless > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > @serverless/enterprise-plugin > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > archiver > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > inquirer > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > json-refs > graphlib > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > @serverless/components > prettyoutput > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > @serverless/enterprise-plugin > @serverless/event-mocks > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > archiver > archiver-utils > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > archiver > async > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > archiver > zip-stream > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > tabtab > inquirer > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > @serverless/cli > @serverless/template > graphlib > lodash: + patched: '2020-05-01T07:28:39.062Z' + - serverless > archiver > zip-stream > archiver-utils > lodash: + patched: '2020-05-01T07:28:39.062Z' diff --git a/package-lock.json b/package-lock.json index 601b5fe..7aeb854 100644 --- a/package-lock.json +++ b/package-lock.json @@ -281,6 +281,255 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, + "@snyk/cli-interface": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.6.0.tgz", + "integrity": "sha512-jtk0gf80v4mFyDqaQNokD8GOPMTXpIUL35ewg6jtmuZw41xt56WF9kqCjiiViSRRRYA0RK+RuiVfmJA5pxvMUQ==", + "requires": { + "@snyk/graphlib": "2.1.9-patch", + "tslib": "^1.9.3" + } + }, + "@snyk/cocoapods-lockfile-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@snyk/cocoapods-lockfile-parser/-/cocoapods-lockfile-parser-3.2.0.tgz", + "integrity": "sha512-DyFqZudOlGXHBOVneLnQnyQ97xZLq+PTF9PhWOmrEzH/tKcLyXhdW/WmDPVNJVyNvogyRZ4cXIj487xy/EeZEw==", + "requires": { + "@snyk/dep-graph": "1.18.2", + "@snyk/ruby-semver": "^2.0.4", + "@types/js-yaml": "^3.12.1", + "core-js": "^3.2.0", + "js-yaml": "^3.13.1", + "source-map-support": "^0.5.7", + "tslib": "^1.10.0" + } + }, + "@snyk/composer-lockfile-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@snyk/composer-lockfile-parser/-/composer-lockfile-parser-1.4.0.tgz", + "integrity": "sha512-ga4YTRjJUuP0Ufr+t1IucwVjEFAv66JSBB/zVHP2zy/jmfA3l3ZjlGQSjsRC6Me9P2Z0esQ83AYNZvmIf9pq2w==", + "requires": { + "@snyk/lodash": "^4.17.15-patch" + } + }, + "@snyk/configstore": { + "version": "3.2.0-rc1", + "resolved": "https://registry.npmjs.org/@snyk/configstore/-/configstore-3.2.0-rc1.tgz", + "integrity": "sha512-CV3QggFY8BY3u8PdSSlUGLibqbqCG1zJRmGM2DhnhcxQDRRPTGTP//l7vJphOVsUP1Oe23+UQsj7KRWpRUZiqg==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + } + } + }, + "@snyk/dep-graph": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@snyk/dep-graph/-/dep-graph-1.18.2.tgz", + "integrity": "sha512-v7tIiCH4LmYOSc0xGHKSxSZ2PEDv8zDlYU7ZKSH+1Hk8Qvj3YYEFvtV1iFBHUEQFUen4kQA6lWxlwF8chsNw+w==", + "requires": { + "@snyk/graphlib": "2.1.9-patch", + "@snyk/lodash": "4.17.15-patch", + "object-hash": "^1.3.1", + "prettier": "^1.19.1", + "semver": "^6.0.0", + "source-map-support": "^0.5.11", + "tslib": "^1.10.0" + }, + "dependencies": { + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@snyk/gemfile": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@snyk/gemfile/-/gemfile-1.2.0.tgz", + "integrity": "sha512-nI7ELxukf7pT4/VraL4iabtNNMz8mUo7EXlqCFld8O5z6mIMLX9llps24iPpaIZOwArkY3FWA+4t+ixyvtTSIA==" + }, + "@snyk/graphlib": { + "version": "2.1.9-patch", + "resolved": "https://registry.npmjs.org/@snyk/graphlib/-/graphlib-2.1.9-patch.tgz", + "integrity": "sha512-uFO/pNMm3pN15QB+hVMU7uaQXhsBNwEA8lOET/VDcdOzLptODhXzkJqSHqt0tZlpdAz6/6Uaj8jY00UvPFgFMA==", + "requires": { + "@snyk/lodash": "4.17.15-patch" + } + }, + "@snyk/inquirer": { + "version": "6.2.2-patch", + "resolved": "https://registry.npmjs.org/@snyk/inquirer/-/inquirer-6.2.2-patch.tgz", + "integrity": "sha512-IUq5bHRL0vtVKtfvd4GOccAIaLYHbcertug2UVZzk5+yY6R/CxfYsnFUTho1h4BdkfNdin2tPjE/5jRF4SKSrw==", + "requires": { + "@snyk/lodash": "4.17.15-patch", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "@snyk/java-call-graph-builder": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@snyk/java-call-graph-builder/-/java-call-graph-builder-1.8.0.tgz", + "integrity": "sha512-dD7hVdEKMMU9CP0jQLm6Q1+l6506rjW0dqQflJ3QOVohNzptYJtTv9pHKzgRu5+q/fgEc35oYi02A0WIQwSvpw==", + "requires": { + "@snyk/graphlib": "2.1.9-patch", + "@snyk/lodash": "4.17.15-patch", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "glob": "^7.1.6", + "jszip": "^3.2.2", + "needle": "^2.3.3", + "progress": "^2.0.3", + "snyk-config": "^3.0.0", + "source-map-support": "^0.5.7", + "temp-dir": "^2.0.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "@snyk/lodash": { + "version": "4.17.15-patch", + "resolved": "https://registry.npmjs.org/@snyk/lodash/-/lodash-4.17.15-patch.tgz", + "integrity": "sha512-e4+t34bGyjjRnwXwI14hqye9J/nRbG9iwaqTgXWHskm5qC+iK0UrjgYdWXiHJCf3Plbpr+1rpW+4LPzZnCGMhQ==" + }, + "@snyk/rpm-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@snyk/rpm-parser/-/rpm-parser-1.1.0.tgz", + "integrity": "sha512-+DyCagvnpyBjwYTxaPMQGLW4rkpKAw1Jrh8YbZCg7Ix172InBxdve/0zud18Lu2H6xWtDDdMvRDdfl82wlTBvA==", + "requires": { + "event-loop-spinner": "1.1.0", + "typescript": "3.8.3" + } + }, + "@snyk/ruby-semver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@snyk/ruby-semver/-/ruby-semver-2.2.0.tgz", + "integrity": "sha512-FqUayoVjcyCsQFYPm3DcaCKdFR4xmapUkCGY+bcNBs3jqCUw687PoP9CPQ1Jvtaw5YpfBNl/62jyntsWCeciuA==", + "requires": { + "@snyk/lodash": "4.17.15-patch" + } + }, + "@snyk/snyk-cocoapods-plugin": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@snyk/snyk-cocoapods-plugin/-/snyk-cocoapods-plugin-2.2.0.tgz", + "integrity": "sha512-Ux7hXKawbk30niGBToGkKqHyKzhT3E7sCl0FNkPkHaaGZwPwhFCDyNFxBd4uGgWiQ+kT+RjtH5ahna+bSP69Yg==", + "requires": { + "@snyk/cli-interface": "1.5.0", + "@snyk/cocoapods-lockfile-parser": "3.2.0", + "@snyk/dep-graph": "^1.18.2", + "source-map-support": "^0.5.7", + "tslib": "^1.10.0" + }, + "dependencies": { + "@snyk/cli-interface": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-1.5.0.tgz", + "integrity": "sha512-+Qo+IO3YOXWgazlo+CKxOuWFLQQdaNCJ9cSfhFQd687/FuesaIxWdInaAdfpsLScq0c6M1ieZslXgiZELSzxbg==", + "requires": { + "tslib": "^1.9.3" + } + } + } + }, + "@snyk/update-notifier": { + "version": "2.5.1-rc2", + "resolved": "https://registry.npmjs.org/@snyk/update-notifier/-/update-notifier-2.5.1-rc2.tgz", + "integrity": "sha512-dlled3mfpnAt3cQb5hxkFiqfPCj4Yk0xV8Yl5P8PeVv1pUmO7vI4Ka4Mjs4r6CYM5f9kZhviFPQQcWOIDlMRcw==", + "requires": { + "@snyk/configstore": "3.2.0-rc1", + "boxen": "^1.3.0", + "chalk": "^2.3.2", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.1.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + } + } + }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -289,6 +538,20 @@ "defer-to-connect": "^1.0.1" } }, + "@types/agent-base": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-8mrhPstU+ZX0Ugya8tl5DsDZ1I5ZwQzbL/8PA0z8Gj0k9nql7nkaMzmPVLj+l/nixWaliXi+EBiLA8bptw3z7Q==", + "requires": { + "@types/events": "*", + "@types/node": "*" + } + }, + "@types/debug": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", + "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==" + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -304,6 +567,11 @@ "@types/node": "*" } }, + "@types/js-yaml": { + "version": "3.12.3", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.3.tgz", + "integrity": "sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA==" + }, "@types/lodash": { "version": "4.14.149", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", @@ -319,6 +587,29 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz", "integrity": "sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg==" }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, + "@types/xml2js": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.5.tgz", + "integrity": "sha512-yohU3zMn0fkhlape1nxXG2bLEGZRc1FeqF80RoHaYXJN7uibaauXfhzhOJr1Xh36sn+/tx21QAOf07b/xYVk1w==", + "requires": { + "@types/node": "*" + } + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "adm-zip": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz", @@ -358,6 +649,11 @@ "color-convert": "^1.9.0" } }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", @@ -436,6 +732,11 @@ } } }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -469,11 +770,21 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, + "ast-types": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==" + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -698,6 +1009,11 @@ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==" }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -940,11 +1256,68 @@ "restore-cursor": "^2.0.0" } }, + "cli-spinner": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/cli-spinner/-/cli-spinner-0.2.10.tgz", + "integrity": "sha512-U0sSQ+JJvSLi1pAYuJykwiA8Dsr15uHEy85iCJ6A+0DjVxivr3d+N2Wjvodeg89uP5K6TswFkKBfAD7B3YSn/Q==" + }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + } + } + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -953,6 +1326,16 @@ "mimic-response": "^1.0.0" } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1076,6 +1459,11 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1130,6 +1518,11 @@ "type": "^1.0.1" } }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" + }, "dayjs": { "version": "1.8.21", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.21.tgz", @@ -1259,6 +1652,11 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -1285,11 +1683,38 @@ "isobject": "^3.0.1" } }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1298,6 +1723,14 @@ "path-type": "^4.0.0" } }, + "dockerfile-ast": { + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/dockerfile-ast/-/dockerfile-ast-0.0.19.tgz", + "integrity": "sha512-iDRNFeAB2j4rh/Ecc2gh3fjciVifCMsszfCfHlYF5Wv8yybjZLiRDZUBt/pS3xrAz8uWT8fCHLq4pOQMmwCDwA==", + "requires": { + "vscode-languageserver-types": "^3.5.0" + } + }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", @@ -1311,6 +1744,34 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, + "dotnet-deps-parser": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/dotnet-deps-parser/-/dotnet-deps-parser-4.10.0.tgz", + "integrity": "sha512-dEO1oTvreaDCtcvhRdOmmAMubyC+MWqVr1c/1Wvasi+NW4NZeB67qGh1taqowUFh+aCXtPw3SP2eExn6aNkhwA==", + "requires": { + "@snyk/lodash": "4.17.15-patch", + "@types/xml2js": "0.4.5", + "source-map-support": "^0.5.7", + "tslib": "^1.10.0", + "xml2js": "0.4.23" + }, + "dependencies": { + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + } + } + }, "download": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", @@ -1442,6 +1903,11 @@ "es5-ext": "~0.10.46" } }, + "email-validator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz", + "integrity": "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==" + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -1483,6 +1949,11 @@ "es6-symbol": "^3.1.1" } }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "es6-promisify": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.2.tgz", @@ -1536,6 +2007,18 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "escodegen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, "esniff": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", @@ -1555,6 +2038,16 @@ "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.1.1.tgz", "integrity": "sha512-SmaxoAdVu86XkZQM/u6TYSu96ZlFGwhvSk1l9zAkznFuQkMb9mRDS2iq/XWDow7R8OwBwdYH8nLyDKznMD+GWw==" }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -1564,6 +2057,14 @@ "es5-ext": "~0.10.14" } }, + "event-loop-spinner": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/event-loop-spinner/-/event-loop-spinner-1.1.0.tgz", + "integrity": "sha512-YVFs6dPpZIgH665kKckDktEVvSBccSYJmoZUfhNUdv5d3Xv+Q+SKF4Xis1jolq9aBzuW1ZZhQh/m/zU/TPdDhw==", + "requires": { + "tslib": "^1.10.0" + } + }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -1693,6 +2194,11 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -1850,6 +2356,38 @@ "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", "optional": true }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "get-proxy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", @@ -1871,23 +2409,68 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", - "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "get-uri": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", + "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", + "requires": { + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "~3.0.2", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "git-up": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz", + "integrity": "sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==", + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^5.0.0" + } + }, + "git-url-parse": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz", + "integrity": "sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ==", + "requires": { + "git-up": "^4.0.0" + } + }, + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, "glob-all": { "version": "3.1.0", @@ -2047,11 +2630,68 @@ } } }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "https-proxy-agent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", @@ -2157,6 +2797,16 @@ "p-is-promise": "^1.1.0" } }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -2305,6 +2955,14 @@ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, + "is-ssh": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz", + "integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==", + "requires": { + "protocols": "^1.1.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -2545,6 +3203,23 @@ "readable-stream": "^2.0.5" } }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, "lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -2558,6 +3233,31 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -2638,6 +3338,11 @@ "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz", "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks=" }, + "macos-release": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", + "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==" + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -2822,6 +3527,99 @@ } } }, + "nconf": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", + "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==", + "requires": { + "async": "^1.4.0", + "ini": "^1.3.0", + "secure-keys": "^1.0.0", + "yargs": "^3.19.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } + }, + "needle": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz", + "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + } + } + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -2876,6 +3674,11 @@ "path-key": "^2.0.0" } }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2984,6 +3787,22 @@ "mimic-fn": "^1.0.0" } }, + "open": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", + "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-docker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", + "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==" + } + } + }, "opencollective-postinstall": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", @@ -3004,6 +3823,36 @@ } } }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -3040,6 +3889,11 @@ "p-try": "^2.0.0" } }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, "p-timeout": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", @@ -3053,6 +3907,70 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "pac-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", + "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", + "requires": { + "agent-base": "^4.2.0", + "debug": "^4.1.1", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + } + } + }, + "pac-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", + "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", + "requires": { + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" + } + }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -3076,6 +3994,33 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" }, + "parse-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz", + "integrity": "sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==", + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "parse-url": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz", + "integrity": "sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==", + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^3.3.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + } + } + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -3138,11 +4083,21 @@ "pinkie": "^2.0.0" } }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" + }, "prettyoutput": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/prettyoutput/-/prettyoutput-1.2.0.tgz", @@ -3158,6 +4113,19 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, "promise-queue": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", @@ -3168,6 +4136,81 @@ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" }, + "protocols": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz", + "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==" + }, + "proxy-agent": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", + "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", + "requires": { + "agent-base": "^4.2.0", + "debug": "4", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^3.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^3.0.1", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^4.0.1" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -3231,6 +4274,17 @@ } } }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -3395,6 +4449,11 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, + "secure-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", + "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" + }, "seek-bzip": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", @@ -3624,6 +4683,11 @@ } } }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, "sha256-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz", @@ -3673,6 +4737,11 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -3785,16 +4854,589 @@ } } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", + "snyk": { + "version": "1.316.1", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.316.1.tgz", + "integrity": "sha512-z+LWT14QoOyOsqCcWGkTNlIBpCQmv7E+kMX3r43/vZeU1F9E6Ll+KVcu1simXZixZaOb97IHHIf4rxxYGw65MA==", + "requires": { + "@snyk/cli-interface": "2.6.0", + "@snyk/configstore": "^3.2.0-rc1", + "@snyk/dep-graph": "1.18.2", + "@snyk/gemfile": "1.2.0", + "@snyk/graphlib": "2.1.9-patch", + "@snyk/inquirer": "6.2.2-patch", + "@snyk/lodash": "^4.17.15-patch", + "@snyk/ruby-semver": "2.2.0", + "@snyk/snyk-cocoapods-plugin": "2.2.0", + "@snyk/update-notifier": "^2.5.1-rc2", + "@types/agent-base": "^4.2.0", + "abbrev": "^1.1.1", + "ansi-escapes": "3.2.0", + "chalk": "^2.4.2", + "cli-spinner": "0.2.10", + "debug": "^3.1.0", + "diff": "^4.0.1", + "git-url-parse": "11.1.2", + "glob": "^7.1.3", + "needle": "^2.2.4", + "open": "^7.0.3", + "os-name": "^3.0.0", + "proxy-agent": "^3.1.1", + "proxy-from-env": "^1.0.0", + "semver": "^6.0.0", + "snyk-config": "3.1.0", + "snyk-docker-plugin": "3.1.0", + "snyk-go-plugin": "1.14.0", + "snyk-gradle-plugin": "3.2.5", + "snyk-module": "1.9.1", + "snyk-mvn-plugin": "2.15.0", + "snyk-nodejs-lockfile-parser": "1.22.0", + "snyk-nuget-plugin": "1.17.0", + "snyk-php-plugin": "1.9.0", + "snyk-policy": "1.13.5", + "snyk-python-plugin": "1.17.0", + "snyk-resolve": "1.0.1", + "snyk-resolve-deps": "4.4.0", + "snyk-sbt-plugin": "2.11.0", + "snyk-tree": "^1.0.0", + "snyk-try-require": "1.3.1", + "source-map-support": "^0.5.11", + "strip-ansi": "^5.2.0", + "tempfile": "^2.0.0", + "then-fs": "^2.0.0", + "uuid": "^3.3.2", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "snyk-config": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/snyk-config/-/snyk-config-3.1.0.tgz", + "integrity": "sha512-3UlyogA67/9WOssJ7s4d7gqWQRWyO/LbgdBBNMhhmFDKa7eTUSW+A782CVHgyDSJZ2kNANcMWwMiOL+h3p6zQg==", + "requires": { + "@snyk/lodash": "4.17.15-patch", + "debug": "^4.1.1", + "nconf": "^0.10.0" + } + }, + "snyk-docker-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/snyk-docker-plugin/-/snyk-docker-plugin-3.1.0.tgz", + "integrity": "sha512-ggGTiiCuwLYGdlGW/UBuUXJ7omliH0EnbpLfdlTBoRKvmvgoUo1l4Menk18R1ZVXgcXTwwGK9jmuUpPH+X0VNw==", + "requires": { + "@snyk/rpm-parser": "^1.1.0", + "debug": "^4.1.1", + "dockerfile-ast": "0.0.19", + "event-loop-spinner": "^1.1.0", + "semver": "^6.1.0", + "tar-stream": "^2.1.0", + "tslib": "^1" + }, + "dependencies": { + "bl": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "tar-stream": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + } + } + }, + "snyk-go-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/snyk-go-parser/-/snyk-go-parser-1.4.0.tgz", + "integrity": "sha512-zcLA8u/WreycCjFKBblYfxszg7Fmnemuu9Ug/CE/jqF0yBXsI5DCWMteUvFkoa8DRntfGTlgf98TRl2aTSc2MQ==", + "requires": { + "toml": "^3.0.0", + "tslib": "^1.10.0" + } + }, + "snyk-go-plugin": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/snyk-go-plugin/-/snyk-go-plugin-1.14.0.tgz", + "integrity": "sha512-9L+76De8F6yXWb+O3DA8QUi7+eDF2mOzCOveEPUJGkqWIDmurIiFcVxHJoj0EStjcxb3dX367KKlDlfFx+HiyA==", + "requires": { + "@snyk/graphlib": "2.1.9-patch", + "debug": "^4.1.1", + "snyk-go-parser": "1.4.0", + "tmp": "0.1.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "requires": { + "rimraf": "^2.6.3" + } + } + } + }, + "snyk-gradle-plugin": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/snyk-gradle-plugin/-/snyk-gradle-plugin-3.2.5.tgz", + "integrity": "sha512-XxPi/B16dGkV1USoyFbpn6LlSJ9SUC6Y6z/4lWuF4spLnKtWwpEb1bwTdBFsxnkUfqzIRtPr0+wcxxXvv9Rvcw==", + "requires": { + "@snyk/cli-interface": "2.3.0", + "@types/debug": "^4.1.4", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "tmp": "0.0.33", + "tslib": "^1.9.3" + }, + "dependencies": { + "@snyk/cli-interface": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.3.0.tgz", + "integrity": "sha512-ecbylK5Ol2ySb/WbfPj0s0GuLQR+KWKFzUgVaoNHaSoN6371qRWwf2uVr+hPUP4gXqCai21Ug/RDArfOhlPwrQ==", + "requires": { + "tslib": "^1.9.3" + } + } + } + }, + "snyk-module": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/snyk-module/-/snyk-module-1.9.1.tgz", + "integrity": "sha512-A+CCyBSa4IKok5uEhqT+hV/35RO6APFNLqk9DRRHg7xW2/j//nPX8wTSZUPF8QeRNEk/sX+6df7M1y6PBHGSHA==", + "requires": { + "debug": "^3.1.0", + "hosted-git-info": "^2.7.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "snyk-mvn-plugin": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/snyk-mvn-plugin/-/snyk-mvn-plugin-2.15.0.tgz", + "integrity": "sha512-24HWz27Hc5sw+iHtxtQFy0kltjyFZXJ3vfsPA0TTZAL0tOJXInIuZpWD6njC0Y3/sn9CH5kS2KM8GAM7FyKVig==", + "requires": { + "@snyk/cli-interface": "2.5.0", + "@snyk/java-call-graph-builder": "1.8.0", + "debug": "^4.1.1", + "needle": "^2.4.0", + "tmp": "^0.1.0", + "tslib": "1.11.1" + }, + "dependencies": { + "@snyk/cli-interface": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.5.0.tgz", + "integrity": "sha512-XMc2SCFH4RBSncZgoPb+BBlNq0NYpEpCzptKi69qyMpBy0VsRqIQqddedaazMCU1xEpXTytq6KMYpzUafZzp5Q==", + "requires": { + "tslib": "^1.9.3" + } + }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "requires": { + "rimraf": "^2.6.3" + } + } + } + }, + "snyk-nodejs-lockfile-parser": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.22.0.tgz", + "integrity": "sha512-l6jLoJxqcIIkQopSdQuAstXdMw5AIgLu+uGc5CYpHyw8fYqOwna8rawwofNeGuwJAAv4nEiNiexeYaR88OCq6Q==", + "requires": { + "@snyk/graphlib": "2.1.9-patch", + "@snyk/lodash": "^4.17.15-patch", + "@yarnpkg/lockfile": "^1.0.2", + "event-loop-spinner": "^1.1.0", + "p-map": "2.1.0", + "snyk-config": "^3.0.0", + "source-map-support": "^0.5.7", + "tslib": "^1.9.3", + "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "snyk-nuget-plugin": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/snyk-nuget-plugin/-/snyk-nuget-plugin-1.17.0.tgz", + "integrity": "sha512-t7iZ87LBhCK6P2/mJsQh7Dmk3J9zd+IHL4yoSK95Iyk/gP8r++DZijoRHEXy8BlS+eOtSAj1vgCYvv2eAmG28w==", + "requires": { + "@snyk/lodash": "4.17.15-patch", + "debug": "^3.1.0", + "dotnet-deps-parser": "4.10.0", + "jszip": "3.1.5", + "snyk-paket-parser": "1.6.0", + "tslib": "^1.9.3", + "xml2js": "^0.4.17" + }, + "dependencies": { + "core-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" + }, + "jszip": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "requires": { + "core-js": "~2.3.0", + "es6-promise": "~3.0.2", + "lie": "~3.1.0", + "pako": "~1.0.2", + "readable-stream": "~2.0.6" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "snyk-paket-parser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/snyk-paket-parser/-/snyk-paket-parser-1.6.0.tgz", + "integrity": "sha512-6htFynjBe/nakclEHUZ1A3j5Eu32/0pNve5Qm4MFn3YQmJgj7UcAO8hdyK3QfzEY29/kAv/rkJQg+SKshn+N9Q==", + "requires": { + "tslib": "^1.9.3" + } + }, + "snyk-php-plugin": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/snyk-php-plugin/-/snyk-php-plugin-1.9.0.tgz", + "integrity": "sha512-uORrEoC47dw0ITZYu5vKqQtmXnbbQs+ZkWeo5bRHGdf10W8e4rNr1S1R4bReiLrSbSisYhVHeFMkdOAiLIPJVQ==", + "requires": { + "@snyk/cli-interface": "2.3.2", + "@snyk/composer-lockfile-parser": "1.4.0", + "tslib": "1.11.1" + }, + "dependencies": { + "@snyk/cli-interface": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.3.2.tgz", + "integrity": "sha512-jmZyxVHqzYU1GfdnWCGdd68WY/lAzpPVyqalHazPj4tFJehrSfEFc82RMTYAMgXEJuvFRFIwhsvXh3sWUhIQmg==", + "requires": { + "tslib": "^1.9.3" + } + } + } + }, + "snyk-policy": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/snyk-policy/-/snyk-policy-1.13.5.tgz", + "integrity": "sha512-KI6GHt+Oj4fYKiCp7duhseUj5YhyL/zJOrrJg0u6r59Ux9w8gmkUYT92FHW27ihwuT6IPzdGNEuy06Yv2C9WaQ==", + "requires": { + "debug": "^3.1.0", + "email-validator": "^2.0.4", + "js-yaml": "^3.13.1", + "lodash.clonedeep": "^4.5.0", + "semver": "^6.0.0", + "snyk-module": "^1.9.1", + "snyk-resolve": "^1.0.1", + "snyk-try-require": "^1.3.1", + "then-fs": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "snyk-python-plugin": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/snyk-python-plugin/-/snyk-python-plugin-1.17.0.tgz", + "integrity": "sha512-EKdVOUlvhiVpXA5TeW8vyxYVqbITAfT+2AbL2ZRiiUNLP5ae+WiNYaPy7aB5HAS9IKBKih+IH8Ag65Xu1IYSYA==", + "requires": { + "@snyk/cli-interface": "^2.0.3", + "tmp": "0.0.33" + } + }, + "snyk-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/snyk-resolve/-/snyk-resolve-1.0.1.tgz", + "integrity": "sha512-7+i+LLhtBo1Pkth01xv+RYJU8a67zmJ8WFFPvSxyCjdlKIcsps4hPQFebhz+0gC5rMemlaeIV6cqwqUf9PEDpw==", + "requires": { + "debug": "^3.1.0", + "then-fs": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "snyk-resolve-deps": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/snyk-resolve-deps/-/snyk-resolve-deps-4.4.0.tgz", + "integrity": "sha512-aFPtN8WLqIk4E1ulMyzvV5reY1Iksz+3oPnUVib1jKdyTHymmOIYF7z8QZ4UUr52UsgmrD9EA/dq7jpytwFoOQ==", + "requires": { + "@types/node": "^6.14.4", + "@types/semver": "^5.5.0", + "ansicolors": "^0.3.2", + "debug": "^3.2.5", + "lodash.assign": "^4.2.0", + "lodash.assignin": "^4.2.0", + "lodash.clone": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lru-cache": "^4.0.0", + "semver": "^5.5.1", + "snyk-module": "^1.6.0", + "snyk-resolve": "^1.0.0", + "snyk-tree": "^1.0.0", + "snyk-try-require": "^1.1.1", + "then-fs": "^2.0.0" + }, + "dependencies": { + "@types/node": { + "version": "6.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.10.tgz", + "integrity": "sha512-pF4HjZGSog75kGq7B1InK/wt/N08BuPATo+7HRfv7gZUzccebwv/fmWVGs/j6LvSiLWpCuGGhql51M/wcQsNzA==" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "snyk-sbt-plugin": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/snyk-sbt-plugin/-/snyk-sbt-plugin-2.11.0.tgz", + "integrity": "sha512-wUqHLAa3MzV6sVO+05MnV+lwc+T6o87FZZaY+43tQPytBI2Wq23O3j4POREM4fa2iFfiQJoEYD6c7xmhiEUsSA==", + "requires": { + "debug": "^4.1.1", + "semver": "^6.1.2", + "tmp": "^0.1.0", + "tree-kill": "^1.2.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "requires": { + "rimraf": "^2.6.3" + } + } + } + }, + "snyk-tree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/snyk-tree/-/snyk-tree-1.0.0.tgz", + "integrity": "sha1-D7cxdtvzLngvGRAClBYESPkRHMg=", + "requires": { + "archy": "^1.0.0" + } + }, + "snyk-try-require": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/snyk-try-require/-/snyk-try-require-1.3.1.tgz", + "integrity": "sha1-bgJvkuZK9/zM6h7lPVJIQeQYohI=", + "requires": { + "debug": "^3.1.0", + "lodash.clonedeep": "^4.3.0", + "lru-cache": "^4.0.0", + "then-fs": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", "requires": { @@ -3953,6 +5595,11 @@ } } }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, "stream-promise": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", @@ -4103,6 +5750,32 @@ "xtend": "^4.0.0" } }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -4111,11 +5784,24 @@ "execa": "^0.7.0" } }, + "then-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/then-fs/-/then-fs-2.0.0.tgz", + "integrity": "sha1-cveS3Z0xcFqRrhnr/Piz+WjIHaI=", + "requires": { + "promise": ">=3.2 <8" + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", @@ -4190,11 +5876,26 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, "traverse": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -4221,11 +5922,24 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" }, + "typescript": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==" + }, "unbzip2-stream": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", @@ -4266,6 +5980,11 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -4402,6 +6121,11 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" }, + "vscode-languageserver-types": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", + "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==" + }, "walkdir": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", @@ -4428,6 +6152,74 @@ "string-width": "^2.1.1" } }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, + "windows-release": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz", + "integrity": "sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==", + "requires": { + "execa": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4467,11 +6259,21 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", diff --git a/package.json b/package.json index e844cfa..488b5f2 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "private": true, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "postinstall": "opencollective-postinstall || true" + "postinstall": "opencollective-postinstall || true", + "snyk-protect": "snyk protect", + "prepare": "npm run snyk-protect" }, "keywords": [ "Infrastructure as code", @@ -24,10 +26,12 @@ "serverless-plugin-thundra": "^2.4.2", "serverless-plugin-tracing": "^2.0.0", "serverless-python-requirements": "^5.1.0", - "minimist": ">=1.2.3" + "minimist": ">=1.2.3", + "snyk": "^1.316.1" }, "collective": { "type": "opencollective", "url": "https://opencollective.com/modulestf" - } + }, + "snyk": true } From e9d1510eaebea5b876a36782900567fc3ec9d10c Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Sat, 23 May 2020 12:30:16 +0300 Subject: [PATCH 05/16] [Snyk] Upgrade snyk from 1.316.1 to 1.316.2 (#42) --- package-lock.json | 31 +++++++++++++++---------------- package.json | 2 +- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7aeb854..fe4ac33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -539,11 +539,10 @@ } }, "@types/agent-base": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/agent-base/-/agent-base-4.2.0.tgz", - "integrity": "sha512-8mrhPstU+ZX0Ugya8tl5DsDZ1I5ZwQzbL/8PA0z8Gj0k9nql7nkaMzmPVLj+l/nixWaliXi+EBiLA8bptw3z7Q==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@types/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-GRmnDTq6ajyRyT8Ybg4IVVOyYqqFIAR4Zo9L+fdMAP+IJxd0nlTV99/IelJCBF629WOj6MpE9ohLHYCmkeJqRA==", "requires": { - "@types/events": "*", "@types/node": "*" } }, @@ -568,9 +567,9 @@ } }, "@types/js-yaml": { - "version": "3.12.3", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.3.tgz", - "integrity": "sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA==" + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.4.tgz", + "integrity": "sha512-fYMgzN+9e28R81weVN49inn/u798ruU91En1ZnGvSZzCRc5jXx9B2EDhlRaWmcO1RIxFHL8AajRXzxDuJu93+A==" }, "@types/lodash": { "version": "4.14.149", @@ -3591,9 +3590,9 @@ } }, "needle": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz", - "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -3788,9 +3787,9 @@ } }, "open": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", - "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", + "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -4855,9 +4854,9 @@ } }, "snyk": { - "version": "1.316.1", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.316.1.tgz", - "integrity": "sha512-z+LWT14QoOyOsqCcWGkTNlIBpCQmv7E+kMX3r43/vZeU1F9E6Ll+KVcu1simXZixZaOb97IHHIf4rxxYGw65MA==", + "version": "1.316.2", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.316.2.tgz", + "integrity": "sha512-jbO2yUxu0kM6v8jLP1Vn64ZIeznFBBfujaurKYtXUR0mnRzr64V5kEuNeCIjAp9qlSM0RjuEqOCH7eAlFTxOHw==", "requires": { "@snyk/cli-interface": "2.6.0", "@snyk/configstore": "^3.2.0-rc1", diff --git a/package.json b/package.json index 488b5f2..86c5493 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "serverless-plugin-tracing": "^2.0.0", "serverless-python-requirements": "^5.1.0", "minimist": ">=1.2.3", - "snyk": "^1.316.1" + "snyk": "^1.316.2" }, "collective": { "type": "opencollective", From 122b4c69edc823680852778fb07c3c95f12ff23c Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Mon, 25 May 2020 10:29:50 +0300 Subject: [PATCH 06/16] [Snyk] Upgrade snyk from 1.316.2 to 1.317.0 (#43) * fix: upgrade snyk from 1.316.2 to 1.317.0 Snyk has created this PR to upgrade snyk from 1.316.2 to 1.317.0. See this package in NPM: https://www.npmjs.com/package/snyk See this project in Snyk: https://app.snyk.io/org/antonbabenko/project/2ee6f39a-0307-444f-9086-43a28234c087?utm_source=github&utm_medium=upgrade-pr * fix: upgrade snyk from 1.316.2 to 1.317.0 Snyk has created this PR to upgrade snyk from 1.316.2 to 1.317.0. See this package in NPM: https://www.npmjs.com/package/snyk See this project in Snyk: https://app.snyk.io/org/antonbabenko/project/2ee6f39a-0307-444f-9086-43a28234c087?utm_source=github&utm_medium=upgrade-pr --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe4ac33..b3c4ca2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4854,9 +4854,9 @@ } }, "snyk": { - "version": "1.316.2", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.316.2.tgz", - "integrity": "sha512-jbO2yUxu0kM6v8jLP1Vn64ZIeznFBBfujaurKYtXUR0mnRzr64V5kEuNeCIjAp9qlSM0RjuEqOCH7eAlFTxOHw==", + "version": "1.317.0", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.317.0.tgz", + "integrity": "sha512-zNUvvT50Ii5TpHEo9YmDo+j5tqO1b8jXQK9XygfgiuXPRUwxf6PMSqDM5hKkfzuBhaBYZ4IbZWQFQPbMkprj0w==", "requires": { "@snyk/cli-interface": "2.6.0", "@snyk/configstore": "^3.2.0-rc1", diff --git a/package.json b/package.json index 86c5493..2a6d35b 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "serverless-plugin-tracing": "^2.0.0", "serverless-python-requirements": "^5.1.0", "minimist": ">=1.2.3", - "snyk": "^1.316.2" + "snyk": "^1.317.0" }, "collective": { "type": "opencollective", From d631fcc3dbea752e5ed3ba23ce59ab47b4dc28e7 Mon Sep 17 00:00:00 2001 From: Snyk bot Date: Wed, 27 May 2020 10:33:39 +0300 Subject: [PATCH 07/16] [Snyk] Upgrade snyk from 1.317.0 to 1.319.0 (#44) * fix: upgrade snyk from 1.317.0 to 1.319.0 Snyk has created this PR to upgrade snyk from 1.317.0 to 1.319.0. See this package in NPM: https://www.npmjs.com/package/snyk See this project in Snyk: https://app.snyk.io/org/antonbabenko/project/2ee6f39a-0307-444f-9086-43a28234c087?utm_source=github&utm_medium=upgrade-pr * fix: upgrade snyk from 1.317.0 to 1.319.0 Snyk has created this PR to upgrade snyk from 1.317.0 to 1.319.0. See this package in NPM: https://www.npmjs.com/package/snyk See this project in Snyk: https://app.snyk.io/org/antonbabenko/project/2ee6f39a-0307-444f-9086-43a28234c087?utm_source=github&utm_medium=upgrade-pr --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3c4ca2..9043bee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4854,9 +4854,9 @@ } }, "snyk": { - "version": "1.317.0", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.317.0.tgz", - "integrity": "sha512-zNUvvT50Ii5TpHEo9YmDo+j5tqO1b8jXQK9XygfgiuXPRUwxf6PMSqDM5hKkfzuBhaBYZ4IbZWQFQPbMkprj0w==", + "version": "1.319.0", + "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.319.0.tgz", + "integrity": "sha512-tOFkZuJYPxzT50joiHd/bxdfsWd/cqFZcfEj6VxRJ28wYBC7imzodp4m8cC6Rcox4++2WEm6ZHNlPLyYjmfPOg==", "requires": { "@snyk/cli-interface": "2.6.0", "@snyk/configstore": "^3.2.0-rc1", diff --git a/package.json b/package.json index 2a6d35b..a8d7993 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "serverless-plugin-tracing": "^2.0.0", "serverless-python-requirements": "^5.1.0", "minimist": ">=1.2.3", - "snyk": "^1.317.0" + "snyk": "^1.319.0" }, "collective": { "type": "opencollective", From d590e01ad0835bd02c8250d65946f38d86f23787 Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Wed, 4 Nov 2020 17:44:00 +0100 Subject: [PATCH 08/16] docs: Updated links in README --- README.md | 8 ++++---- handler.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 95ab37d..88b73e1 100644 --- a/README.md +++ b/README.md @@ -5,14 +5,14 @@ modules.tf - Infrastructure as code generator - from visual diagrams to Terraform -Code in this repository is used for generating infrastructure as Terraform configurations from visual diagrams created using [Cloudcraft](https://cloudcraft.co). +Code in this repository is used for generating infrastructure as Terraform configurations from visual diagrams created using [Cloudcraft](https://www.cloudcraft.co). [modules.tf](https://github.com/antonbabenko/modules.tf-lambda) is an open-source project by [Anton Babenko](https://github.com/antonbabenko). ## How can I try this? -1. Sign up for free account to [Cloudcraft.co](https://cloudcraft.co/app). +1. Sign up for free account to [Cloudcraft.co](https://www.cloudcraft.co/app). 1. Draw AWS architecture in web-browser (you can import live AWS resources, too). 1. Click "Export" and "Terraform code export" at the top right side. 1. Download archive and extract it locally. @@ -33,9 +33,9 @@ In [modules.tf-demo](https://github.com/antonbabenko/modules.tf-demo) repository ## Supporters -Cloudcraft - the best way to draw AWS diagrams +Cloudcraft - the best way to draw AWS diagrams -This project was partially sponsored by [Cloudcraft - the best way to draw AWS diagrams](https://cloudcraft.co).
+This project was partially sponsored by [Cloudcraft - the best way to draw AWS diagrams](https://www.cloudcraft.co).
Monitoring of serverless applications provided by [Thundra](https://www.thundra.io/). diff --git a/handler.py b/handler.py index 218744d..66fd5a1 100755 --- a/handler.py +++ b/handler.py @@ -43,7 +43,7 @@ def load_data(event): if 403 == r.status_code: raise ValueError("Sharing has been disabled for this blueprint." + " You have to enable it by clicking 'Export' -> 'Get shareable link'" + - " on https://cloudcraft.co/app/", 403) + " on https://www.cloudcraft.co/app/", 403) elif r.status_code >= 500: raise ValueError("Something went wrong on cloudcraft side. Can't fetch specified blueprint." + From 0163081142748fadc27898923cb906e4c8cfb500 Mon Sep 17 00:00:00 2001 From: Tomas Junnonen Date: Wed, 4 Nov 2020 09:02:22 -0800 Subject: [PATCH 09/16] docs: Fix a few more links (#52) - Direct traffic to app.cloudcraft.co subdomain where applicable - Fix shared blueprint test link - Minor grammar fixes --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- README.md | 2 +- handler.py | 2 +- package.json | 2 +- templates/root/template/README.md | 2 +- test_fixtures/input_cloudcraft.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index a9e6029..f24e8b8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ about: Create a report to help us improve A clear and concise description of what the bug is. diff --git a/README.md b/README.md index 88b73e1..e37ce66 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Code in this repository is used for generating infrastructure as Terraform confi ## How can I try this? -1. Sign up for free account to [Cloudcraft.co](https://www.cloudcraft.co/app). +1. Sign up for a free account with [Cloudcraft](https://app.cloudcraft.co/signup). 1. Draw AWS architecture in web-browser (you can import live AWS resources, too). 1. Click "Export" and "Terraform code export" at the top right side. 1. Download archive and extract it locally. diff --git a/handler.py b/handler.py index 66fd5a1..c5d89e3 100755 --- a/handler.py +++ b/handler.py @@ -43,7 +43,7 @@ def load_data(event): if 403 == r.status_code: raise ValueError("Sharing has been disabled for this blueprint." + " You have to enable it by clicking 'Export' -> 'Get shareable link'" + - " on https://www.cloudcraft.co/app/", 403) + " on https://app.cloudcraft.co", 403) elif r.status_code >= 500: raise ValueError("Something went wrong on cloudcraft side. Can't fetch specified blueprint." + diff --git a/package.json b/package.json index a8d7993..bd89faf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "modules.tf-lambda", "version": "2.0.0", - "description": "From visual diagrams created with Cloudcraft.co to infrastructure as code using Terraform and Terragrunt", + "description": "From visual diagrams created with Cloudcraft to infrastructure as code using Terraform and Terragrunt", "main": "index.js", "private": true, "scripts": { diff --git a/templates/root/template/README.md b/templates/root/template/README.md index 2c9d04e..48fe47b 100644 --- a/templates/root/template/README.md +++ b/templates/root/template/README.md @@ -1,6 +1,6 @@ # Infrastructure code for "{{ cookiecutter.source_name }}" -This repository contains infrastructure as Terraform configurations which were automatically generated from blueprint created using [cloudcraft.co](https://cloudcraft.co/app). +This repository contains infrastructure as Terraform configurations which were automatically generated from blueprint created using [Cloudcraft](https://www.cloudcraft.co). [Terragrunt](https://terragrunt.gruntwork.io/) is used to work with Terraform configurations which allows to orchestrate dependent layers, update arguments dynamically and keep configurations [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). diff --git a/test_fixtures/input_cloudcraft.json b/test_fixtures/input_cloudcraft.json index 26e6a39..40f5f7d 100644 --- a/test_fixtures/input_cloudcraft.json +++ b/test_fixtures/input_cloudcraft.json @@ -1,6 +1,6 @@ { "queryStringParameters": { - "cloudcraft": "https://cloudcraft.co/api/blueprint/b2eda0eb-21b2-45d8-93d5-c0b4906eb69e?key=XlAaasYL4pOa5f-Wzkt5CQ" + "cloudcraft": "https://app.cloudcraft.co/api/blueprint/b2eda0eb-21b2-45d8-93d5-c0b4906eb69e?key=XlAaasYL4pOa5f-Wzkt5CQ" } } From 852e725603ff76596a5e98b1f8ceaff8567293bd Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Sun, 9 May 2021 22:01:56 +0200 Subject: [PATCH 10/16] feat: Added Lambda, API Gateway, CloudFront modules, and some refactoring (#60) --- .gitignore | 28 +- .pre-commit-config.yaml | 22 +- .vscode/launch.json | 19 + .vscode/settings.json | 6 + DEVELOPMENT.md | 50 - LICENSE | 2 +- README.md | 30 +- bin/test_lambda_local.sh | 3 - handler.py | 180 - misc/dashbird-logo.png | Bin 32617 -> 0 bytes modules-metadata/alb_version.txt | 1 - modules-metadata/autoscaling.json | 264 - modules-metadata/autoscaling_variables.json | 262 - modules-metadata/autoscaling_version.txt | 1 - modules-metadata/dynamodb-table_version.txt | 1 - modules-metadata/ec2-instance_version.txt | 1 - modules-metadata/elb_version.txt | 1 - modules-metadata/rds-aurora_version.txt | 1 - modules-metadata/rds_version.txt | 1 - modules-metadata/s3-bucket_version.txt | 1 - modules-metadata/security-group_version.txt | 1 - modules-metadata/vpc.json | 1649 ----- modules-metadata/vpc_variables.json | 1649 ----- modules-metadata/vpc_version.txt | 1 - modulestf/modules.py | 160 - package-lock.json | 6347 ----------------- package.json | 37 - requirements-lambda.txt | 4 - requirements.txt | 7 - serverless.yml | 102 - src/handler.py | 150 + {modulestf => src/modulestf}/__init__.py | 0 .../modulestf}/cloudcraft/__init__.py | 0 .../modulestf}/cloudcraft/graph.py | 0 {modulestf => src/modulestf}/const.py | 8 +- {modulestf => src/modulestf}/convert.py | 40 +- {modulestf => src/modulestf}/logger.py | 0 src/modulestf/modules.py | 175 + {modulestf => src/modulestf}/render.py | 7 + {modulestf => src/modulestf}/upload.py | 0 src/requirements.txt | 6 + .../templates}/config_aws_lambda.yaml | 0 .../lambda/handler.py | 4 + .../templates}/root/cookiecutter.json | 0 .../templates}/root/template/.editorconfig | 0 src/templates/root/template/.gitignore | 42 + .../root/template/.pre-commit-config.yaml | 6 +- .../templates}/root/template/LICENSE | 2 +- .../templates}/root/template/README.md | 25 +- .../root/template/modules/aws-data/README.md | 42 + .../root/template/modules/aws-data/main.tf | 2 +- .../root/template/modules/aws-data/outputs.tf | 0 .../region/terragrunt.hcl | 0 .../terragrunt-single-layer/terragrunt.hcl | 0 .../terraform-aws-modules-metadata}/alb.json | 28 +- .../alb_cloudcraft.json | 0 .../alb_variables.json | 28 +- .../alb_version.txt | 1 + .../apigateway-v2.json | 157 + .../apigateway-v2_cloudcraft.json | 0 .../apigateway-v2_variables.json | 157 + .../apigateway-v2_version.txt | 1 + .../autoscaling.json | 408 ++ .../autoscaling_cloudcraft.json | 0 .../autoscaling_variables.json | 406 ++ .../autoscaling_version.txt | 1 + .../cloudfront.json | 115 + .../cloudfront_cloudcraft.json | 0 .../cloudfront_variables.json | 115 + .../cloudfront_version.txt | 0 .../dynamodb-table.json | 33 +- .../dynamodb-table_cloudcraft.json | 0 .../dynamodb-table_variables.json | 33 +- .../dynamodb-table_version.txt | 1 + .../ec2-instance.json | 10 + .../ec2-instance_cloudcraft.json | 0 .../ec2-instance_variables.json | 10 + .../ec2-instance_version.txt | 1 + .../terraform-aws-modules-metadata}/elb.json | 5 + .../elb_cloudcraft.json | 0 .../elb_variables.json | 5 + .../elb_version.txt | 1 + .../lambda.json | 452 ++ .../lambda_cloudcraft.json | 0 .../lambda_variables.json | 452 ++ .../lambda_version.txt | 0 .../rds-aurora.json | 159 +- .../rds-aurora_cloudcraft.json | 0 .../rds-aurora_variables.json | 159 +- .../rds-aurora_version.txt | 1 + .../terraform-aws-modules-metadata}/rds.json | 126 +- .../rds_cloudcraft.json | 0 .../rds_variables.json | 126 +- .../rds_version.txt | 1 + .../redshift.json | 15 +- .../redshift_cloudcraft.json | 0 .../redshift_variables.json | 15 +- .../redshift_version.txt | 1 + .../route53.json | 0 .../route53_cloudcraft.json | 0 .../route53_variables.json | 1 + .../route53_version.txt | 1 + .../s3-bucket.json | 26 +- .../s3-bucket_cloudcraft.json | 1 + .../s3-bucket_variables.json | 26 +- .../s3-bucket_version.txt | 0 .../security-group.json | 268 +- .../security-group_cloudcraft.json | 1 + .../security-group_variables.json | 268 +- .../security-group_version.txt | 1 + .../terraform-aws-modules-metadata}/sns.json | 0 .../sns_cloudcraft.json | 1 + .../sns_variables.json | 0 .../sns_version.txt | 1 + .../terraform-aws-modules-metadata}/sqs.json | 0 .../sqs_cloudcraft.json | 0 .../sqs_variables.json | 0 .../sqs_version.txt | 1 + .../terraform_hcl2.awk | 0 .../update_modules_metadata.sh | 45 +- src/terraform-aws-modules-metadata/vpc.json | 959 +++ .../vpc_cloudcraft.json | 1 + .../vpc_variables.json | 959 +++ .../vpc_version.txt | 1 + .../vpn-gateway.json | 231 + .../vpn-gateway_cloudcraft.json | 1 + .../vpn-gateway_variables.json | 231 + .../vpn-gateway_version.txt | 1 + templates/root/template/.gitignore | 25 - .../root/template/modules/aws-data/README.md | 16 - terraform/.gitignore | 1 + terraform/.terraform-version | 1 + terraform/Makefile | 7 + terraform/README.md | 79 + terraform/betajob/backend.hcl | 3 + terraform/cloudcraft/backend.hcl | 3 + terraform/main.tf | 262 + terraform/outputs.tf | 4 + terraform/terraform.tfvars.sample | 10 + terraform/variables.tf | 50 + test_fixtures/api_gateway_request.json | 69 + .../blueprint_cloudfront_lambda_apigw.json | 190 + test_fixtures/input_cloudcraft.json | 6 +- test_fixtures/input_localfile.json | 6 +- 144 files changed, 7149 insertions(+), 10971 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json delete mode 100644 DEVELOPMENT.md delete mode 100755 bin/test_lambda_local.sh delete mode 100755 handler.py delete mode 100644 misc/dashbird-logo.png delete mode 100644 modules-metadata/alb_version.txt delete mode 100644 modules-metadata/autoscaling.json delete mode 100644 modules-metadata/autoscaling_variables.json delete mode 100644 modules-metadata/autoscaling_version.txt delete mode 100644 modules-metadata/dynamodb-table_version.txt delete mode 100644 modules-metadata/ec2-instance_version.txt delete mode 100644 modules-metadata/elb_version.txt delete mode 100644 modules-metadata/rds-aurora_version.txt delete mode 100644 modules-metadata/rds_version.txt delete mode 100644 modules-metadata/s3-bucket_version.txt delete mode 100644 modules-metadata/security-group_version.txt delete mode 100644 modules-metadata/vpc.json delete mode 100644 modules-metadata/vpc_variables.json delete mode 100644 modules-metadata/vpc_version.txt delete mode 100644 modulestf/modules.py delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 requirements-lambda.txt delete mode 100644 requirements.txt delete mode 100644 serverless.yml create mode 100755 src/handler.py rename {modulestf => src/modulestf}/__init__.py (100%) rename {modulestf => src/modulestf}/cloudcraft/__init__.py (100%) rename {modulestf => src/modulestf}/cloudcraft/graph.py (100%) rename {modulestf => src/modulestf}/const.py (83%) rename {modulestf => src/modulestf}/convert.py (92%) rename {modulestf => src/modulestf}/logger.py (100%) create mode 100644 src/modulestf/modules.py rename {modulestf => src/modulestf}/render.py (94%) rename {modulestf => src/modulestf}/upload.py (100%) create mode 100644 src/requirements.txt rename {templates => src/templates}/config_aws_lambda.yaml (100%) create mode 100644 src/templates/extra-files-single-layer/lambda/handler.py rename {templates => src/templates}/root/cookiecutter.json (100%) rename {templates => src/templates}/root/template/.editorconfig (100%) create mode 100644 src/templates/root/template/.gitignore rename {templates => src/templates}/root/template/.pre-commit-config.yaml (50%) rename {templates => src/templates}/root/template/LICENSE (96%) rename {templates => src/templates}/root/template/README.md (81%) create mode 100644 src/templates/root/template/modules/aws-data/README.md rename {templates => src/templates}/root/template/modules/aws-data/main.tf (95%) rename {templates => src/templates}/root/template/modules/aws-data/outputs.tf (100%) rename {templates => src/templates}/terragrunt-common-layer/region/terragrunt.hcl (100%) rename {templates => src/templates}/terragrunt-single-layer/terragrunt.hcl (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/alb.json (84%) rename {modules-metadata => src/terraform-aws-modules-metadata}/alb_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/alb_variables.json (84%) create mode 100644 src/terraform-aws-modules-metadata/alb_version.txt create mode 100644 src/terraform-aws-modules-metadata/apigateway-v2.json rename modules-metadata/dynamodb-table_cloudcraft.json => src/terraform-aws-modules-metadata/apigateway-v2_cloudcraft.json (100%) create mode 100644 src/terraform-aws-modules-metadata/apigateway-v2_variables.json create mode 100644 src/terraform-aws-modules-metadata/apigateway-v2_version.txt create mode 100644 src/terraform-aws-modules-metadata/autoscaling.json rename {modules-metadata => src/terraform-aws-modules-metadata}/autoscaling_cloudcraft.json (100%) create mode 100644 src/terraform-aws-modules-metadata/autoscaling_variables.json create mode 100644 src/terraform-aws-modules-metadata/autoscaling_version.txt create mode 100644 src/terraform-aws-modules-metadata/cloudfront.json rename modules-metadata/elb_cloudcraft.json => src/terraform-aws-modules-metadata/cloudfront_cloudcraft.json (100%) create mode 100644 src/terraform-aws-modules-metadata/cloudfront_variables.json rename modules-metadata/redshift_version.txt => src/terraform-aws-modules-metadata/cloudfront_version.txt (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/dynamodb-table.json (78%) rename modules-metadata/s3-bucket_cloudcraft.json => src/terraform-aws-modules-metadata/dynamodb-table_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/dynamodb-table_variables.json (78%) create mode 100644 src/terraform-aws-modules-metadata/dynamodb-table_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/ec2-instance.json (94%) rename {modules-metadata => src/terraform-aws-modules-metadata}/ec2-instance_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/ec2-instance_variables.json (94%) create mode 100644 src/terraform-aws-modules-metadata/ec2-instance_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/elb.json (94%) rename modules-metadata/security-group_cloudcraft.json => src/terraform-aws-modules-metadata/elb_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/elb_variables.json (94%) create mode 100644 src/terraform-aws-modules-metadata/elb_version.txt create mode 100644 src/terraform-aws-modules-metadata/lambda.json rename modules-metadata/sns_cloudcraft.json => src/terraform-aws-modules-metadata/lambda_cloudcraft.json (100%) create mode 100644 src/terraform-aws-modules-metadata/lambda_variables.json rename modules-metadata/sqs_version.txt => src/terraform-aws-modules-metadata/lambda_version.txt (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/rds-aurora.json (60%) rename {modules-metadata => src/terraform-aws-modules-metadata}/rds-aurora_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/rds-aurora_variables.json (60%) create mode 100644 src/terraform-aws-modules-metadata/rds-aurora_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/rds.json (74%) rename {modules-metadata => src/terraform-aws-modules-metadata}/rds_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/rds_variables.json (74%) create mode 100644 src/terraform-aws-modules-metadata/rds_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/redshift.json (93%) rename {modules-metadata => src/terraform-aws-modules-metadata}/redshift_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/redshift_variables.json (93%) create mode 100644 src/terraform-aws-modules-metadata/redshift_version.txt create mode 100644 src/terraform-aws-modules-metadata/route53.json rename modules-metadata/vpc_cloudcraft.json => src/terraform-aws-modules-metadata/route53_cloudcraft.json (100%) create mode 100644 src/terraform-aws-modules-metadata/route53_variables.json create mode 100644 src/terraform-aws-modules-metadata/route53_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/s3-bucket.json (86%) create mode 100644 src/terraform-aws-modules-metadata/s3-bucket_cloudcraft.json rename {modules-metadata => src/terraform-aws-modules-metadata}/s3-bucket_variables.json (86%) rename modules-metadata/sns_version.txt => src/terraform-aws-modules-metadata/s3-bucket_version.txt (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/security-group.json (83%) create mode 100644 src/terraform-aws-modules-metadata/security-group_cloudcraft.json rename {modules-metadata => src/terraform-aws-modules-metadata}/security-group_variables.json (83%) create mode 100644 src/terraform-aws-modules-metadata/security-group_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/sns.json (100%) create mode 100644 src/terraform-aws-modules-metadata/sns_cloudcraft.json rename {modules-metadata => src/terraform-aws-modules-metadata}/sns_variables.json (100%) create mode 100644 src/terraform-aws-modules-metadata/sns_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/sqs.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/sqs_cloudcraft.json (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/sqs_variables.json (100%) create mode 100644 src/terraform-aws-modules-metadata/sqs_version.txt rename {modules-metadata => src/terraform-aws-modules-metadata}/terraform_hcl2.awk (100%) rename {modules-metadata => src/terraform-aws-modules-metadata}/update_modules_metadata.sh (59%) create mode 100644 src/terraform-aws-modules-metadata/vpc.json create mode 100644 src/terraform-aws-modules-metadata/vpc_cloudcraft.json create mode 100644 src/terraform-aws-modules-metadata/vpc_variables.json create mode 100644 src/terraform-aws-modules-metadata/vpc_version.txt create mode 100644 src/terraform-aws-modules-metadata/vpn-gateway.json create mode 100644 src/terraform-aws-modules-metadata/vpn-gateway_cloudcraft.json create mode 100644 src/terraform-aws-modules-metadata/vpn-gateway_variables.json create mode 100644 src/terraform-aws-modules-metadata/vpn-gateway_version.txt delete mode 100644 templates/root/template/.gitignore delete mode 100644 templates/root/template/modules/aws-data/README.md create mode 100644 terraform/.gitignore create mode 100644 terraform/.terraform-version create mode 100644 terraform/Makefile create mode 100644 terraform/README.md create mode 100644 terraform/betajob/backend.hcl create mode 100644 terraform/cloudcraft/backend.hcl create mode 100644 terraform/main.tf create mode 100644 terraform/outputs.tf create mode 100644 terraform/terraform.tfvars.sample create mode 100644 terraform/variables.tf create mode 100644 test_fixtures/api_gateway_request.json create mode 100644 test_fixtures/input/blueprint_cloudfront_lambda_apigw.json diff --git a/.gitignore b/.gitignore index 94674ec..6f32d9f 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ var/ # Serverless directories .serverless - .requirements-cache node_modules output/* @@ -30,3 +29,30 @@ graph.png /.venv /.idea + +# Terraform +.terraform +.terragrunt-cache +*.tfstate* +.terraform.lock.hcl +crash.log + +# OS X +.history +.DS_Store + +# IntelliJ +.idea_modules +*.iml +*.iws +*.ipr +.idea/ +build/ +*/build/ +out/ + +# Lambda builds by Terraform AWS Lambda module +builds/ + +# Vim +*.sw[op] diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 461f5b9..507c410 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,17 +1,25 @@ repos: -- repo: git://github.com/doublify/pre-commit-isort +- repo: https://github.com/doublify/pre-commit-isort rev: v4.3.0 hooks: - id: isort -- repo: git://github.com/pre-commit/pre-commit-hooks - rev: v2.5.0 +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.4.0 hooks: - id: check-ast - id: check-merge-conflict - id: requirements-txt-fixer - id: end-of-file-fixer +- repo: https://gitlab.com/pycqa/flake8 + rev: 3.9.2 + hooks: - id: flake8 -#- repo: git://github.com/codespell-project/codespell -# rev: v1.16.0 -# hooks: -# - id: codespell +- repo: https://github.com/antonbabenko/pre-commit-terraform + rev: v1.50.0 + hooks: + - id: terraform_fmt + - id: terraform_docs +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.4.0 + hooks: + - id: check-merge-conflict diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..800a0ef --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + "configurations": [ + { + "name": "Python: src/handler.py", + "type": "python", + "request": "launch", + "program": "src/handler.py", + "console": "integratedTerminal", + "cwd": "${workspaceFolder}" + }, + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c9b64c8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "python.pythonPath": "/Users/Bob/.local/share/virtualenvs/modules.tf-diagrams/bin/python", + "python.linting.enabled": true, + "python.linting.flake8Enabled": true, + "python.formatting.provider": "autopep8" +} diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md deleted file mode 100644 index a506546..0000000 --- a/DEVELOPMENT.md +++ /dev/null @@ -1,50 +0,0 @@ -# Notes for developers - -As a short cheatsheet, you will need to use these commands: - -* Invoke real endpoint in `dev` and `prod` environments using [httpie](https://github.com/jakubroztocil/httpie/): - -``` -# dev -$ http --print Hhb --all --follow https://dev.modules.tf/ @input/blueprint_my.json - -# prod -$ http --print Hhb --all --follow https://prod.modules.tf/ @input/blueprint_my.json -``` - -* Invoke function locally providing `input.json`: - -``` -$ serverless invoke local --function generate-cloudcraft --path test_fixtures/input_localfile.json -``` - -* Deploy all functions to `prod` environment: - -``` -$ serverless deploy --stage prod -``` - -* Deploy single function to `dev` environment: - -``` -$ serverless deploy function --function generate-cloudcraft --stage dev -``` - -* Deploy single function to `prod` environment: - -``` -$ serverless deploy function --function generate-cloudcraft --stage prod -``` - -## Infrastructure - -modules.tf can be self-hosted on your own infrastructure (if you want to expand it for some reason). - -See [modules.tf-lambda-infra](https://github.com/antonbabenko/modules.tf-lambda-infra) repository for complete setup. - -## Spellchecker - -``` -$ brew install codespell -$ pre-commit try-repo git://github.com/codespell-project/codespell codespell --all-files -``` diff --git a/LICENSE b/LICENSE index 503ab7d..96f46c6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2018 Anton Babenko +Copyright (c) 2018-2021 Anton Babenko Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/README.md b/README.md index e37ce66..656703f 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,11 @@ -# modules.tf - Infrastructure as code generator - from visual diagrams to Terraform +# Diagrams to code (d2c) - Infrastructure as code generator - from visual diagrams to Terraform [![Financial Contributors on Open Collective](https://opencollective.com/modulestf/all/badge.svg?label=financial+contributors)](https://opencollective.com/modulestf) [![MIT license](https://img.shields.io/github/license/antonbabenko/modules.tf-lambda.svg)]() [![@antonbabenko](https://img.shields.io/twitter/follow/antonbabenko.svg?style=flat&label=Follow%20@antonbabenko%20on%20Twitter)](https://twitter.com/antonbabenko) - modules.tf - Infrastructure as code generator - from visual diagrams to Terraform Code in this repository is used for generating infrastructure as Terraform configurations from visual diagrams created using [Cloudcraft](https://www.cloudcraft.co). -[modules.tf](https://github.com/antonbabenko/modules.tf-lambda) is an open-source project by [Anton Babenko](https://github.com/antonbabenko). - ## How can I try this? @@ -37,8 +34,6 @@ In [modules.tf-demo](https://github.com/antonbabenko/modules.tf-demo) repository This project was partially sponsored by [Cloudcraft - the best way to draw AWS diagrams](https://www.cloudcraft.co).
-Monitoring of serverless applications provided by [Thundra](https://www.thundra.io/). - [Become a sponsor to @antonbabenko on GitHub](https://github.com/sponsors/antonbabenko/). [![@antonbabenko](https://img.shields.io/twitter/follow/antonbabenko.svg?style=flat&label=Follow%20@antonbabenko%20on%20Twitter)](https://twitter.com/antonbabenko) @@ -48,11 +43,26 @@ Monitoring of serverless applications provided by [Thundra](https://www.thundra. ## Developer's guide -This project is Python 3.7 application written using [Serverless framework](https://serverless.com) which runs on [AWS Lambda](https://aws.amazon.com/lambda/). +This project is Python 3.8 serverless application written using [serverless.tf](https://serverless.tf) framework and open-source components ([Terraform AWS modules](https://github.com/terraform-aws-modules)). + +### Notes for developers + +Terraform is used to provision infrastructure resources as well as packaging artifacts and to do the deployments (check out [serverless.tf](https://serverless.tf) for more details). + +Source code is located in `src/handler.py`. + +Go to directory `terraform`, verify/update file `terraform.tfvars` and run: + +``` +$ terraform init # Download required Terraform providers and modules +$ terraform apply # Create or update infrastructure resources or do a new deployment of Lambda function (if source code has changed) +``` -Read [official quick start guide](https://serverless.com/framework/docs/providers/aws/guide/quick-start/) and [installation instructions](https://serverless.com/framework/docs/providers/aws/guide/installation/) to familiarise yourself with it. +When infrastructure is created, you should be able to `POST` using [httpie](https://github.com/jakubroztocil/httpie/) or `curl` like this: -Read [DEVELOPMENT.md](https://github.com/antonbabenko/modules.tf-lambda/blob/master/DEVELOPMENT.md) for more insights if you want to contribute to this project. +``` +$ http --print Hhb --all --follow https://dev-d2c.modules.tf @test_fixtures/input/blueprint_my.json +``` ## Contributors @@ -89,4 +99,4 @@ Support this project with your organization. Your logo will show up here with a This work is licensed under MIT License. See LICENSE for full details. -Copyright (c) 2019 Anton Babenko +Copyright (c) 2018-2021 Anton Babenko diff --git a/bin/test_lambda_local.sh b/bin/test_lambda_local.sh deleted file mode 100755 index 14328e9..0000000 --- a/bin/test_lambda_local.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -python-lambda-local -t 10 -f "$1" "$2" "$3" diff --git a/handler.py b/handler.py deleted file mode 100755 index c5d89e3..0000000 --- a/handler.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/env python3 - -import json -import os -import shutil -from pprint import pformat, pprint - -import requests -from modulestf.cloudcraft.graph import populate_graph -from modulestf.const import FINAL_DIR -from modulestf.convert import convert_graph_to_modulestf_config -from modulestf.logger import setup_logging -from modulestf.render import prepare_render_dirs, render_from_modulestf_config -from modulestf.upload import upload_file_to_s3 - -logger = setup_logging() - - -def load_data(event): - body = event.get("body") - logger.info("body = %s" % body) - - qs = event.get("queryStringParameters") - logger.info("queryStringParameters = %s" % qs) - - if body is None and qs is None: - raise ValueError("Some query string parameters should be defined or use HTTP POST method", 400) - - if qs is None: - blueprint_url = localfile = None - else: - blueprint_url = qs.get("cloudcraft") - localfile = qs.get("localfile") - - if body: - data = json.loads(body) - elif blueprint_url: - r = requests.get(blueprint_url) - data = r.json() - - logger.info("Blueprint url: %s, response code: %s" % (blueprint_url, r.status_code)) - - if 403 == r.status_code: - raise ValueError("Sharing has been disabled for this blueprint." + - " You have to enable it by clicking 'Export' -> 'Get shareable link'" + - " on https://app.cloudcraft.co", 403) - - elif r.status_code >= 500: - raise ValueError("Something went wrong on cloudcraft side. Can't fetch specified blueprint." + - " Check URL and try again later.", 404) - - elif localfile: - file = open(localfile, 'r') - data = json.load(file) - else: - raise ValueError("'cloudcraft' or 'localfile' query string parameter should be defined", 400) - - print("event = %s" % json.dumps(event)) - - return data - - -def validation_result(config): - return True - - -def handler(event, context): - link = "" - - # ALB response is different: - # https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#respond-to-load-balancer - request_from_lb = bool(event.get("requestContext", {}).get("elb")) - http_method = event.get("httpMethod") - is_validate_action = event.get("path") == "/validate" - - if http_method == "OPTIONS": - return { - "isBase64Encoded": False, - "statusCode": 200, - "statusDescription": "200 OK", - "headers": { - "Content-Type": "application/json", - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with", - "Access-Control-Allow-Methods": "POST,GET,OPTIONS", - # "Access-Control-Allow-Credentials": True # this header is not allowed by ALB - }, - } - - if request_from_lb and event.get("path") == "/healthz": - return { - "isBase64Encoded": False, - "statusCode": 200, - "statusDescription": "200 OK", - "headers": { - "Content-Type": "text/html" - }, - "body": "Health OK" - } - - try: - data = load_data(event) - except ValueError as error: - logger.error(error) - - if request_from_lb: - return { - "isBase64Encoded": False, - "statusCode": error.args[1], - "statusDescription": str(error.args[1]) + " Server Error", - "headers": { - "Content-Type": "text/html", - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with", - "Access-Control-Allow-Methods": "POST,GET,OPTIONS", - }, - "body": error.args[0], - } - else: - return { - "body": error.args[0], - "headers": { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Credentials": True - }, - "statusCode": error.args[1], - } - - # logger.info(pformat(data, indent=2)) - - graph = populate_graph(data) - - config = convert_graph_to_modulestf_config(graph) - - if is_validate_action: - return { - "isBase64Encoded": False, - "statusCode": 200, - "statusDescription": "200 OK", - "headers": { - "Content-Type": "application/json", - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with", - "Access-Control-Allow-Methods": "POST,GET,OPTIONS", - }, - "body": json.dumps(validation_result(config)) - } - - prepare_render_dirs() - - render_from_modulestf_config(config, source=graph.source, regions=graph.regions) - - # Do not upload to S3 when working locally - if not os.environ.get("IS_LOCAL"): - shutil.make_archive("archive", "zip", FINAL_DIR) - - link = upload_file_to_s3(filename="archive.zip") - - if request_from_lb: - return { - "isBase64Encoded": False, - "headers": { - "Location": link, - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with", - "Access-Control-Allow-Methods": "POST,GET,OPTIONS", - }, - "statusCode": 302, - "statusDescription": "302 Found", - } - else: - return { - "body": "", - "headers": { - "Location": link, - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Credentials": True - }, - "statusCode": 302, - } diff --git a/misc/dashbird-logo.png b/misc/dashbird-logo.png deleted file mode 100644 index 3f22ae20f521a38cc9cb0296af1e7b05bf06caea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32617 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 mmc-1L|5|V6@(ar~9{&P1u%gy(LqQe*0000=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - } - } - }, - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - } - } - }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "duration": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", - "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", - "requires": { - "d": "1", - "es5-ext": "~0.10.46" - } - }, - "email-validator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz", - "integrity": "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.2.tgz", - "integrity": "sha512-eO6vFm0JvqGzjWIQA6QVKjxpmELfhWbDUWHm1rPfIbn55mhKPiAa5xpLmQWJrNa629ZIeQ8ZvMAi13kvrjK6Mg==" - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esniff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", - "integrity": "sha1-xmhJIp+RRk3t4uDUAgHtar9l8qw=", - "requires": { - "d": "1", - "es5-ext": "^0.10.12" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "essentials": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.1.1.tgz", - "integrity": "sha512-SmaxoAdVu86XkZQM/u6TYSu96ZlFGwhvSk1l9zAkznFuQkMb9mRDS2iq/XWDow7R8OwBwdYH8nLyDKznMD+GWw==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-loop-spinner": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/event-loop-spinner/-/event-loop-spinner-1.1.0.tgz", - "integrity": "sha512-YVFs6dPpZIgH665kKckDktEVvSBccSYJmoZUfhNUdv5d3Xv+Q+SKF4Xis1jolq9aBzuW1ZZhQh/m/zU/TPdDhw==", - "requires": { - "tslib": "^1.10.0" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - } - } - }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fastq": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", - "integrity": "sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-requires": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz", - "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==", - "requires": { - "es5-ext": "^0.10.49", - "esniff": "^1.1.0" - } - }, - "flat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.0.tgz", - "integrity": "sha512-6KSMM+cHHzXC/hpldXApL2S8Uz+QZv+tq5o/L0KQYleoG+GcwrnIJhTWC7tCOiKQp8D/fIvryINU1OZCCwevjA==", - "requires": { - "is-buffer": "~2.0.4" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fs2": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.7.tgz", - "integrity": "sha512-fwfd9MBI/fnXtR/ClVTyeuPXJ+oI5WNyXvBQPmc4btgqLYTKOuBRTRUVjmVpDUri0C88HLwMlc5ESg48fEAGjw==", - "requires": { - "d": "^1.0.1", - "deferred": "^0.7.11", - "es5-ext": "^0.10.51", - "event-emitter": "^0.3.5", - "ignore": "^5.1.4", - "memoizee": "^0.4.14", - "type": "^1.2.0" - } - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "optional": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "requires": { - "npm-conf": "^1.1.0" - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-uri": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.4.tgz", - "integrity": "sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==", - "requires": { - "data-uri-to-buffer": "1", - "debug": "2", - "extend": "~3.0.2", - "file-uri-to-path": "1", - "ftp": "~0.3.10", - "readable-stream": "2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "git-up": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz", - "integrity": "sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==", - "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^5.0.0" - } - }, - "git-url-parse": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz", - "integrity": "sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ==", - "requires": { - "git-up": "^4.0.0" - } - }, - "glob": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", - "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-all": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", - "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", - "requires": { - "glob": "^7.0.5", - "yargs": "~1.2.6" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "^1.3.4" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", - "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==" - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - } - } - }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-docker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", - "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=" - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, - "is-ssh": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz", - "integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==", - "requires": { - "protocols": "^1.1.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", - "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "iso8601-duration": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-1.2.0.tgz", - "integrity": "sha512-ErTBd++b17E8nmWII1K1uZtBgD1E8RjyvwmxlCjPHNqHMD7gmcMHOw0E8Ro/6+QT4PhHRSnnMo7bxa1vFPkwhg==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-cycle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz", - "integrity": "sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw==" - }, - "json-refs": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-2.1.7.tgz", - "integrity": "sha1-uesB/in16j6Sh48VrqEK04taz4k=", - "requires": { - "commander": "^2.9.0", - "graphlib": "^2.1.1", - "js-yaml": "^3.8.3", - "native-promise-only": "^0.8.1", - "path-loader": "^1.0.2", - "slash": "^1.0.0", - "uri-js": "^3.0.2" - }, - "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - } - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonata": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.1.tgz", - "integrity": "sha512-Lw1ApNtYH9i/lWBuRSm1I/xfhPyTvlVslVIaGLW/bxFimxQYzQx2y3+DNRmbx5mmCmRb+bCLdIJasEFyb+aUlQ==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jszip": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", - "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "requires": { - "package-json": "^4.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "^1.0.1" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.clone": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", - "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.last": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", - "integrity": "sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=" - }, - "lodash.values": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz", - "integrity": "sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=" - }, - "log": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log/-/log-6.0.0.tgz", - "integrity": "sha512-sxChESNYJ/EcQv8C7xpmxhtTOngoXuMEqGDAkhXBEmt3MAzM3SM/TmIBOqnMEVdrOv1+VgZoYbo6U2GemQiU4g==", - "requires": { - "d": "^1.0.0", - "duration": "^0.2.2", - "es5-ext": "^0.10.49", - "event-emitter": "^0.3.5", - "sprintf-kit": "^2.0.0", - "type": "^1.0.1" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "requires": { - "es5-ext": "~0.10.2" - } - }, - "lsmod": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz", - "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks=" - }, - "macos-release": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", - "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "requires": { - "mime-db": "1.43.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "nanoid": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", - "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=" - }, - "ncjsm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.0.1.tgz", - "integrity": "sha512-gxh5Sgait8HyclaulfhgetHQGyhFm00ZQqISIfqtwFVnyWJ20rk+55SUamo9n3KhM6Vk63gemKPxIDYiSV/xZw==", - "requires": { - "builtin-modules": "^3.1.0", - "deferred": "^0.7.11", - "es5-ext": "^0.10.51", - "es6-set": "^0.1.5", - "find-requires": "^1.0.0", - "fs2": "^0.3.6", - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - } - } - }, - "nconf": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", - "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==", - "requires": { - "async": "^1.4.0", - "ini": "^1.3.0", - "secure-keys": "^1.0.0", - "yargs": "^3.19.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "yargs": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", - "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", - "requires": { - "camelcase": "^2.0.1", - "cliui": "^3.0.3", - "decamelize": "^1.1.1", - "os-locale": "^1.4.0", - "string-width": "^1.0.1", - "window-size": "^0.1.4", - "y18n": "^3.2.0" - } - } - } - }, - "needle": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", - "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - } - } - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" - }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-hash": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", - "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "open": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", - "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==" - } - } - }, - "opencollective-postinstall": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", - "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==" - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - } - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } - }, - "os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" - }, - "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pac-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz", - "integrity": "sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==", - "requires": { - "agent-base": "^4.2.0", - "debug": "^4.1.1", - "get-uri": "^2.0.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "pac-resolver": "^3.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - } - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "requires": { - "co": "^4.6.0", - "degenerator": "^1.0.4", - "ip": "^1.1.5", - "netmask": "^1.0.6", - "thunkify": "^2.1.2" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" - }, - "parse-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz", - "integrity": "sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==", - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0" - } - }, - "parse-url": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz", - "integrity": "sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==", - "requires": { - "is-ssh": "^1.3.0", - "normalize-url": "^3.3.0", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - } - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "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=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-loader": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz", - "integrity": "sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA==", - "requires": { - "native-promise-only": "^0.8.1", - "superagent": "^3.8.3" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "picomatch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", - "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" - }, - "prettyoutput": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prettyoutput/-/prettyoutput-1.2.0.tgz", - "integrity": "sha512-G2gJwLzLcYS+2m6bTAe+CcDpwak9YpcvpScI0tE4WYb2O3lEZD/YywkMNpGqsSx5wttGvh2UXaKROTKKCyM2dw==", - "requires": { - "colors": "1.3.x", - "commander": "2.19.x", - "lodash": "4.17.x" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "promise-queue": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", - "integrity": "sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q=" - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "protocols": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz", - "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==" - }, - "proxy-agent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.1.tgz", - "integrity": "sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==", - "requires": { - "agent-base": "^4.2.0", - "debug": "4", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^3.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^3.0.1", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^4.0.1" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "ramda": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" - }, - "raven": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/raven/-/raven-1.2.1.tgz", - "integrity": "sha1-lJwTTbAooZC3u/j3kKrlQbfAIL0=", - "requires": { - "cookie": "0.3.1", - "json-stringify-safe": "5.0.1", - "lsmod": "1.0.0", - "stack-trace": "0.0.9", - "uuid": "3.0.0" - }, - "dependencies": { - "uuid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz", - "integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg=" - } - } - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "requires": { - "picomatch": "^2.0.7" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "replaceall": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz", - "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "secure-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", - "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=" - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "~2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - } - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "requires": { - "semver": "^5.0.3" - } - }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=" - }, - "serverless": { - "version": "1.65.0", - "resolved": "https://registry.npmjs.org/serverless/-/serverless-1.65.0.tgz", - "integrity": "sha512-V5qhLMUdPXgJ5+lBoIAd21Nqj2IWoZLyK30pQn7UqfzDyKasAW9XnMQjJL0zvpbZk6kaV/V8OkGcreJ4kHij6g==", - "requires": { - "@serverless/cli": "^1.4.0", - "@serverless/components": "^2.22.3", - "@serverless/enterprise-plugin": "^3.4.1", - "archiver": "^1.3.0", - "async": "^1.5.2", - "aws-sdk": "^2.628.0", - "bluebird": "^3.7.2", - "boxen": "^3.2.0", - "cachedir": "^2.3.0", - "chalk": "^2.4.2", - "child-process-ext": "^2.1.0", - "ci-info": "^1.6.0", - "d": "^1.0.1", - "dayjs": "^1.8.21", - "decompress": "^4.2.0", - "download": "^7.1.0", - "essentials": "^1.1.1", - "fast-levenshtein": "^2.0.6", - "filesize": "^3.6.1", - "fs-extra": "^0.30.0", - "get-stdin": "^5.0.1", - "globby": "^6.1.0", - "graceful-fs": "^4.2.3", - "https-proxy-agent": "^4.0.0", - "inquirer": "^6.5.2", - "is-docker": "^1.1.0", - "is-wsl": "^2.1.1", - "js-yaml": "^3.13.1", - "json-cycle": "^1.3.0", - "json-refs": "^2.1.7", - "jszip": "^3.2.2", - "jwt-decode": "^2.2.0", - "lodash": "^4.17.15", - "memoizee": "^0.4.14", - "mkdirp": "^0.5.1", - "nanomatch": "^1.2.13", - "ncjsm": "^4.0.1", - "node-fetch": "^1.7.3", - "object-hash": "^2.0.3", - "p-limit": "^2.2.2", - "promise-queue": "^2.2.5", - "raven": "^1.2.1", - "rc": "^1.2.8", - "replaceall": "^0.1.6", - "semver": "^5.7.1", - "semver-regex": "^1.0.0", - "stream-promise": "^3.2.0", - "tabtab": "^3.0.2", - "untildify": "^3.0.3", - "update-notifier": "^2.5.0", - "uuid": "^2.0.3", - "write-file-atomic": "^2.4.3", - "yaml-ast-parser": "0.0.43", - "yargs-parser": "^16.1.0" - }, - "dependencies": { - "@serverless/cli": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@serverless/cli/-/cli-1.4.0.tgz", - "integrity": "sha512-YqlCiYmRFeGksw6XJaXbigIDlktc7OfRuVpyPB7IZgkCJ9mUlBmvyWdwqJEQdkUz0xPTGsd4Jd/XSrwyiw1Brg==", - "requires": { - "@serverless/core": "^1.0.0", - "@serverless/template": "^1.1.0", - "ansi-escapes": "^4.2.0", - "chalk": "^2.4.2", - "chokidar": "^3.0.2", - "dotenv": "^8.0.0", - "figures": "^3.0.0", - "minimist": "^1.2.0", - "prettyoutput": "^1.2.0", - "strip-ansi": "^5.2.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - } - } - }, - "serverless-plugin-thundra": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/serverless-plugin-thundra/-/serverless-plugin-thundra-2.4.2.tgz", - "integrity": "sha512-Kd73XjospYtnMRPmxqsnMCfWjJU3UgJr4u1h8vd1/i6gKx99vsA93/k7Koa86WL0gyLbOH3vE1M8PfnfxJsUuw==", - "requires": { - "axios": "^0.19.0", - "bluebird": "^3.5.5", - "lodash.get": "^4.4.2", - "lodash.isempty": "^4.4.0", - "lodash.isstring": "^4.0.1", - "lodash.last": "^3.0.0", - "lodash.set": "^4.3.2", - "lodash.uniq": "^4.5.0", - "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "serverless-plugin-tracing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/serverless-plugin-tracing/-/serverless-plugin-tracing-2.0.0.tgz", - "integrity": "sha1-32uLMWasm7cKN8f8h1AUsjaRWPY=" - }, - "serverless-python-requirements": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-5.1.0.tgz", - "integrity": "sha512-lJhikc6wJsOYFxYNGK763xtQITrtGPHD2KJvs8qaBkkOET4RVk8E0N3d8wAO22k+Tk7N6a6Jonnvsmo3W8vtCA==", - "requires": { - "@iarna/toml": "^2.2.3", - "appdirectory": "^0.1.0", - "bluebird": "^3.0.6", - "fs-extra": "^7.0.0", - "glob-all": "^3.1.0", - "is-wsl": "^2.0.0", - "jszip": "^3.1.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lodash.uniqby": "^4.0.0", - "lodash.values": "^4.3.0", - "rimraf": "^3.0.2", - "sha256-file": "1.0.0", - "shell-quote": "^1.6.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha256-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz", - "integrity": "sha512-nqf+g0veqgQAkDx0U2y2Tn2KWyADuuludZTw9A7J3D+61rKlIIl9V5TS4mfnwKuXZOH9B7fQyjYJ9pKRHIsAyg==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "shortid": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.15.tgz", - "integrity": "sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw==", - "requires": { - "nanoid": "^2.1.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "simple-git": { - "version": "1.131.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.131.0.tgz", - "integrity": "sha512-z/art7YYtmPnnLItT/j+nKwJt6ap6nHZ4D8sYo9PdCKK/ug56SN6m/evfxJk7uDV3e9JuCa8qIyDU2P3cxmiNQ==", - "requires": { - "debug": "^4.0.1" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "snyk": { - "version": "1.319.0", - "resolved": "https://registry.npmjs.org/snyk/-/snyk-1.319.0.tgz", - "integrity": "sha512-tOFkZuJYPxzT50joiHd/bxdfsWd/cqFZcfEj6VxRJ28wYBC7imzodp4m8cC6Rcox4++2WEm6ZHNlPLyYjmfPOg==", - "requires": { - "@snyk/cli-interface": "2.6.0", - "@snyk/configstore": "^3.2.0-rc1", - "@snyk/dep-graph": "1.18.2", - "@snyk/gemfile": "1.2.0", - "@snyk/graphlib": "2.1.9-patch", - "@snyk/inquirer": "6.2.2-patch", - "@snyk/lodash": "^4.17.15-patch", - "@snyk/ruby-semver": "2.2.0", - "@snyk/snyk-cocoapods-plugin": "2.2.0", - "@snyk/update-notifier": "^2.5.1-rc2", - "@types/agent-base": "^4.2.0", - "abbrev": "^1.1.1", - "ansi-escapes": "3.2.0", - "chalk": "^2.4.2", - "cli-spinner": "0.2.10", - "debug": "^3.1.0", - "diff": "^4.0.1", - "git-url-parse": "11.1.2", - "glob": "^7.1.3", - "needle": "^2.2.4", - "open": "^7.0.3", - "os-name": "^3.0.0", - "proxy-agent": "^3.1.1", - "proxy-from-env": "^1.0.0", - "semver": "^6.0.0", - "snyk-config": "3.1.0", - "snyk-docker-plugin": "3.1.0", - "snyk-go-plugin": "1.14.0", - "snyk-gradle-plugin": "3.2.5", - "snyk-module": "1.9.1", - "snyk-mvn-plugin": "2.15.0", - "snyk-nodejs-lockfile-parser": "1.22.0", - "snyk-nuget-plugin": "1.17.0", - "snyk-php-plugin": "1.9.0", - "snyk-policy": "1.13.5", - "snyk-python-plugin": "1.17.0", - "snyk-resolve": "1.0.1", - "snyk-resolve-deps": "4.4.0", - "snyk-sbt-plugin": "2.11.0", - "snyk-tree": "^1.0.0", - "snyk-try-require": "1.3.1", - "source-map-support": "^0.5.11", - "strip-ansi": "^5.2.0", - "tempfile": "^2.0.0", - "then-fs": "^2.0.0", - "uuid": "^3.3.2", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "snyk-config": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/snyk-config/-/snyk-config-3.1.0.tgz", - "integrity": "sha512-3UlyogA67/9WOssJ7s4d7gqWQRWyO/LbgdBBNMhhmFDKa7eTUSW+A782CVHgyDSJZ2kNANcMWwMiOL+h3p6zQg==", - "requires": { - "@snyk/lodash": "4.17.15-patch", - "debug": "^4.1.1", - "nconf": "^0.10.0" - } - }, - "snyk-docker-plugin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/snyk-docker-plugin/-/snyk-docker-plugin-3.1.0.tgz", - "integrity": "sha512-ggGTiiCuwLYGdlGW/UBuUXJ7omliH0EnbpLfdlTBoRKvmvgoUo1l4Menk18R1ZVXgcXTwwGK9jmuUpPH+X0VNw==", - "requires": { - "@snyk/rpm-parser": "^1.1.0", - "debug": "^4.1.1", - "dockerfile-ast": "0.0.19", - "event-loop-spinner": "^1.1.0", - "semver": "^6.1.0", - "tar-stream": "^2.1.0", - "tslib": "^1" - }, - "dependencies": { - "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } - } - }, - "snyk-go-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/snyk-go-parser/-/snyk-go-parser-1.4.0.tgz", - "integrity": "sha512-zcLA8u/WreycCjFKBblYfxszg7Fmnemuu9Ug/CE/jqF0yBXsI5DCWMteUvFkoa8DRntfGTlgf98TRl2aTSc2MQ==", - "requires": { - "toml": "^3.0.0", - "tslib": "^1.10.0" - } - }, - "snyk-go-plugin": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/snyk-go-plugin/-/snyk-go-plugin-1.14.0.tgz", - "integrity": "sha512-9L+76De8F6yXWb+O3DA8QUi7+eDF2mOzCOveEPUJGkqWIDmurIiFcVxHJoj0EStjcxb3dX367KKlDlfFx+HiyA==", - "requires": { - "@snyk/graphlib": "2.1.9-patch", - "debug": "^4.1.1", - "snyk-go-parser": "1.4.0", - "tmp": "0.1.0", - "tslib": "^1.10.0" - }, - "dependencies": { - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "requires": { - "rimraf": "^2.6.3" - } - } - } - }, - "snyk-gradle-plugin": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/snyk-gradle-plugin/-/snyk-gradle-plugin-3.2.5.tgz", - "integrity": "sha512-XxPi/B16dGkV1USoyFbpn6LlSJ9SUC6Y6z/4lWuF4spLnKtWwpEb1bwTdBFsxnkUfqzIRtPr0+wcxxXvv9Rvcw==", - "requires": { - "@snyk/cli-interface": "2.3.0", - "@types/debug": "^4.1.4", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "tmp": "0.0.33", - "tslib": "^1.9.3" - }, - "dependencies": { - "@snyk/cli-interface": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.3.0.tgz", - "integrity": "sha512-ecbylK5Ol2ySb/WbfPj0s0GuLQR+KWKFzUgVaoNHaSoN6371qRWwf2uVr+hPUP4gXqCai21Ug/RDArfOhlPwrQ==", - "requires": { - "tslib": "^1.9.3" - } - } - } - }, - "snyk-module": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/snyk-module/-/snyk-module-1.9.1.tgz", - "integrity": "sha512-A+CCyBSa4IKok5uEhqT+hV/35RO6APFNLqk9DRRHg7xW2/j//nPX8wTSZUPF8QeRNEk/sX+6df7M1y6PBHGSHA==", - "requires": { - "debug": "^3.1.0", - "hosted-git-info": "^2.7.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "snyk-mvn-plugin": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/snyk-mvn-plugin/-/snyk-mvn-plugin-2.15.0.tgz", - "integrity": "sha512-24HWz27Hc5sw+iHtxtQFy0kltjyFZXJ3vfsPA0TTZAL0tOJXInIuZpWD6njC0Y3/sn9CH5kS2KM8GAM7FyKVig==", - "requires": { - "@snyk/cli-interface": "2.5.0", - "@snyk/java-call-graph-builder": "1.8.0", - "debug": "^4.1.1", - "needle": "^2.4.0", - "tmp": "^0.1.0", - "tslib": "1.11.1" - }, - "dependencies": { - "@snyk/cli-interface": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.5.0.tgz", - "integrity": "sha512-XMc2SCFH4RBSncZgoPb+BBlNq0NYpEpCzptKi69qyMpBy0VsRqIQqddedaazMCU1xEpXTytq6KMYpzUafZzp5Q==", - "requires": { - "tslib": "^1.9.3" - } - }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "requires": { - "rimraf": "^2.6.3" - } - } - } - }, - "snyk-nodejs-lockfile-parser": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.22.0.tgz", - "integrity": "sha512-l6jLoJxqcIIkQopSdQuAstXdMw5AIgLu+uGc5CYpHyw8fYqOwna8rawwofNeGuwJAAv4nEiNiexeYaR88OCq6Q==", - "requires": { - "@snyk/graphlib": "2.1.9-patch", - "@snyk/lodash": "^4.17.15-patch", - "@yarnpkg/lockfile": "^1.0.2", - "event-loop-spinner": "^1.1.0", - "p-map": "2.1.0", - "snyk-config": "^3.0.0", - "source-map-support": "^0.5.7", - "tslib": "^1.9.3", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "snyk-nuget-plugin": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/snyk-nuget-plugin/-/snyk-nuget-plugin-1.17.0.tgz", - "integrity": "sha512-t7iZ87LBhCK6P2/mJsQh7Dmk3J9zd+IHL4yoSK95Iyk/gP8r++DZijoRHEXy8BlS+eOtSAj1vgCYvv2eAmG28w==", - "requires": { - "@snyk/lodash": "4.17.15-patch", - "debug": "^3.1.0", - "dotnet-deps-parser": "4.10.0", - "jszip": "3.1.5", - "snyk-paket-parser": "1.6.0", - "tslib": "^1.9.3", - "xml2js": "^0.4.17" - }, - "dependencies": { - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=" - }, - "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", - "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", - "pako": "~1.0.2", - "readable-stream": "~2.0.6" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "requires": { - "immediate": "~3.0.5" - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "snyk-paket-parser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/snyk-paket-parser/-/snyk-paket-parser-1.6.0.tgz", - "integrity": "sha512-6htFynjBe/nakclEHUZ1A3j5Eu32/0pNve5Qm4MFn3YQmJgj7UcAO8hdyK3QfzEY29/kAv/rkJQg+SKshn+N9Q==", - "requires": { - "tslib": "^1.9.3" - } - }, - "snyk-php-plugin": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/snyk-php-plugin/-/snyk-php-plugin-1.9.0.tgz", - "integrity": "sha512-uORrEoC47dw0ITZYu5vKqQtmXnbbQs+ZkWeo5bRHGdf10W8e4rNr1S1R4bReiLrSbSisYhVHeFMkdOAiLIPJVQ==", - "requires": { - "@snyk/cli-interface": "2.3.2", - "@snyk/composer-lockfile-parser": "1.4.0", - "tslib": "1.11.1" - }, - "dependencies": { - "@snyk/cli-interface": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@snyk/cli-interface/-/cli-interface-2.3.2.tgz", - "integrity": "sha512-jmZyxVHqzYU1GfdnWCGdd68WY/lAzpPVyqalHazPj4tFJehrSfEFc82RMTYAMgXEJuvFRFIwhsvXh3sWUhIQmg==", - "requires": { - "tslib": "^1.9.3" - } - } - } - }, - "snyk-policy": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/snyk-policy/-/snyk-policy-1.13.5.tgz", - "integrity": "sha512-KI6GHt+Oj4fYKiCp7duhseUj5YhyL/zJOrrJg0u6r59Ux9w8gmkUYT92FHW27ihwuT6IPzdGNEuy06Yv2C9WaQ==", - "requires": { - "debug": "^3.1.0", - "email-validator": "^2.0.4", - "js-yaml": "^3.13.1", - "lodash.clonedeep": "^4.5.0", - "semver": "^6.0.0", - "snyk-module": "^1.9.1", - "snyk-resolve": "^1.0.1", - "snyk-try-require": "^1.3.1", - "then-fs": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "snyk-python-plugin": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/snyk-python-plugin/-/snyk-python-plugin-1.17.0.tgz", - "integrity": "sha512-EKdVOUlvhiVpXA5TeW8vyxYVqbITAfT+2AbL2ZRiiUNLP5ae+WiNYaPy7aB5HAS9IKBKih+IH8Ag65Xu1IYSYA==", - "requires": { - "@snyk/cli-interface": "^2.0.3", - "tmp": "0.0.33" - } - }, - "snyk-resolve": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/snyk-resolve/-/snyk-resolve-1.0.1.tgz", - "integrity": "sha512-7+i+LLhtBo1Pkth01xv+RYJU8a67zmJ8WFFPvSxyCjdlKIcsps4hPQFebhz+0gC5rMemlaeIV6cqwqUf9PEDpw==", - "requires": { - "debug": "^3.1.0", - "then-fs": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "snyk-resolve-deps": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/snyk-resolve-deps/-/snyk-resolve-deps-4.4.0.tgz", - "integrity": "sha512-aFPtN8WLqIk4E1ulMyzvV5reY1Iksz+3oPnUVib1jKdyTHymmOIYF7z8QZ4UUr52UsgmrD9EA/dq7jpytwFoOQ==", - "requires": { - "@types/node": "^6.14.4", - "@types/semver": "^5.5.0", - "ansicolors": "^0.3.2", - "debug": "^3.2.5", - "lodash.assign": "^4.2.0", - "lodash.assignin": "^4.2.0", - "lodash.clone": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lru-cache": "^4.0.0", - "semver": "^5.5.1", - "snyk-module": "^1.6.0", - "snyk-resolve": "^1.0.0", - "snyk-tree": "^1.0.0", - "snyk-try-require": "^1.1.1", - "then-fs": "^2.0.0" - }, - "dependencies": { - "@types/node": { - "version": "6.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.10.tgz", - "integrity": "sha512-pF4HjZGSog75kGq7B1InK/wt/N08BuPATo+7HRfv7gZUzccebwv/fmWVGs/j6LvSiLWpCuGGhql51M/wcQsNzA==" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "snyk-sbt-plugin": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/snyk-sbt-plugin/-/snyk-sbt-plugin-2.11.0.tgz", - "integrity": "sha512-wUqHLAa3MzV6sVO+05MnV+lwc+T6o87FZZaY+43tQPytBI2Wq23O3j4POREM4fa2iFfiQJoEYD6c7xmhiEUsSA==", - "requires": { - "debug": "^4.1.1", - "semver": "^6.1.2", - "tmp": "^0.1.0", - "tree-kill": "^1.2.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "requires": { - "rimraf": "^2.6.3" - } - } - } - }, - "snyk-tree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/snyk-tree/-/snyk-tree-1.0.0.tgz", - "integrity": "sha1-D7cxdtvzLngvGRAClBYESPkRHMg=", - "requires": { - "archy": "^1.0.0" - } - }, - "snyk-try-require": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/snyk-try-require/-/snyk-try-require-1.3.1.tgz", - "integrity": "sha1-bgJvkuZK9/zM6h7lPVJIQeQYohI=", - "requires": { - "debug": "^3.1.0", - "lodash.clonedeep": "^4.3.0", - "lru-cache": "^4.0.0", - "then-fs": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "requires": { - "sort-keys": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.1.1.tgz", - "integrity": "sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q==", - "requires": { - "readable-stream": "^3.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sprintf-kit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.0.tgz", - "integrity": "sha512-/0d2YTn8ZFVpIPAU230S9ZLF8WDkSSRWvh/UOLM7zzvkCchum1TtouRgyV8OfgOaYilSGU4lSSqzwBXJVlAwUw==", - "requires": { - "es5-ext": "^0.10.46" - } - }, - "stack-trace": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stream-promise": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", - "integrity": "sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==", - "requires": { - "2-thenable": "^1.0.0", - "es5-ext": "^0.10.49", - "is-stream": "^1.1.0" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "tabtab": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-3.0.2.tgz", - "integrity": "sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==", - "requires": { - "debug": "^4.0.1", - "es6-promisify": "^6.0.0", - "inquirer": "^6.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "untildify": "^3.0.3" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", - "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - }, - "dependencies": { - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "^0.7.0" - } - }, - "then-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/then-fs/-/then-fs-2.0.0.tgz", - "integrity": "sha1-cveS3Z0xcFqRrhnr/Piz+WjIHaI=", - "requires": { - "promise": ">=3.2 <8" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==" - }, - "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "untildify": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", - "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==" - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - } - } - }, - "uri-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", - "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - }, - "vscode-languageserver-types": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", - "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==" - }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=" - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "requires": { - "string-width": "^2.1.1" - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" - }, - "windows-release": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz", - "integrity": "sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==", - "requires": { - "execa": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", - "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==" - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } - }, - "yargs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", - "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", - "requires": { - "minimist": "^0.1.0" - }, - "dependencies": { - "minimist": { - "version": "0.1.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" - } - } - }, - "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index bd89faf..0000000 --- a/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "modules.tf-lambda", - "version": "2.0.0", - "description": "From visual diagrams created with Cloudcraft to infrastructure as code using Terraform and Terragrunt", - "main": "index.js", - "private": true, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "postinstall": "opencollective-postinstall || true", - "snyk-protect": "snyk protect", - "prepare": "npm run snyk-protect" - }, - "keywords": [ - "Infrastructure as code", - "Terraform", - "Terragrunt", - "terraform-aws-modules", - "AWS" - ], - "author": "Anton Babenko ", - "license": "MIT", - "devDependencies": {}, - "dependencies": { - "opencollective-postinstall": "^2.0.2", - "serverless": "1.65.0", - "serverless-plugin-thundra": "^2.4.2", - "serverless-plugin-tracing": "^2.0.0", - "serverless-python-requirements": "^5.1.0", - "minimist": ">=1.2.3", - "snyk": "^1.319.0" - }, - "collective": { - "type": "opencollective", - "url": "https://opencollective.com/modulestf" - }, - "snyk": true -} diff --git a/requirements-lambda.txt b/requirements-lambda.txt deleted file mode 100644 index 482ca04..0000000 --- a/requirements-lambda.txt +++ /dev/null @@ -1,4 +0,0 @@ -cookiecutter==1.7.0 -networkx==2.4 -petname==2.6 -requests>=2.22.0 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index bed0bf2..0000000 --- a/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -aws-xray-sdk>=2.0 -boto3<1.13 -cookiecutter==1.7.0 -networkx==2.4 -petname==2.6 -python-lambda-local==0.1.12 -requests>=2.22.0 diff --git a/serverless.yml b/serverless.yml deleted file mode 100644 index 1a0177e..0000000 --- a/serverless.yml +++ /dev/null @@ -1,102 +0,0 @@ -service: modules-tf - -frameworkVersion: ">=1.65.0 <2.0.0" - -provider: - name: aws - runtime: python3.7 - stage: dev - region: eu-west-1 - tracing: true - timeout: 30 -# profile: modules-deploy - environment: - S3_BUCKET: ${ssm:/modulestf/${self:custom.stage}/dl_bucket_id} - S3_DIR: ${self:custom.stage} - thundra_apiKey: ${ssm:/modulestf/${self:custom.stage}/thundra_api_key~true} - alb: - targetGroupPrefix: modulestf- - iamRoleStatements: - - Effect: "Allow" - Action: - - "s3:*" # "s3:PutObject" plus something more plus stage name - Resource: - - "arn:aws:s3:::${self:provider.environment.S3_BUCKET}/${self:provider.environment.S3_DIR}/*" - - "arn:aws:s3:::${self:provider.environment.S3_BUCKET}/${self:provider.environment.S3_DIR}/" - - Effect: "Allow" # xray permissions (required) - Action: - - "xray:PutTraceSegments" - - "xray:PutTelemetryRecords" - Resource: - - "*" - -functions: - generate-cloudcraft: - name: ${self:service}-${self:custom.stage}-generate-cloudcraft - handler: handler.handler - description: Generate all from Cloudcraft URL (stage=${self:custom.stage}) - memorySize: 1536 - package: {} - events: - - alb: - listenerArn: ${ssm:/modulestf/${self:custom.stage}/alb_listener_arn} - priority: ${self:custom.alb_priority.${self:custom.stage}} - cors: true - conditions: - host: ${self:custom.domains.${self:custom.stage}} - path: "*" - method: - - GET - - POST - - OPTIONS - -# validate-cloudcraft: -# name: ${self:service}-${self:custom.stage}-validate-cloudcraft -# handler: handler.handler -# description: Validate inputs from Cloudcraft (stage=${self:custom.stage}) -# memorySize: 1536 -# package: {} -# events: -# - alb: -# # ${ssm:/modulestf/${self:custom.stage}/alb_listener_arn} -# listenerArn: ${ssm:/modulestf/${self:custom.stage}/alb_listener_arn} -# priority: 1 -# conditions: -# path: /validate -# method: -# - GET -# - POST -# - OPTIONS - -plugins: - - serverless-python-requirements - - serverless-plugin-tracing - - serverless-plugin-thundra - -custom: - stage: ${opt:stage, self:provider.stage} - - thundra: - apiKey: ${ssm:/modulestf/${self:custom.stage}/thundra_api_key~true} - - domains: - prod: ${ssm:/modulestf/prod/prod_route53_record_fqdn} # lambda.modules.tf - dev: ${ssm:/modulestf/dev/dev_route53_record_fqdn} # dev-lambda.modules.tf - - alb_priority: - prod: 20 - dev: 10 - - pythonRequirements: - fileName: requirements-lambda.txt # requirements-lambda.txt does not have heavy libraries like matplotlib, python-lambda-local which are required for debug locally - dockerizePip: true - useDownloadCache: true - useStaticCache: true - -package: - exclude: - - "input/**" - - "output/**" - - "test_fixtures/**" - - "node_modules/**" - - ".requirements-cache/**" diff --git a/src/handler.py b/src/handler.py new file mode 100755 index 0000000..464c4eb --- /dev/null +++ b/src/handler.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 + +import json +import os +import pathlib +import shutil +from pprint import pformat, pprint +from typing import Any, Dict + +import requests +from aws_lambda_powertools import Metrics, Tracer +from aws_lambda_powertools.logging.logger import Logger +from aws_lambda_powertools.metrics import MetricUnit +from aws_lambda_powertools.utilities.data_classes import APIGatewayProxyEventV2 +from aws_lambda_powertools.utilities.typing import LambdaContext +from modulestf.cloudcraft.graph import populate_graph +from modulestf.const import FINAL_DIR +from modulestf.convert import convert_graph_to_modulestf_config +from modulestf.logger import setup_logging +from modulestf.render import prepare_render_dirs, render_from_modulestf_config +from modulestf.upload import upload_file_to_s3 + +# logger = setup_logging() + +os.environ["POWERTOOLS_TRACE_DISABLED"] = "1" + +logger = Logger(service="modulestf-d2c") +tracer = Tracer(service="modulestf-d2c") +metrics = Metrics(namespace="modulestf-d2c", service="modulestf-d2c") + + +def load_data(event): + body = event.body + logger.info(f"body = {body}") + + qs = event.query_string_parameters + logger.info("queryStringParameters = %s" % qs) + + if body is None and qs is None: + raise ValueError("Some query string parameters should be defined or use HTTP POST method", 400) + + if qs is None: + blueprint_url = localfile = None + else: + blueprint_url = qs.get("cloudcraft") + localfile = qs.get("localfile") + + if body: + data = json.loads(body) + elif blueprint_url: + r = requests.get(blueprint_url) + data = r.json() + + logger.info("Blueprint url: %s, response code: %s" % (blueprint_url, r.status_code)) + + if 403 == r.status_code: + raise ValueError("Sharing has been disabled for this blueprint." + + " You have to enable it by clicking 'Export' -> 'Get shareable link'" + + " on https://app.cloudcraft.co", 403) + + elif r.status_code >= 500: + raise ValueError("Something went wrong on cloudcraft side. Can't fetch specified blueprint." + + " Check URL and try again later.", 404) + + elif localfile: + file = open(localfile, 'r') + data = json.load(file) + else: + raise ValueError("'cloudcraft' or 'localfile' query string parameter should be defined", 400) + + return data + + +@metrics.log_metrics +@logger.inject_lambda_context +@tracer.capture_lambda_handler +def handler(event: Dict[str, Any], context: LambdaContext) -> Dict[str, Any]: # noqa: WPS110 + + event: APIGatewayProxyEventV2 = APIGatewayProxyEventV2(event) + + logger.info("Processing event: {}".format(json.dumps(event.body))) + + link = "" + + try: + data = load_data(event) + except ValueError as error: + logger.error(error) + + return { + "body": str(error), + "isBase64Encoded": False, + "headers": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Credentials": True + }, + "statusCode": 400, + } + + # logger.info(pformat(data, indent=2)) + + graph = populate_graph(data) + + config = convert_graph_to_modulestf_config(graph) + + prepare_render_dirs() + + render_from_modulestf_config(config, source=graph.source, regions=graph.regions) + + # Do not upload to S3 when working locally + if os.environ.get("UPLOAD_TO_S3", False): + shutil.make_archive("archive", "zip", FINAL_DIR) + + link = upload_file_to_s3(filename="archive.zip") + + metrics.add_metric(name="Request", unit=MetricUnit.Count, value=1) + + return { + "body": "", + "headers": { + "Location": link, + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Credentials": True + }, + "statusCode": 302, + } + + +if __name__ == "__main__": + api_gateway = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/api_gateway_request.json" + event = json.loads(api_gateway.read_text()) + + # fixture = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/input_cloudcraft.json" + fixture = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/input_localfile.json" + # fixture = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/input_data.json" + + fixture_json = json.loads(fixture.read_text()) + + event.update(fixture_json) + + context = LambdaContext() + context._function_name = "_function_name" + context._function_version = "_function_version" + context._invoked_function_arn = "_invoked_function_arn" + context._memory_limit_in_mb = "_memory_limit_in_mb" + context._aws_request_id = "_aws_request_id" + context._log_group_name = "_log_group_name" + context._log_stream_name = "_log_stream_name" + + handler(event, context) diff --git a/modulestf/__init__.py b/src/modulestf/__init__.py similarity index 100% rename from modulestf/__init__.py rename to src/modulestf/__init__.py diff --git a/modulestf/cloudcraft/__init__.py b/src/modulestf/cloudcraft/__init__.py similarity index 100% rename from modulestf/cloudcraft/__init__.py rename to src/modulestf/cloudcraft/__init__.py diff --git a/modulestf/cloudcraft/graph.py b/src/modulestf/cloudcraft/graph.py similarity index 100% rename from modulestf/cloudcraft/graph.py rename to src/modulestf/cloudcraft/graph.py diff --git a/modulestf/const.py b/src/modulestf/const.py similarity index 83% rename from modulestf/const.py rename to src/modulestf/const.py index 31d3171..ec737a2 100644 --- a/modulestf/const.py +++ b/src/modulestf/const.py @@ -14,9 +14,7 @@ S3_BUCKET = "dl.modules.tf" S3_BUCKET_REGION = "eu-west-1" -THUNDRA_API_KEY = os.environ.get('THUNDRA_API_KEY') - -if os.environ.get("IS_LOCAL"): - tmp_dir = os.getcwd() -else: +if os.environ.get("AWS_EXECUTION_ENV") is not None: tmp_dir = tempfile.gettempdir() # was /tmp +else: + tmp_dir = os.getcwd() diff --git a/modulestf/convert.py b/src/modulestf/convert.py similarity index 92% rename from modulestf/convert.py rename to src/modulestf/convert.py index f2174c8..252d5a6 100644 --- a/modulestf/convert.py +++ b/src/modulestf/convert.py @@ -93,7 +93,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 parsed_asg_id = set() warnings = set() - supported_node_types = ["rds", "ec2", "elb", "sns", "sqs", "sg", "vpc", "s3", "redshift", "dynamodb"] + supported_node_types = ["rds", "ec2", "elb", "sns", "sqs", "sg", "vpc", "s3", "redshift", "dynamodb", "cloudfront", "lambda", "vpngateway", "apigateway"] # supported_node_types = ["sg", "vpc"] for key, node_complete in G.nodes.items(): @@ -436,6 +436,44 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 if node.get("type") == "cloudfront": r = Resource(key, "cloudfront", node_text) + r.update_params({ + "wait_for_deployment": False + }) + + resources.append(r.content()) + + if node.get("type") == "lambda": + r = Resource(key, "lambda", node_text) + + r.update_params({ + "memory_size": node.get("memory"), + "function_name": node_text if node_text else random_pet(), + "handler": "handler.lambda_handler", + "runtime": "python3.8", + "source_path": "\"handler.py\"" # @todo: create this file also + }) + + resources.append(r.content()) + + if node.get("type") == "apigateway": + r = Resource(key, "apigateway-v2", node_text) + + r.update_params({ + "name": node_text if node_text else random_pet(), + "protocol_type": "WEBSOCKET" if node.get("apiType") == "websocket" else "HTTP", + }) + + resources.append(r.content()) + + if node.get("type") == "vpngateway": + r = Resource(key, "vpn-gateway", node_text) + + if vpc_id: + r.append_dependency(vpc_id) + r.update_dynamic_params("vpc_id", "dependency." + vpc_id + ".outputs.vpc_id") + r.update_dynamic_params("vpn_gateway_id", "dependency." + vpc_id + ".outputs.vgw_id") + r.update_dynamic_params("customer_gateway_id", "dependency." + vpc_id + ".outputs.cgw_ids[0]") + resources.append(r.content()) if node.get("type") == "sns": diff --git a/modulestf/logger.py b/src/modulestf/logger.py similarity index 100% rename from modulestf/logger.py rename to src/modulestf/logger.py diff --git a/src/modulestf/modules.py b/src/modulestf/modules.py new file mode 100644 index 0000000..d260549 --- /dev/null +++ b/src/modulestf/modules.py @@ -0,0 +1,175 @@ +import json +import os +from pprint import pprint + +BASE_PATH = os.path.dirname(os.path.abspath(__file__)) + + +def get_version(relative_path, remove_v=False): + path = os.path.join(BASE_PATH, relative_path) + with open(path) as file: + if remove_v: + return file.read().replace("v", "") + else: + return file.read() + + +def load_local_json(relative_path): + path = os.path.join(BASE_PATH, relative_path) + with open(path) as file: + return json.load(file) + + +# @todo: Verify support for tuple, object and any. +# Ref: https://www.terraform.io/docs/configuration/variables.html#type-constraints +def update_template_variables(var): + for key, value in var.items(): + + # Guess type from default value + if value.get("default", None) is not None: + if str(value.get("default")).lower() in ["true", "false"]: + value_type = value.get("type", "bool") + elif type(value.get("default")) is map: + value_type = value.get("type", "map") + elif type(value.get("default")) is str: + value_type = value.get("type", "string") + elif type(value.get("default")) is int: + value_type = value.get("type", "integer") + else: + value_type = value.get("type", "list") + else: + value_type = value.get("type", "string") + + variable_value_format_function = "" + + if value_type == "string": + variable_default = '' + variable_value_format = '"%s"' + elif value_type == "number": + variable_default = '' + variable_value_format = '%s' + elif value_type == "bool": + variable_default = '' + variable_value_format = '%s' + variable_value_format_function = "lower" + elif value_type.startswith("list") or value_type.startswith("set"): + variable_default = [] + variable_value_format = '%s' + elif value_type.startswith("map"): + variable_default = {} + variable_value_format = '"%s"' + else: + variable_default = '""' + variable_value_format = "%s" + + value.update({ + "value_type": value_type, + "variable_default": variable_default, + "variable_value_format": variable_value_format, + "variable_value_format_function": variable_value_format_function, + }) + + return var + + +MODULES = { + "alb": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-alb.git?ref=" + get_version("../terraform-aws-modules-metadata/alb_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/alb/aws/" + get_version("../terraform-aws-modules-metadata/alb_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/alb.json")), + }, + "nlb": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-alb.git?ref=" + get_version("../terraform-aws-modules-metadata/alb_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/alb/aws/" + get_version("../terraform-aws-modules-metadata/alb_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/alb.json")), + }, + "elb": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-elb.git?ref=" + get_version("../terraform-aws-modules-metadata/elb_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/elb/aws/" + get_version("../terraform-aws-modules-metadata/elb_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/elb.json")), + }, + "rds": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-rds.git?ref=" + get_version("../terraform-aws-modules-metadata/rds_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/rds/aws/" + get_version("../terraform-aws-modules-metadata/rds_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/rds.json")), + }, + "rds-aurora": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-rds-aurora.git?ref=" + get_version("../terraform-aws-modules-metadata/rds-aurora_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/rds-aurora/aws/" + get_version("../terraform-aws-modules-metadata/rds-aurora_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/rds-aurora.json")), + }, + "autoscaling": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-autoscaling.git?ref=" + get_version("../terraform-aws-modules-metadata/autoscaling_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/autoscaling/aws/" + get_version("../terraform-aws-modules-metadata/autoscaling_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/autoscaling.json")), + }, + "ec2-instance": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-ec2-instance.git?ref=" + get_version("../terraform-aws-modules-metadata/ec2-instance_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/ec2-instance/aws/" + get_version("../terraform-aws-modules-metadata/ec2-instance_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/ec2-instance.json")), + }, + "sns": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-sns.git?ref=" + get_version("../terraform-aws-modules-metadata/sns_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/sns/aws/" + get_version("../terraform-aws-modules-metadata/sns_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/sns.json")), + }, + "sqs": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-sqs.git?ref=" + get_version("../terraform-aws-modules-metadata/sqs_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/sqs/aws/" + get_version("../terraform-aws-modules-metadata/sqs_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/sqs.json")), + }, + "security-group": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-security-group.git?ref=" + get_version("../terraform-aws-modules-metadata/security-group_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/security-group/aws/" + get_version("../terraform-aws-modules-metadata/security-group_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/security-group.json")), + }, + "vpc": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-vpc.git?ref=" + get_version("../terraform-aws-modules-metadata/vpc_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/" + get_version("../terraform-aws-modules-metadata/vpc_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/vpc.json")), + }, + "s3-bucket": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git?ref=" + get_version("../terraform-aws-modules-metadata/s3-bucket_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/s3-bucket/aws/" + get_version("../terraform-aws-modules-metadata/s3-bucket_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/s3-bucket.json")), + }, + "redshift": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-redshift.git?ref=" + get_version("../terraform-aws-modules-metadata/redshift_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/" + get_version("../terraform-aws-modules-metadata/redshift_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/redshift.json")), + }, + "dynamodb-table": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-dynamodb-table.git?ref=" + get_version("../terraform-aws-modules-metadata/dynamodb-table_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/dynamodb-table/aws/" + get_version("../terraform-aws-modules-metadata/dynamodb-table_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/dynamodb-table.json")), + }, + "cloudfront": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-cloudfront.git?ref=" + get_version("../terraform-aws-modules-metadata/cloudfront_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/cloudfront/aws/" + get_version("../terraform-aws-modules-metadata/cloudfront_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/cloudfront.json")), + }, + "lambda": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-lambda.git?ref=" + get_version("../terraform-aws-modules-metadata/lambda_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/lambda/aws/" + get_version("../terraform-aws-modules-metadata/lambda_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/lambda.json")), + }, + "apigateway-v2": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-apigateway-v2.git?ref=" + get_version("../terraform-aws-modules-metadata/apigateway-v2_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/apigateway-v2/aws/" + get_version("../terraform-aws-modules-metadata/apigateway-v2_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/apigateway-v2.json")), + }, + "vpn-gateway": { + "source": "git::git@github.com:terraform-aws-modules/terraform-aws-vpn-gateway.git?ref=" + get_version("../terraform-aws-modules-metadata/vpn-gateway_version.txt"), + "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/vpn-gateway/aws/" + get_version("../terraform-aws-modules-metadata/vpn-gateway_version.txt", True), + "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/vpn-gateway.json")), + }, + + # Data sources for aws_region and aws_availability_zones + "aws-data": { + "source": "${get_parent_terragrunt_dir()}/../../../modules/aws-data", + "registry_url": "", + "variables": {}, + }, +} + +# pprint(MODULES["rds-aurora"]) diff --git a/modulestf/render.py b/src/modulestf/render.py similarity index 94% rename from modulestf/render.py rename to src/modulestf/render.py index c1220aa..e24f5dd 100644 --- a/modulestf/render.py +++ b/src/modulestf/render.py @@ -262,6 +262,13 @@ def render_from_modulestf_config(config, source, regions): logger.info("Rendering single layer resource id: %s" % resource.get("ref_id")) used_module_type = prepare_single_layer(resource, source_dir_name, region, templates_dir, templates_files) + # Put extra files into the layer (eg, handler.py for Lambda module) + extra_files_templates_dir = path.realpath(path.join(COOKIECUTTER_TEMPLATES_DIR, "extra-files-single-layer", resource["type"])) + if path.exists(extra_files_templates_dir): + full_dir_name = ("%s/%s/%s" % (source_dir_name, region, resource.get("dir_name"))).lower() + dst_dir = path.join(getcwd(), WORK_DIR_FOR_COOKIECUTTER, full_dir_name) + shutil.copytree(extra_files_templates_dir, dst_dir, dirs_exist_ok=True) + used_modules.add(used_module_type) extra_context = dict({"module_sources": {}, "module_registry_urls": {}, "module_variables": {}}) diff --git a/modulestf/upload.py b/src/modulestf/upload.py similarity index 100% rename from modulestf/upload.py rename to src/modulestf/upload.py diff --git a/src/requirements.txt b/src/requirements.txt new file mode 100644 index 0000000..743828d --- /dev/null +++ b/src/requirements.txt @@ -0,0 +1,6 @@ +aws-lambda-powertools>=1.15.0 +aws-xray-sdk>=2.8 +cookiecutter==1.7.0 +networkx==2.4 +petname==2.6 +requests>=2.24.0 diff --git a/templates/config_aws_lambda.yaml b/src/templates/config_aws_lambda.yaml similarity index 100% rename from templates/config_aws_lambda.yaml rename to src/templates/config_aws_lambda.yaml diff --git a/src/templates/extra-files-single-layer/lambda/handler.py b/src/templates/extra-files-single-layer/lambda/handler.py new file mode 100644 index 0000000..00add00 --- /dev/null +++ b/src/templates/extra-files-single-layer/lambda/handler.py @@ -0,0 +1,4 @@ +def lambda_handler(event, context): + print("Hello from Lambda!") + + return event diff --git a/templates/root/cookiecutter.json b/src/templates/root/cookiecutter.json similarity index 100% rename from templates/root/cookiecutter.json rename to src/templates/root/cookiecutter.json diff --git a/templates/root/template/.editorconfig b/src/templates/root/template/.editorconfig similarity index 100% rename from templates/root/template/.editorconfig rename to src/templates/root/template/.editorconfig diff --git a/src/templates/root/template/.gitignore b/src/templates/root/template/.gitignore new file mode 100644 index 0000000..d9c1f28 --- /dev/null +++ b/src/templates/root/template/.gitignore @@ -0,0 +1,42 @@ +# Local .terraform directories +**/.terraform/* + +# Terraform lockfile +.terraform.lock.hcl + +# .tfstate files +*.tfstate +*.tfstate.* + +# Crash log files +crash.log + +# Exclude all .tfvars files, which are likely to contain sentitive data, such as +# password, private keys, and other secrets. These should not be part of version +# control as they are data points which are potentially sensitive and subject +# to change depending on the environment. +*.tfvars + +# Ignore override files as they are usually used to override resources locally and so +# are not checked in +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Ignore CLI configuration files +.terraformrc +terraform.rc + +# OS X +.history +.DS_Store + +# IntelliJ +.idea_modules +*.iml +*.iws +*.ipr +.idea/ +build/ +*/build/ diff --git a/templates/root/template/.pre-commit-config.yaml b/src/templates/root/template/.pre-commit-config.yaml similarity index 50% rename from templates/root/template/.pre-commit-config.yaml rename to src/templates/root/template/.pre-commit-config.yaml index b59b613..e9bd3a8 100644 --- a/templates/root/template/.pre-commit-config.yaml +++ b/src/templates/root/template/.pre-commit-config.yaml @@ -1,10 +1,6 @@ repos: - repo: git://github.com/antonbabenko/pre-commit-terraform - rev: v1.25.0 + rev: v1.50.0 hooks: - id: terraform_fmt - id: terraform_docs - - repo: git://github.com/pre-commit/pre-commit-hooks - rev: v2.5.0 - hooks: - - id: check-merge-conflict diff --git a/templates/root/template/LICENSE b/src/templates/root/template/LICENSE similarity index 96% rename from templates/root/template/LICENSE rename to src/templates/root/template/LICENSE index 85ff1f7..507b296 100644 --- a/templates/root/template/LICENSE +++ b/src/templates/root/template/LICENSE @@ -1,5 +1,5 @@ The MIT License (MIT) -Copyright (c) 2018-2020 Anton Babenko +Copyright (c) 2018-2021 Anton Babenko Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/templates/root/template/README.md b/src/templates/root/template/README.md similarity index 81% rename from templates/root/template/README.md rename to src/templates/root/template/README.md index 48fe47b..c4e4b6a 100644 --- a/templates/root/template/README.md +++ b/src/templates/root/template/README.md @@ -1,6 +1,6 @@ # Infrastructure code for "{{ cookiecutter.source_name }}" -This repository contains infrastructure as Terraform configurations which were automatically generated from blueprint created using [Cloudcraft](https://www.cloudcraft.co). +This repository contains Terraform configuration files which were automatically generated from blueprint created using [Cloudcraft](https://www.cloudcraft.co). [Terragrunt](https://terragrunt.gruntwork.io/) is used to work with Terraform configurations which allows to orchestrate dependent layers, update arguments dynamically and keep configurations [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). @@ -10,13 +10,13 @@ This repository contains infrastructure as Terraform configurations which were a 1. [Configure access to AWS account](#configure-access-to-aws-account) 1. [Create and manage your infrastructure](#create-and-manage-your-infrastructure) 1. [References](#references) -1. [About modules.tf](#about-modulestf) +1. [About d2c.modules.tf](#about-d2cmodulestf) ## Quick start -1. [Install Terraform 0.12 or newer](https://www.terraform.io/intro/getting-started/install.html) -1. [Install Terragrunt 0.22 or newer](https://terragrunt.gruntwork.io/docs/getting-started/install/) +1. [Install Terraform 0.15 or newer](https://learn.hashicorp.com/tutorials/terraform/install-cli) +1. [Install Terragrunt 0.29 or newer](https://terragrunt.gruntwork.io/docs/getting-started/install/) 1. Optionally, [install pre-commit hooks](https://pre-commit.com/#install) to keep Terraform formatting and documentation up-to-date. If you are using macOS you can install all dependencies using [Homebrew](https://brew.sh/): @@ -33,7 +33,7 @@ $ export AWS_ACCESS_KEY_ID=... $ export AWS_SECRET_ACCESS_KEY=... ``` -Alternatively, you can edit `terragrunt.hcl` and use another authentication mechanism as described in [AWS provider documentation](https://www.terraform.io/docs/providers/aws/index.html#authentication). +Alternatively, you can edit `terragrunt.hcl` and use another authentication mechanism as described in [AWS provider documentation](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication). ## Create and manage your infrastructure @@ -52,7 +52,7 @@ There are two ways to manage infrastructure (slower&complete, or faster&granular ``` $ cd {{ cookiecutter.region }} -$ terragrunt apply-all +$ terragrunt run-all apply ``` - **As a single layer (faster&granular).** Run this command to create infrastructure in a single layer (eg, `{{ cookiecutter.dirs.values()|first|default("vpc") }}`): @@ -67,14 +67,15 @@ After the confirmation your infrastructure should be created. ## References -* [Terraform documentation](https://www.terraform.io/docs/) and [Terragrunt documentation](https://terragrunt.gruntwork.io/docs/) for all available commands and features. -* [Terraform AWS modules](https://github.com/terraform-aws-modules/). -* [Terraform modules registry](https://registry.terraform.io/). +* [Terraform documentation](https://www.terraform.io/docs/) and [Terragrunt documentation](https://terragrunt.gruntwork.io/docs/) for all available commands and features +* [Terraform AWS modules](https://github.com/terraform-aws-modules/) +* [Terraform modules registry](https://registry.terraform.io/) +* [Terraform best practices](https://www.terraform-best-practices.com/) -## About modules.tf +## About d2c.modules.tf -[modules.tf](https://github.com/antonbabenko/modules.tf-lambda) is an open-source project by [Anton Babenko](https://github.com/antonbabenko), and, yes, you can contribute, too: +[modules.tf](https://github.com/antonbabenko/modules.tf-lambda) is an open-source project created by [Anton Babenko](https://github.com/antonbabenko): 1. Questions, bugs and feature-requests - [open an issue](https://github.com/antonbabenko/modules.tf-lambda). 1. [Become a sponsor to @antonbabenko](https://github.com/sponsors/antonbabenko/). 1. You are always welcome to share, star, like, tweet, follow! @@ -83,4 +84,4 @@ After the confirmation your infrastructure should be created. [![@antonbabenko](https://img.shields.io/github/followers/antonbabenko?style=flat&label=Follow%20@antonbabenko%20on%20Github)](https://github.com/antonbabenko) [![modules.tf-lambda](https://img.shields.io/github/stars/antonbabenko/modules.tf-lambda?style=flat&label=Star%20modules.tf-lambda%20on%20Github)](https://github.com/antonbabenko/modules.tf-lambda) -All content, including [Terraform AWS modules](https://github.com/terraform-aws-modules/) used in these configurations, is released under the MIT License. +All content, including [Terraform AWS modules](https://github.com/terraform-aws-modules/) used in these configurations, is released under the MIT or Apache License. diff --git a/src/templates/root/template/modules/aws-data/README.md b/src/templates/root/template/modules/aws-data/README.md new file mode 100644 index 0000000..5f563eb --- /dev/null +++ b/src/templates/root/template/modules/aws-data/README.md @@ -0,0 +1,42 @@ +# aws-data + +This module contains data-sources which are used as arguments in other AWS modules (eg, list of AZ when creating VPC). + + +## Requirements + +No requirements. + +## Providers + +| Name | Version | +|------|---------| +| [aws](#provider\_aws) | n/a | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [aws_ami.amazon_linux2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ami) | data source | +| [aws_ami.ubuntu_1804](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ami) | data source | +| [aws_availability_zones.available](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/availability_zones) | data source | +| [aws_region.selected](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source | + +## Inputs + +No inputs. + +## Outputs + +| Name | Description | +|------|-------------| +| [amazon\_linux2\_aws\_ami\_id](#output\_amazon\_linux2\_aws\_ami\_id) | AMI ID of Amazon Linux 2 | +| [available\_aws\_availability\_zones\_names](#output\_available\_aws\_availability\_zones\_names) | A list of the Availability Zone names available to the account | +| [available\_aws\_availability\_zones\_zone\_ids](#output\_available\_aws\_availability\_zones\_zone\_ids) | A list of the Availability Zone IDs available to the account | +| [aws\_region](#output\_aws\_region) | Details about selected AWS region | +| [ubuntu\_1804\_aws\_ami\_id](#output\_ubuntu\_1804\_aws\_ami\_id) | AMI ID of Ubuntu 18.04 | + diff --git a/templates/root/template/modules/aws-data/main.tf b/src/templates/root/template/modules/aws-data/main.tf similarity index 95% rename from templates/root/template/modules/aws-data/main.tf rename to src/templates/root/template/modules/aws-data/main.tf index a8532d6..3cabcde 100644 --- a/templates/root/template/modules/aws-data/main.tf +++ b/src/templates/root/template/modules/aws-data/main.tf @@ -29,7 +29,7 @@ data "aws_ami" "ubuntu_1804" { data "aws_ami" "amazon_linux2" { most_recent = true - owners = ["137112412989"] # Amazon + owners = ["137112412989"] # Amazon filter { name = "name" diff --git a/templates/root/template/modules/aws-data/outputs.tf b/src/templates/root/template/modules/aws-data/outputs.tf similarity index 100% rename from templates/root/template/modules/aws-data/outputs.tf rename to src/templates/root/template/modules/aws-data/outputs.tf diff --git a/templates/terragrunt-common-layer/region/terragrunt.hcl b/src/templates/terragrunt-common-layer/region/terragrunt.hcl similarity index 100% rename from templates/terragrunt-common-layer/region/terragrunt.hcl rename to src/templates/terragrunt-common-layer/region/terragrunt.hcl diff --git a/templates/terragrunt-single-layer/terragrunt.hcl b/src/templates/terragrunt-single-layer/terragrunt.hcl similarity index 100% rename from templates/terragrunt-single-layer/terragrunt.hcl rename to src/templates/terragrunt-single-layer/terragrunt.hcl diff --git a/modules-metadata/alb.json b/src/terraform-aws-modules-metadata/alb.json similarity index 84% rename from modules-metadata/alb.json rename to src/terraform-aws-modules-metadata/alb.json index 7d100d6..2c28a58 100644 --- a/modules-metadata/alb.json +++ b/src/terraform-aws-modules-metadata/alb.json @@ -9,6 +9,11 @@ "description": "Controls if the Load Balancer should be created", "type": "bool" }, + "drop_invalid_header_fields": { + "default": false, + "description": "Indicates whether invalid header fields are dropped in application load balancers. Defaults to false.", + "type": "bool" + }, "enable_cross_zone_load_balancing": { "default": false, "description": "Indicates whether cross zone load balancing should be enabled in application load balancers.", @@ -32,12 +37,17 @@ "http_tcp_listeners": { "default": [], "description": "A list of maps describing the HTTP listeners or TCP ports for this ALB. Required key/values: port, protocol. Optional key/values: target_group_index (defaults to http_tcp_listeners[count.index])", - "type": "list(map(string))" + "type": "any" + }, + "https_listener_rules": { + "default": [], + "description": "A list of maps describing the Listener Rules for this ALB. Required key/values: actions, conditions. Optional key/values: priority, https_listener_index (default to https_listeners[count.index])", + "type": "any" }, "https_listeners": { "default": [], "description": "A list of maps describing the HTTPS listeners for this ALB. Required key/values: port, certificate_arn. Optional key/values: ssl_policy (defaults to ELBSecurityPolicy-2016-08), target_group_index (defaults to https_listeners[count.index])", - "type": "list(map(string))" + "type": "any" }, "idle_timeout": { "default": 60, @@ -54,6 +64,11 @@ "description": "The type of IP addresses used by the subnets for your load balancer. The possible values are ipv4 and dualstack.", "type": "string" }, + "lb_tags": { + "default": {}, + "description": "A map of tags to add to load balancer", + "type": "map(string)" + }, "listener_ssl_policy_default": { "default": "ELBSecurityPolicy-2016-08", "description": "The security policy if using HTTPS externally on the load balancer. [See](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-security-policy-table.html).", @@ -86,7 +101,7 @@ }, "name_prefix": { "default": "null", - "description": "The resource name prefix and Name tag of the load balancer.", + "description": "The resource name prefix and Name tag of the load balancer. Cannot be longer than 6 characters", "type": "string" }, "security_groups": { @@ -109,9 +124,14 @@ "description": "A map of tags to add to all resources", "type": "map(string)" }, + "target_group_tags": { + "default": {}, + "description": "A map of tags to add to all target groups", + "type": "map(string)" + }, "target_groups": { "default": [], - "description": "A list of maps containing key/value pairs that define the target groups to be created. Order of these maps is important and the index of these are to be referenced in listener definitions. Required key/values: name, backend_protocol, backend_port. Optional key/values are in the target_groups_defaults variable.", + "description": "A list of maps containing key/value pairs that define the target groups to be created. Order of these maps is important and the index of these are to be referenced in listener definitions. Required key/values: name, backend_protocol, backend_port", "type": "any" }, "vpc_id": { diff --git a/modules-metadata/alb_cloudcraft.json b/src/terraform-aws-modules-metadata/alb_cloudcraft.json similarity index 100% rename from modules-metadata/alb_cloudcraft.json rename to src/terraform-aws-modules-metadata/alb_cloudcraft.json diff --git a/modules-metadata/alb_variables.json b/src/terraform-aws-modules-metadata/alb_variables.json similarity index 84% rename from modules-metadata/alb_variables.json rename to src/terraform-aws-modules-metadata/alb_variables.json index 7d100d6..2c28a58 100644 --- a/modules-metadata/alb_variables.json +++ b/src/terraform-aws-modules-metadata/alb_variables.json @@ -9,6 +9,11 @@ "description": "Controls if the Load Balancer should be created", "type": "bool" }, + "drop_invalid_header_fields": { + "default": false, + "description": "Indicates whether invalid header fields are dropped in application load balancers. Defaults to false.", + "type": "bool" + }, "enable_cross_zone_load_balancing": { "default": false, "description": "Indicates whether cross zone load balancing should be enabled in application load balancers.", @@ -32,12 +37,17 @@ "http_tcp_listeners": { "default": [], "description": "A list of maps describing the HTTP listeners or TCP ports for this ALB. Required key/values: port, protocol. Optional key/values: target_group_index (defaults to http_tcp_listeners[count.index])", - "type": "list(map(string))" + "type": "any" + }, + "https_listener_rules": { + "default": [], + "description": "A list of maps describing the Listener Rules for this ALB. Required key/values: actions, conditions. Optional key/values: priority, https_listener_index (default to https_listeners[count.index])", + "type": "any" }, "https_listeners": { "default": [], "description": "A list of maps describing the HTTPS listeners for this ALB. Required key/values: port, certificate_arn. Optional key/values: ssl_policy (defaults to ELBSecurityPolicy-2016-08), target_group_index (defaults to https_listeners[count.index])", - "type": "list(map(string))" + "type": "any" }, "idle_timeout": { "default": 60, @@ -54,6 +64,11 @@ "description": "The type of IP addresses used by the subnets for your load balancer. The possible values are ipv4 and dualstack.", "type": "string" }, + "lb_tags": { + "default": {}, + "description": "A map of tags to add to load balancer", + "type": "map(string)" + }, "listener_ssl_policy_default": { "default": "ELBSecurityPolicy-2016-08", "description": "The security policy if using HTTPS externally on the load balancer. [See](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-security-policy-table.html).", @@ -86,7 +101,7 @@ }, "name_prefix": { "default": "null", - "description": "The resource name prefix and Name tag of the load balancer.", + "description": "The resource name prefix and Name tag of the load balancer. Cannot be longer than 6 characters", "type": "string" }, "security_groups": { @@ -109,9 +124,14 @@ "description": "A map of tags to add to all resources", "type": "map(string)" }, + "target_group_tags": { + "default": {}, + "description": "A map of tags to add to all target groups", + "type": "map(string)" + }, "target_groups": { "default": [], - "description": "A list of maps containing key/value pairs that define the target groups to be created. Order of these maps is important and the index of these are to be referenced in listener definitions. Required key/values: name, backend_protocol, backend_port. Optional key/values are in the target_groups_defaults variable.", + "description": "A list of maps containing key/value pairs that define the target groups to be created. Order of these maps is important and the index of these are to be referenced in listener definitions. Required key/values: name, backend_protocol, backend_port", "type": "any" }, "vpc_id": { diff --git a/src/terraform-aws-modules-metadata/alb_version.txt b/src/terraform-aws-modules-metadata/alb_version.txt new file mode 100644 index 0000000..9773998 --- /dev/null +++ b/src/terraform-aws-modules-metadata/alb_version.txt @@ -0,0 +1 @@ +v6.0.0 diff --git a/src/terraform-aws-modules-metadata/apigateway-v2.json b/src/terraform-aws-modules-metadata/apigateway-v2.json new file mode 100644 index 0000000..acd90ce --- /dev/null +++ b/src/terraform-aws-modules-metadata/apigateway-v2.json @@ -0,0 +1,157 @@ +{ + "api_key_selection_expression": { + "default": "$request.header.x-api-key", + "description": "An API key selection expression. Valid values: $context.authorizer.usageIdentifierKey, $request.header.x-api-key.", + "type": "string" + }, + "api_version": { + "default": "null", + "description": "A version identifier for the API", + "type": "string" + }, + "body": { + "default": "null", + "description": "An OpenAPI specification that defines the set of routes and integrations to create as part of the HTTP APIs. Supported only for HTTP APIs.", + "type": "string" + }, + "cors_configuration": { + "default": {}, + "description": "The cross-origin resource sharing (CORS) configuration. Applicable for HTTP APIs.", + "type": "any" + }, + "create": { + "default": true, + "description": "Controls if API Gateway resources should be created", + "type": "bool" + }, + "create_api_domain_name": { + "default": true, + "description": "Whether to create API domain name resource", + "type": "bool" + }, + "create_api_gateway": { + "default": true, + "description": "Whether to create API Gateway", + "type": "bool" + }, + "create_default_stage": { + "default": true, + "description": "Whether to create default stage", + "type": "bool" + }, + "create_default_stage_api_mapping": { + "default": true, + "description": "Whether to create default stage API mapping", + "type": "bool" + }, + "create_routes_and_integrations": { + "default": true, + "description": "Whether to create routes and integrations resources", + "type": "bool" + }, + "create_vpc_link": { + "default": true, + "description": "Whether to create VPC links", + "type": "bool" + }, + "credentials_arn": { + "default": "null", + "description": "Part of quick create. Specifies any credentials required for the integration. Applicable for HTTP APIs.", + "type": "string" + }, + "default_route_settings": { + "default": {}, + "description": "Settings for default route", + "type": "map(string)" + }, + "default_stage_access_log_destination_arn": { + "default": "null", + "description": "Default stage's ARN of the CloudWatch Logs log group to receive access logs. Any trailing :* is trimmed from the ARN.", + "type": "string" + }, + "default_stage_access_log_format": { + "default": "null", + "description": "Default stage's single line format of the access logs of data, as specified by selected $context variables.", + "type": "string" + }, + "default_stage_tags": { + "default": {}, + "description": "A mapping of tags to assign to the default stage resource.", + "type": "map(string)" + }, + "description": { + "default": "null", + "description": "The description of the API.", + "type": "string" + }, + "disable_execute_api_endpoint": { + "default": false, + "description": "Whether clients can invoke the API by using the default execute-api endpoint. To require that clients use a custom domain name to invoke the API, disable the default endpoint", + "type": "string" + }, + "domain_name": { + "default": "null", + "description": "The domain name to use for API gateway", + "type": "string" + }, + "domain_name_certificate_arn": { + "default": "null", + "description": "The ARN of an AWS-managed certificate that will be used by the endpoint for the domain name", + "type": "string" + }, + "domain_name_tags": { + "default": {}, + "description": "A mapping of tags to assign to API domain name resource.", + "type": "map(string)" + }, + "integrations": { + "default": {}, + "description": "Map of API gateway routes with integrations", + "type": "map(any)" + }, + "mutual_tls_authentication": { + "default": {}, + "description": "An Amazon S3 URL that specifies the truststore for mutual TLS authentication as well as version, keyed at uri and version", + "type": "map(string)" + }, + "name": { + "default": "", + "description": "The name of the API", + "type": "string" + }, + "protocol_type": { + "default": "HTTP", + "description": "The API protocol. Valid values: HTTP, WEBSOCKET", + "type": "string" + }, + "route_key": { + "default": "null", + "description": "Part of quick create. Specifies any route key. Applicable for HTTP APIs.", + "type": "string" + }, + "route_selection_expression": { + "default": "$request.method $request.path", + "description": "The route selection expression for the API.", + "type": "string" + }, + "tags": { + "default": {}, + "description": "A mapping of tags to assign to API gateway resources.", + "type": "map(string)" + }, + "target": { + "default": "null", + "description": "Part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Applicable for HTTP APIs.", + "type": "string" + }, + "vpc_link_tags": { + "default": {}, + "description": "A map of tags to add to the VPC Link", + "type": "map(string)" + }, + "vpc_links": { + "default": {}, + "description": "Map of VPC Links details to create", + "type": "map(any)" + } +} diff --git a/modules-metadata/dynamodb-table_cloudcraft.json b/src/terraform-aws-modules-metadata/apigateway-v2_cloudcraft.json similarity index 100% rename from modules-metadata/dynamodb-table_cloudcraft.json rename to src/terraform-aws-modules-metadata/apigateway-v2_cloudcraft.json diff --git a/src/terraform-aws-modules-metadata/apigateway-v2_variables.json b/src/terraform-aws-modules-metadata/apigateway-v2_variables.json new file mode 100644 index 0000000..acd90ce --- /dev/null +++ b/src/terraform-aws-modules-metadata/apigateway-v2_variables.json @@ -0,0 +1,157 @@ +{ + "api_key_selection_expression": { + "default": "$request.header.x-api-key", + "description": "An API key selection expression. Valid values: $context.authorizer.usageIdentifierKey, $request.header.x-api-key.", + "type": "string" + }, + "api_version": { + "default": "null", + "description": "A version identifier for the API", + "type": "string" + }, + "body": { + "default": "null", + "description": "An OpenAPI specification that defines the set of routes and integrations to create as part of the HTTP APIs. Supported only for HTTP APIs.", + "type": "string" + }, + "cors_configuration": { + "default": {}, + "description": "The cross-origin resource sharing (CORS) configuration. Applicable for HTTP APIs.", + "type": "any" + }, + "create": { + "default": true, + "description": "Controls if API Gateway resources should be created", + "type": "bool" + }, + "create_api_domain_name": { + "default": true, + "description": "Whether to create API domain name resource", + "type": "bool" + }, + "create_api_gateway": { + "default": true, + "description": "Whether to create API Gateway", + "type": "bool" + }, + "create_default_stage": { + "default": true, + "description": "Whether to create default stage", + "type": "bool" + }, + "create_default_stage_api_mapping": { + "default": true, + "description": "Whether to create default stage API mapping", + "type": "bool" + }, + "create_routes_and_integrations": { + "default": true, + "description": "Whether to create routes and integrations resources", + "type": "bool" + }, + "create_vpc_link": { + "default": true, + "description": "Whether to create VPC links", + "type": "bool" + }, + "credentials_arn": { + "default": "null", + "description": "Part of quick create. Specifies any credentials required for the integration. Applicable for HTTP APIs.", + "type": "string" + }, + "default_route_settings": { + "default": {}, + "description": "Settings for default route", + "type": "map(string)" + }, + "default_stage_access_log_destination_arn": { + "default": "null", + "description": "Default stage's ARN of the CloudWatch Logs log group to receive access logs. Any trailing :* is trimmed from the ARN.", + "type": "string" + }, + "default_stage_access_log_format": { + "default": "null", + "description": "Default stage's single line format of the access logs of data, as specified by selected $context variables.", + "type": "string" + }, + "default_stage_tags": { + "default": {}, + "description": "A mapping of tags to assign to the default stage resource.", + "type": "map(string)" + }, + "description": { + "default": "null", + "description": "The description of the API.", + "type": "string" + }, + "disable_execute_api_endpoint": { + "default": false, + "description": "Whether clients can invoke the API by using the default execute-api endpoint. To require that clients use a custom domain name to invoke the API, disable the default endpoint", + "type": "string" + }, + "domain_name": { + "default": "null", + "description": "The domain name to use for API gateway", + "type": "string" + }, + "domain_name_certificate_arn": { + "default": "null", + "description": "The ARN of an AWS-managed certificate that will be used by the endpoint for the domain name", + "type": "string" + }, + "domain_name_tags": { + "default": {}, + "description": "A mapping of tags to assign to API domain name resource.", + "type": "map(string)" + }, + "integrations": { + "default": {}, + "description": "Map of API gateway routes with integrations", + "type": "map(any)" + }, + "mutual_tls_authentication": { + "default": {}, + "description": "An Amazon S3 URL that specifies the truststore for mutual TLS authentication as well as version, keyed at uri and version", + "type": "map(string)" + }, + "name": { + "default": "", + "description": "The name of the API", + "type": "string" + }, + "protocol_type": { + "default": "HTTP", + "description": "The API protocol. Valid values: HTTP, WEBSOCKET", + "type": "string" + }, + "route_key": { + "default": "null", + "description": "Part of quick create. Specifies any route key. Applicable for HTTP APIs.", + "type": "string" + }, + "route_selection_expression": { + "default": "$request.method $request.path", + "description": "The route selection expression for the API.", + "type": "string" + }, + "tags": { + "default": {}, + "description": "A mapping of tags to assign to API gateway resources.", + "type": "map(string)" + }, + "target": { + "default": "null", + "description": "Part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Applicable for HTTP APIs.", + "type": "string" + }, + "vpc_link_tags": { + "default": {}, + "description": "A map of tags to add to the VPC Link", + "type": "map(string)" + }, + "vpc_links": { + "default": {}, + "description": "Map of VPC Links details to create", + "type": "map(any)" + } +} diff --git a/src/terraform-aws-modules-metadata/apigateway-v2_version.txt b/src/terraform-aws-modules-metadata/apigateway-v2_version.txt new file mode 100644 index 0000000..0ec25f7 --- /dev/null +++ b/src/terraform-aws-modules-metadata/apigateway-v2_version.txt @@ -0,0 +1 @@ +v1.0.0 diff --git a/src/terraform-aws-modules-metadata/autoscaling.json b/src/terraform-aws-modules-metadata/autoscaling.json new file mode 100644 index 0000000..681ec8e --- /dev/null +++ b/src/terraform-aws-modules-metadata/autoscaling.json @@ -0,0 +1,408 @@ +{ + "associate_public_ip_address": { + "default": "null", + "description": "(LC) Associate a public ip address with an instance in a VPC", + "type": "bool" + }, + "availability_zone": { + "default": "null", + "description": "A list of one or more availability zones for the group. Used for EC2-Classic and default subnets when not specified with `vpc_zone_identifier` argument. Conflicts with `vpc_zone_identifier`", + "type": "list(string)" + }, + "block_device_mappings": { + "default": [], + "description": "(LT) Specify volumes to attach to the instance besides the volumes specified by the AMI", + "type": "list(any)" + }, + "capacity_rebalance": { + "default": "null", + "description": "Indicates whether capacity rebalance is enabled", + "type": "bool" + }, + "capacity_reservation_specification": { + "default": "null", + "description": "(LT) Targeting for EC2 capacity reservations", + "type": "any" + }, + "cpu_options": { + "default": "null", + "description": "(LT) The CPU options for the instance", + "type": "map(string)" + }, + "create_asg": { + "default": true, + "description": "Determines whether to create autoscaling group or not", + "type": "bool" + }, + "create_lc": { + "default": false, + "description": "Determines whether to create launch configuration or not", + "type": "bool" + }, + "create_lt": { + "default": false, + "description": "Determines whether to create launch template or not", + "type": "bool" + }, + "credit_specification": { + "default": "null", + "description": "(LT) Customize the credit specification of the instance", + "type": "map(string)" + }, + "default_cooldown": { + "default": "null", + "description": "The amount of time, in seconds, after a scaling activity completes before another scaling activity can start", + "type": "number" + }, + "default_version": { + "default": "null", + "description": "(LT) Default Version of the launch template", + "type": "string" + }, + "delete_timeout": { + "default": "null", + "description": "Delete timeout to wait for destroying autoscaling group", + "type": "string" + }, + "description": { + "default": "null", + "description": "(LT) Description of the launch template", + "type": "string" + }, + "desired_capacity": { + "default": "null", + "description": "The number of Amazon EC2 instances that should be running in the autoscaling group", + "type": "number" + }, + "disable_api_termination": { + "default": "null", + "description": "(LT) If true, enables EC2 instance termination protection", + "type": "bool" + }, + "ebs_block_device": { + "default": [], + "description": "(LC) Additional EBS block devices to attach to the instance", + "type": "list(map(string))" + }, + "ebs_optimized": { + "default": "null", + "description": "If true, the launched EC2 instance will be EBS-optimized", + "type": "bool" + }, + "elastic_gpu_specifications": { + "default": "null", + "description": "(LT) The elastic GPU to attach to the instance", + "type": "map(string)" + }, + "elastic_inference_accelerator": { + "default": "null", + "description": "(LT) Configuration block containing an Elastic Inference Accelerator to attach to the instance", + "type": "map(string)" + }, + "enable_monitoring": { + "default": "null", + "description": "Enables/disables detailed monitoring", + "type": "bool" + }, + "enabled_metrics": { + "default": "null", + "description": "A list of metrics to collect. The allowed values are `GroupDesiredCapacity`, `GroupInServiceCapacity`, `GroupPendingCapacity`, `GroupMinSize`, `GroupMaxSize`, `GroupInServiceInstances`, `GroupPendingInstances`, `GroupStandbyInstances`, `GroupStandbyCapacity`, `GroupTerminatingCapacity`, `GroupTerminatingInstances`, `GroupTotalCapacity`, `GroupTotalInstances`", + "type": "list(string)" + }, + "enclave_options": { + "default": "null", + "description": "(LT) Enable Nitro Enclaves on launched instances", + "type": "map(string)" + }, + "ephemeral_block_device": { + "default": [], + "description": "(LC) Customize Ephemeral (also known as 'Instance Store') volumes on the instance", + "type": "list(map(string))" + }, + "force_delete": { + "default": "null", + "description": "Allows deleting the Auto Scaling Group without waiting for all instances in the pool to terminate. You can force an Auto Scaling Group to delete even if it's in the process of scaling a resource. Normally, Terraform drains all the instances before deleting the group. This bypasses that behavior and potentially leaves resources dangling", + "type": "bool" + }, + "health_check_grace_period": { + "default": "null", + "description": "Time (in seconds) after instance comes into service before checking health", + "type": "number" + }, + "health_check_type": { + "default": "null", + "description": "`EC2` or `ELB`. Controls how health checking is done", + "type": "string" + }, + "hibernation_options": { + "default": "null", + "description": "(LT) The hibernation options for the instance", + "type": "map(string)" + }, + "iam_instance_profile_arn": { + "default": "null", + "description": "(LT) The IAM Instance Profile ARN to launch the instance with", + "type": "string" + }, + "iam_instance_profile_name": { + "default": "null", + "description": "The name attribute of the IAM instance profile to associate with launched instances", + "type": "string" + }, + "image_id": { + "default": "", + "description": "The AMI from which to launch the instance", + "type": "string" + }, + "initial_lifecycle_hooks": { + "default": [], + "description": "One or more Lifecycle Hooks to attach to the Auto Scaling Group before instances are launched. The syntax is exactly the same as the separate `aws_autoscaling_lifecycle_hook` resource, without the `autoscaling_group_name` attribute. Please note that this will only work when creating a new Auto Scaling Group. For all other use-cases, please use `aws_autoscaling_lifecycle_hook` resource", + "type": "list(map(string))" + }, + "instance_initiated_shutdown_behavior": { + "default": "null", + "description": "(LT) Shutdown behavior for the instance. Can be `stop` or `terminate`. (Default: `stop`)", + "type": "string" + }, + "instance_market_options": { + "default": "null", + "description": "(LT) The market (purchasing) option for the instance", + "type": "any" + }, + "instance_refresh": { + "default": "null", + "description": "If this block is configured, start an Instance Refresh when this Auto Scaling Group is updated", + "type": "any" + }, + "instance_type": { + "default": "", + "description": "The type of the instance to launch", + "type": "string", + "cloudcraft_name": "instanceType" + }, + "kernel_id": { + "default": "null", + "description": "(LT) The kernel ID", + "type": "string" + }, + "key_name": { + "default": "null", + "description": "The key name that should be used for the instance", + "type": "string" + }, + "launch_configuration": { + "default": "null", + "description": "Name of an existing launch configuration to be used (created outside of this module)", + "type": "string" + }, + "launch_template": { + "default": "null", + "description": "Name of an existing launch template to be used (created outside of this module)", + "type": "string" + }, + "lc_name": { + "default": "", + "description": "Name of launch configuration to be created", + "type": "string" + }, + "lc_use_name_prefix": { + "default": true, + "description": "Determines whether to use `lc_name` as is or create a unique name beginning with the `lc_name` as the prefix", + "type": "bool" + }, + "license_specifications": { + "default": "null", + "description": "(LT) A list of license specifications to associate with", + "type": "map(string)" + }, + "load_balancers": { + "default": [], + "description": "A list of elastic load balancer names to add to the autoscaling group names. Only valid for classic load balancers. For ALBs, use `target_group_arns` instead", + "type": "list(string)" + }, + "lt_name": { + "default": "", + "description": "Name of launch template to be created", + "type": "string" + }, + "lt_use_name_prefix": { + "default": true, + "description": "Determines whether to use `lt_name` as is or create a unique name beginning with the `lt_name` as the prefix", + "type": "bool" + }, + "lt_version": { + "default": "null", + "description": "Launch template version. Can be version number, `$Latest`, or `$Default`", + "type": "string" + }, + "max_instance_lifetime": { + "default": "null", + "description": "The maximum amount of time, in seconds, that an instance can be in service, values must be either equal to 0 or between 604800 and 31536000 seconds", + "type": "number" + }, + "max_size": { + "default": "null", + "description": "The maximum size of the autoscaling group", + "type": "number" + }, + "metadata_options": { + "default": "null", + "description": "Customize the metadata options for the instance", + "type": "map(string)" + }, + "metrics_granularity": { + "default": "null", + "description": "The granularity to associate with the metrics to collect. The only valid value is `1Minute`", + "type": "string" + }, + "min_elb_capacity": { + "default": "null", + "description": "Setting this causes Terraform to wait for this number of instances to show up healthy in the ELB only on creation. Updates will not wait on ELB instance number changes", + "type": "number" + }, + "min_size": { + "default": "null", + "description": "The minimum size of the autoscaling group", + "type": "number" + }, + "mixed_instances_policy": { + "default": "null", + "description": "Configuration block containing settings to define launch targets for Auto Scaling groups", + "type": "any" + }, + "name": { + "description": "Name used across the resources created", + "type": "string" + }, + "network_interfaces": { + "default": [], + "description": "(LT) Customize network interfaces to be attached at instance boot time", + "type": "list(any)" + }, + "placement": { + "default": "null", + "description": "(LT) The placement of the instance", + "type": "map(string)" + }, + "placement_group": { + "default": "null", + "description": "The name of the placement group into which you'll launch your instances, if any", + "type": "string" + }, + "placement_tenancy": { + "default": "null", + "description": "(LC) The tenancy of the instance. Valid values are `default` or `dedicated`", + "type": "string" + }, + "protect_from_scale_in": { + "default": false, + "description": "Allows setting instance protection. The autoscaling group will not select instances with this setting for termination during scale in events.", + "type": "bool" + }, + "ram_disk_id": { + "default": "null", + "description": "(LT) The ID of the ram disk", + "type": "string" + }, + "root_block_device": { + "default": [], + "description": "(LC) Customize details about the root block device of the instance", + "type": "list(map(string))" + }, + "security_groups": { + "default": "null", + "description": "A list of security group IDs to associate", + "type": "list(string)" + }, + "service_linked_role_arn": { + "default": "null", + "description": "The ARN of the service-linked role that the ASG will use to call other AWS services", + "type": "string" + }, + "spot_price": { + "default": "null", + "description": "(LC) The maximum price to use for reserving spot instances (defaults to on-demand price)", + "type": "string" + }, + "suspended_processes": { + "default": "null", + "description": "A list of processes to suspend for the Auto Scaling Group. The allowed values are `Launch`, `Terminate`, `HealthCheck`, `ReplaceUnhealthy`, `AZRebalance`, `AlarmNotification`, `ScheduledActions`, `AddToLoadBalancer`. Note that if you suspend either the `Launch` or `Terminate` process types, it can prevent your Auto Scaling Group from functioning properly", + "type": "list(string)" + }, + "tag_specifications": { + "default": [], + "description": "(LT) The tags to apply to the resources during launch", + "type": "list(any)" + }, + "tags": { + "default": [], + "description": "A list of tag blocks. Each element should have keys named key, value, and propagate_at_launch", + "type": "list(map(string))" + }, + "tags_as_map": { + "default": {}, + "description": "A map of tags and values in the same format as other resources accept. This will be converted into the non-standard format that the aws_autoscaling_group requires.", + "type": "map(string)" + }, + "target_group_arns": { + "default": [], + "description": "A set of `aws_alb_target_group` ARNs, for use with Application or Network Load Balancing", + "type": "list(string)", + "cloudcraft_name": "target_group_arns" + }, + "termination_policies": { + "default": "null", + "description": "A list of policies to decide how the instances in the Auto Scaling Group should be terminated. The allowed values are `OldestInstance`, `NewestInstance`, `OldestLaunchConfiguration`, `ClosestToNextInstanceHour`, `OldestLaunchTemplate`, `AllocationStrategy`, `Default`", + "type": "list(string)" + }, + "update_default_version": { + "default": "null", + "description": "(LT) Whether to update Default Version each update. Conflicts with `default_version`", + "type": "string" + }, + "use_lc": { + "default": false, + "description": "Determines whether to use a launch configuration in the autoscaling group or not", + "type": "bool" + }, + "use_lt": { + "default": false, + "description": "Determines whether to use a launch template in the autoscaling group or not", + "type": "bool" + }, + "use_mixed_instances_policy": { + "default": false, + "description": "Determines whether to use a mixed instances policy in the autoscaling group or not", + "type": "bool" + }, + "use_name_prefix": { + "default": true, + "description": "Determines whether to use `name` as is or create a unique name beginning with the `name` as the prefix", + "type": "bool" + }, + "user_data": { + "default": "null", + "description": "(LC) The user data to provide when launching the instance. Do not pass gzip-compressed data via this argument; see `user_data_base64` instead", + "type": "string" + }, + "user_data_base64": { + "default": "null", + "description": "The Base64-encoded user data to provide when launching the instance", + "type": "string" + }, + "vpc_zone_identifier": { + "default": "null", + "description": "A list of subnet IDs to launch resources in. Subnets automatically determine which availability zones the group will reside. Conflicts with `availability_zones`", + "type": "list(string)" + }, + "wait_for_capacity_timeout": { + "default": "null", + "description": "A maximum duration that Terraform should wait for ASG instances to be healthy before timing out. (See also Waiting for Capacity below.) Setting this to '0' causes Terraform to skip all Capacity Waiting behavior.", + "type": "string" + }, + "wait_for_elb_capacity": { + "default": "null", + "description": "Setting this will cause Terraform to wait for exactly this number of healthy instances in all attached load balancers on both create and update operations. Takes precedence over `min_elb_capacity` behavior.", + "type": "number" + } +} diff --git a/modules-metadata/autoscaling_cloudcraft.json b/src/terraform-aws-modules-metadata/autoscaling_cloudcraft.json similarity index 100% rename from modules-metadata/autoscaling_cloudcraft.json rename to src/terraform-aws-modules-metadata/autoscaling_cloudcraft.json diff --git a/src/terraform-aws-modules-metadata/autoscaling_variables.json b/src/terraform-aws-modules-metadata/autoscaling_variables.json new file mode 100644 index 0000000..d87f9fb --- /dev/null +++ b/src/terraform-aws-modules-metadata/autoscaling_variables.json @@ -0,0 +1,406 @@ +{ + "associate_public_ip_address": { + "default": "null", + "description": "(LC) Associate a public ip address with an instance in a VPC", + "type": "bool" + }, + "availability_zone": { + "default": "null", + "description": "A list of one or more availability zones for the group. Used for EC2-Classic and default subnets when not specified with `vpc_zone_identifier` argument. Conflicts with `vpc_zone_identifier`", + "type": "list(string)" + }, + "block_device_mappings": { + "default": [], + "description": "(LT) Specify volumes to attach to the instance besides the volumes specified by the AMI", + "type": "list(any)" + }, + "capacity_rebalance": { + "default": "null", + "description": "Indicates whether capacity rebalance is enabled", + "type": "bool" + }, + "capacity_reservation_specification": { + "default": "null", + "description": "(LT) Targeting for EC2 capacity reservations", + "type": "any" + }, + "cpu_options": { + "default": "null", + "description": "(LT) The CPU options for the instance", + "type": "map(string)" + }, + "create_asg": { + "default": true, + "description": "Determines whether to create autoscaling group or not", + "type": "bool" + }, + "create_lc": { + "default": false, + "description": "Determines whether to create launch configuration or not", + "type": "bool" + }, + "create_lt": { + "default": false, + "description": "Determines whether to create launch template or not", + "type": "bool" + }, + "credit_specification": { + "default": "null", + "description": "(LT) Customize the credit specification of the instance", + "type": "map(string)" + }, + "default_cooldown": { + "default": "null", + "description": "The amount of time, in seconds, after a scaling activity completes before another scaling activity can start", + "type": "number" + }, + "default_version": { + "default": "null", + "description": "(LT) Default Version of the launch template", + "type": "string" + }, + "delete_timeout": { + "default": "null", + "description": "Delete timeout to wait for destroying autoscaling group", + "type": "string" + }, + "description": { + "default": "null", + "description": "(LT) Description of the launch template", + "type": "string" + }, + "desired_capacity": { + "default": "null", + "description": "The number of Amazon EC2 instances that should be running in the autoscaling group", + "type": "number" + }, + "disable_api_termination": { + "default": "null", + "description": "(LT) If true, enables EC2 instance termination protection", + "type": "bool" + }, + "ebs_block_device": { + "default": [], + "description": "(LC) Additional EBS block devices to attach to the instance", + "type": "list(map(string))" + }, + "ebs_optimized": { + "default": "null", + "description": "If true, the launched EC2 instance will be EBS-optimized", + "type": "bool" + }, + "elastic_gpu_specifications": { + "default": "null", + "description": "(LT) The elastic GPU to attach to the instance", + "type": "map(string)" + }, + "elastic_inference_accelerator": { + "default": "null", + "description": "(LT) Configuration block containing an Elastic Inference Accelerator to attach to the instance", + "type": "map(string)" + }, + "enable_monitoring": { + "default": "null", + "description": "Enables/disables detailed monitoring", + "type": "bool" + }, + "enabled_metrics": { + "default": "null", + "description": "A list of metrics to collect. The allowed values are `GroupDesiredCapacity`, `GroupInServiceCapacity`, `GroupPendingCapacity`, `GroupMinSize`, `GroupMaxSize`, `GroupInServiceInstances`, `GroupPendingInstances`, `GroupStandbyInstances`, `GroupStandbyCapacity`, `GroupTerminatingCapacity`, `GroupTerminatingInstances`, `GroupTotalCapacity`, `GroupTotalInstances`", + "type": "list(string)" + }, + "enclave_options": { + "default": "null", + "description": "(LT) Enable Nitro Enclaves on launched instances", + "type": "map(string)" + }, + "ephemeral_block_device": { + "default": [], + "description": "(LC) Customize Ephemeral (also known as 'Instance Store') volumes on the instance", + "type": "list(map(string))" + }, + "force_delete": { + "default": "null", + "description": "Allows deleting the Auto Scaling Group without waiting for all instances in the pool to terminate. You can force an Auto Scaling Group to delete even if it's in the process of scaling a resource. Normally, Terraform drains all the instances before deleting the group. This bypasses that behavior and potentially leaves resources dangling", + "type": "bool" + }, + "health_check_grace_period": { + "default": "null", + "description": "Time (in seconds) after instance comes into service before checking health", + "type": "number" + }, + "health_check_type": { + "default": "null", + "description": "`EC2` or `ELB`. Controls how health checking is done", + "type": "string" + }, + "hibernation_options": { + "default": "null", + "description": "(LT) The hibernation options for the instance", + "type": "map(string)" + }, + "iam_instance_profile_arn": { + "default": "null", + "description": "(LT) The IAM Instance Profile ARN to launch the instance with", + "type": "string" + }, + "iam_instance_profile_name": { + "default": "null", + "description": "The name attribute of the IAM instance profile to associate with launched instances", + "type": "string" + }, + "image_id": { + "default": "", + "description": "The AMI from which to launch the instance", + "type": "string" + }, + "initial_lifecycle_hooks": { + "default": [], + "description": "One or more Lifecycle Hooks to attach to the Auto Scaling Group before instances are launched. The syntax is exactly the same as the separate `aws_autoscaling_lifecycle_hook` resource, without the `autoscaling_group_name` attribute. Please note that this will only work when creating a new Auto Scaling Group. For all other use-cases, please use `aws_autoscaling_lifecycle_hook` resource", + "type": "list(map(string))" + }, + "instance_initiated_shutdown_behavior": { + "default": "null", + "description": "(LT) Shutdown behavior for the instance. Can be `stop` or `terminate`. (Default: `stop`)", + "type": "string" + }, + "instance_market_options": { + "default": "null", + "description": "(LT) The market (purchasing) option for the instance", + "type": "any" + }, + "instance_refresh": { + "default": "null", + "description": "If this block is configured, start an Instance Refresh when this Auto Scaling Group is updated", + "type": "any" + }, + "instance_type": { + "default": "", + "description": "The type of the instance to launch", + "type": "string" + }, + "kernel_id": { + "default": "null", + "description": "(LT) The kernel ID", + "type": "string" + }, + "key_name": { + "default": "null", + "description": "The key name that should be used for the instance", + "type": "string" + }, + "launch_configuration": { + "default": "null", + "description": "Name of an existing launch configuration to be used (created outside of this module)", + "type": "string" + }, + "launch_template": { + "default": "null", + "description": "Name of an existing launch template to be used (created outside of this module)", + "type": "string" + }, + "lc_name": { + "default": "", + "description": "Name of launch configuration to be created", + "type": "string" + }, + "lc_use_name_prefix": { + "default": true, + "description": "Determines whether to use `lc_name` as is or create a unique name beginning with the `lc_name` as the prefix", + "type": "bool" + }, + "license_specifications": { + "default": "null", + "description": "(LT) A list of license specifications to associate with", + "type": "map(string)" + }, + "load_balancers": { + "default": [], + "description": "A list of elastic load balancer names to add to the autoscaling group names. Only valid for classic load balancers. For ALBs, use `target_group_arns` instead", + "type": "list(string)" + }, + "lt_name": { + "default": "", + "description": "Name of launch template to be created", + "type": "string" + }, + "lt_use_name_prefix": { + "default": true, + "description": "Determines whether to use `lt_name` as is or create a unique name beginning with the `lt_name` as the prefix", + "type": "bool" + }, + "lt_version": { + "default": "null", + "description": "Launch template version. Can be version number, `$Latest`, or `$Default`", + "type": "string" + }, + "max_instance_lifetime": { + "default": "null", + "description": "The maximum amount of time, in seconds, that an instance can be in service, values must be either equal to 0 or between 604800 and 31536000 seconds", + "type": "number" + }, + "max_size": { + "default": "null", + "description": "The maximum size of the autoscaling group", + "type": "number" + }, + "metadata_options": { + "default": "null", + "description": "Customize the metadata options for the instance", + "type": "map(string)" + }, + "metrics_granularity": { + "default": "null", + "description": "The granularity to associate with the metrics to collect. The only valid value is `1Minute`", + "type": "string" + }, + "min_elb_capacity": { + "default": "null", + "description": "Setting this causes Terraform to wait for this number of instances to show up healthy in the ELB only on creation. Updates will not wait on ELB instance number changes", + "type": "number" + }, + "min_size": { + "default": "null", + "description": "The minimum size of the autoscaling group", + "type": "number" + }, + "mixed_instances_policy": { + "default": "null", + "description": "Configuration block containing settings to define launch targets for Auto Scaling groups", + "type": "any" + }, + "name": { + "description": "Name used across the resources created", + "type": "string" + }, + "network_interfaces": { + "default": [], + "description": "(LT) Customize network interfaces to be attached at instance boot time", + "type": "list(any)" + }, + "placement": { + "default": "null", + "description": "(LT) The placement of the instance", + "type": "map(string)" + }, + "placement_group": { + "default": "null", + "description": "The name of the placement group into which you'll launch your instances, if any", + "type": "string" + }, + "placement_tenancy": { + "default": "null", + "description": "(LC) The tenancy of the instance. Valid values are `default` or `dedicated`", + "type": "string" + }, + "protect_from_scale_in": { + "default": false, + "description": "Allows setting instance protection. The autoscaling group will not select instances with this setting for termination during scale in events.", + "type": "bool" + }, + "ram_disk_id": { + "default": "null", + "description": "(LT) The ID of the ram disk", + "type": "string" + }, + "root_block_device": { + "default": [], + "description": "(LC) Customize details about the root block device of the instance", + "type": "list(map(string))" + }, + "security_groups": { + "default": "null", + "description": "A list of security group IDs to associate", + "type": "list(string)" + }, + "service_linked_role_arn": { + "default": "null", + "description": "The ARN of the service-linked role that the ASG will use to call other AWS services", + "type": "string" + }, + "spot_price": { + "default": "null", + "description": "(LC) The maximum price to use for reserving spot instances (defaults to on-demand price)", + "type": "string" + }, + "suspended_processes": { + "default": "null", + "description": "A list of processes to suspend for the Auto Scaling Group. The allowed values are `Launch`, `Terminate`, `HealthCheck`, `ReplaceUnhealthy`, `AZRebalance`, `AlarmNotification`, `ScheduledActions`, `AddToLoadBalancer`. Note that if you suspend either the `Launch` or `Terminate` process types, it can prevent your Auto Scaling Group from functioning properly", + "type": "list(string)" + }, + "tag_specifications": { + "default": [], + "description": "(LT) The tags to apply to the resources during launch", + "type": "list(any)" + }, + "tags": { + "default": [], + "description": "A list of tag blocks. Each element should have keys named key, value, and propagate_at_launch", + "type": "list(map(string))" + }, + "tags_as_map": { + "default": {}, + "description": "A map of tags and values in the same format as other resources accept. This will be converted into the non-standard format that the aws_autoscaling_group requires.", + "type": "map(string)" + }, + "target_group_arns": { + "default": [], + "description": "A set of `aws_alb_target_group` ARNs, for use with Application or Network Load Balancing", + "type": "list(string)" + }, + "termination_policies": { + "default": "null", + "description": "A list of policies to decide how the instances in the Auto Scaling Group should be terminated. The allowed values are `OldestInstance`, `NewestInstance`, `OldestLaunchConfiguration`, `ClosestToNextInstanceHour`, `OldestLaunchTemplate`, `AllocationStrategy`, `Default`", + "type": "list(string)" + }, + "update_default_version": { + "default": "null", + "description": "(LT) Whether to update Default Version each update. Conflicts with `default_version`", + "type": "string" + }, + "use_lc": { + "default": false, + "description": "Determines whether to use a launch configuration in the autoscaling group or not", + "type": "bool" + }, + "use_lt": { + "default": false, + "description": "Determines whether to use a launch template in the autoscaling group or not", + "type": "bool" + }, + "use_mixed_instances_policy": { + "default": false, + "description": "Determines whether to use a mixed instances policy in the autoscaling group or not", + "type": "bool" + }, + "use_name_prefix": { + "default": true, + "description": "Determines whether to use `name` as is or create a unique name beginning with the `name` as the prefix", + "type": "bool" + }, + "user_data": { + "default": "null", + "description": "(LC) The user data to provide when launching the instance. Do not pass gzip-compressed data via this argument; see `user_data_base64` instead", + "type": "string" + }, + "user_data_base64": { + "default": "null", + "description": "The Base64-encoded user data to provide when launching the instance", + "type": "string" + }, + "vpc_zone_identifier": { + "default": "null", + "description": "A list of subnet IDs to launch resources in. Subnets automatically determine which availability zones the group will reside. Conflicts with `availability_zones`", + "type": "list(string)" + }, + "wait_for_capacity_timeout": { + "default": "null", + "description": "A maximum duration that Terraform should wait for ASG instances to be healthy before timing out. (See also Waiting for Capacity below.) Setting this to '0' causes Terraform to skip all Capacity Waiting behavior.", + "type": "string" + }, + "wait_for_elb_capacity": { + "default": "null", + "description": "Setting this will cause Terraform to wait for exactly this number of healthy instances in all attached load balancers on both create and update operations. Takes precedence over `min_elb_capacity` behavior.", + "type": "number" + } +} diff --git a/src/terraform-aws-modules-metadata/autoscaling_version.txt b/src/terraform-aws-modules-metadata/autoscaling_version.txt new file mode 100644 index 0000000..b913b7c --- /dev/null +++ b/src/terraform-aws-modules-metadata/autoscaling_version.txt @@ -0,0 +1 @@ +v4.1.0 diff --git a/src/terraform-aws-modules-metadata/cloudfront.json b/src/terraform-aws-modules-metadata/cloudfront.json new file mode 100644 index 0000000..645b69f --- /dev/null +++ b/src/terraform-aws-modules-metadata/cloudfront.json @@ -0,0 +1,115 @@ +{ + "aliases": { + "default": "null", + "description": "Extra CNAMEs (alternate domain names), if any, for this distribution.", + "type": "list(string)" + }, + "comment": { + "default": "null", + "description": "Any comments you want to include about the distribution.", + "type": "string" + }, + "create_distribution": { + "default": true, + "description": "Controls if CloudFront distribution should be created", + "type": "bool" + }, + "create_origin_access_identity": { + "default": false, + "description": "Controls if CloudFront origin access identity should be created", + "type": "bool" + }, + "custom_error_response": { + "default": {}, + "description": "One or more custom error response elements", + "type": "any" + }, + "default_cache_behavior": { + "default": "null", + "description": "The default cache behavior for this distribution", + "type": "any" + }, + "default_root_object": { + "default": "null", + "description": "The object that you want CloudFront to return (for example, index.html) when an end user requests the root URL.", + "type": "string" + }, + "enabled": { + "default": true, + "description": "Whether the distribution is enabled to accept end user requests for content.", + "type": "bool" + }, + "geo_restriction": { + "default": {}, + "description": "The restriction configuration for this distribution (geo_restrictions)", + "type": "any" + }, + "http_version": { + "default": "http2", + "description": "The maximum HTTP version to support on the distribution. Allowed values are http1.1 and http2. The default is http2.", + "type": "string" + }, + "is_ipv6_enabled": { + "default": "null", + "description": "Whether the IPv6 is enabled for the distribution.", + "type": "bool" + }, + "logging_config": { + "default": {}, + "description": "The logging configuration that controls how logs are written to your distribution (maximum one).", + "type": "any" + }, + "ordered_cache_behavior": { + "default": [], + "description": "An ordered list of cache behaviors resource for this distribution. List from top to bottom in order of precedence. The topmost cache behavior will have precedence 0.", + "type": "any" + }, + "origin": { + "default": "null", + "description": "One or more origins for this distribution (multiples allowed).", + "type": "any" + }, + "origin_access_identities": { + "default": {}, + "description": "Map of CloudFront origin access identities (value as a comment)", + "type": "map(string)" + }, + "origin_group": { + "default": {}, + "description": "One or more origin_group for this distribution (multiples allowed).", + "type": "any" + }, + "price_class": { + "default": "null", + "description": "The price class for this distribution. One of PriceClass_All, PriceClass_200, PriceClass_100", + "type": "string" + }, + "retain_on_delete": { + "default": false, + "description": "Disables the distribution instead of deleting it when destroying the resource through Terraform. If this is set, the distribution needs to be deleted manually afterwards.", + "type": "bool" + }, + "tags": { + "default": "null", + "description": "A map of tags to assign to the resource.", + "type": "map(string)" + }, + "viewer_certificate": { + "default": { + "cloudfront_default_certificate": true, + "minimum_protocol_version": "TLSv1" + }, + "description": "The SSL configuration for this distribution", + "type": "any" + }, + "wait_for_deployment": { + "default": true, + "description": "If enabled, the resource will wait for the distribution status to change from InProgress to Deployed. Setting this tofalse will skip the process.", + "type": "bool" + }, + "web_acl_id": { + "default": "null", + "description": "If you're using AWS WAF to filter CloudFront requests, the Id of the AWS WAF web ACL that is associated with the distribution. The WAF Web ACL must exist in the WAF Global (CloudFront) region and the credentials configuring this argument must have waf:GetWebACL permissions assigned. If using WAFv2, provide the ARN of the web ACL.", + "type": "string" + } +} diff --git a/modules-metadata/elb_cloudcraft.json b/src/terraform-aws-modules-metadata/cloudfront_cloudcraft.json similarity index 100% rename from modules-metadata/elb_cloudcraft.json rename to src/terraform-aws-modules-metadata/cloudfront_cloudcraft.json diff --git a/src/terraform-aws-modules-metadata/cloudfront_variables.json b/src/terraform-aws-modules-metadata/cloudfront_variables.json new file mode 100644 index 0000000..645b69f --- /dev/null +++ b/src/terraform-aws-modules-metadata/cloudfront_variables.json @@ -0,0 +1,115 @@ +{ + "aliases": { + "default": "null", + "description": "Extra CNAMEs (alternate domain names), if any, for this distribution.", + "type": "list(string)" + }, + "comment": { + "default": "null", + "description": "Any comments you want to include about the distribution.", + "type": "string" + }, + "create_distribution": { + "default": true, + "description": "Controls if CloudFront distribution should be created", + "type": "bool" + }, + "create_origin_access_identity": { + "default": false, + "description": "Controls if CloudFront origin access identity should be created", + "type": "bool" + }, + "custom_error_response": { + "default": {}, + "description": "One or more custom error response elements", + "type": "any" + }, + "default_cache_behavior": { + "default": "null", + "description": "The default cache behavior for this distribution", + "type": "any" + }, + "default_root_object": { + "default": "null", + "description": "The object that you want CloudFront to return (for example, index.html) when an end user requests the root URL.", + "type": "string" + }, + "enabled": { + "default": true, + "description": "Whether the distribution is enabled to accept end user requests for content.", + "type": "bool" + }, + "geo_restriction": { + "default": {}, + "description": "The restriction configuration for this distribution (geo_restrictions)", + "type": "any" + }, + "http_version": { + "default": "http2", + "description": "The maximum HTTP version to support on the distribution. Allowed values are http1.1 and http2. The default is http2.", + "type": "string" + }, + "is_ipv6_enabled": { + "default": "null", + "description": "Whether the IPv6 is enabled for the distribution.", + "type": "bool" + }, + "logging_config": { + "default": {}, + "description": "The logging configuration that controls how logs are written to your distribution (maximum one).", + "type": "any" + }, + "ordered_cache_behavior": { + "default": [], + "description": "An ordered list of cache behaviors resource for this distribution. List from top to bottom in order of precedence. The topmost cache behavior will have precedence 0.", + "type": "any" + }, + "origin": { + "default": "null", + "description": "One or more origins for this distribution (multiples allowed).", + "type": "any" + }, + "origin_access_identities": { + "default": {}, + "description": "Map of CloudFront origin access identities (value as a comment)", + "type": "map(string)" + }, + "origin_group": { + "default": {}, + "description": "One or more origin_group for this distribution (multiples allowed).", + "type": "any" + }, + "price_class": { + "default": "null", + "description": "The price class for this distribution. One of PriceClass_All, PriceClass_200, PriceClass_100", + "type": "string" + }, + "retain_on_delete": { + "default": false, + "description": "Disables the distribution instead of deleting it when destroying the resource through Terraform. If this is set, the distribution needs to be deleted manually afterwards.", + "type": "bool" + }, + "tags": { + "default": "null", + "description": "A map of tags to assign to the resource.", + "type": "map(string)" + }, + "viewer_certificate": { + "default": { + "cloudfront_default_certificate": true, + "minimum_protocol_version": "TLSv1" + }, + "description": "The SSL configuration for this distribution", + "type": "any" + }, + "wait_for_deployment": { + "default": true, + "description": "If enabled, the resource will wait for the distribution status to change from InProgress to Deployed. Setting this tofalse will skip the process.", + "type": "bool" + }, + "web_acl_id": { + "default": "null", + "description": "If you're using AWS WAF to filter CloudFront requests, the Id of the AWS WAF web ACL that is associated with the distribution. The WAF Web ACL must exist in the WAF Global (CloudFront) region and the credentials configuring this argument must have waf:GetWebACL permissions assigned. If using WAFv2, provide the ARN of the web ACL.", + "type": "string" + } +} diff --git a/modules-metadata/redshift_version.txt b/src/terraform-aws-modules-metadata/cloudfront_version.txt similarity index 100% rename from modules-metadata/redshift_version.txt rename to src/terraform-aws-modules-metadata/cloudfront_version.txt diff --git a/modules-metadata/dynamodb-table.json b/src/terraform-aws-modules-metadata/dynamodb-table.json similarity index 78% rename from modules-metadata/dynamodb-table.json rename to src/terraform-aws-modules-metadata/dynamodb-table.json index 4b40d00..d3cde0b 100644 --- a/modules-metadata/dynamodb-table.json +++ b/src/terraform-aws-modules-metadata/dynamodb-table.json @@ -4,6 +4,30 @@ "description": "List of nested attribute definitions. Only required for hash_key and range_key attributes. Each attribute has two properties: name - (Required) The name of the attribute, type - (Required) Attribute type, which must be a scalar type: S, N, or B for (S)tring, (N)umber or (B)inary data", "type": "list(map(string))" }, + "autoscaling_defaults": { + "default": { + "scale_in_cooldown": 0, + "scale_out_cooldown": 0, + "target_value": 70 + }, + "description": "A map of default autoscaling settings", + "type": "map(string)" + }, + "autoscaling_indexes": { + "default": {}, + "description": "A map of index autoscaling configurations. See example in examples/autoscaling", + "type": "map(map(string))" + }, + "autoscaling_read": { + "default": {}, + "description": "A map of read autoscaling settings. `max_capacity` is the only required key. See example in examples/autoscaling", + "type": "map(string)" + }, + "autoscaling_write": { + "default": {}, + "description": "A map of write autoscaling settings. `max_capacity` is the only required key. See example in examples/autoscaling", + "type": "map(string)" + }, "billing_mode": { "default": "PAY_PER_REQUEST", "description": "Controls how you are billed for read/write throughput and how you manage capacity. The valid values are PROVISIONED or PAY_PER_REQUEST", @@ -17,7 +41,7 @@ "global_secondary_indexes": { "default": [], "description": "Describe a GSI for the table; subject to the normal limits on the number of GSIs, projected attributes, etc.", - "type": "list(any)" + "type": "any" }, "hash_key": { "default": "null", @@ -27,7 +51,7 @@ "local_secondary_indexes": { "default": [], "description": "Describe an LSI on the table; these can only be allocated at creation so you cannot change this definition after you have created the resource.", - "type": "list(any)" + "type": "any" }, "name": { "default": "null", @@ -49,6 +73,11 @@ "description": "The number of read units for this table. If the billing_mode is PROVISIONED, this field should be greater than 0", "type": "number" }, + "replica_regions": { + "default": [], + "description": "Region names for creating replicas for a global DynamoDB table.", + "type": "list(string)" + }, "server_side_encryption_enabled": { "default": false, "description": "Whether or not to enable encryption at rest using an AWS managed KMS customer master key (CMK)", diff --git a/modules-metadata/s3-bucket_cloudcraft.json b/src/terraform-aws-modules-metadata/dynamodb-table_cloudcraft.json similarity index 100% rename from modules-metadata/s3-bucket_cloudcraft.json rename to src/terraform-aws-modules-metadata/dynamodb-table_cloudcraft.json diff --git a/modules-metadata/dynamodb-table_variables.json b/src/terraform-aws-modules-metadata/dynamodb-table_variables.json similarity index 78% rename from modules-metadata/dynamodb-table_variables.json rename to src/terraform-aws-modules-metadata/dynamodb-table_variables.json index 4b40d00..d3cde0b 100644 --- a/modules-metadata/dynamodb-table_variables.json +++ b/src/terraform-aws-modules-metadata/dynamodb-table_variables.json @@ -4,6 +4,30 @@ "description": "List of nested attribute definitions. Only required for hash_key and range_key attributes. Each attribute has two properties: name - (Required) The name of the attribute, type - (Required) Attribute type, which must be a scalar type: S, N, or B for (S)tring, (N)umber or (B)inary data", "type": "list(map(string))" }, + "autoscaling_defaults": { + "default": { + "scale_in_cooldown": 0, + "scale_out_cooldown": 0, + "target_value": 70 + }, + "description": "A map of default autoscaling settings", + "type": "map(string)" + }, + "autoscaling_indexes": { + "default": {}, + "description": "A map of index autoscaling configurations. See example in examples/autoscaling", + "type": "map(map(string))" + }, + "autoscaling_read": { + "default": {}, + "description": "A map of read autoscaling settings. `max_capacity` is the only required key. See example in examples/autoscaling", + "type": "map(string)" + }, + "autoscaling_write": { + "default": {}, + "description": "A map of write autoscaling settings. `max_capacity` is the only required key. See example in examples/autoscaling", + "type": "map(string)" + }, "billing_mode": { "default": "PAY_PER_REQUEST", "description": "Controls how you are billed for read/write throughput and how you manage capacity. The valid values are PROVISIONED or PAY_PER_REQUEST", @@ -17,7 +41,7 @@ "global_secondary_indexes": { "default": [], "description": "Describe a GSI for the table; subject to the normal limits on the number of GSIs, projected attributes, etc.", - "type": "list(any)" + "type": "any" }, "hash_key": { "default": "null", @@ -27,7 +51,7 @@ "local_secondary_indexes": { "default": [], "description": "Describe an LSI on the table; these can only be allocated at creation so you cannot change this definition after you have created the resource.", - "type": "list(any)" + "type": "any" }, "name": { "default": "null", @@ -49,6 +73,11 @@ "description": "The number of read units for this table. If the billing_mode is PROVISIONED, this field should be greater than 0", "type": "number" }, + "replica_regions": { + "default": [], + "description": "Region names for creating replicas for a global DynamoDB table.", + "type": "list(string)" + }, "server_side_encryption_enabled": { "default": false, "description": "Whether or not to enable encryption at rest using an AWS managed KMS customer master key (CMK)", diff --git a/src/terraform-aws-modules-metadata/dynamodb-table_version.txt b/src/terraform-aws-modules-metadata/dynamodb-table_version.txt new file mode 100644 index 0000000..0ec25f7 --- /dev/null +++ b/src/terraform-aws-modules-metadata/dynamodb-table_version.txt @@ -0,0 +1 @@ +v1.0.0 diff --git a/modules-metadata/ec2-instance.json b/src/terraform-aws-modules-metadata/ec2-instance.json similarity index 94% rename from modules-metadata/ec2-instance.json rename to src/terraform-aws-modules-metadata/ec2-instance.json index 410c4ab..444beed 100644 --- a/modules-metadata/ec2-instance.json +++ b/src/terraform-aws-modules-metadata/ec2-instance.json @@ -73,6 +73,11 @@ "description": "The key name to use for the instance", "type": "string" }, + "metadata_options": { + "default": {}, + "description": "Customize the metadata options of the instance", + "type": "map(string)" + }, "monitoring": { "default": false, "description": "If true, the launched EC2 instance will have detailed monitoring enabled", @@ -87,6 +92,11 @@ "description": "Customize network interfaces to be attached at instance boot time", "type": "list(map(string))" }, + "num_suffix_format": { + "default": "-%d", + "description": "Numerical suffix format used as the volume and EC2 instance name suffix", + "type": "string" + }, "placement_group": { "default": "", "description": "The Placement Group to start the instance in", diff --git a/modules-metadata/ec2-instance_cloudcraft.json b/src/terraform-aws-modules-metadata/ec2-instance_cloudcraft.json similarity index 100% rename from modules-metadata/ec2-instance_cloudcraft.json rename to src/terraform-aws-modules-metadata/ec2-instance_cloudcraft.json diff --git a/modules-metadata/ec2-instance_variables.json b/src/terraform-aws-modules-metadata/ec2-instance_variables.json similarity index 94% rename from modules-metadata/ec2-instance_variables.json rename to src/terraform-aws-modules-metadata/ec2-instance_variables.json index 76e759d..e2e7664 100644 --- a/modules-metadata/ec2-instance_variables.json +++ b/src/terraform-aws-modules-metadata/ec2-instance_variables.json @@ -72,6 +72,11 @@ "description": "The key name to use for the instance", "type": "string" }, + "metadata_options": { + "default": {}, + "description": "Customize the metadata options of the instance", + "type": "map(string)" + }, "monitoring": { "default": false, "description": "If true, the launched EC2 instance will have detailed monitoring enabled", @@ -86,6 +91,11 @@ "description": "Customize network interfaces to be attached at instance boot time", "type": "list(map(string))" }, + "num_suffix_format": { + "default": "-%d", + "description": "Numerical suffix format used as the volume and EC2 instance name suffix", + "type": "string" + }, "placement_group": { "default": "", "description": "The Placement Group to start the instance in", diff --git a/src/terraform-aws-modules-metadata/ec2-instance_version.txt b/src/terraform-aws-modules-metadata/ec2-instance_version.txt new file mode 100644 index 0000000..c0436de --- /dev/null +++ b/src/terraform-aws-modules-metadata/ec2-instance_version.txt @@ -0,0 +1 @@ +v2.17.0 diff --git a/modules-metadata/elb.json b/src/terraform-aws-modules-metadata/elb.json similarity index 94% rename from modules-metadata/elb.json rename to src/terraform-aws-modules-metadata/elb.json index 8cbe7ac..0bab1ef 100644 --- a/modules-metadata/elb.json +++ b/src/terraform-aws-modules-metadata/elb.json @@ -14,6 +14,11 @@ "description": "The time in seconds to allow for connections to drain", "type": "number" }, + "create_elb": { + "default": true, + "description": "Create the elb or not", + "type": "bool" + }, "cross_zone_load_balancing": { "default": true, "description": "Enable cross-zone load balancing", diff --git a/modules-metadata/security-group_cloudcraft.json b/src/terraform-aws-modules-metadata/elb_cloudcraft.json similarity index 100% rename from modules-metadata/security-group_cloudcraft.json rename to src/terraform-aws-modules-metadata/elb_cloudcraft.json diff --git a/modules-metadata/elb_variables.json b/src/terraform-aws-modules-metadata/elb_variables.json similarity index 94% rename from modules-metadata/elb_variables.json rename to src/terraform-aws-modules-metadata/elb_variables.json index 8cbe7ac..0bab1ef 100644 --- a/modules-metadata/elb_variables.json +++ b/src/terraform-aws-modules-metadata/elb_variables.json @@ -14,6 +14,11 @@ "description": "The time in seconds to allow for connections to drain", "type": "number" }, + "create_elb": { + "default": true, + "description": "Create the elb or not", + "type": "bool" + }, "cross_zone_load_balancing": { "default": true, "description": "Enable cross-zone load balancing", diff --git a/src/terraform-aws-modules-metadata/elb_version.txt b/src/terraform-aws-modules-metadata/elb_version.txt new file mode 100644 index 0000000..ad55eb8 --- /dev/null +++ b/src/terraform-aws-modules-metadata/elb_version.txt @@ -0,0 +1 @@ +v3.0.0 diff --git a/src/terraform-aws-modules-metadata/lambda.json b/src/terraform-aws-modules-metadata/lambda.json new file mode 100644 index 0000000..d9f3f7b --- /dev/null +++ b/src/terraform-aws-modules-metadata/lambda.json @@ -0,0 +1,452 @@ +{ + "allowed_triggers": { + "default": {}, + "description": "Map of allowed triggers to create Lambda permissions", + "type": "map(any)" + }, + "artifacts_dir": { + "default": "builds", + "description": "Directory name where artifacts should be stored", + "type": "string" + }, + "attach_async_event_policy": { + "default": false, + "description": "Controls whether async event policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_cloudwatch_logs_policy": { + "default": true, + "description": "Controls whether CloudWatch Logs policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_dead_letter_policy": { + "default": false, + "description": "Controls whether SNS/SQS dead letter notification policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_network_policy": { + "default": false, + "description": "Controls whether VPC/network policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policies": { + "default": false, + "description": "Controls whether list of policies should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy": { + "default": false, + "description": "Controls whether policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy_json": { + "default": false, + "description": "Controls whether policy_json should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy_jsons": { + "default": false, + "description": "Controls whether policy_jsons should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy_statements": { + "default": false, + "description": "Controls whether policy_statements should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_tracing_policy": { + "default": false, + "description": "Controls whether X-Ray tracing policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "build_in_docker": { + "default": false, + "description": "Whether to build dependencies in Docker", + "type": "bool" + }, + "cloudwatch_logs_kms_key_id": { + "default": "null", + "description": "The ARN of the KMS Key to use when encrypting log data.", + "type": "string" + }, + "cloudwatch_logs_retention_in_days": { + "default": "null", + "description": "Specifies the number of days you want to retain log events in the specified log group. Possible values are: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, and 3653.", + "type": "number" + }, + "cloudwatch_logs_tags": { + "default": {}, + "description": "A map of tags to assign to the resource.", + "type": "map(string)" + }, + "compatible_runtimes": { + "default": [], + "description": "A list of Runtimes this layer is compatible with. Up to 5 runtimes can be specified.", + "type": "list(string)" + }, + "create": { + "default": true, + "description": "Controls whether resources should be created", + "type": "bool" + }, + "create_async_event_config": { + "default": false, + "description": "Controls whether async event configuration for Lambda Function/Alias should be created", + "type": "bool" + }, + "create_current_version_allowed_triggers": { + "default": true, + "description": "Whether to allow triggers on current version of Lambda Function (this will revoke permissions from previous version because Terraform manages only current resources)", + "type": "bool" + }, + "create_current_version_async_event_config": { + "default": true, + "description": "Whether to allow async event configuration on current version of Lambda Function (this will revoke permissions from previous version because Terraform manages only current resources)", + "type": "bool" + }, + "create_function": { + "default": true, + "description": "Controls whether Lambda Function resource should be created", + "type": "bool" + }, + "create_layer": { + "default": false, + "description": "Controls whether Lambda Layer resource should be created", + "type": "bool" + }, + "create_package": { + "default": true, + "description": "Controls whether Lambda package should be created", + "type": "bool" + }, + "create_role": { + "default": true, + "description": "Controls whether IAM role for Lambda Function should be created", + "type": "bool" + }, + "create_unqualified_alias_allowed_triggers": { + "default": true, + "description": "Whether to allow triggers on unqualified alias pointing to $LATEST version", + "type": "bool" + }, + "create_unqualified_alias_async_event_config": { + "default": true, + "description": "Whether to allow async event configuration on unqualified alias pointing to $LATEST version", + "type": "bool" + }, + "dead_letter_target_arn": { + "default": "null", + "description": "The ARN of an SNS topic or SQS queue to notify when an invocation fails.", + "type": "string" + }, + "description": { + "default": "", + "description": "Description of your Lambda Function (or Layer)", + "type": "string" + }, + "destination_on_failure": { + "default": "null", + "description": "Amazon Resource Name (ARN) of the destination resource for failed asynchronous invocations", + "type": "string" + }, + "destination_on_success": { + "default": "null", + "description": "Amazon Resource Name (ARN) of the destination resource for successful asynchronous invocations", + "type": "string" + }, + "docker_build_root": { + "default": "", + "description": "Root dir where to build in Docker", + "type": "string" + }, + "docker_file": { + "default": "", + "description": "Path to a Dockerfile when building in Docker", + "type": "string" + }, + "docker_image": { + "default": "", + "description": "Docker image to use for the build", + "type": "string" + }, + "docker_pip_cache": { + "default": "null", + "description": "Whether to mount a shared pip cache folder into docker environment or not", + "type": "any" + }, + "docker_with_ssh_agent": { + "default": false, + "description": "Whether to pass SSH_AUTH_SOCK into docker environment or not", + "type": "bool" + }, + "environment_variables": { + "default": {}, + "description": "A map that defines environment variables for the Lambda Function.", + "type": "map(string)" + }, + "event_source_mapping": { + "default": {}, + "description": "Map of event source mapping", + "type": "any" + }, + "file_system_arn": { + "default": "null", + "description": "The Amazon Resource Name (ARN) of the Amazon EFS Access Point that provides access to the file system.", + "type": "string" + }, + "file_system_local_mount_path": { + "default": "null", + "description": "The path where the function can access the file system, starting with /mnt/.", + "type": "string" + }, + "function_name": { + "default": "", + "description": "A unique name for your Lambda Function", + "type": "string" + }, + "handler": { + "default": "", + "description": "Lambda Function entrypoint in your code", + "type": "string" + }, + "hash_extra": { + "default": "", + "description": "The string to add into hashing function. Useful when building same source path for different functions.", + "type": "string" + }, + "image_config_command": { + "default": [], + "description": "The CMD for the docker image", + "type": "list(string)" + }, + "image_config_entry_point": { + "default": [], + "description": "The ENTRYPOINT for the docker image", + "type": "list(string)" + }, + "image_config_working_directory": { + "default": "null", + "description": "The working directory for the docker image", + "type": "string" + }, + "image_uri": { + "default": "null", + "description": "The ECR image URI containing the function's deployment package.", + "type": "string" + }, + "kms_key_arn": { + "default": "null", + "description": "The ARN of KMS key to use by your Lambda Function", + "type": "string" + }, + "lambda_at_edge": { + "default": false, + "description": "Set this to true if using Lambda@Edge, to enable publishing, limit the timeout, and allow edgelambda.amazonaws.com to invoke the function", + "type": "bool" + }, + "lambda_role": { + "default": "", + "description": " IAM role ARN attached to the Lambda Function. This governs both who / what can invoke your Lambda Function, as well as what resources our Lambda Function has access to. See Lambda Permission Model for more details.", + "type": "string" + }, + "layer_name": { + "default": "", + "description": "Name of Lambda Layer to create", + "type": "string" + }, + "layers": { + "default": "null", + "description": "List of Lambda Layer Version ARNs (maximum of 5) to attach to your Lambda Function.", + "type": "list(string)" + }, + "license_info": { + "default": "", + "description": "License info for your Lambda Layer. Eg, MIT or full url of a license.", + "type": "string" + }, + "local_existing_package": { + "default": "null", + "description": "The absolute path to an existing zip-file to use", + "type": "string" + }, + "maximum_event_age_in_seconds": { + "default": "null", + "description": "Maximum age of a request that Lambda sends to a function for processing in seconds. Valid values between 60 and 21600.", + "type": "number" + }, + "maximum_retry_attempts": { + "default": "null", + "description": "Maximum number of times to retry when the function returns an error. Valid values between 0 and 2. Defaults to 2.", + "type": "number" + }, + "memory_size": { + "default": 128, + "description": "Amount of memory in MB your Lambda Function can use at runtime. Valid value between 128 MB to 10,240 MB (10 GB), in 64 MB increments.", + "type": "number" + }, + "number_of_policies": { + "default": 0, + "description": "Number of policies to attach to IAM role for Lambda Function", + "type": "number" + }, + "number_of_policy_jsons": { + "default": 0, + "description": "Number of policies JSON to attach to IAM role for Lambda Function", + "type": "number" + }, + "package_type": { + "default": "Zip", + "description": "The Lambda deployment package type. Valid options: Zip or Image", + "type": "string" + }, + "policies": { + "default": [], + "description": "List of policy statements ARN to attach to Lambda Function role", + "type": "list(string)" + }, + "policy": { + "default": "null", + "description": "An additional policy document ARN to attach to the Lambda Function role", + "type": "string" + }, + "policy_json": { + "default": "null", + "description": "An additional policy document as JSON to attach to the Lambda Function role", + "type": "string" + }, + "policy_jsons": { + "default": [], + "description": "List of additional policy documents as JSON to attach to Lambda Function role", + "type": "list(string)" + }, + "policy_statements": { + "default": {}, + "description": "Map of dynamic policy statements to attach to Lambda Function role", + "type": "any" + }, + "provisioned_concurrent_executions": { + "default": -1, + "description": "Amount of capacity to allocate. Set to 1 or greater to enable, or set to 0 to disable provisioned concurrency.", + "type": "number" + }, + "publish": { + "default": false, + "description": "Whether to publish creation/change as new Lambda Function Version.", + "type": "bool" + }, + "reserved_concurrent_executions": { + "default": -1, + "description": "The amount of reserved concurrent executions for this Lambda Function. A value of 0 disables Lambda Function from being triggered and -1 removes any concurrency limitations. Defaults to Unreserved Concurrency Limits -1.", + "type": "number" + }, + "role_description": { + "default": "null", + "description": "Description of IAM role to use for Lambda Function", + "type": "string" + }, + "role_force_detach_policies": { + "default": true, + "description": "Specifies to force detaching any policies the IAM role has before destroying it.", + "type": "bool" + }, + "role_name": { + "default": "null", + "description": "Name of IAM role to use for Lambda Function", + "type": "string" + }, + "role_path": { + "default": "null", + "description": "Path of IAM role to use for Lambda Function", + "type": "string" + }, + "role_permissions_boundary": { + "default": "null", + "description": "The ARN of the policy that is used to set the permissions boundary for the IAM role used by Lambda Function", + "type": "string" + }, + "role_tags": { + "default": {}, + "description": "A map of tags to assign to IAM role", + "type": "map(string)" + }, + "runtime": { + "default": "", + "description": "Lambda Function runtime", + "type": "string" + }, + "s3_acl": { + "default": "private", + "description": "The canned ACL to apply. Valid values are private, public-read, public-read-write, aws-exec-read, authenticated-read, bucket-owner-read, and bucket-owner-full-control. Defaults to private.", + "type": "string" + }, + "s3_bucket": { + "default": "null", + "description": "S3 bucket to store artifacts", + "type": "string" + }, + "s3_existing_package": { + "default": "null", + "description": "The S3 bucket object with keys bucket, key, version pointing to an existing zip-file to use", + "type": "map(string)" + }, + "s3_object_storage_class": { + "default": "ONEZONE_IA", + "description": "Specifies the desired Storage Class for the artifact uploaded to S3. Can be either STANDARD, REDUCED_REDUNDANCY, ONEZONE_IA, INTELLIGENT_TIERING, or STANDARD_IA.", + "type": "string" + }, + "s3_object_tags": { + "default": {}, + "description": "A map of tags to assign to S3 bucket object.", + "type": "map(string)" + }, + "s3_server_side_encryption": { + "default": "null", + "description": "Specifies server-side encryption of the object in S3. Valid values are \"AES256\" and \"aws:kms\".", + "type": "string" + }, + "source_path": { + "default": "null", + "description": "The absolute path to a local file or directory containing your Lambda source code", + "type": "any" + }, + "store_on_s3": { + "default": false, + "description": "Whether to store produced artifacts on S3 or locally.", + "type": "bool" + }, + "tags": { + "default": {}, + "description": "A map of tags to assign to resources.", + "type": "map(string)" + }, + "timeout": { + "default": 3, + "description": "The amount of time your Lambda Function has to run in seconds.", + "type": "number" + }, + "tracing_mode": { + "default": "null", + "description": "Tracing mode of the Lambda Function. Valid value can be either PassThrough or Active.", + "type": "string" + }, + "trusted_entities": { + "default": [], + "description": "List of additional trusted entities for assuming Lambda Function role (trust relationship)", + "type": "any" + }, + "use_existing_cloudwatch_log_group": { + "default": false, + "description": "Whether to use an existing CloudWatch log group or create new", + "type": "bool" + }, + "vpc_security_group_ids": { + "default": "null", + "description": "List of security group ids when Lambda Function should run in the VPC.", + "type": "list(string)" + }, + "vpc_subnet_ids": { + "default": "null", + "description": "List of subnet ids when Lambda Function should run in the VPC. Usually private or intra subnets.", + "type": "list(string)" + } +} diff --git a/modules-metadata/sns_cloudcraft.json b/src/terraform-aws-modules-metadata/lambda_cloudcraft.json similarity index 100% rename from modules-metadata/sns_cloudcraft.json rename to src/terraform-aws-modules-metadata/lambda_cloudcraft.json diff --git a/src/terraform-aws-modules-metadata/lambda_variables.json b/src/terraform-aws-modules-metadata/lambda_variables.json new file mode 100644 index 0000000..d9f3f7b --- /dev/null +++ b/src/terraform-aws-modules-metadata/lambda_variables.json @@ -0,0 +1,452 @@ +{ + "allowed_triggers": { + "default": {}, + "description": "Map of allowed triggers to create Lambda permissions", + "type": "map(any)" + }, + "artifacts_dir": { + "default": "builds", + "description": "Directory name where artifacts should be stored", + "type": "string" + }, + "attach_async_event_policy": { + "default": false, + "description": "Controls whether async event policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_cloudwatch_logs_policy": { + "default": true, + "description": "Controls whether CloudWatch Logs policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_dead_letter_policy": { + "default": false, + "description": "Controls whether SNS/SQS dead letter notification policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_network_policy": { + "default": false, + "description": "Controls whether VPC/network policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policies": { + "default": false, + "description": "Controls whether list of policies should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy": { + "default": false, + "description": "Controls whether policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy_json": { + "default": false, + "description": "Controls whether policy_json should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy_jsons": { + "default": false, + "description": "Controls whether policy_jsons should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_policy_statements": { + "default": false, + "description": "Controls whether policy_statements should be added to IAM role for Lambda Function", + "type": "bool" + }, + "attach_tracing_policy": { + "default": false, + "description": "Controls whether X-Ray tracing policy should be added to IAM role for Lambda Function", + "type": "bool" + }, + "build_in_docker": { + "default": false, + "description": "Whether to build dependencies in Docker", + "type": "bool" + }, + "cloudwatch_logs_kms_key_id": { + "default": "null", + "description": "The ARN of the KMS Key to use when encrypting log data.", + "type": "string" + }, + "cloudwatch_logs_retention_in_days": { + "default": "null", + "description": "Specifies the number of days you want to retain log events in the specified log group. Possible values are: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, and 3653.", + "type": "number" + }, + "cloudwatch_logs_tags": { + "default": {}, + "description": "A map of tags to assign to the resource.", + "type": "map(string)" + }, + "compatible_runtimes": { + "default": [], + "description": "A list of Runtimes this layer is compatible with. Up to 5 runtimes can be specified.", + "type": "list(string)" + }, + "create": { + "default": true, + "description": "Controls whether resources should be created", + "type": "bool" + }, + "create_async_event_config": { + "default": false, + "description": "Controls whether async event configuration for Lambda Function/Alias should be created", + "type": "bool" + }, + "create_current_version_allowed_triggers": { + "default": true, + "description": "Whether to allow triggers on current version of Lambda Function (this will revoke permissions from previous version because Terraform manages only current resources)", + "type": "bool" + }, + "create_current_version_async_event_config": { + "default": true, + "description": "Whether to allow async event configuration on current version of Lambda Function (this will revoke permissions from previous version because Terraform manages only current resources)", + "type": "bool" + }, + "create_function": { + "default": true, + "description": "Controls whether Lambda Function resource should be created", + "type": "bool" + }, + "create_layer": { + "default": false, + "description": "Controls whether Lambda Layer resource should be created", + "type": "bool" + }, + "create_package": { + "default": true, + "description": "Controls whether Lambda package should be created", + "type": "bool" + }, + "create_role": { + "default": true, + "description": "Controls whether IAM role for Lambda Function should be created", + "type": "bool" + }, + "create_unqualified_alias_allowed_triggers": { + "default": true, + "description": "Whether to allow triggers on unqualified alias pointing to $LATEST version", + "type": "bool" + }, + "create_unqualified_alias_async_event_config": { + "default": true, + "description": "Whether to allow async event configuration on unqualified alias pointing to $LATEST version", + "type": "bool" + }, + "dead_letter_target_arn": { + "default": "null", + "description": "The ARN of an SNS topic or SQS queue to notify when an invocation fails.", + "type": "string" + }, + "description": { + "default": "", + "description": "Description of your Lambda Function (or Layer)", + "type": "string" + }, + "destination_on_failure": { + "default": "null", + "description": "Amazon Resource Name (ARN) of the destination resource for failed asynchronous invocations", + "type": "string" + }, + "destination_on_success": { + "default": "null", + "description": "Amazon Resource Name (ARN) of the destination resource for successful asynchronous invocations", + "type": "string" + }, + "docker_build_root": { + "default": "", + "description": "Root dir where to build in Docker", + "type": "string" + }, + "docker_file": { + "default": "", + "description": "Path to a Dockerfile when building in Docker", + "type": "string" + }, + "docker_image": { + "default": "", + "description": "Docker image to use for the build", + "type": "string" + }, + "docker_pip_cache": { + "default": "null", + "description": "Whether to mount a shared pip cache folder into docker environment or not", + "type": "any" + }, + "docker_with_ssh_agent": { + "default": false, + "description": "Whether to pass SSH_AUTH_SOCK into docker environment or not", + "type": "bool" + }, + "environment_variables": { + "default": {}, + "description": "A map that defines environment variables for the Lambda Function.", + "type": "map(string)" + }, + "event_source_mapping": { + "default": {}, + "description": "Map of event source mapping", + "type": "any" + }, + "file_system_arn": { + "default": "null", + "description": "The Amazon Resource Name (ARN) of the Amazon EFS Access Point that provides access to the file system.", + "type": "string" + }, + "file_system_local_mount_path": { + "default": "null", + "description": "The path where the function can access the file system, starting with /mnt/.", + "type": "string" + }, + "function_name": { + "default": "", + "description": "A unique name for your Lambda Function", + "type": "string" + }, + "handler": { + "default": "", + "description": "Lambda Function entrypoint in your code", + "type": "string" + }, + "hash_extra": { + "default": "", + "description": "The string to add into hashing function. Useful when building same source path for different functions.", + "type": "string" + }, + "image_config_command": { + "default": [], + "description": "The CMD for the docker image", + "type": "list(string)" + }, + "image_config_entry_point": { + "default": [], + "description": "The ENTRYPOINT for the docker image", + "type": "list(string)" + }, + "image_config_working_directory": { + "default": "null", + "description": "The working directory for the docker image", + "type": "string" + }, + "image_uri": { + "default": "null", + "description": "The ECR image URI containing the function's deployment package.", + "type": "string" + }, + "kms_key_arn": { + "default": "null", + "description": "The ARN of KMS key to use by your Lambda Function", + "type": "string" + }, + "lambda_at_edge": { + "default": false, + "description": "Set this to true if using Lambda@Edge, to enable publishing, limit the timeout, and allow edgelambda.amazonaws.com to invoke the function", + "type": "bool" + }, + "lambda_role": { + "default": "", + "description": " IAM role ARN attached to the Lambda Function. This governs both who / what can invoke your Lambda Function, as well as what resources our Lambda Function has access to. See Lambda Permission Model for more details.", + "type": "string" + }, + "layer_name": { + "default": "", + "description": "Name of Lambda Layer to create", + "type": "string" + }, + "layers": { + "default": "null", + "description": "List of Lambda Layer Version ARNs (maximum of 5) to attach to your Lambda Function.", + "type": "list(string)" + }, + "license_info": { + "default": "", + "description": "License info for your Lambda Layer. Eg, MIT or full url of a license.", + "type": "string" + }, + "local_existing_package": { + "default": "null", + "description": "The absolute path to an existing zip-file to use", + "type": "string" + }, + "maximum_event_age_in_seconds": { + "default": "null", + "description": "Maximum age of a request that Lambda sends to a function for processing in seconds. Valid values between 60 and 21600.", + "type": "number" + }, + "maximum_retry_attempts": { + "default": "null", + "description": "Maximum number of times to retry when the function returns an error. Valid values between 0 and 2. Defaults to 2.", + "type": "number" + }, + "memory_size": { + "default": 128, + "description": "Amount of memory in MB your Lambda Function can use at runtime. Valid value between 128 MB to 10,240 MB (10 GB), in 64 MB increments.", + "type": "number" + }, + "number_of_policies": { + "default": 0, + "description": "Number of policies to attach to IAM role for Lambda Function", + "type": "number" + }, + "number_of_policy_jsons": { + "default": 0, + "description": "Number of policies JSON to attach to IAM role for Lambda Function", + "type": "number" + }, + "package_type": { + "default": "Zip", + "description": "The Lambda deployment package type. Valid options: Zip or Image", + "type": "string" + }, + "policies": { + "default": [], + "description": "List of policy statements ARN to attach to Lambda Function role", + "type": "list(string)" + }, + "policy": { + "default": "null", + "description": "An additional policy document ARN to attach to the Lambda Function role", + "type": "string" + }, + "policy_json": { + "default": "null", + "description": "An additional policy document as JSON to attach to the Lambda Function role", + "type": "string" + }, + "policy_jsons": { + "default": [], + "description": "List of additional policy documents as JSON to attach to Lambda Function role", + "type": "list(string)" + }, + "policy_statements": { + "default": {}, + "description": "Map of dynamic policy statements to attach to Lambda Function role", + "type": "any" + }, + "provisioned_concurrent_executions": { + "default": -1, + "description": "Amount of capacity to allocate. Set to 1 or greater to enable, or set to 0 to disable provisioned concurrency.", + "type": "number" + }, + "publish": { + "default": false, + "description": "Whether to publish creation/change as new Lambda Function Version.", + "type": "bool" + }, + "reserved_concurrent_executions": { + "default": -1, + "description": "The amount of reserved concurrent executions for this Lambda Function. A value of 0 disables Lambda Function from being triggered and -1 removes any concurrency limitations. Defaults to Unreserved Concurrency Limits -1.", + "type": "number" + }, + "role_description": { + "default": "null", + "description": "Description of IAM role to use for Lambda Function", + "type": "string" + }, + "role_force_detach_policies": { + "default": true, + "description": "Specifies to force detaching any policies the IAM role has before destroying it.", + "type": "bool" + }, + "role_name": { + "default": "null", + "description": "Name of IAM role to use for Lambda Function", + "type": "string" + }, + "role_path": { + "default": "null", + "description": "Path of IAM role to use for Lambda Function", + "type": "string" + }, + "role_permissions_boundary": { + "default": "null", + "description": "The ARN of the policy that is used to set the permissions boundary for the IAM role used by Lambda Function", + "type": "string" + }, + "role_tags": { + "default": {}, + "description": "A map of tags to assign to IAM role", + "type": "map(string)" + }, + "runtime": { + "default": "", + "description": "Lambda Function runtime", + "type": "string" + }, + "s3_acl": { + "default": "private", + "description": "The canned ACL to apply. Valid values are private, public-read, public-read-write, aws-exec-read, authenticated-read, bucket-owner-read, and bucket-owner-full-control. Defaults to private.", + "type": "string" + }, + "s3_bucket": { + "default": "null", + "description": "S3 bucket to store artifacts", + "type": "string" + }, + "s3_existing_package": { + "default": "null", + "description": "The S3 bucket object with keys bucket, key, version pointing to an existing zip-file to use", + "type": "map(string)" + }, + "s3_object_storage_class": { + "default": "ONEZONE_IA", + "description": "Specifies the desired Storage Class for the artifact uploaded to S3. Can be either STANDARD, REDUCED_REDUNDANCY, ONEZONE_IA, INTELLIGENT_TIERING, or STANDARD_IA.", + "type": "string" + }, + "s3_object_tags": { + "default": {}, + "description": "A map of tags to assign to S3 bucket object.", + "type": "map(string)" + }, + "s3_server_side_encryption": { + "default": "null", + "description": "Specifies server-side encryption of the object in S3. Valid values are \"AES256\" and \"aws:kms\".", + "type": "string" + }, + "source_path": { + "default": "null", + "description": "The absolute path to a local file or directory containing your Lambda source code", + "type": "any" + }, + "store_on_s3": { + "default": false, + "description": "Whether to store produced artifacts on S3 or locally.", + "type": "bool" + }, + "tags": { + "default": {}, + "description": "A map of tags to assign to resources.", + "type": "map(string)" + }, + "timeout": { + "default": 3, + "description": "The amount of time your Lambda Function has to run in seconds.", + "type": "number" + }, + "tracing_mode": { + "default": "null", + "description": "Tracing mode of the Lambda Function. Valid value can be either PassThrough or Active.", + "type": "string" + }, + "trusted_entities": { + "default": [], + "description": "List of additional trusted entities for assuming Lambda Function role (trust relationship)", + "type": "any" + }, + "use_existing_cloudwatch_log_group": { + "default": false, + "description": "Whether to use an existing CloudWatch log group or create new", + "type": "bool" + }, + "vpc_security_group_ids": { + "default": "null", + "description": "List of security group ids when Lambda Function should run in the VPC.", + "type": "list(string)" + }, + "vpc_subnet_ids": { + "default": "null", + "description": "List of subnet ids when Lambda Function should run in the VPC. Usually private or intra subnets.", + "type": "list(string)" + } +} diff --git a/modules-metadata/sqs_version.txt b/src/terraform-aws-modules-metadata/lambda_version.txt similarity index 100% rename from modules-metadata/sqs_version.txt rename to src/terraform-aws-modules-metadata/lambda_version.txt diff --git a/modules-metadata/rds-aurora.json b/src/terraform-aws-modules-metadata/rds-aurora.json similarity index 60% rename from modules-metadata/rds-aurora.json rename to src/terraform-aws-modules-metadata/rds-aurora.json index e0e8a1c..3dd1de9 100644 --- a/modules-metadata/rds-aurora.json +++ b/src/terraform-aws-modules-metadata/rds-aurora.json @@ -1,4 +1,9 @@ { + "allow_major_version_upgrade": { + "default": false, + "description": "Determines whether major engine upgrades are allowed when changing engine version", + "type": "bool" + }, "allowed_cidr_blocks": { "default": [], "description": "A list of CIDR blocks which are allowed to access the database", @@ -6,7 +11,7 @@ }, "allowed_security_groups": { "default": [], - "description": "A list of Security Group ID's to allow access to.", + "description": "A list of Security Group ID's to allow access to", "type": "list(string)" }, "apply_immediately": { @@ -21,7 +26,7 @@ }, "backtrack_window": { "default": 0, - "description": "The target backtrack window, in seconds. Only available for aurora engine currently. To disable backtracking, set this value to 0. Defaults to 0. Must be between 0 and 259200 (72 hours)", + "description": "The target backtrack window, in seconds. Only available for aurora engine currently. To disable backtracking, set this value to 0. Must be between 0 and 259200 (72 hours)", "type": "number" }, "backup_retention_period": { @@ -34,9 +39,29 @@ "description": "The identifier of the CA certificate for the DB instance", "type": "string" }, + "cluster_tags": { + "default": {}, + "description": "A map of tags to add to only the RDS cluster. Used for AWS Instance Scheduler tagging", + "type": "map(string)" + }, "copy_tags_to_snapshot": { "default": false, - "description": "Copy all Cluster tags to snapshots.", + "description": "Copy all Cluster tags to snapshots", + "type": "bool" + }, + "create_cluster": { + "default": true, + "description": "Whether cluster should be created (it affects almost all resources)", + "type": "bool" + }, + "create_monitoring_role": { + "default": true, + "description": "Whether to create the IAM role for RDS enhanced monitoring", + "type": "bool" + }, + "create_random_password": { + "default": true, + "description": "Whether to create random password for RDS primary cluster", "type": "bool" }, "create_security_group": { @@ -69,9 +94,14 @@ "description": "If the DB instance should have deletion protection enabled", "type": "bool" }, + "enable_http_endpoint": { + "default": false, + "description": "Whether or not to enable the Data API for a serverless Aurora database engine", + "type": "bool" + }, "enabled_cloudwatch_logs_exports": { "default": [], - "description": "List of log types to export to cloudwatch", + "description": "List of log types to export to cloudwatch - `audit`, `error`, `general`, `slowquery`, `postgresql`", "type": "list(string)" }, "engine": { @@ -81,12 +111,12 @@ }, "engine_mode": { "default": "provisioned", - "description": "The database engine mode. Valid values: global, parallelquery, provisioned, serverless.", + "description": "The database engine mode. Valid values: global, parallelquery, provisioned, serverless, multimaster", "type": "string" }, "engine_version": { "default": "5.6.10a", - "description": "Aurora database engine version.", + "description": "Aurora database engine version", "type": "string" }, "final_snapshot_identifier_prefix": { @@ -101,22 +131,78 @@ }, "iam_database_authentication_enabled": { "default": false, - "description": "Specifies whether IAM Database authentication should be enabled or not. Not all versions and instances are supported. Refer to the AWS documentation to see which versions are supported.", + "description": "Specifies whether IAM Database authentication should be enabled or not. Not all versions and instances are supported. Refer to the AWS documentation to see which versions are supported", + "type": "bool" + }, + "iam_role_description": { + "default": "null", + "description": "Description of the role", + "type": "string" + }, + "iam_role_force_detach_policies": { + "default": "null", + "description": "Whether to force detaching any policies the role has before destroying it", + "type": "bool" + }, + "iam_role_managed_policy_arns": { + "default": "null", + "description": "Set of exclusive IAM managed policy ARNs to attach to the IAM role", + "type": "list(string)" + }, + "iam_role_max_session_duration": { + "default": "null", + "description": "Maximum session duration (in seconds) that you want to set for the role", + "type": "number" + }, + "iam_role_name": { + "default": "null", + "description": "Friendly name of the role", + "type": "string" + }, + "iam_role_path": { + "default": "null", + "description": "Path to the role", + "type": "string" + }, + "iam_role_permissions_boundary": { + "default": "null", + "description": "The ARN of the policy that is used to set the permissions boundary for the role", + "type": "string" + }, + "iam_role_use_name_prefix": { + "default": false, + "description": "Whether to use `iam_role_name` as is or create a unique name beginning with the `iam_role_name` as the prefix", "type": "bool" }, "iam_roles": { "default": [], - "description": "A List of ARNs for the IAM roles to associate to the RDS Cluster.", + "description": "A List of ARNs for the IAM roles to associate to the RDS Cluster", "type": "list(string)" }, "instance_type": { - "description": "Instance type to use", + "default": "", + "description": "Instance type to use at master instance. If instance_type_replica is not set it will use the same type for replica instances", "type": "string", "cloudcraft_name": "instanceType" }, + "instance_type_replica": { + "default": "null", + "description": "Instance type to use at replica instance", + "type": "string" + }, + "instances_parameters": { + "default": [], + "description": "Customized instance settings. Supported keys: `instance_name`, `instance_type`, `instance_promotion_tier`, `publicly_accessible`", + "type": "list(map(string))" + }, + "is_primary_cluster": { + "default": true, + "description": "Whether to create a primary cluster (set to false to be a part of a Global database)", + "type": "bool" + }, "kms_key_id": { "default": "", - "description": "The ARN for the KMS encryption key if one is set to the cluster.", + "description": "The ARN for the KMS encryption key if one is set to the cluster", "type": "string" }, "monitoring_interval": { @@ -124,23 +210,29 @@ "description": "The interval (seconds) between points when Enhanced Monitoring metrics are collected", "type": "number" }, + "monitoring_role_arn": { + "default": "", + "description": "IAM role used by RDS to send enhanced monitoring metrics to CloudWatch", + "type": "string" + }, "name": { - "description": "Name given resources", + "default": "", + "description": "Name used across resources created", "type": "string" }, "password": { "default": "", - "description": "Master DB password", + "description": "Master DB password. Note - when specifying a value here, 'create_random_password' should be set to `false`", "type": "string" }, "performance_insights_enabled": { "default": false, - "description": "Specifies whether Performance Insights is enabled or not.", + "description": "Specifies whether Performance Insights is enabled or not", "type": "bool" }, "performance_insights_kms_key_id": { "default": "", - "description": "The ARN for the KMS key to encrypt Performance Insights data.", + "description": "The ARN for the KMS key to encrypt Performance Insights data", "type": "string" }, "port": { @@ -150,7 +242,8 @@ }, "predefined_metric_type": { "default": "RDSReaderAverageCPUUtilization", - "description": "The metric type to scale on. Valid values are RDSReaderAverageCPUUtilization and RDSReaderAverageDatabaseConnections." + "description": "The metric type to scale on. Valid values are RDSReaderAverageCPUUtilization and RDSReaderAverageDatabaseConnections", + "type": "string" }, "preferred_backup_window": { "default": "02:00-03:00", @@ -169,16 +262,17 @@ }, "replica_count": { "default": 1, - "description": "Number of reader nodes to create. If `replica_scale_enable` is `true`, the value of `replica_scale_min` is used instead." + "description": "Number of reader nodes to create. If `replica_scale_enable` is `true`, the value of `replica_scale_min` is used instead.", + "type": "number" }, "replica_scale_connections": { "default": 700, - "description": "Average number of connections to trigger autoscaling at. Default value is 70% of db.r4.large's default max_connections", + "description": "Average number of connections threshold which will initiate autoscaling. Default value is 70% of db.r4.large's default max_connections", "type": "number" }, "replica_scale_cpu": { "default": 70, - "description": "CPU usage to trigger autoscaling at", + "description": "CPU threshold which will initiate autoscaling", "type": "number" }, "replica_scale_enabled": { @@ -193,12 +287,12 @@ }, "replica_scale_max": { "default": 0, - "description": "Maximum number of replicas to allow scaling for", + "description": "Maximum number of read replicas permitted when autoscaling is enabled", "type": "number" }, "replica_scale_min": { "default": 2, - "description": "Minimum number of replicas to allow scaling for", + "description": "Minimum number of read replicas permitted when autoscaling is enabled", "type": "number" }, "replica_scale_out_cooldown": { @@ -208,7 +302,13 @@ }, "replication_source_identifier": { "default": "", - "description": "ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica." + "description": "ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica", + "type": "string" + }, + "s3_import": { + "default": "null", + "description": "Configuration map used to restore from a Percona Xtrabackup in S3 (only MySQL is supported)", + "type": "map(string)" }, "scaling_configuration": { "default": {}, @@ -217,22 +317,28 @@ }, "security_group_description": { "default": "Managed by Terraform", - "description": "The description of the security group. If value is set to empty string it will contain cluster name in the description.", + "description": "The description of the security group. If value is set to empty string it will contain cluster name in the description", "type": "string" }, + "security_group_tags": { + "default": {}, + "description": "Additional tags for the security group", + "type": "map(string)" + }, "skip_final_snapshot": { "default": false, - "description": "Should a final snapshot be created on cluster destroy", + "description": "Determines whether a final DB snapshot is created before the DB cluster is deleted. If true is specified, no DB snapshot is created.", "type": "bool" }, "snapshot_identifier": { - "default": "", + "default": "null", "description": "DB snapshot to create this database from", "type": "string" }, "source_region": { "default": "", - "description": "The source region for an encrypted replica DB cluster." + "description": "The source region for an encrypted replica DB cluster", + "type": "string" }, "storage_encrypted": { "default": true, @@ -241,7 +347,7 @@ }, "subnets": { "default": [], - "description": "List of subnet IDs to use", + "description": "List of subnet IDs used by database subnet group created", "type": "list(string)" }, "tags": { @@ -255,6 +361,7 @@ "type": "string" }, "vpc_id": { + "default": "", "description": "VPC ID", "type": "string" }, diff --git a/modules-metadata/rds-aurora_cloudcraft.json b/src/terraform-aws-modules-metadata/rds-aurora_cloudcraft.json similarity index 100% rename from modules-metadata/rds-aurora_cloudcraft.json rename to src/terraform-aws-modules-metadata/rds-aurora_cloudcraft.json diff --git a/modules-metadata/rds-aurora_variables.json b/src/terraform-aws-modules-metadata/rds-aurora_variables.json similarity index 60% rename from modules-metadata/rds-aurora_variables.json rename to src/terraform-aws-modules-metadata/rds-aurora_variables.json index a1921ce..8e8aaec 100644 --- a/modules-metadata/rds-aurora_variables.json +++ b/src/terraform-aws-modules-metadata/rds-aurora_variables.json @@ -1,4 +1,9 @@ { + "allow_major_version_upgrade": { + "default": false, + "description": "Determines whether major engine upgrades are allowed when changing engine version", + "type": "bool" + }, "allowed_cidr_blocks": { "default": [], "description": "A list of CIDR blocks which are allowed to access the database", @@ -6,7 +11,7 @@ }, "allowed_security_groups": { "default": [], - "description": "A list of Security Group ID's to allow access to.", + "description": "A list of Security Group ID's to allow access to", "type": "list(string)" }, "apply_immediately": { @@ -21,7 +26,7 @@ }, "backtrack_window": { "default": 0, - "description": "The target backtrack window, in seconds. Only available for aurora engine currently. To disable backtracking, set this value to 0. Defaults to 0. Must be between 0 and 259200 (72 hours)", + "description": "The target backtrack window, in seconds. Only available for aurora engine currently. To disable backtracking, set this value to 0. Must be between 0 and 259200 (72 hours)", "type": "number" }, "backup_retention_period": { @@ -34,9 +39,29 @@ "description": "The identifier of the CA certificate for the DB instance", "type": "string" }, + "cluster_tags": { + "default": {}, + "description": "A map of tags to add to only the RDS cluster. Used for AWS Instance Scheduler tagging", + "type": "map(string)" + }, "copy_tags_to_snapshot": { "default": false, - "description": "Copy all Cluster tags to snapshots.", + "description": "Copy all Cluster tags to snapshots", + "type": "bool" + }, + "create_cluster": { + "default": true, + "description": "Whether cluster should be created (it affects almost all resources)", + "type": "bool" + }, + "create_monitoring_role": { + "default": true, + "description": "Whether to create the IAM role for RDS enhanced monitoring", + "type": "bool" + }, + "create_random_password": { + "default": true, + "description": "Whether to create random password for RDS primary cluster", "type": "bool" }, "create_security_group": { @@ -69,9 +94,14 @@ "description": "If the DB instance should have deletion protection enabled", "type": "bool" }, + "enable_http_endpoint": { + "default": false, + "description": "Whether or not to enable the Data API for a serverless Aurora database engine", + "type": "bool" + }, "enabled_cloudwatch_logs_exports": { "default": [], - "description": "List of log types to export to cloudwatch", + "description": "List of log types to export to cloudwatch - `audit`, `error`, `general`, `slowquery`, `postgresql`", "type": "list(string)" }, "engine": { @@ -81,12 +111,12 @@ }, "engine_mode": { "default": "provisioned", - "description": "The database engine mode. Valid values: global, parallelquery, provisioned, serverless.", + "description": "The database engine mode. Valid values: global, parallelquery, provisioned, serverless, multimaster", "type": "string" }, "engine_version": { "default": "5.6.10a", - "description": "Aurora database engine version.", + "description": "Aurora database engine version", "type": "string" }, "final_snapshot_identifier_prefix": { @@ -101,21 +131,77 @@ }, "iam_database_authentication_enabled": { "default": false, - "description": "Specifies whether IAM Database authentication should be enabled or not. Not all versions and instances are supported. Refer to the AWS documentation to see which versions are supported.", + "description": "Specifies whether IAM Database authentication should be enabled or not. Not all versions and instances are supported. Refer to the AWS documentation to see which versions are supported", + "type": "bool" + }, + "iam_role_description": { + "default": "null", + "description": "Description of the role", + "type": "string" + }, + "iam_role_force_detach_policies": { + "default": "null", + "description": "Whether to force detaching any policies the role has before destroying it", + "type": "bool" + }, + "iam_role_managed_policy_arns": { + "default": "null", + "description": "Set of exclusive IAM managed policy ARNs to attach to the IAM role", + "type": "list(string)" + }, + "iam_role_max_session_duration": { + "default": "null", + "description": "Maximum session duration (in seconds) that you want to set for the role", + "type": "number" + }, + "iam_role_name": { + "default": "null", + "description": "Friendly name of the role", + "type": "string" + }, + "iam_role_path": { + "default": "null", + "description": "Path to the role", + "type": "string" + }, + "iam_role_permissions_boundary": { + "default": "null", + "description": "The ARN of the policy that is used to set the permissions boundary for the role", + "type": "string" + }, + "iam_role_use_name_prefix": { + "default": false, + "description": "Whether to use `iam_role_name` as is or create a unique name beginning with the `iam_role_name` as the prefix", "type": "bool" }, "iam_roles": { "default": [], - "description": "A List of ARNs for the IAM roles to associate to the RDS Cluster.", + "description": "A List of ARNs for the IAM roles to associate to the RDS Cluster", "type": "list(string)" }, "instance_type": { - "description": "Instance type to use", + "default": "", + "description": "Instance type to use at master instance. If instance_type_replica is not set it will use the same type for replica instances", "type": "string" }, + "instance_type_replica": { + "default": "null", + "description": "Instance type to use at replica instance", + "type": "string" + }, + "instances_parameters": { + "default": [], + "description": "Customized instance settings. Supported keys: `instance_name`, `instance_type`, `instance_promotion_tier`, `publicly_accessible`", + "type": "list(map(string))" + }, + "is_primary_cluster": { + "default": true, + "description": "Whether to create a primary cluster (set to false to be a part of a Global database)", + "type": "bool" + }, "kms_key_id": { "default": "", - "description": "The ARN for the KMS encryption key if one is set to the cluster.", + "description": "The ARN for the KMS encryption key if one is set to the cluster", "type": "string" }, "monitoring_interval": { @@ -123,23 +209,29 @@ "description": "The interval (seconds) between points when Enhanced Monitoring metrics are collected", "type": "number" }, + "monitoring_role_arn": { + "default": "", + "description": "IAM role used by RDS to send enhanced monitoring metrics to CloudWatch", + "type": "string" + }, "name": { - "description": "Name given resources", + "default": "", + "description": "Name used across resources created", "type": "string" }, "password": { "default": "", - "description": "Master DB password", + "description": "Master DB password. Note - when specifying a value here, 'create_random_password' should be set to `false`", "type": "string" }, "performance_insights_enabled": { "default": false, - "description": "Specifies whether Performance Insights is enabled or not.", + "description": "Specifies whether Performance Insights is enabled or not", "type": "bool" }, "performance_insights_kms_key_id": { "default": "", - "description": "The ARN for the KMS key to encrypt Performance Insights data.", + "description": "The ARN for the KMS key to encrypt Performance Insights data", "type": "string" }, "port": { @@ -149,7 +241,8 @@ }, "predefined_metric_type": { "default": "RDSReaderAverageCPUUtilization", - "description": "The metric type to scale on. Valid values are RDSReaderAverageCPUUtilization and RDSReaderAverageDatabaseConnections." + "description": "The metric type to scale on. Valid values are RDSReaderAverageCPUUtilization and RDSReaderAverageDatabaseConnections", + "type": "string" }, "preferred_backup_window": { "default": "02:00-03:00", @@ -168,16 +261,17 @@ }, "replica_count": { "default": 1, - "description": "Number of reader nodes to create. If `replica_scale_enable` is `true`, the value of `replica_scale_min` is used instead." + "description": "Number of reader nodes to create. If `replica_scale_enable` is `true`, the value of `replica_scale_min` is used instead.", + "type": "number" }, "replica_scale_connections": { "default": 700, - "description": "Average number of connections to trigger autoscaling at. Default value is 70% of db.r4.large's default max_connections", + "description": "Average number of connections threshold which will initiate autoscaling. Default value is 70% of db.r4.large's default max_connections", "type": "number" }, "replica_scale_cpu": { "default": 70, - "description": "CPU usage to trigger autoscaling at", + "description": "CPU threshold which will initiate autoscaling", "type": "number" }, "replica_scale_enabled": { @@ -192,12 +286,12 @@ }, "replica_scale_max": { "default": 0, - "description": "Maximum number of replicas to allow scaling for", + "description": "Maximum number of read replicas permitted when autoscaling is enabled", "type": "number" }, "replica_scale_min": { "default": 2, - "description": "Minimum number of replicas to allow scaling for", + "description": "Minimum number of read replicas permitted when autoscaling is enabled", "type": "number" }, "replica_scale_out_cooldown": { @@ -207,7 +301,13 @@ }, "replication_source_identifier": { "default": "", - "description": "ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica." + "description": "ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica", + "type": "string" + }, + "s3_import": { + "default": "null", + "description": "Configuration map used to restore from a Percona Xtrabackup in S3 (only MySQL is supported)", + "type": "map(string)" }, "scaling_configuration": { "default": {}, @@ -216,22 +316,28 @@ }, "security_group_description": { "default": "Managed by Terraform", - "description": "The description of the security group. If value is set to empty string it will contain cluster name in the description.", + "description": "The description of the security group. If value is set to empty string it will contain cluster name in the description", "type": "string" }, + "security_group_tags": { + "default": {}, + "description": "Additional tags for the security group", + "type": "map(string)" + }, "skip_final_snapshot": { "default": false, - "description": "Should a final snapshot be created on cluster destroy", + "description": "Determines whether a final DB snapshot is created before the DB cluster is deleted. If true is specified, no DB snapshot is created.", "type": "bool" }, "snapshot_identifier": { - "default": "", + "default": "null", "description": "DB snapshot to create this database from", "type": "string" }, "source_region": { "default": "", - "description": "The source region for an encrypted replica DB cluster." + "description": "The source region for an encrypted replica DB cluster", + "type": "string" }, "storage_encrypted": { "default": true, @@ -240,7 +346,7 @@ }, "subnets": { "default": [], - "description": "List of subnet IDs to use", + "description": "List of subnet IDs used by database subnet group created", "type": "list(string)" }, "tags": { @@ -254,6 +360,7 @@ "type": "string" }, "vpc_id": { + "default": "", "description": "VPC ID", "type": "string" }, diff --git a/src/terraform-aws-modules-metadata/rds-aurora_version.txt b/src/terraform-aws-modules-metadata/rds-aurora_version.txt new file mode 100644 index 0000000..ee80415 --- /dev/null +++ b/src/terraform-aws-modules-metadata/rds-aurora_version.txt @@ -0,0 +1 @@ +v5.2.0 diff --git a/modules-metadata/rds.json b/src/terraform-aws-modules-metadata/rds.json similarity index 74% rename from modules-metadata/rds.json rename to src/terraform-aws-modules-metadata/rds.json index 5291598..256f162 100644 --- a/modules-metadata/rds.json +++ b/src/terraform-aws-modules-metadata/rds.json @@ -19,12 +19,12 @@ "type": "bool" }, "availability_zone": { - "default": "", + "default": "null", "description": "The Availability Zone of the RDS instance", "type": "string" }, "backup_retention_period": { - "default": 1, + "default": "null", "description": "The days to retain backups for", "type": "number" }, @@ -33,13 +33,13 @@ "type": "string" }, "ca_cert_identifier": { - "default": "rds-ca-2019", + "default": "null", "description": "Specifies the identifier of the CA certificate for the DB instance", "type": "string" }, "character_set_name": { - "default": "", - "description": "(Optional) The character set name to use for DB encoding in Oracle instances. This can't be changed. See Oracle Character Sets Supported in Amazon RDS for more information", + "default": "null", + "description": "(Optional) The character set name to use for DB encoding in Oracle instances. This can't be changed. See Oracle Character Sets Supported in Amazon RDS and Collations and Character Sets for Microsoft SQL Server for more information. This can only be set on creation.", "type": "string" }, "copy_tags_to_snapshot": { @@ -72,16 +72,66 @@ "description": "Create IAM role with a defined name that permits RDS to send enhanced monitoring metrics to CloudWatch Logs.", "type": "bool" }, - "db_subnet_group_name": { + "create_random_password": { + "default": false, + "description": "Whether to create random password for RDS primary cluster", + "type": "bool" + }, + "db_instance_tags": { + "default": {}, + "description": "Additional tags for the DB instance", + "type": "map(string)" + }, + "db_option_group_tags": { + "default": {}, + "description": "Additional tags for the DB option group", + "type": "map(string)" + }, + "db_parameter_group_tags": { + "default": {}, + "description": "Additional tags for the DB parameter group", + "type": "map(string)" + }, + "db_subnet_group_description": { "default": "", + "description": "Description of the DB subnet group to create", + "type": "string" + }, + "db_subnet_group_name": { + "default": "null", "description": "Name of DB subnet group. DB instance will be created in the VPC associated with the DB subnet group. If unspecified, will be created in the default VPC", "type": "string" }, + "db_subnet_group_tags": { + "default": {}, + "description": "Additional tags for the DB subnet group", + "type": "map(string)" + }, + "db_subnet_group_use_name_prefix": { + "default": true, + "description": "Determines whether to use `subnet_group_name` as is or create a unique name beginning with the `subnet_group_name` as the prefix", + "type": "bool" + }, + "delete_automated_backups": { + "default": true, + "description": "Specifies whether to remove automated backups immediately after the DB instance is deleted", + "type": "bool" + }, "deletion_protection": { "default": false, "description": "The database can't be deleted when this value is set to true.", "type": "bool" }, + "domain": { + "default": "null", + "description": "The ID of the Directory Service Active Directory domain to create the instance in", + "type": "string" + }, + "domain_iam_role_name": { + "default": "null", + "description": "(Required if domain is provided) The name of the IAM role to be used when making API calls to the Directory Service", + "type": "string" + }, "enabled_cloudwatch_logs_exports": { "default": [], "description": "List of log types to enable for exporting to CloudWatch logs. If omitted, no logs will be exported. Valid values (depending on engine): alert, audit, error, general, listener, slowquery, trace, postgresql (PostgreSQL), upgrade (PostgreSQL).", @@ -106,9 +156,14 @@ "description": "The name of your final DB snapshot when this DB instance is deleted.", "type": "string" }, + "final_snapshot_identifier_prefix": { + "default": "final", + "description": "The name which is prefixed to the final snapshot on cluster destroy", + "type": "string" + }, "iam_database_authentication_enabled": { "default": false, - "description": "Specifies whether or mappings of AWS Identity and Access Management (IAM) accounts to database accounts is enabled", + "description": "Specifies whether or not the mappings of AWS Identity and Access Management (IAM) accounts to database accounts are enabled", "type": "bool" }, "identifier": { @@ -126,12 +181,12 @@ "type": "number" }, "kms_key_id": { - "default": "", + "default": "null", "description": "The ARN for the KMS encryption key. If creating an encrypted replica, set this to the destination KMS ARN. If storage_encrypted is set to true and kms_key_id is not specified the default KMS key created in your account will be used", "type": "string" }, "license_model": { - "default": "", + "default": "null", "description": "License model information for this DB instance. Optional, but required for some DB engines, i.e. Oracle SE1", "type": "string" }, @@ -155,7 +210,7 @@ "type": "number" }, "monitoring_role_arn": { - "default": "", + "default": "null", "description": "The ARN for the IAM role that permits RDS to send enhanced monitoring metrics to CloudWatch Logs. Must be specified if monitoring_interval is non-zero.", "type": "string" }, @@ -171,7 +226,7 @@ "cloudcraft_name": "isMultiAZ" }, "name": { - "default": "", + "default": "null", "description": "The DB name to create. If omitted, no database is created initially", "type": "string" }, @@ -181,8 +236,8 @@ "type": "string" }, "option_group_name": { - "default": "", - "description": "Name of the DB option group to associate", + "default": "null", + "description": "Name of the option group", "type": "string" }, "option_group_timeouts": { @@ -192,6 +247,11 @@ "description": "Define maximum timeout for deletion of `aws_db_option_group` resource", "type": "map(string)" }, + "option_group_use_name_prefix": { + "default": true, + "description": "Determines whether to use `option_group_name` as is or create a unique name beginning with the `option_group_name` as the prefix", + "type": "bool" + }, "options": { "default": [], "description": "A list of Options to apply.", @@ -203,16 +263,22 @@ "type": "string" }, "parameter_group_name": { - "default": "", + "default": "null", "description": "Name of the DB parameter group to associate or create", "type": "string" }, + "parameter_group_use_name_prefix": { + "default": true, + "description": "Determines whether to use `parameter_group_name` as is or create a unique name beginning with the `parameter_group_name` as the prefix", + "type": "bool" + }, "parameters": { "default": [], "description": "A list of DB parameters (map) to apply", "type": "list(map(string))" }, "password": { + "default": "", "description": "Password for the master DB user. Note that this may show up in logs, and it will be stored in the state file", "type": "string" }, @@ -221,6 +287,11 @@ "description": "Specifies whether Performance Insights are enabled", "type": "bool" }, + "performance_insights_kms_key_id": { + "default": "null", + "description": "The ARN for the KMS key to encrypt Performance Insights data.", + "type": "string" + }, "performance_insights_retention_period": { "default": 7, "description": "The amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years).", @@ -235,18 +306,28 @@ "description": "Bool to control if instance is publicly accessible", "type": "bool" }, + "random_password_length": { + "default": 10, + "description": "(Optional) Length of random password to create. (default: 10)", + "type": "number" + }, "replicate_source_db": { - "default": "", + "default": "null", "description": "Specifies that this resource is a Replicate database, and to use this value as the source database. This correlates to the identifier of another Amazon RDS Database to replicate.", "type": "string" }, + "s3_import": { + "default": "null", + "description": "Restore from a Percona Xtrabackup in S3 (only MySQL is supported)", + "type": "map(string)" + }, "skip_final_snapshot": { - "default": true, + "default": false, "description": "Determines whether a final DB snapshot is created before the DB instance is deleted. If true is specified, no DBSnapshot is created. If false is specified, a DB snapshot is created before the DB instance is deleted, using the value from final_snapshot_identifier", "type": "bool" }, "snapshot_identifier": { - "default": "", + "default": "null", "description": "Specifies whether or not to create this database from a snapshot. This correlates to the snapshot ID you'd find in the RDS console, e.g: rds:production-2015-06-26-06-05.", "type": "string" }, @@ -256,8 +337,8 @@ "type": "bool" }, "storage_type": { - "default": "gp2", - "description": "One of 'standard' (magnetic), 'gp2' (general purpose SSD), or 'io1' (provisioned IOPS SSD). The default is 'io1' if iops is specified, 'standard' if not. Note that this behaviour is different from the AWS web console, where the default is 'gp2'.", + "default": "null", + "description": "One of 'standard' (magnetic), 'gp2' (general purpose SSD), or 'io1' (provisioned IOPS SSD). The default is 'io1' if iops is specified, 'gp2' if not.", "type": "string" }, "subnet_ids": { @@ -280,15 +361,10 @@ "type": "map(string)" }, "timezone": { - "default": "", + "default": "null", "description": "(Optional) Time zone of the DB instance. timezone is currently only supported by Microsoft SQL Server. The timezone can only be set on creation. See MSSQL User Guide for more information.", "type": "string" }, - "use_parameter_group_name_prefix": { - "default": true, - "description": "Whether to use the parameter group name prefix or not", - "type": "bool" - }, "username": { "description": "Username for the master DB user", "type": "string" diff --git a/modules-metadata/rds_cloudcraft.json b/src/terraform-aws-modules-metadata/rds_cloudcraft.json similarity index 100% rename from modules-metadata/rds_cloudcraft.json rename to src/terraform-aws-modules-metadata/rds_cloudcraft.json diff --git a/modules-metadata/rds_variables.json b/src/terraform-aws-modules-metadata/rds_variables.json similarity index 74% rename from modules-metadata/rds_variables.json rename to src/terraform-aws-modules-metadata/rds_variables.json index 100be6d..f573813 100644 --- a/modules-metadata/rds_variables.json +++ b/src/terraform-aws-modules-metadata/rds_variables.json @@ -19,12 +19,12 @@ "type": "bool" }, "availability_zone": { - "default": "", + "default": "null", "description": "The Availability Zone of the RDS instance", "type": "string" }, "backup_retention_period": { - "default": 1, + "default": "null", "description": "The days to retain backups for", "type": "number" }, @@ -33,13 +33,13 @@ "type": "string" }, "ca_cert_identifier": { - "default": "rds-ca-2019", + "default": "null", "description": "Specifies the identifier of the CA certificate for the DB instance", "type": "string" }, "character_set_name": { - "default": "", - "description": "(Optional) The character set name to use for DB encoding in Oracle instances. This can't be changed. See Oracle Character Sets Supported in Amazon RDS for more information", + "default": "null", + "description": "(Optional) The character set name to use for DB encoding in Oracle instances. This can't be changed. See Oracle Character Sets Supported in Amazon RDS and Collations and Character Sets for Microsoft SQL Server for more information. This can only be set on creation.", "type": "string" }, "copy_tags_to_snapshot": { @@ -72,16 +72,66 @@ "description": "Create IAM role with a defined name that permits RDS to send enhanced monitoring metrics to CloudWatch Logs.", "type": "bool" }, - "db_subnet_group_name": { + "create_random_password": { + "default": false, + "description": "Whether to create random password for RDS primary cluster", + "type": "bool" + }, + "db_instance_tags": { + "default": {}, + "description": "Additional tags for the DB instance", + "type": "map(string)" + }, + "db_option_group_tags": { + "default": {}, + "description": "Additional tags for the DB option group", + "type": "map(string)" + }, + "db_parameter_group_tags": { + "default": {}, + "description": "Additional tags for the DB parameter group", + "type": "map(string)" + }, + "db_subnet_group_description": { "default": "", + "description": "Description of the DB subnet group to create", + "type": "string" + }, + "db_subnet_group_name": { + "default": "null", "description": "Name of DB subnet group. DB instance will be created in the VPC associated with the DB subnet group. If unspecified, will be created in the default VPC", "type": "string" }, + "db_subnet_group_tags": { + "default": {}, + "description": "Additional tags for the DB subnet group", + "type": "map(string)" + }, + "db_subnet_group_use_name_prefix": { + "default": true, + "description": "Determines whether to use `subnet_group_name` as is or create a unique name beginning with the `subnet_group_name` as the prefix", + "type": "bool" + }, + "delete_automated_backups": { + "default": true, + "description": "Specifies whether to remove automated backups immediately after the DB instance is deleted", + "type": "bool" + }, "deletion_protection": { "default": false, "description": "The database can't be deleted when this value is set to true.", "type": "bool" }, + "domain": { + "default": "null", + "description": "The ID of the Directory Service Active Directory domain to create the instance in", + "type": "string" + }, + "domain_iam_role_name": { + "default": "null", + "description": "(Required if domain is provided) The name of the IAM role to be used when making API calls to the Directory Service", + "type": "string" + }, "enabled_cloudwatch_logs_exports": { "default": [], "description": "List of log types to enable for exporting to CloudWatch logs. If omitted, no logs will be exported. Valid values (depending on engine): alert, audit, error, general, listener, slowquery, trace, postgresql (PostgreSQL), upgrade (PostgreSQL).", @@ -105,9 +155,14 @@ "description": "The name of your final DB snapshot when this DB instance is deleted.", "type": "string" }, + "final_snapshot_identifier_prefix": { + "default": "final", + "description": "The name which is prefixed to the final snapshot on cluster destroy", + "type": "string" + }, "iam_database_authentication_enabled": { "default": false, - "description": "Specifies whether or mappings of AWS Identity and Access Management (IAM) accounts to database accounts is enabled", + "description": "Specifies whether or not the mappings of AWS Identity and Access Management (IAM) accounts to database accounts are enabled", "type": "bool" }, "identifier": { @@ -124,12 +179,12 @@ "type": "number" }, "kms_key_id": { - "default": "", + "default": "null", "description": "The ARN for the KMS encryption key. If creating an encrypted replica, set this to the destination KMS ARN. If storage_encrypted is set to true and kms_key_id is not specified the default KMS key created in your account will be used", "type": "string" }, "license_model": { - "default": "", + "default": "null", "description": "License model information for this DB instance. Optional, but required for some DB engines, i.e. Oracle SE1", "type": "string" }, @@ -153,7 +208,7 @@ "type": "number" }, "monitoring_role_arn": { - "default": "", + "default": "null", "description": "The ARN for the IAM role that permits RDS to send enhanced monitoring metrics to CloudWatch Logs. Must be specified if monitoring_interval is non-zero.", "type": "string" }, @@ -168,7 +223,7 @@ "type": "bool" }, "name": { - "default": "", + "default": "null", "description": "The DB name to create. If omitted, no database is created initially", "type": "string" }, @@ -178,8 +233,8 @@ "type": "string" }, "option_group_name": { - "default": "", - "description": "Name of the DB option group to associate", + "default": "null", + "description": "Name of the option group", "type": "string" }, "option_group_timeouts": { @@ -189,6 +244,11 @@ "description": "Define maximum timeout for deletion of `aws_db_option_group` resource", "type": "map(string)" }, + "option_group_use_name_prefix": { + "default": true, + "description": "Determines whether to use `option_group_name` as is or create a unique name beginning with the `option_group_name` as the prefix", + "type": "bool" + }, "options": { "default": [], "description": "A list of Options to apply.", @@ -200,16 +260,22 @@ "type": "string" }, "parameter_group_name": { - "default": "", + "default": "null", "description": "Name of the DB parameter group to associate or create", "type": "string" }, + "parameter_group_use_name_prefix": { + "default": true, + "description": "Determines whether to use `parameter_group_name` as is or create a unique name beginning with the `parameter_group_name` as the prefix", + "type": "bool" + }, "parameters": { "default": [], "description": "A list of DB parameters (map) to apply", "type": "list(map(string))" }, "password": { + "default": "", "description": "Password for the master DB user. Note that this may show up in logs, and it will be stored in the state file", "type": "string" }, @@ -218,6 +284,11 @@ "description": "Specifies whether Performance Insights are enabled", "type": "bool" }, + "performance_insights_kms_key_id": { + "default": "null", + "description": "The ARN for the KMS key to encrypt Performance Insights data.", + "type": "string" + }, "performance_insights_retention_period": { "default": 7, "description": "The amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years).", @@ -232,18 +303,28 @@ "description": "Bool to control if instance is publicly accessible", "type": "bool" }, + "random_password_length": { + "default": 10, + "description": "(Optional) Length of random password to create. (default: 10)", + "type": "number" + }, "replicate_source_db": { - "default": "", + "default": "null", "description": "Specifies that this resource is a Replicate database, and to use this value as the source database. This correlates to the identifier of another Amazon RDS Database to replicate.", "type": "string" }, + "s3_import": { + "default": "null", + "description": "Restore from a Percona Xtrabackup in S3 (only MySQL is supported)", + "type": "map(string)" + }, "skip_final_snapshot": { - "default": true, + "default": false, "description": "Determines whether a final DB snapshot is created before the DB instance is deleted. If true is specified, no DBSnapshot is created. If false is specified, a DB snapshot is created before the DB instance is deleted, using the value from final_snapshot_identifier", "type": "bool" }, "snapshot_identifier": { - "default": "", + "default": "null", "description": "Specifies whether or not to create this database from a snapshot. This correlates to the snapshot ID you'd find in the RDS console, e.g: rds:production-2015-06-26-06-05.", "type": "string" }, @@ -253,8 +334,8 @@ "type": "bool" }, "storage_type": { - "default": "gp2", - "description": "One of 'standard' (magnetic), 'gp2' (general purpose SSD), or 'io1' (provisioned IOPS SSD). The default is 'io1' if iops is specified, 'standard' if not. Note that this behaviour is different from the AWS web console, where the default is 'gp2'.", + "default": "null", + "description": "One of 'standard' (magnetic), 'gp2' (general purpose SSD), or 'io1' (provisioned IOPS SSD). The default is 'io1' if iops is specified, 'gp2' if not.", "type": "string" }, "subnet_ids": { @@ -277,15 +358,10 @@ "type": "map(string)" }, "timezone": { - "default": "", + "default": "null", "description": "(Optional) Time zone of the DB instance. timezone is currently only supported by Microsoft SQL Server. The timezone can only be set on creation. See MSSQL User Guide for more information.", "type": "string" }, - "use_parameter_group_name_prefix": { - "default": true, - "description": "Whether to use the parameter group name prefix or not", - "type": "bool" - }, "username": { "description": "Username for the master DB user", "type": "string" diff --git a/src/terraform-aws-modules-metadata/rds_version.txt b/src/terraform-aws-modules-metadata/rds_version.txt new file mode 100644 index 0000000..ad55eb8 --- /dev/null +++ b/src/terraform-aws-modules-metadata/rds_version.txt @@ -0,0 +1 @@ +v3.0.0 diff --git a/modules-metadata/redshift.json b/src/terraform-aws-modules-metadata/redshift.json similarity index 93% rename from modules-metadata/redshift.json rename to src/terraform-aws-modules-metadata/redshift.json index 02923e7..77443fb 100644 --- a/modules-metadata/redshift.json +++ b/src/terraform-aws-modules-metadata/redshift.json @@ -48,6 +48,7 @@ }, "cluster_port": { "default": 5439, + "description": "Cluster port", "type": "number" }, "cluster_version": { @@ -55,6 +56,11 @@ "description": "Version of Redshift engine cluster", "type": "string" }, + "enable_case_sensitive_identifier": { + "default": false, + "description": "(Optional) A configuration value that determines whether name identifiers of databases, tables, and columns are case sensitive.", + "type": "bool" + }, "enable_logging": { "default": false, "description": "Enables logging information such as queries and connection attempts, for the specified Amazon Redshift cluster.", @@ -76,9 +82,9 @@ "type": "bool" }, "final_snapshot_identifier": { - "default": false, + "default": "", "description": "(Optional) The identifier of the final snapshot that is to be created immediately before deleting the cluster. If this parameter is provided, 'skip_final_snapshot' must be false.", - "type": "bool" + "type": "string" }, "kms_key_id": { "default": "", @@ -95,6 +101,11 @@ "description": "(Optional) The prefix applied to the log file names.", "type": "string" }, + "max_concurrency_scaling_clusters": { + "default": "1", + "description": "(Optional) Max concurrency scaling clusters parameter (0 to 10)", + "type": "string" + }, "owner_account": { "default": "null", "description": "(Optional) The AWS customer account used to create or copy the snapshot. Required if you are restoring a snapshot you do not own, optional if you own the snapshot.", diff --git a/modules-metadata/redshift_cloudcraft.json b/src/terraform-aws-modules-metadata/redshift_cloudcraft.json similarity index 100% rename from modules-metadata/redshift_cloudcraft.json rename to src/terraform-aws-modules-metadata/redshift_cloudcraft.json diff --git a/modules-metadata/redshift_variables.json b/src/terraform-aws-modules-metadata/redshift_variables.json similarity index 93% rename from modules-metadata/redshift_variables.json rename to src/terraform-aws-modules-metadata/redshift_variables.json index 0fd732e..9510ca6 100644 --- a/modules-metadata/redshift_variables.json +++ b/src/terraform-aws-modules-metadata/redshift_variables.json @@ -46,6 +46,7 @@ }, "cluster_port": { "default": 5439, + "description": "Cluster port", "type": "number" }, "cluster_version": { @@ -53,6 +54,11 @@ "description": "Version of Redshift engine cluster", "type": "string" }, + "enable_case_sensitive_identifier": { + "default": false, + "description": "(Optional) A configuration value that determines whether name identifiers of databases, tables, and columns are case sensitive.", + "type": "bool" + }, "enable_logging": { "default": false, "description": "Enables logging information such as queries and connection attempts, for the specified Amazon Redshift cluster.", @@ -74,9 +80,9 @@ "type": "bool" }, "final_snapshot_identifier": { - "default": false, + "default": "", "description": "(Optional) The identifier of the final snapshot that is to be created immediately before deleting the cluster. If this parameter is provided, 'skip_final_snapshot' must be false.", - "type": "bool" + "type": "string" }, "kms_key_id": { "default": "", @@ -93,6 +99,11 @@ "description": "(Optional) The prefix applied to the log file names.", "type": "string" }, + "max_concurrency_scaling_clusters": { + "default": "1", + "description": "(Optional) Max concurrency scaling clusters parameter (0 to 10)", + "type": "string" + }, "owner_account": { "default": "null", "description": "(Optional) The AWS customer account used to create or copy the snapshot. Required if you are restoring a snapshot you do not own, optional if you own the snapshot.", diff --git a/src/terraform-aws-modules-metadata/redshift_version.txt b/src/terraform-aws-modules-metadata/redshift_version.txt new file mode 100644 index 0000000..ad55eb8 --- /dev/null +++ b/src/terraform-aws-modules-metadata/redshift_version.txt @@ -0,0 +1 @@ +v3.0.0 diff --git a/src/terraform-aws-modules-metadata/route53.json b/src/terraform-aws-modules-metadata/route53.json new file mode 100644 index 0000000..e69de29 diff --git a/modules-metadata/vpc_cloudcraft.json b/src/terraform-aws-modules-metadata/route53_cloudcraft.json similarity index 100% rename from modules-metadata/vpc_cloudcraft.json rename to src/terraform-aws-modules-metadata/route53_cloudcraft.json diff --git a/src/terraform-aws-modules-metadata/route53_variables.json b/src/terraform-aws-modules-metadata/route53_variables.json new file mode 100644 index 0000000..19765bd --- /dev/null +++ b/src/terraform-aws-modules-metadata/route53_variables.json @@ -0,0 +1 @@ +null diff --git a/src/terraform-aws-modules-metadata/route53_version.txt b/src/terraform-aws-modules-metadata/route53_version.txt new file mode 100644 index 0000000..46b105a --- /dev/null +++ b/src/terraform-aws-modules-metadata/route53_version.txt @@ -0,0 +1 @@ +v2.0.0 diff --git a/modules-metadata/s3-bucket.json b/src/terraform-aws-modules-metadata/s3-bucket.json similarity index 86% rename from modules-metadata/s3-bucket.json rename to src/terraform-aws-modules-metadata/s3-bucket.json index fe54516..c9683d4 100644 --- a/modules-metadata/s3-bucket.json +++ b/src/terraform-aws-modules-metadata/s3-bucket.json @@ -6,9 +6,14 @@ }, "acl": { "default": "private", - "description": "(Optional) The canned ACL to apply. Defaults to 'private'.", + "description": "(Optional) The canned ACL to apply. Defaults to 'private'. Conflicts with `grant`", "type": "string" }, + "attach_deny_insecure_transport_policy": { + "default": false, + "description": "Controls if S3 bucket should have deny non-SSL transport policy attached", + "type": "bool" + }, "attach_elb_log_delivery_policy": { "default": false, "description": "Controls if S3 bucket should have ELB log delivery policy attached", @@ -19,6 +24,11 @@ "description": "Controls if S3 bucket should have bucket policy attached (set to `true` to use value of `policy` as bucket policy)", "type": "bool" }, + "attach_public_policy": { + "default": true, + "description": "Controls if a user defined public bucket policy will be attached (set to `false` to allow upstream to apply defaults to the bucket)", + "type": "bool" + }, "block_public_acls": { "default": false, "description": "Whether Amazon S3 should block public ACLs for this bucket.", @@ -40,8 +50,8 @@ "type": "string" }, "cors_rule": { - "default": {}, - "description": "Map containing a rule of Cross-Origin Resource Sharing.", + "default": [], + "description": "List of maps containing rules for Cross-Origin Resource Sharing.", "type": "any" }, "create_bucket": { @@ -54,6 +64,11 @@ "description": "(Optional, Default:false ) A boolean that indicates all objects should be deleted from the bucket so that the bucket can be destroyed without error. These objects are not recoverable.", "type": "bool" }, + "grant": { + "default": [], + "description": "An ACL policy grant. Conflicts with `acl`", + "type": "any" + }, "ignore_public_acls": { "default": false, "description": "Whether Amazon S3 should ignore public ACLs for this bucket.", @@ -79,11 +94,6 @@ "description": "(Optional) A valid bucket policy JSON document. Note that if the policy document is not specific enough (but still valid), Terraform may view the policy as constantly changing in a terraform plan. In this case, please make sure you use the verbose/specific version of the policy. For more information about building AWS IAM policy documents with Terraform, see the AWS IAM Policy Document Guide.", "type": "string" }, - "region": { - "default": "null", - "description": "(Optional) If specified, the AWS region this bucket should reside in. Otherwise, the region used by the callee.", - "type": "string" - }, "replication_configuration": { "default": {}, "description": "Map containing cross-region replication configuration.", diff --git a/src/terraform-aws-modules-metadata/s3-bucket_cloudcraft.json b/src/terraform-aws-modules-metadata/s3-bucket_cloudcraft.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/terraform-aws-modules-metadata/s3-bucket_cloudcraft.json @@ -0,0 +1 @@ +{} diff --git a/modules-metadata/s3-bucket_variables.json b/src/terraform-aws-modules-metadata/s3-bucket_variables.json similarity index 86% rename from modules-metadata/s3-bucket_variables.json rename to src/terraform-aws-modules-metadata/s3-bucket_variables.json index fe54516..c9683d4 100644 --- a/modules-metadata/s3-bucket_variables.json +++ b/src/terraform-aws-modules-metadata/s3-bucket_variables.json @@ -6,9 +6,14 @@ }, "acl": { "default": "private", - "description": "(Optional) The canned ACL to apply. Defaults to 'private'.", + "description": "(Optional) The canned ACL to apply. Defaults to 'private'. Conflicts with `grant`", "type": "string" }, + "attach_deny_insecure_transport_policy": { + "default": false, + "description": "Controls if S3 bucket should have deny non-SSL transport policy attached", + "type": "bool" + }, "attach_elb_log_delivery_policy": { "default": false, "description": "Controls if S3 bucket should have ELB log delivery policy attached", @@ -19,6 +24,11 @@ "description": "Controls if S3 bucket should have bucket policy attached (set to `true` to use value of `policy` as bucket policy)", "type": "bool" }, + "attach_public_policy": { + "default": true, + "description": "Controls if a user defined public bucket policy will be attached (set to `false` to allow upstream to apply defaults to the bucket)", + "type": "bool" + }, "block_public_acls": { "default": false, "description": "Whether Amazon S3 should block public ACLs for this bucket.", @@ -40,8 +50,8 @@ "type": "string" }, "cors_rule": { - "default": {}, - "description": "Map containing a rule of Cross-Origin Resource Sharing.", + "default": [], + "description": "List of maps containing rules for Cross-Origin Resource Sharing.", "type": "any" }, "create_bucket": { @@ -54,6 +64,11 @@ "description": "(Optional, Default:false ) A boolean that indicates all objects should be deleted from the bucket so that the bucket can be destroyed without error. These objects are not recoverable.", "type": "bool" }, + "grant": { + "default": [], + "description": "An ACL policy grant. Conflicts with `acl`", + "type": "any" + }, "ignore_public_acls": { "default": false, "description": "Whether Amazon S3 should ignore public ACLs for this bucket.", @@ -79,11 +94,6 @@ "description": "(Optional) A valid bucket policy JSON document. Note that if the policy document is not specific enough (but still valid), Terraform may view the policy as constantly changing in a terraform plan. In this case, please make sure you use the verbose/specific version of the policy. For more information about building AWS IAM policy documents with Terraform, see the AWS IAM Policy Document Guide.", "type": "string" }, - "region": { - "default": "null", - "description": "(Optional) If specified, the AWS region this bucket should reside in. Otherwise, the region used by the callee.", - "type": "string" - }, "replication_configuration": { "default": {}, "description": "Map containing cross-region replication configuration.", diff --git a/modules-metadata/sns_version.txt b/src/terraform-aws-modules-metadata/s3-bucket_version.txt similarity index 100% rename from modules-metadata/sns_version.txt rename to src/terraform-aws-modules-metadata/s3-bucket_version.txt diff --git a/modules-metadata/security-group.json b/src/terraform-aws-modules-metadata/security-group.json similarity index 83% rename from modules-metadata/security-group.json rename to src/terraform-aws-modules-metadata/security-group.json index 32b6ff3..f709803 100644 --- a/modules-metadata/security-group.json +++ b/src/terraform-aws-modules-metadata/security-group.json @@ -16,6 +16,18 @@ "all-all" ] }, + "alertmanager": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "alertmanager-9093-tcp", + "alertmanager-9094-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "carbon-relay-ng": { "egress_rules": [ "all-all" @@ -89,6 +101,36 @@ "all-all" ] }, + "grafana": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "grafana-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "graphite-statsd": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "graphite-webui", + "graphite-2003-tcp", + "graphite-2004-tcp", + "graphite-2023-tcp", + "graphite-2024-tcp", + "graphite-8080-tcp", + "graphite-8125-tcp", + "graphite-8125-udp", + "graphite-8126-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "http-80": { "egress_rules": [ "all-all" @@ -160,7 +202,43 @@ "all-all" ], "ingress_rules": [ - "kafka-broker-tcp" + "kafka-broker-tcp", + "kafka-broker-tls-tcp", + "kafka-jmx-exporter-tcp", + "kafka-node-exporter-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "kibana": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "kibana-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "kubernetes-api": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "kubernetes-api-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "ldap": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "ldap-tcp" ], "ingress_with_self": [ "all-all" @@ -177,6 +255,17 @@ "all-all" ] }, + "logstash": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "logstash-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "memcached": { "egress_rules": [ "all-all" @@ -188,6 +277,17 @@ "all-all" ] }, + "minio": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "minio-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "mongodb": { "egress_rules": [ "all-all" @@ -297,6 +397,18 @@ "all-all" ] }, + "prometheus": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "prometheus-http-tcp", + "prometheus-pushgateway-http-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "puppet": { "egress_rules": [ "all-all" @@ -358,6 +470,17 @@ "all-all" ] }, + "solr": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "solr-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "splunk": { "egress_rules": [ "all-all" @@ -664,6 +787,11 @@ "description": "Number of computed ingress rules to create where 'source_security_group_id' is used", "type": "number" }, + "revoke_rules_on_delete": { + "default": false, + "description": "Instruct Terraform to revoke all of the Security Groups attached ingress and egress rules before deleting the rule itself. Enable for EMR.", + "type": "bool" + }, "rules": { "default": { "_": [ @@ -701,6 +829,18 @@ "tcp", "ActiveMQ MQTT" ], + "alertmanager-9093-tcp": [ + 9093, + 9093, + "tcp", + "Alert Manager" + ], + "alertmanager-9094-tcp": [ + 9094, + 9094, + "tcp", + "Alert Manager Cluster" + ], "all-all": [ -1, -1, @@ -887,6 +1027,66 @@ "tcp", "Elasticsearch REST interface" ], + "grafana-tcp": [ + 3000, + 3000, + "tcp", + "Grafana Dashboard" + ], + "graphite-2003-tcp": [ + 2003, + 2003, + "tcp", + "Carbon receiver plain text" + ], + "graphite-2004-tcp": [ + 2004, + 2004, + "tcp", + "Carbon receiver pickle" + ], + "graphite-2023-tcp": [ + 2023, + 2023, + "tcp", + "Carbon aggregator plaintext" + ], + "graphite-2024-tcp": [ + 2024, + 2024, + "tcp", + "Carbon aggregator pickle" + ], + "graphite-8080-tcp": [ + 8080, + 8080, + "tcp", + "Graphite gunicorn port" + ], + "graphite-8125-tcp": [ + 8125, + 8125, + "tcp", + "Statsd TCP" + ], + "graphite-8125-udp": [ + 8125, + 8125, + "udp", + "Statsd UDP default" + ], + "graphite-8126-tcp": [ + 8126, + 8126, + "tcp", + "Statsd admin" + ], + "graphite-webui": [ + 80, + 80, + "tcp", + "Graphite admin interface" + ], "http-80-tcp": [ 80, 80, @@ -929,18 +1129,66 @@ "tcp", "Kafka broker 0.8.2+" ], + "kafka-broker-tls-tcp": [ + 9094, + 9094, + "tcp", + "Kafka TLS enabled broker 0.8.2+" + ], + "kafka-jmx-exporter-tcp": [ + 11001, + 11001, + "tcp", + "Kafka JMX Exporter" + ], + "kafka-node-exporter-tcp": [ + 11002, + 11002, + "tcp", + "Kafka Node Exporter" + ], + "kibana-tcp": [ + 5601, + 5601, + "tcp", + "Kibana Web Interface" + ], + "kubernetes-api-tcp": [ + 6443, + 6443, + "tcp", + "Kubernetes API Server" + ], + "ldap-tcp": [ + 389, + 389, + "tcp", + "LDAP" + ], "ldaps-tcp": [ 636, 636, "tcp", "LDAPS" ], + "logstash-tcp": [ + 5044, + 5044, + "tcp", + "Logstash" + ], "memcached-tcp": [ 11211, 11211, "tcp", "Memcached" ], + "minio-tcp": [ + 9000, + 9000, + "tcp", + "MinIO" + ], "mongodb-27017-tcp": [ 27017, 27017, @@ -1055,6 +1303,18 @@ "tcp", "PostgreSQL" ], + "prometheus-http-tcp": [ + 9090, + 9090, + "tcp", + "Prometheus" + ], + "prometheus-pushgateway-http-tcp": [ + 9091, + 9091, + "tcp", + "Prometheus Pushgateway" + ], "puppet-tcp": [ 8140, 8140, @@ -1121,6 +1381,12 @@ "tcp", "Redshift" ], + "solr-tcp": [ + 8983, + 8987, + "tcp", + "Solr" + ], "splunk-hec-tcp": [ 8088, 8088, diff --git a/src/terraform-aws-modules-metadata/security-group_cloudcraft.json b/src/terraform-aws-modules-metadata/security-group_cloudcraft.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/terraform-aws-modules-metadata/security-group_cloudcraft.json @@ -0,0 +1 @@ +{} diff --git a/modules-metadata/security-group_variables.json b/src/terraform-aws-modules-metadata/security-group_variables.json similarity index 83% rename from modules-metadata/security-group_variables.json rename to src/terraform-aws-modules-metadata/security-group_variables.json index 32b6ff3..f709803 100644 --- a/modules-metadata/security-group_variables.json +++ b/src/terraform-aws-modules-metadata/security-group_variables.json @@ -16,6 +16,18 @@ "all-all" ] }, + "alertmanager": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "alertmanager-9093-tcp", + "alertmanager-9094-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "carbon-relay-ng": { "egress_rules": [ "all-all" @@ -89,6 +101,36 @@ "all-all" ] }, + "grafana": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "grafana-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "graphite-statsd": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "graphite-webui", + "graphite-2003-tcp", + "graphite-2004-tcp", + "graphite-2023-tcp", + "graphite-2024-tcp", + "graphite-8080-tcp", + "graphite-8125-tcp", + "graphite-8125-udp", + "graphite-8126-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "http-80": { "egress_rules": [ "all-all" @@ -160,7 +202,43 @@ "all-all" ], "ingress_rules": [ - "kafka-broker-tcp" + "kafka-broker-tcp", + "kafka-broker-tls-tcp", + "kafka-jmx-exporter-tcp", + "kafka-node-exporter-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "kibana": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "kibana-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "kubernetes-api": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "kubernetes-api-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, + "ldap": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "ldap-tcp" ], "ingress_with_self": [ "all-all" @@ -177,6 +255,17 @@ "all-all" ] }, + "logstash": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "logstash-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "memcached": { "egress_rules": [ "all-all" @@ -188,6 +277,17 @@ "all-all" ] }, + "minio": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "minio-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "mongodb": { "egress_rules": [ "all-all" @@ -297,6 +397,18 @@ "all-all" ] }, + "prometheus": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "prometheus-http-tcp", + "prometheus-pushgateway-http-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "puppet": { "egress_rules": [ "all-all" @@ -358,6 +470,17 @@ "all-all" ] }, + "solr": { + "egress_rules": [ + "all-all" + ], + "ingress_rules": [ + "solr-tcp" + ], + "ingress_with_self": [ + "all-all" + ] + }, "splunk": { "egress_rules": [ "all-all" @@ -664,6 +787,11 @@ "description": "Number of computed ingress rules to create where 'source_security_group_id' is used", "type": "number" }, + "revoke_rules_on_delete": { + "default": false, + "description": "Instruct Terraform to revoke all of the Security Groups attached ingress and egress rules before deleting the rule itself. Enable for EMR.", + "type": "bool" + }, "rules": { "default": { "_": [ @@ -701,6 +829,18 @@ "tcp", "ActiveMQ MQTT" ], + "alertmanager-9093-tcp": [ + 9093, + 9093, + "tcp", + "Alert Manager" + ], + "alertmanager-9094-tcp": [ + 9094, + 9094, + "tcp", + "Alert Manager Cluster" + ], "all-all": [ -1, -1, @@ -887,6 +1027,66 @@ "tcp", "Elasticsearch REST interface" ], + "grafana-tcp": [ + 3000, + 3000, + "tcp", + "Grafana Dashboard" + ], + "graphite-2003-tcp": [ + 2003, + 2003, + "tcp", + "Carbon receiver plain text" + ], + "graphite-2004-tcp": [ + 2004, + 2004, + "tcp", + "Carbon receiver pickle" + ], + "graphite-2023-tcp": [ + 2023, + 2023, + "tcp", + "Carbon aggregator plaintext" + ], + "graphite-2024-tcp": [ + 2024, + 2024, + "tcp", + "Carbon aggregator pickle" + ], + "graphite-8080-tcp": [ + 8080, + 8080, + "tcp", + "Graphite gunicorn port" + ], + "graphite-8125-tcp": [ + 8125, + 8125, + "tcp", + "Statsd TCP" + ], + "graphite-8125-udp": [ + 8125, + 8125, + "udp", + "Statsd UDP default" + ], + "graphite-8126-tcp": [ + 8126, + 8126, + "tcp", + "Statsd admin" + ], + "graphite-webui": [ + 80, + 80, + "tcp", + "Graphite admin interface" + ], "http-80-tcp": [ 80, 80, @@ -929,18 +1129,66 @@ "tcp", "Kafka broker 0.8.2+" ], + "kafka-broker-tls-tcp": [ + 9094, + 9094, + "tcp", + "Kafka TLS enabled broker 0.8.2+" + ], + "kafka-jmx-exporter-tcp": [ + 11001, + 11001, + "tcp", + "Kafka JMX Exporter" + ], + "kafka-node-exporter-tcp": [ + 11002, + 11002, + "tcp", + "Kafka Node Exporter" + ], + "kibana-tcp": [ + 5601, + 5601, + "tcp", + "Kibana Web Interface" + ], + "kubernetes-api-tcp": [ + 6443, + 6443, + "tcp", + "Kubernetes API Server" + ], + "ldap-tcp": [ + 389, + 389, + "tcp", + "LDAP" + ], "ldaps-tcp": [ 636, 636, "tcp", "LDAPS" ], + "logstash-tcp": [ + 5044, + 5044, + "tcp", + "Logstash" + ], "memcached-tcp": [ 11211, 11211, "tcp", "Memcached" ], + "minio-tcp": [ + 9000, + 9000, + "tcp", + "MinIO" + ], "mongodb-27017-tcp": [ 27017, 27017, @@ -1055,6 +1303,18 @@ "tcp", "PostgreSQL" ], + "prometheus-http-tcp": [ + 9090, + 9090, + "tcp", + "Prometheus" + ], + "prometheus-pushgateway-http-tcp": [ + 9091, + 9091, + "tcp", + "Prometheus Pushgateway" + ], "puppet-tcp": [ 8140, 8140, @@ -1121,6 +1381,12 @@ "tcp", "Redshift" ], + "solr-tcp": [ + 8983, + 8987, + "tcp", + "Solr" + ], "splunk-hec-tcp": [ 8088, 8088, diff --git a/src/terraform-aws-modules-metadata/security-group_version.txt b/src/terraform-aws-modules-metadata/security-group_version.txt new file mode 100644 index 0000000..857572f --- /dev/null +++ b/src/terraform-aws-modules-metadata/security-group_version.txt @@ -0,0 +1 @@ +v4.0.0 diff --git a/modules-metadata/sns.json b/src/terraform-aws-modules-metadata/sns.json similarity index 100% rename from modules-metadata/sns.json rename to src/terraform-aws-modules-metadata/sns.json diff --git a/src/terraform-aws-modules-metadata/sns_cloudcraft.json b/src/terraform-aws-modules-metadata/sns_cloudcraft.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/terraform-aws-modules-metadata/sns_cloudcraft.json @@ -0,0 +1 @@ +{} diff --git a/modules-metadata/sns_variables.json b/src/terraform-aws-modules-metadata/sns_variables.json similarity index 100% rename from modules-metadata/sns_variables.json rename to src/terraform-aws-modules-metadata/sns_variables.json diff --git a/src/terraform-aws-modules-metadata/sns_version.txt b/src/terraform-aws-modules-metadata/sns_version.txt new file mode 100644 index 0000000..ad55eb8 --- /dev/null +++ b/src/terraform-aws-modules-metadata/sns_version.txt @@ -0,0 +1 @@ +v3.0.0 diff --git a/modules-metadata/sqs.json b/src/terraform-aws-modules-metadata/sqs.json similarity index 100% rename from modules-metadata/sqs.json rename to src/terraform-aws-modules-metadata/sqs.json diff --git a/modules-metadata/sqs_cloudcraft.json b/src/terraform-aws-modules-metadata/sqs_cloudcraft.json similarity index 100% rename from modules-metadata/sqs_cloudcraft.json rename to src/terraform-aws-modules-metadata/sqs_cloudcraft.json diff --git a/modules-metadata/sqs_variables.json b/src/terraform-aws-modules-metadata/sqs_variables.json similarity index 100% rename from modules-metadata/sqs_variables.json rename to src/terraform-aws-modules-metadata/sqs_variables.json diff --git a/src/terraform-aws-modules-metadata/sqs_version.txt b/src/terraform-aws-modules-metadata/sqs_version.txt new file mode 100644 index 0000000..ad55eb8 --- /dev/null +++ b/src/terraform-aws-modules-metadata/sqs_version.txt @@ -0,0 +1 @@ +v3.0.0 diff --git a/modules-metadata/terraform_hcl2.awk b/src/terraform-aws-modules-metadata/terraform_hcl2.awk similarity index 100% rename from modules-metadata/terraform_hcl2.awk rename to src/terraform-aws-modules-metadata/terraform_hcl2.awk diff --git a/modules-metadata/update_modules_metadata.sh b/src/terraform-aws-modules-metadata/update_modules_metadata.sh similarity index 59% rename from modules-metadata/update_modules_metadata.sh rename to src/terraform-aws-modules-metadata/update_modules_metadata.sh index 7856c94..96fef76 100755 --- a/modules-metadata/update_modules_metadata.sh +++ b/src/terraform-aws-modules-metadata/update_modules_metadata.sh @@ -6,19 +6,24 @@ readonly script_path="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd $script_path declare -a MODULES=(rds -rds-aurora -ec2-instance -elb -alb -autoscaling -security-group -sns -sqs -vpc -redshift -s3-bucket -dynamodb-table) -#cloudfront + rds-aurora + ec2-instance + elb + alb + autoscaling + security-group + sns + sqs + vpc + redshift + s3-bucket + dynamodb-table + cloudfront + lambda + apigateway-v2 + vpn-gateway +) +# route53 - contains only submodules MODULES_DIR=~/Sites/terraform-aws-modules @@ -30,23 +35,23 @@ for module in "${MODULES[@]}"; do tmp_file_tf="$tmp_file.tf" # GNU AWK is required - awk -f "terraform_hcl2.awk" ${MODULES_DIR}/terraform-aws-${module}/*.tf > "$tmp_file_tf" + awk -f "terraform_hcl2.awk" ${MODULES_DIR}/terraform-aws-${module}/*.tf >"$tmp_file_tf" # hcltool comes from https://github.com/virtuald/pyhcl/blob/master/scripts/hcltool - hcltool "$tmp_file_tf" | jq -r '.variable' > ${module}_variables.json + hcltool "$tmp_file_tf" | jq -r '.variable' >${module}_variables.json - test -f ${module}_cloudcraft.json || echo "{}" > ${module}_cloudcraft.json - jq -s '.[0] * .[1]' ${module}_variables.json ${module}_cloudcraft.json > ${module}.json + test -f ${module}_cloudcraft.json || echo "{}" >${module}_cloudcraft.json + jq -s '.[0] * .[1]' ${module}_variables.json ${module}_cloudcraft.json >${module}.json rm -f "$tmp_file_tf" # Write module version - pushd ${MODULES_DIR}/terraform-aws-${module} > /dev/null + pushd ${MODULES_DIR}/terraform-aws-${module} >/dev/null latest_tag=$(git describe --tags --abbrev=0) echo "$module => $latest_tag" - popd > /dev/null + popd >/dev/null - echo -n $latest_tag > ${module}_version.txt + echo -n $latest_tag >${module}_version.txt echo "*********" done diff --git a/src/terraform-aws-modules-metadata/vpc.json b/src/terraform-aws-modules-metadata/vpc.json new file mode 100644 index 0000000..7806242 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpc.json @@ -0,0 +1,959 @@ +{ + "amazon_side_asn": { + "default": "64512", + "description": "The Autonomous System Number (ASN) for the Amazon side of the gateway. By default the virtual private gateway is created with the current default Amazon ASN.", + "type": "string" + }, + "assign_ipv6_address_on_creation": { + "default": false, + "description": "Assign IPv6 address on subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "azs": { + "default": [], + "description": "A list of availability zones names or ids in the region", + "type": "list(string)" + }, + "cidr": { + "default": "0.0.0.0/0", + "description": "The CIDR block for the VPC. Default value is a valid CIDR, but not acceptable by AWS and should be overridden", + "type": "string" + }, + "create_database_internet_gateway_route": { + "default": false, + "description": "Controls if an internet gateway route for public database access should be created", + "type": "bool" + }, + "create_database_nat_gateway_route": { + "default": false, + "description": "Controls if a nat gateway route should be created to give internet access to the database subnets", + "type": "bool" + }, + "create_database_subnet_group": { + "default": true, + "description": "Controls if database subnet group should be created (n.b. database_subnets must also be set)", + "type": "bool" + }, + "create_database_subnet_route_table": { + "default": false, + "description": "Controls if separate route table for database should be created", + "type": "bool" + }, + "create_egress_only_igw": { + "default": true, + "description": "Controls if an Egress Only Internet Gateway is created and its related routes.", + "type": "bool" + }, + "create_elasticache_subnet_group": { + "default": true, + "description": "Controls if elasticache subnet group should be created", + "type": "bool" + }, + "create_elasticache_subnet_route_table": { + "default": false, + "description": "Controls if separate route table for elasticache should be created", + "type": "bool" + }, + "create_flow_log_cloudwatch_iam_role": { + "default": false, + "description": "Whether to create IAM role for VPC Flow Logs", + "type": "bool" + }, + "create_flow_log_cloudwatch_log_group": { + "default": false, + "description": "Whether to create CloudWatch log group for VPC Flow Logs", + "type": "bool" + }, + "create_igw": { + "default": true, + "description": "Controls if an Internet Gateway is created for public subnets and the related routes that connect them.", + "type": "bool" + }, + "create_redshift_subnet_group": { + "default": true, + "description": "Controls if redshift subnet group should be created", + "type": "bool" + }, + "create_redshift_subnet_route_table": { + "default": false, + "description": "Controls if separate route table for redshift should be created", + "type": "bool" + }, + "create_vpc": { + "default": true, + "description": "Controls if VPC should be created (it affects almost all resources)", + "type": "bool" + }, + "customer_gateway_tags": { + "default": {}, + "description": "Additional tags for the Customer Gateway", + "type": "map(string)" + }, + "customer_gateways": { + "default": {}, + "description": "Maps of Customer Gateway's attributes (BGP ASN and Gateway's Internet-routable external IP address)", + "type": "map(map(any))" + }, + "database_acl_tags": { + "default": {}, + "description": "Additional tags for the database subnets network ACL", + "type": "map(string)" + }, + "database_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for database subnets", + "type": "bool" + }, + "database_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Database subnets inbound network ACL rules", + "type": "list(map(string))" + }, + "database_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Database subnets outbound network ACL rules", + "type": "list(map(string))" + }, + "database_route_table_tags": { + "default": {}, + "description": "Additional tags for the database route tables", + "type": "map(string)" + }, + "database_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on database subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "database_subnet_group_tags": { + "default": {}, + "description": "Additional tags for the database subnet group", + "type": "map(string)" + }, + "database_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 database subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "database_subnet_suffix": { + "default": "db", + "description": "Suffix to append to database subnets name", + "type": "string" + }, + "database_subnet_tags": { + "default": {}, + "description": "Additional tags for the database subnets", + "type": "map(string)" + }, + "database_subnets": { + "default": [], + "description": "A list of database subnets", + "type": "list(string)" + }, + "default_network_acl_egress": { + "default": [ + { + "action": "allow", + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_no": 100, + "to_port": 0 + }, + { + "action": "allow", + "from_port": 0, + "ipv6_cidr_block": "::/0", + "protocol": "-1", + "rule_no": 101, + "to_port": 0 + } + ], + "description": "List of maps of egress rules to set on the Default Network ACL", + "type": "list(map(string))" + }, + "default_network_acl_ingress": { + "default": [ + { + "action": "allow", + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_no": 100, + "to_port": 0 + }, + { + "action": "allow", + "from_port": 0, + "ipv6_cidr_block": "::/0", + "protocol": "-1", + "rule_no": 101, + "to_port": 0 + } + ], + "description": "List of maps of ingress rules to set on the Default Network ACL", + "type": "list(map(string))" + }, + "default_network_acl_name": { + "default": "", + "description": "Name to be used on the Default Network ACL", + "type": "string" + }, + "default_network_acl_tags": { + "default": {}, + "description": "Additional tags for the Default Network ACL", + "type": "map(string)" + }, + "default_route_table_propagating_vgws": { + "default": [], + "description": "List of virtual gateways for propagation", + "type": "list(string)" + }, + "default_route_table_routes": { + "default": [], + "description": "Configuration block of routes. See https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/default_route_table#route", + "type": "list(map(string))" + }, + "default_route_table_tags": { + "default": {}, + "description": "Additional tags for the default route table", + "type": "map(string)" + }, + "default_security_group_egress": { + "default": "null", + "description": "List of maps of egress rules to set on the default security group", + "type": "list(map(string))" + }, + "default_security_group_ingress": { + "default": "null", + "description": "List of maps of ingress rules to set on the default security group", + "type": "list(map(string))" + }, + "default_security_group_name": { + "default": "default", + "description": "Name to be used on the default security group", + "type": "string" + }, + "default_security_group_tags": { + "default": {}, + "description": "Additional tags for the default security group", + "type": "map(string)" + }, + "default_vpc_enable_classiclink": { + "default": false, + "description": "Should be true to enable ClassicLink in the Default VPC", + "type": "bool" + }, + "default_vpc_enable_dns_hostnames": { + "default": false, + "description": "Should be true to enable DNS hostnames in the Default VPC", + "type": "bool" + }, + "default_vpc_enable_dns_support": { + "default": true, + "description": "Should be true to enable DNS support in the Default VPC", + "type": "bool" + }, + "default_vpc_name": { + "default": "", + "description": "Name to be used on the Default VPC", + "type": "string" + }, + "default_vpc_tags": { + "default": {}, + "description": "Additional tags for the Default VPC", + "type": "map(string)" + }, + "dhcp_options_domain_name": { + "default": "", + "description": "Specifies DNS name for DHCP options set (requires enable_dhcp_options set to true)", + "type": "string" + }, + "dhcp_options_domain_name_servers": { + "default": [ + "AmazonProvidedDNS" + ], + "description": "Specify a list of DNS server addresses for DHCP options set, default to AWS provided (requires enable_dhcp_options set to true)", + "type": "list(string)" + }, + "dhcp_options_netbios_name_servers": { + "default": [], + "description": "Specify a list of netbios servers for DHCP options set (requires enable_dhcp_options set to true)", + "type": "list(string)" + }, + "dhcp_options_netbios_node_type": { + "default": "", + "description": "Specify netbios node_type for DHCP options set (requires enable_dhcp_options set to true)", + "type": "string" + }, + "dhcp_options_ntp_servers": { + "default": [], + "description": "Specify a list of NTP servers for DHCP options set (requires enable_dhcp_options set to true)", + "type": "list(string)" + }, + "dhcp_options_tags": { + "default": {}, + "description": "Additional tags for the DHCP option set (requires enable_dhcp_options set to true)", + "type": "map(string)" + }, + "elasticache_acl_tags": { + "default": {}, + "description": "Additional tags for the elasticache subnets network ACL", + "type": "map(string)" + }, + "elasticache_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for elasticache subnets", + "type": "bool" + }, + "elasticache_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Elasticache subnets inbound network ACL rules", + "type": "list(map(string))" + }, + "elasticache_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Elasticache subnets outbound network ACL rules", + "type": "list(map(string))" + }, + "elasticache_route_table_tags": { + "default": {}, + "description": "Additional tags for the elasticache route tables", + "type": "map(string)" + }, + "elasticache_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on elasticache subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "elasticache_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 elasticache subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "elasticache_subnet_suffix": { + "default": "elasticache", + "description": "Suffix to append to elasticache subnets name", + "type": "string" + }, + "elasticache_subnet_tags": { + "default": {}, + "description": "Additional tags for the elasticache subnets", + "type": "map(string)" + }, + "elasticache_subnets": { + "default": [], + "description": "A list of elasticache subnets", + "type": "list(string)" + }, + "enable_classiclink": { + "default": "null", + "description": "Should be true to enable ClassicLink for the VPC. Only valid in regions and accounts that support EC2 Classic.", + "type": "bool" + }, + "enable_classiclink_dns_support": { + "default": "null", + "description": "Should be true to enable ClassicLink DNS Support for the VPC. Only valid in regions and accounts that support EC2 Classic.", + "type": "bool" + }, + "enable_dhcp_options": { + "default": false, + "description": "Should be true if you want to specify a DHCP options set with a custom domain name, DNS servers, NTP servers, netbios servers, and/or netbios server type", + "type": "bool" + }, + "enable_dns_hostnames": { + "default": false, + "description": "Should be true to enable DNS hostnames in the VPC", + "type": "bool" + }, + "enable_dns_support": { + "default": true, + "description": "Should be true to enable DNS support in the VPC", + "type": "bool" + }, + "enable_flow_log": { + "default": false, + "description": "Whether or not to enable VPC Flow Logs", + "type": "bool" + }, + "enable_ipv6": { + "default": false, + "description": "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.", + "type": "bool" + }, + "enable_nat_gateway": { + "default": false, + "description": "Should be true if you want to provision NAT Gateways for each of your private networks", + "type": "bool" + }, + "enable_public_redshift": { + "default": false, + "description": "Controls if redshift should have public routing table", + "type": "bool" + }, + "enable_vpn_gateway": { + "default": false, + "description": "Should be true if you want to create a new VPN Gateway resource and attach it to the VPC", + "type": "bool" + }, + "external_nat_ip_ids": { + "default": [], + "description": "List of EIP IDs to be assigned to the NAT Gateways (used in combination with reuse_nat_ips)", + "type": "list(string)" + }, + "external_nat_ips": { + "default": [], + "description": "List of EIPs to be used for `nat_public_ips` output (used in combination with reuse_nat_ips and external_nat_ip_ids)", + "type": "list(string)" + }, + "flow_log_cloudwatch_iam_role_arn": { + "default": "", + "description": "The ARN for the IAM role that's used to post flow logs to a CloudWatch Logs log group. When flow_log_destination_arn is set to ARN of Cloudwatch Logs, this argument needs to be provided.", + "type": "string" + }, + "flow_log_cloudwatch_log_group_kms_key_id": { + "default": "null", + "description": "The ARN of the KMS Key to use when encrypting log data for VPC flow logs.", + "type": "string" + }, + "flow_log_cloudwatch_log_group_name_prefix": { + "default": "/aws/vpc-flow-log/", + "description": "Specifies the name prefix of CloudWatch Log Group for VPC flow logs.", + "type": "string" + }, + "flow_log_cloudwatch_log_group_retention_in_days": { + "default": "null", + "description": "Specifies the number of days you want to retain log events in the specified log group for VPC flow logs.", + "type": "number" + }, + "flow_log_destination_arn": { + "default": "", + "description": "The ARN of the CloudWatch log group or S3 bucket where VPC Flow Logs will be pushed. If this ARN is a S3 bucket the appropriate permissions need to be set on that bucket's policy. When create_flow_log_cloudwatch_log_group is set to false this argument must be provided.", + "type": "string" + }, + "flow_log_destination_type": { + "default": "cloud-watch-logs", + "description": "Type of flow log destination. Can be s3 or cloud-watch-logs.", + "type": "string" + }, + "flow_log_log_format": { + "default": "null", + "description": "The fields to include in the flow log record, in the order in which they should appear.", + "type": "string" + }, + "flow_log_max_aggregation_interval": { + "default": 600, + "description": "The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. Valid Values: `60` seconds or `600` seconds.", + "type": "number" + }, + "flow_log_traffic_type": { + "default": "ALL", + "description": "The type of traffic to capture. Valid values: ACCEPT, REJECT, ALL.", + "type": "string" + }, + "igw_tags": { + "default": {}, + "description": "Additional tags for the internet gateway", + "type": "map(string)" + }, + "instance_tenancy": { + "default": "default", + "description": "A tenancy option for instances launched into the VPC", + "type": "string" + }, + "intra_acl_tags": { + "default": {}, + "description": "Additional tags for the intra subnets network ACL", + "type": "map(string)" + }, + "intra_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for intra subnets", + "type": "bool" + }, + "intra_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Intra subnets inbound network ACLs", + "type": "list(map(string))" + }, + "intra_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Intra subnets outbound network ACLs", + "type": "list(map(string))" + }, + "intra_route_table_tags": { + "default": {}, + "description": "Additional tags for the intra route tables", + "type": "map(string)" + }, + "intra_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on intra subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "intra_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 intra subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "intra_subnet_suffix": { + "default": "intra", + "description": "Suffix to append to intra subnets name", + "type": "string" + }, + "intra_subnet_tags": { + "default": {}, + "description": "Additional tags for the intra subnets", + "type": "map(string)" + }, + "intra_subnets": { + "default": [], + "description": "A list of intra subnets", + "type": "list(string)" + }, + "manage_default_network_acl": { + "default": false, + "description": "Should be true to adopt and manage Default Network ACL", + "type": "bool" + }, + "manage_default_route_table": { + "default": false, + "description": "Should be true to manage default route table", + "type": "bool" + }, + "manage_default_security_group": { + "default": false, + "description": "Should be true to adopt and manage default security group", + "type": "bool" + }, + "manage_default_vpc": { + "default": false, + "description": "Should be true to adopt and manage Default VPC", + "type": "bool" + }, + "map_public_ip_on_launch": { + "default": true, + "description": "Should be false if you do not want to auto-assign public IP on launch", + "type": "bool" + }, + "name": { + "default": "", + "description": "Name to be used on all the resources as identifier", + "type": "string" + }, + "nat_eip_tags": { + "default": {}, + "description": "Additional tags for the NAT EIP", + "type": "map(string)" + }, + "nat_gateway_tags": { + "default": {}, + "description": "Additional tags for the NAT gateways", + "type": "map(string)" + }, + "one_nat_gateway_per_az": { + "default": false, + "description": "Should be true if you want only one NAT Gateway per availability zone. Requires `var.azs` to be set, and the number of `public_subnets` created to be greater than or equal to the number of availability zones specified in `var.azs`.", + "type": "bool" + }, + "outpost_acl_tags": { + "default": {}, + "description": "Additional tags for the outpost subnets network ACL", + "type": "map(string)" + }, + "outpost_arn": { + "default": "null", + "description": "ARN of Outpost you want to create a subnet in.", + "type": "string" + }, + "outpost_az": { + "default": "null", + "description": "AZ where Outpost is anchored.", + "type": "string" + }, + "outpost_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for outpost subnets", + "type": "bool" + }, + "outpost_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Outpost subnets inbound network ACLs", + "type": "list(map(string))" + }, + "outpost_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Outpost subnets outbound network ACLs", + "type": "list(map(string))" + }, + "outpost_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on outpost subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "outpost_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 outpost subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "outpost_subnet_suffix": { + "default": "outpost", + "description": "Suffix to append to outpost subnets name", + "type": "string" + }, + "outpost_subnet_tags": { + "default": {}, + "description": "Additional tags for the outpost subnets", + "type": "map(string)" + }, + "outpost_subnets": { + "default": [], + "description": "A list of outpost subnets inside the VPC", + "type": "list(string)" + }, + "private_acl_tags": { + "default": {}, + "description": "Additional tags for the private subnets network ACL", + "type": "map(string)" + }, + "private_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for private subnets", + "type": "bool" + }, + "private_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Private subnets inbound network ACLs", + "type": "list(map(string))" + }, + "private_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Private subnets outbound network ACLs", + "type": "list(map(string))" + }, + "private_route_table_tags": { + "default": {}, + "description": "Additional tags for the private route tables", + "type": "map(string)" + }, + "private_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on private subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "private_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 private subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "private_subnet_suffix": { + "default": "private", + "description": "Suffix to append to private subnets name", + "type": "string" + }, + "private_subnet_tags": { + "default": {}, + "description": "Additional tags for the private subnets", + "type": "map(string)" + }, + "private_subnets": { + "default": [], + "description": "A list of private subnets inside the VPC", + "type": "list(string)" + }, + "propagate_intra_route_tables_vgw": { + "default": false, + "description": "Should be true if you want route table propagation", + "type": "bool" + }, + "propagate_private_route_tables_vgw": { + "default": false, + "description": "Should be true if you want route table propagation", + "type": "bool" + }, + "propagate_public_route_tables_vgw": { + "default": false, + "description": "Should be true if you want route table propagation", + "type": "bool" + }, + "public_acl_tags": { + "default": {}, + "description": "Additional tags for the public subnets network ACL", + "type": "map(string)" + }, + "public_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for public subnets", + "type": "bool" + }, + "public_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Public subnets inbound network ACLs", + "type": "list(map(string))" + }, + "public_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Public subnets outbound network ACLs", + "type": "list(map(string))" + }, + "public_route_table_tags": { + "default": {}, + "description": "Additional tags for the public route tables", + "type": "map(string)" + }, + "public_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on public subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "public_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 public subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "public_subnet_suffix": { + "default": "public", + "description": "Suffix to append to public subnets name", + "type": "string" + }, + "public_subnet_tags": { + "default": {}, + "description": "Additional tags for the public subnets", + "type": "map(string)" + }, + "public_subnets": { + "default": [], + "description": "A list of public subnets inside the VPC", + "type": "list(string)" + }, + "redshift_acl_tags": { + "default": {}, + "description": "Additional tags for the redshift subnets network ACL", + "type": "map(string)" + }, + "redshift_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for redshift subnets", + "type": "bool" + }, + "redshift_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Redshift subnets inbound network ACL rules", + "type": "list(map(string))" + }, + "redshift_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Redshift subnets outbound network ACL rules", + "type": "list(map(string))" + }, + "redshift_route_table_tags": { + "default": {}, + "description": "Additional tags for the redshift route tables", + "type": "map(string)" + }, + "redshift_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on redshift subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "redshift_subnet_group_tags": { + "default": {}, + "description": "Additional tags for the redshift subnet group", + "type": "map(string)" + }, + "redshift_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 redshift subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "redshift_subnet_suffix": { + "default": "redshift", + "description": "Suffix to append to redshift subnets name", + "type": "string" + }, + "redshift_subnet_tags": { + "default": {}, + "description": "Additional tags for the redshift subnets", + "type": "map(string)" + }, + "redshift_subnets": { + "default": [], + "description": "A list of redshift subnets", + "type": "list(string)" + }, + "reuse_nat_ips": { + "default": false, + "description": "Should be true if you don't want EIPs to be created for your NAT Gateways and will instead pass them in via the 'external_nat_ip_ids' variable", + "type": "bool" + }, + "secondary_cidr_blocks": { + "default": [], + "description": "List of secondary CIDR blocks to associate with the VPC to extend the IP Address pool", + "type": "list(string)" + }, + "single_nat_gateway": { + "default": false, + "description": "Should be true if you want to provision a single shared NAT Gateway across all of your private networks", + "type": "bool" + }, + "tags": { + "default": {}, + "description": "A map of tags to add to all resources", + "type": "map(string)" + }, + "vpc_flow_log_permissions_boundary": { + "default": "null", + "description": "The ARN of the Permissions Boundary for the VPC Flow Log IAM Role", + "type": "string" + }, + "vpc_flow_log_tags": { + "default": {}, + "description": "Additional tags for the VPC Flow Logs", + "type": "map(string)" + }, + "vpc_tags": { + "default": {}, + "description": "Additional tags for the VPC", + "type": "map(string)" + }, + "vpn_gateway_az": { + "default": "null", + "description": "The Availability Zone for the VPN Gateway", + "type": "string" + }, + "vpn_gateway_id": { + "default": "", + "description": "ID of VPN Gateway to attach to the VPC", + "type": "string" + }, + "vpn_gateway_tags": { + "default": {}, + "description": "Additional tags for the VPN gateway", + "type": "map(string)" + } +} diff --git a/src/terraform-aws-modules-metadata/vpc_cloudcraft.json b/src/terraform-aws-modules-metadata/vpc_cloudcraft.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpc_cloudcraft.json @@ -0,0 +1 @@ +{} diff --git a/src/terraform-aws-modules-metadata/vpc_variables.json b/src/terraform-aws-modules-metadata/vpc_variables.json new file mode 100644 index 0000000..7806242 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpc_variables.json @@ -0,0 +1,959 @@ +{ + "amazon_side_asn": { + "default": "64512", + "description": "The Autonomous System Number (ASN) for the Amazon side of the gateway. By default the virtual private gateway is created with the current default Amazon ASN.", + "type": "string" + }, + "assign_ipv6_address_on_creation": { + "default": false, + "description": "Assign IPv6 address on subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "azs": { + "default": [], + "description": "A list of availability zones names or ids in the region", + "type": "list(string)" + }, + "cidr": { + "default": "0.0.0.0/0", + "description": "The CIDR block for the VPC. Default value is a valid CIDR, but not acceptable by AWS and should be overridden", + "type": "string" + }, + "create_database_internet_gateway_route": { + "default": false, + "description": "Controls if an internet gateway route for public database access should be created", + "type": "bool" + }, + "create_database_nat_gateway_route": { + "default": false, + "description": "Controls if a nat gateway route should be created to give internet access to the database subnets", + "type": "bool" + }, + "create_database_subnet_group": { + "default": true, + "description": "Controls if database subnet group should be created (n.b. database_subnets must also be set)", + "type": "bool" + }, + "create_database_subnet_route_table": { + "default": false, + "description": "Controls if separate route table for database should be created", + "type": "bool" + }, + "create_egress_only_igw": { + "default": true, + "description": "Controls if an Egress Only Internet Gateway is created and its related routes.", + "type": "bool" + }, + "create_elasticache_subnet_group": { + "default": true, + "description": "Controls if elasticache subnet group should be created", + "type": "bool" + }, + "create_elasticache_subnet_route_table": { + "default": false, + "description": "Controls if separate route table for elasticache should be created", + "type": "bool" + }, + "create_flow_log_cloudwatch_iam_role": { + "default": false, + "description": "Whether to create IAM role for VPC Flow Logs", + "type": "bool" + }, + "create_flow_log_cloudwatch_log_group": { + "default": false, + "description": "Whether to create CloudWatch log group for VPC Flow Logs", + "type": "bool" + }, + "create_igw": { + "default": true, + "description": "Controls if an Internet Gateway is created for public subnets and the related routes that connect them.", + "type": "bool" + }, + "create_redshift_subnet_group": { + "default": true, + "description": "Controls if redshift subnet group should be created", + "type": "bool" + }, + "create_redshift_subnet_route_table": { + "default": false, + "description": "Controls if separate route table for redshift should be created", + "type": "bool" + }, + "create_vpc": { + "default": true, + "description": "Controls if VPC should be created (it affects almost all resources)", + "type": "bool" + }, + "customer_gateway_tags": { + "default": {}, + "description": "Additional tags for the Customer Gateway", + "type": "map(string)" + }, + "customer_gateways": { + "default": {}, + "description": "Maps of Customer Gateway's attributes (BGP ASN and Gateway's Internet-routable external IP address)", + "type": "map(map(any))" + }, + "database_acl_tags": { + "default": {}, + "description": "Additional tags for the database subnets network ACL", + "type": "map(string)" + }, + "database_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for database subnets", + "type": "bool" + }, + "database_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Database subnets inbound network ACL rules", + "type": "list(map(string))" + }, + "database_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Database subnets outbound network ACL rules", + "type": "list(map(string))" + }, + "database_route_table_tags": { + "default": {}, + "description": "Additional tags for the database route tables", + "type": "map(string)" + }, + "database_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on database subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "database_subnet_group_tags": { + "default": {}, + "description": "Additional tags for the database subnet group", + "type": "map(string)" + }, + "database_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 database subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "database_subnet_suffix": { + "default": "db", + "description": "Suffix to append to database subnets name", + "type": "string" + }, + "database_subnet_tags": { + "default": {}, + "description": "Additional tags for the database subnets", + "type": "map(string)" + }, + "database_subnets": { + "default": [], + "description": "A list of database subnets", + "type": "list(string)" + }, + "default_network_acl_egress": { + "default": [ + { + "action": "allow", + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_no": 100, + "to_port": 0 + }, + { + "action": "allow", + "from_port": 0, + "ipv6_cidr_block": "::/0", + "protocol": "-1", + "rule_no": 101, + "to_port": 0 + } + ], + "description": "List of maps of egress rules to set on the Default Network ACL", + "type": "list(map(string))" + }, + "default_network_acl_ingress": { + "default": [ + { + "action": "allow", + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_no": 100, + "to_port": 0 + }, + { + "action": "allow", + "from_port": 0, + "ipv6_cidr_block": "::/0", + "protocol": "-1", + "rule_no": 101, + "to_port": 0 + } + ], + "description": "List of maps of ingress rules to set on the Default Network ACL", + "type": "list(map(string))" + }, + "default_network_acl_name": { + "default": "", + "description": "Name to be used on the Default Network ACL", + "type": "string" + }, + "default_network_acl_tags": { + "default": {}, + "description": "Additional tags for the Default Network ACL", + "type": "map(string)" + }, + "default_route_table_propagating_vgws": { + "default": [], + "description": "List of virtual gateways for propagation", + "type": "list(string)" + }, + "default_route_table_routes": { + "default": [], + "description": "Configuration block of routes. See https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/default_route_table#route", + "type": "list(map(string))" + }, + "default_route_table_tags": { + "default": {}, + "description": "Additional tags for the default route table", + "type": "map(string)" + }, + "default_security_group_egress": { + "default": "null", + "description": "List of maps of egress rules to set on the default security group", + "type": "list(map(string))" + }, + "default_security_group_ingress": { + "default": "null", + "description": "List of maps of ingress rules to set on the default security group", + "type": "list(map(string))" + }, + "default_security_group_name": { + "default": "default", + "description": "Name to be used on the default security group", + "type": "string" + }, + "default_security_group_tags": { + "default": {}, + "description": "Additional tags for the default security group", + "type": "map(string)" + }, + "default_vpc_enable_classiclink": { + "default": false, + "description": "Should be true to enable ClassicLink in the Default VPC", + "type": "bool" + }, + "default_vpc_enable_dns_hostnames": { + "default": false, + "description": "Should be true to enable DNS hostnames in the Default VPC", + "type": "bool" + }, + "default_vpc_enable_dns_support": { + "default": true, + "description": "Should be true to enable DNS support in the Default VPC", + "type": "bool" + }, + "default_vpc_name": { + "default": "", + "description": "Name to be used on the Default VPC", + "type": "string" + }, + "default_vpc_tags": { + "default": {}, + "description": "Additional tags for the Default VPC", + "type": "map(string)" + }, + "dhcp_options_domain_name": { + "default": "", + "description": "Specifies DNS name for DHCP options set (requires enable_dhcp_options set to true)", + "type": "string" + }, + "dhcp_options_domain_name_servers": { + "default": [ + "AmazonProvidedDNS" + ], + "description": "Specify a list of DNS server addresses for DHCP options set, default to AWS provided (requires enable_dhcp_options set to true)", + "type": "list(string)" + }, + "dhcp_options_netbios_name_servers": { + "default": [], + "description": "Specify a list of netbios servers for DHCP options set (requires enable_dhcp_options set to true)", + "type": "list(string)" + }, + "dhcp_options_netbios_node_type": { + "default": "", + "description": "Specify netbios node_type for DHCP options set (requires enable_dhcp_options set to true)", + "type": "string" + }, + "dhcp_options_ntp_servers": { + "default": [], + "description": "Specify a list of NTP servers for DHCP options set (requires enable_dhcp_options set to true)", + "type": "list(string)" + }, + "dhcp_options_tags": { + "default": {}, + "description": "Additional tags for the DHCP option set (requires enable_dhcp_options set to true)", + "type": "map(string)" + }, + "elasticache_acl_tags": { + "default": {}, + "description": "Additional tags for the elasticache subnets network ACL", + "type": "map(string)" + }, + "elasticache_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for elasticache subnets", + "type": "bool" + }, + "elasticache_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Elasticache subnets inbound network ACL rules", + "type": "list(map(string))" + }, + "elasticache_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Elasticache subnets outbound network ACL rules", + "type": "list(map(string))" + }, + "elasticache_route_table_tags": { + "default": {}, + "description": "Additional tags for the elasticache route tables", + "type": "map(string)" + }, + "elasticache_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on elasticache subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "elasticache_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 elasticache subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "elasticache_subnet_suffix": { + "default": "elasticache", + "description": "Suffix to append to elasticache subnets name", + "type": "string" + }, + "elasticache_subnet_tags": { + "default": {}, + "description": "Additional tags for the elasticache subnets", + "type": "map(string)" + }, + "elasticache_subnets": { + "default": [], + "description": "A list of elasticache subnets", + "type": "list(string)" + }, + "enable_classiclink": { + "default": "null", + "description": "Should be true to enable ClassicLink for the VPC. Only valid in regions and accounts that support EC2 Classic.", + "type": "bool" + }, + "enable_classiclink_dns_support": { + "default": "null", + "description": "Should be true to enable ClassicLink DNS Support for the VPC. Only valid in regions and accounts that support EC2 Classic.", + "type": "bool" + }, + "enable_dhcp_options": { + "default": false, + "description": "Should be true if you want to specify a DHCP options set with a custom domain name, DNS servers, NTP servers, netbios servers, and/or netbios server type", + "type": "bool" + }, + "enable_dns_hostnames": { + "default": false, + "description": "Should be true to enable DNS hostnames in the VPC", + "type": "bool" + }, + "enable_dns_support": { + "default": true, + "description": "Should be true to enable DNS support in the VPC", + "type": "bool" + }, + "enable_flow_log": { + "default": false, + "description": "Whether or not to enable VPC Flow Logs", + "type": "bool" + }, + "enable_ipv6": { + "default": false, + "description": "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.", + "type": "bool" + }, + "enable_nat_gateway": { + "default": false, + "description": "Should be true if you want to provision NAT Gateways for each of your private networks", + "type": "bool" + }, + "enable_public_redshift": { + "default": false, + "description": "Controls if redshift should have public routing table", + "type": "bool" + }, + "enable_vpn_gateway": { + "default": false, + "description": "Should be true if you want to create a new VPN Gateway resource and attach it to the VPC", + "type": "bool" + }, + "external_nat_ip_ids": { + "default": [], + "description": "List of EIP IDs to be assigned to the NAT Gateways (used in combination with reuse_nat_ips)", + "type": "list(string)" + }, + "external_nat_ips": { + "default": [], + "description": "List of EIPs to be used for `nat_public_ips` output (used in combination with reuse_nat_ips and external_nat_ip_ids)", + "type": "list(string)" + }, + "flow_log_cloudwatch_iam_role_arn": { + "default": "", + "description": "The ARN for the IAM role that's used to post flow logs to a CloudWatch Logs log group. When flow_log_destination_arn is set to ARN of Cloudwatch Logs, this argument needs to be provided.", + "type": "string" + }, + "flow_log_cloudwatch_log_group_kms_key_id": { + "default": "null", + "description": "The ARN of the KMS Key to use when encrypting log data for VPC flow logs.", + "type": "string" + }, + "flow_log_cloudwatch_log_group_name_prefix": { + "default": "/aws/vpc-flow-log/", + "description": "Specifies the name prefix of CloudWatch Log Group for VPC flow logs.", + "type": "string" + }, + "flow_log_cloudwatch_log_group_retention_in_days": { + "default": "null", + "description": "Specifies the number of days you want to retain log events in the specified log group for VPC flow logs.", + "type": "number" + }, + "flow_log_destination_arn": { + "default": "", + "description": "The ARN of the CloudWatch log group or S3 bucket where VPC Flow Logs will be pushed. If this ARN is a S3 bucket the appropriate permissions need to be set on that bucket's policy. When create_flow_log_cloudwatch_log_group is set to false this argument must be provided.", + "type": "string" + }, + "flow_log_destination_type": { + "default": "cloud-watch-logs", + "description": "Type of flow log destination. Can be s3 or cloud-watch-logs.", + "type": "string" + }, + "flow_log_log_format": { + "default": "null", + "description": "The fields to include in the flow log record, in the order in which they should appear.", + "type": "string" + }, + "flow_log_max_aggregation_interval": { + "default": 600, + "description": "The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. Valid Values: `60` seconds or `600` seconds.", + "type": "number" + }, + "flow_log_traffic_type": { + "default": "ALL", + "description": "The type of traffic to capture. Valid values: ACCEPT, REJECT, ALL.", + "type": "string" + }, + "igw_tags": { + "default": {}, + "description": "Additional tags for the internet gateway", + "type": "map(string)" + }, + "instance_tenancy": { + "default": "default", + "description": "A tenancy option for instances launched into the VPC", + "type": "string" + }, + "intra_acl_tags": { + "default": {}, + "description": "Additional tags for the intra subnets network ACL", + "type": "map(string)" + }, + "intra_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for intra subnets", + "type": "bool" + }, + "intra_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Intra subnets inbound network ACLs", + "type": "list(map(string))" + }, + "intra_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Intra subnets outbound network ACLs", + "type": "list(map(string))" + }, + "intra_route_table_tags": { + "default": {}, + "description": "Additional tags for the intra route tables", + "type": "map(string)" + }, + "intra_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on intra subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "intra_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 intra subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "intra_subnet_suffix": { + "default": "intra", + "description": "Suffix to append to intra subnets name", + "type": "string" + }, + "intra_subnet_tags": { + "default": {}, + "description": "Additional tags for the intra subnets", + "type": "map(string)" + }, + "intra_subnets": { + "default": [], + "description": "A list of intra subnets", + "type": "list(string)" + }, + "manage_default_network_acl": { + "default": false, + "description": "Should be true to adopt and manage Default Network ACL", + "type": "bool" + }, + "manage_default_route_table": { + "default": false, + "description": "Should be true to manage default route table", + "type": "bool" + }, + "manage_default_security_group": { + "default": false, + "description": "Should be true to adopt and manage default security group", + "type": "bool" + }, + "manage_default_vpc": { + "default": false, + "description": "Should be true to adopt and manage Default VPC", + "type": "bool" + }, + "map_public_ip_on_launch": { + "default": true, + "description": "Should be false if you do not want to auto-assign public IP on launch", + "type": "bool" + }, + "name": { + "default": "", + "description": "Name to be used on all the resources as identifier", + "type": "string" + }, + "nat_eip_tags": { + "default": {}, + "description": "Additional tags for the NAT EIP", + "type": "map(string)" + }, + "nat_gateway_tags": { + "default": {}, + "description": "Additional tags for the NAT gateways", + "type": "map(string)" + }, + "one_nat_gateway_per_az": { + "default": false, + "description": "Should be true if you want only one NAT Gateway per availability zone. Requires `var.azs` to be set, and the number of `public_subnets` created to be greater than or equal to the number of availability zones specified in `var.azs`.", + "type": "bool" + }, + "outpost_acl_tags": { + "default": {}, + "description": "Additional tags for the outpost subnets network ACL", + "type": "map(string)" + }, + "outpost_arn": { + "default": "null", + "description": "ARN of Outpost you want to create a subnet in.", + "type": "string" + }, + "outpost_az": { + "default": "null", + "description": "AZ where Outpost is anchored.", + "type": "string" + }, + "outpost_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for outpost subnets", + "type": "bool" + }, + "outpost_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Outpost subnets inbound network ACLs", + "type": "list(map(string))" + }, + "outpost_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Outpost subnets outbound network ACLs", + "type": "list(map(string))" + }, + "outpost_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on outpost subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "outpost_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 outpost subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "outpost_subnet_suffix": { + "default": "outpost", + "description": "Suffix to append to outpost subnets name", + "type": "string" + }, + "outpost_subnet_tags": { + "default": {}, + "description": "Additional tags for the outpost subnets", + "type": "map(string)" + }, + "outpost_subnets": { + "default": [], + "description": "A list of outpost subnets inside the VPC", + "type": "list(string)" + }, + "private_acl_tags": { + "default": {}, + "description": "Additional tags for the private subnets network ACL", + "type": "map(string)" + }, + "private_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for private subnets", + "type": "bool" + }, + "private_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Private subnets inbound network ACLs", + "type": "list(map(string))" + }, + "private_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Private subnets outbound network ACLs", + "type": "list(map(string))" + }, + "private_route_table_tags": { + "default": {}, + "description": "Additional tags for the private route tables", + "type": "map(string)" + }, + "private_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on private subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "private_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 private subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "private_subnet_suffix": { + "default": "private", + "description": "Suffix to append to private subnets name", + "type": "string" + }, + "private_subnet_tags": { + "default": {}, + "description": "Additional tags for the private subnets", + "type": "map(string)" + }, + "private_subnets": { + "default": [], + "description": "A list of private subnets inside the VPC", + "type": "list(string)" + }, + "propagate_intra_route_tables_vgw": { + "default": false, + "description": "Should be true if you want route table propagation", + "type": "bool" + }, + "propagate_private_route_tables_vgw": { + "default": false, + "description": "Should be true if you want route table propagation", + "type": "bool" + }, + "propagate_public_route_tables_vgw": { + "default": false, + "description": "Should be true if you want route table propagation", + "type": "bool" + }, + "public_acl_tags": { + "default": {}, + "description": "Additional tags for the public subnets network ACL", + "type": "map(string)" + }, + "public_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for public subnets", + "type": "bool" + }, + "public_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Public subnets inbound network ACLs", + "type": "list(map(string))" + }, + "public_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Public subnets outbound network ACLs", + "type": "list(map(string))" + }, + "public_route_table_tags": { + "default": {}, + "description": "Additional tags for the public route tables", + "type": "map(string)" + }, + "public_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on public subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "public_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 public subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "public_subnet_suffix": { + "default": "public", + "description": "Suffix to append to public subnets name", + "type": "string" + }, + "public_subnet_tags": { + "default": {}, + "description": "Additional tags for the public subnets", + "type": "map(string)" + }, + "public_subnets": { + "default": [], + "description": "A list of public subnets inside the VPC", + "type": "list(string)" + }, + "redshift_acl_tags": { + "default": {}, + "description": "Additional tags for the redshift subnets network ACL", + "type": "map(string)" + }, + "redshift_dedicated_network_acl": { + "default": false, + "description": "Whether to use dedicated network ACL (not default) and custom rules for redshift subnets", + "type": "bool" + }, + "redshift_inbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Redshift subnets inbound network ACL rules", + "type": "list(map(string))" + }, + "redshift_outbound_acl_rules": { + "default": [ + { + "cidr_block": "0.0.0.0/0", + "from_port": 0, + "protocol": "-1", + "rule_action": "allow", + "rule_number": 100, + "to_port": 0 + } + ], + "description": "Redshift subnets outbound network ACL rules", + "type": "list(map(string))" + }, + "redshift_route_table_tags": { + "default": {}, + "description": "Additional tags for the redshift route tables", + "type": "map(string)" + }, + "redshift_subnet_assign_ipv6_address_on_creation": { + "default": "null", + "description": "Assign IPv6 address on redshift subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch", + "type": "bool" + }, + "redshift_subnet_group_tags": { + "default": {}, + "description": "Additional tags for the redshift subnet group", + "type": "map(string)" + }, + "redshift_subnet_ipv6_prefixes": { + "default": [], + "description": "Assigns IPv6 redshift subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list", + "type": "list(string)" + }, + "redshift_subnet_suffix": { + "default": "redshift", + "description": "Suffix to append to redshift subnets name", + "type": "string" + }, + "redshift_subnet_tags": { + "default": {}, + "description": "Additional tags for the redshift subnets", + "type": "map(string)" + }, + "redshift_subnets": { + "default": [], + "description": "A list of redshift subnets", + "type": "list(string)" + }, + "reuse_nat_ips": { + "default": false, + "description": "Should be true if you don't want EIPs to be created for your NAT Gateways and will instead pass them in via the 'external_nat_ip_ids' variable", + "type": "bool" + }, + "secondary_cidr_blocks": { + "default": [], + "description": "List of secondary CIDR blocks to associate with the VPC to extend the IP Address pool", + "type": "list(string)" + }, + "single_nat_gateway": { + "default": false, + "description": "Should be true if you want to provision a single shared NAT Gateway across all of your private networks", + "type": "bool" + }, + "tags": { + "default": {}, + "description": "A map of tags to add to all resources", + "type": "map(string)" + }, + "vpc_flow_log_permissions_boundary": { + "default": "null", + "description": "The ARN of the Permissions Boundary for the VPC Flow Log IAM Role", + "type": "string" + }, + "vpc_flow_log_tags": { + "default": {}, + "description": "Additional tags for the VPC Flow Logs", + "type": "map(string)" + }, + "vpc_tags": { + "default": {}, + "description": "Additional tags for the VPC", + "type": "map(string)" + }, + "vpn_gateway_az": { + "default": "null", + "description": "The Availability Zone for the VPN Gateway", + "type": "string" + }, + "vpn_gateway_id": { + "default": "", + "description": "ID of VPN Gateway to attach to the VPC", + "type": "string" + }, + "vpn_gateway_tags": { + "default": {}, + "description": "Additional tags for the VPN gateway", + "type": "map(string)" + } +} diff --git a/src/terraform-aws-modules-metadata/vpc_version.txt b/src/terraform-aws-modules-metadata/vpc_version.txt new file mode 100644 index 0000000..ad55eb8 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpc_version.txt @@ -0,0 +1 @@ +v3.0.0 diff --git a/src/terraform-aws-modules-metadata/vpn-gateway.json b/src/terraform-aws-modules-metadata/vpn-gateway.json new file mode 100644 index 0000000..f77f436 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpn-gateway.json @@ -0,0 +1,231 @@ +{ + "connect_to_transit_gateway": { + "default": false, + "description": "Set to false to disable attachment of the VPN connection route to the VPN connection (TGW uses another resource for that)", + "type": "bool" + }, + "create_vpn_connection": { + "default": true, + "description": "Set to false to prevent the creation of a VPN Connection.", + "type": "bool" + }, + "create_vpn_gateway_attachment": { + "default": true, + "description": "Set to false to prevent attachment of the VGW to the VPC", + "type": "bool" + }, + "customer_gateway_id": { + "description": "The id of the Customer Gateway.", + "type": "string" + }, + "tags": { + "default": {}, + "description": "Set of tags to be added to the VPN Connection resource (only if `create_vpn_connection = true`).", + "type": "map(string)" + }, + "transit_gateway_id": { + "default": "null", + "description": "The ID of the Transit Gateway.", + "type": "string" + }, + "tunnel1_dpd_timeout_action": { + "default": "null", + "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the first VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart", + "type": "string" + }, + "tunnel1_dpd_timeout_seconds": { + "default": "null", + "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the first VPN tunnel. Valid value is equal or higher than 30", + "type": "number" + }, + "tunnel1_ike_versions": { + "default": "null", + "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2", + "type": "list(string)" + }, + "tunnel1_inside_cidr": { + "default": "", + "description": "The CIDR block of the inside IP addresses for the first VPN tunnel.", + "type": "string" + }, + "tunnel1_phase1_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel1_phase1_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel1_phase1_integrity_algorithms": { + "default": "null", + "description": "(Optional) One or more integrity algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel1_phase1_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 28800", + "type": "number" + }, + "tunnel1_phase2_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel1_phase2_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel1_phase2_integrity_algorithms": { + "default": "null", + "description": "(Optional) List of one or more integrity algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel1_phase2_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 3600", + "type": "number" + }, + "tunnel1_preshared_key": { + "default": "", + "description": "The preshared key of the first VPN tunnel.", + "type": "string" + }, + "tunnel1_rekey_fuzz_percentage": { + "default": "null", + "description": "(Optional, Default 100) The percentage of the rekey window for the first VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100", + "type": "number" + }, + "tunnel1_rekey_margin_time_seconds": { + "default": "null", + "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the first VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel1_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel1_phase2_lifetime_seconds", + "type": "number" + }, + "tunnel1_replay_window_size": { + "default": "null", + "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the first VPN tunnel. Valid value is between 64 and 2048.", + "type": "number" + }, + "tunnel1_startup_action": { + "default": "null", + "description": "(Optional, Default add) The action to take when the establishing the tunnel for the first VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start", + "type": "string" + }, + "tunnel2_dpd_timeout_action": { + "default": "null", + "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the second VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart", + "type": "string" + }, + "tunnel2_dpd_timeout_seconds": { + "default": "null", + "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the second VPN tunnel. Valid value is equal or higher than 30", + "type": "number" + }, + "tunnel2_ike_versions": { + "default": "null", + "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2", + "type": "list(string)" + }, + "tunnel2_inside_cidr": { + "default": "", + "description": "The CIDR block of the inside IP addresses for the second VPN tunnel.", + "type": "string" + }, + "tunnel2_phase1_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel2_phase1_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel2_phase1_integrity_algorithms": { + "default": "null", + "description": "(Optional) One or more integrity algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel2_phase1_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 28800", + "type": "number" + }, + "tunnel2_phase2_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel2_phase2_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel2_phase2_integrity_algorithms": { + "default": "null", + "description": "(Optional) List of one or more integrity algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel2_phase2_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 3600", + "type": "number" + }, + "tunnel2_preshared_key": { + "default": "", + "description": "The preshared key of the second VPN tunnel.", + "type": "string" + }, + "tunnel2_rekey_fuzz_percentage": { + "default": "null", + "description": "(Optional, Default 100) The percentage of the rekey window for the second VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100", + "type": "number" + }, + "tunnel2_rekey_margin_time_seconds": { + "default": "null", + "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the second VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel2_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel2_phase2_lifetime_seconds", + "type": "number" + }, + "tunnel2_replay_window_size": { + "default": "null", + "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the second VPN tunnel. Valid value is between 64 and 2048.", + "type": "number" + }, + "tunnel2_startup_action": { + "default": "null", + "description": "(Optional, Default add) The action to take when the establishing the tunnel for the second VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start", + "type": "string" + }, + "vpc_id": { + "default": "null", + "description": "The id of the VPC where the VPN Gateway lives.", + "type": "string" + }, + "vpc_subnet_route_table_count": { + "default": 0, + "description": "The number of subnet route table ids being passed in via `vpc_subnet_route_table_ids`.", + "type": "number" + }, + "vpc_subnet_route_table_ids": { + "default": [], + "description": "The ids of the VPC subnets for which routes from the VPN Gateway will be propagated.", + "type": "list(string)" + }, + "vpn_connection_static_routes_destinations": { + "default": [], + "description": "List of CIDRs to be used as destination for static routes (used with `vpn_connection_static_routes_only = true`). Routes to destinations set here will be propagated to the routing tables of the subnets defined in `vpc_subnet_route_table_ids`.", + "type": "list(string)" + }, + "vpn_connection_static_routes_only": { + "default": false, + "description": "Set to true for the created VPN connection to use static routes exclusively (only if `create_vpn_connection = true`). Static routes must be used for devices that don't support BGP.", + "type": "bool" + }, + "vpn_gateway_id": { + "default": "null", + "description": "The id of the VPN Gateway.", + "type": "string" + } +} diff --git a/src/terraform-aws-modules-metadata/vpn-gateway_cloudcraft.json b/src/terraform-aws-modules-metadata/vpn-gateway_cloudcraft.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpn-gateway_cloudcraft.json @@ -0,0 +1 @@ +{} diff --git a/src/terraform-aws-modules-metadata/vpn-gateway_variables.json b/src/terraform-aws-modules-metadata/vpn-gateway_variables.json new file mode 100644 index 0000000..f77f436 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpn-gateway_variables.json @@ -0,0 +1,231 @@ +{ + "connect_to_transit_gateway": { + "default": false, + "description": "Set to false to disable attachment of the VPN connection route to the VPN connection (TGW uses another resource for that)", + "type": "bool" + }, + "create_vpn_connection": { + "default": true, + "description": "Set to false to prevent the creation of a VPN Connection.", + "type": "bool" + }, + "create_vpn_gateway_attachment": { + "default": true, + "description": "Set to false to prevent attachment of the VGW to the VPC", + "type": "bool" + }, + "customer_gateway_id": { + "description": "The id of the Customer Gateway.", + "type": "string" + }, + "tags": { + "default": {}, + "description": "Set of tags to be added to the VPN Connection resource (only if `create_vpn_connection = true`).", + "type": "map(string)" + }, + "transit_gateway_id": { + "default": "null", + "description": "The ID of the Transit Gateway.", + "type": "string" + }, + "tunnel1_dpd_timeout_action": { + "default": "null", + "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the first VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart", + "type": "string" + }, + "tunnel1_dpd_timeout_seconds": { + "default": "null", + "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the first VPN tunnel. Valid value is equal or higher than 30", + "type": "number" + }, + "tunnel1_ike_versions": { + "default": "null", + "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2", + "type": "list(string)" + }, + "tunnel1_inside_cidr": { + "default": "", + "description": "The CIDR block of the inside IP addresses for the first VPN tunnel.", + "type": "string" + }, + "tunnel1_phase1_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel1_phase1_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel1_phase1_integrity_algorithms": { + "default": "null", + "description": "(Optional) One or more integrity algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel1_phase1_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 28800", + "type": "number" + }, + "tunnel1_phase2_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel1_phase2_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel1_phase2_integrity_algorithms": { + "default": "null", + "description": "(Optional) List of one or more integrity algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel1_phase2_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 3600", + "type": "number" + }, + "tunnel1_preshared_key": { + "default": "", + "description": "The preshared key of the first VPN tunnel.", + "type": "string" + }, + "tunnel1_rekey_fuzz_percentage": { + "default": "null", + "description": "(Optional, Default 100) The percentage of the rekey window for the first VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100", + "type": "number" + }, + "tunnel1_rekey_margin_time_seconds": { + "default": "null", + "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the first VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel1_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel1_phase2_lifetime_seconds", + "type": "number" + }, + "tunnel1_replay_window_size": { + "default": "null", + "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the first VPN tunnel. Valid value is between 64 and 2048.", + "type": "number" + }, + "tunnel1_startup_action": { + "default": "null", + "description": "(Optional, Default add) The action to take when the establishing the tunnel for the first VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start", + "type": "string" + }, + "tunnel2_dpd_timeout_action": { + "default": "null", + "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the second VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart", + "type": "string" + }, + "tunnel2_dpd_timeout_seconds": { + "default": "null", + "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the second VPN tunnel. Valid value is equal or higher than 30", + "type": "number" + }, + "tunnel2_ike_versions": { + "default": "null", + "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2", + "type": "list(string)" + }, + "tunnel2_inside_cidr": { + "default": "", + "description": "The CIDR block of the inside IP addresses for the second VPN tunnel.", + "type": "string" + }, + "tunnel2_phase1_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel2_phase1_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel2_phase1_integrity_algorithms": { + "default": "null", + "description": "(Optional) One or more integrity algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel2_phase1_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 28800", + "type": "number" + }, + "tunnel2_phase2_dh_group_numbers": { + "default": "null", + "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24", + "type": "list(number)" + }, + "tunnel2_phase2_encryption_algorithms": { + "default": "null", + "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16", + "type": "list(string)" + }, + "tunnel2_phase2_integrity_algorithms": { + "default": "null", + "description": "(Optional) List of one or more integrity algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512", + "type": "list(string)" + }, + "tunnel2_phase2_lifetime_seconds": { + "default": "null", + "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 3600", + "type": "number" + }, + "tunnel2_preshared_key": { + "default": "", + "description": "The preshared key of the second VPN tunnel.", + "type": "string" + }, + "tunnel2_rekey_fuzz_percentage": { + "default": "null", + "description": "(Optional, Default 100) The percentage of the rekey window for the second VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100", + "type": "number" + }, + "tunnel2_rekey_margin_time_seconds": { + "default": "null", + "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the second VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel2_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel2_phase2_lifetime_seconds", + "type": "number" + }, + "tunnel2_replay_window_size": { + "default": "null", + "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the second VPN tunnel. Valid value is between 64 and 2048.", + "type": "number" + }, + "tunnel2_startup_action": { + "default": "null", + "description": "(Optional, Default add) The action to take when the establishing the tunnel for the second VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start", + "type": "string" + }, + "vpc_id": { + "default": "null", + "description": "The id of the VPC where the VPN Gateway lives.", + "type": "string" + }, + "vpc_subnet_route_table_count": { + "default": 0, + "description": "The number of subnet route table ids being passed in via `vpc_subnet_route_table_ids`.", + "type": "number" + }, + "vpc_subnet_route_table_ids": { + "default": [], + "description": "The ids of the VPC subnets for which routes from the VPN Gateway will be propagated.", + "type": "list(string)" + }, + "vpn_connection_static_routes_destinations": { + "default": [], + "description": "List of CIDRs to be used as destination for static routes (used with `vpn_connection_static_routes_only = true`). Routes to destinations set here will be propagated to the routing tables of the subnets defined in `vpc_subnet_route_table_ids`.", + "type": "list(string)" + }, + "vpn_connection_static_routes_only": { + "default": false, + "description": "Set to true for the created VPN connection to use static routes exclusively (only if `create_vpn_connection = true`). Static routes must be used for devices that don't support BGP.", + "type": "bool" + }, + "vpn_gateway_id": { + "default": "null", + "description": "The id of the VPN Gateway.", + "type": "string" + } +} diff --git a/src/terraform-aws-modules-metadata/vpn-gateway_version.txt b/src/terraform-aws-modules-metadata/vpn-gateway_version.txt new file mode 100644 index 0000000..f367ae3 --- /dev/null +++ b/src/terraform-aws-modules-metadata/vpn-gateway_version.txt @@ -0,0 +1 @@ +v2.9.0 diff --git a/templates/root/template/.gitignore b/templates/root/template/.gitignore deleted file mode 100644 index 0e18c53..0000000 --- a/templates/root/template/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Terraform -.terraform -.terragrunt-cache -*.tfstate* -crash.log - -# Secrets are not allowed in general -*.key -*.pem - -# Secrets are encrypted using git-crypt -!secrets/* - -# OS X -.history -.DS_Store - -# IntelliJ -.idea_modules -*.iml -*.iws -*.ipr -.idea/ -build/ -*/build/ diff --git a/templates/root/template/modules/aws-data/README.md b/templates/root/template/modules/aws-data/README.md deleted file mode 100644 index 00f5bed..0000000 --- a/templates/root/template/modules/aws-data/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# aws-data - -This module contains data-sources which are used as arguments in other AWS modules (eg, list of AZ when creating VPC). - - -## Outputs - -| Name | Description | -|------|-------------| -| amazon\_linux2\_aws\_ami\_id | AMI ID of Amazon Linux 2 | -| available\_aws\_availability\_zones\_names | A list of the Availability Zone names available to the account | -| available\_aws\_availability\_zones\_zone\_ids | A list of the Availability Zone IDs available to the account | -| aws\_region | Details about selected AWS region | -| ubuntu\_1804\_aws\_ami\_id | AMI ID of Ubuntu 18.04 | - - diff --git a/terraform/.gitignore b/terraform/.gitignore new file mode 100644 index 0000000..c45cf41 --- /dev/null +++ b/terraform/.gitignore @@ -0,0 +1 @@ +*.tfvars diff --git a/terraform/.terraform-version b/terraform/.terraform-version new file mode 100644 index 0000000..1985d91 --- /dev/null +++ b/terraform/.terraform-version @@ -0,0 +1 @@ +0.15.3 diff --git a/terraform/Makefile b/terraform/Makefile new file mode 100644 index 0000000..98b23af --- /dev/null +++ b/terraform/Makefile @@ -0,0 +1,7 @@ +.PHONY: cloudcraft betajob + +cloudcraft: + terraform init -backend-config=cloudcraft/backend.hcl -reconfigure && terraform apply -var-file=cloudcraft/cloudcraft.tfvars + +betajob: + terraform init -backend-config=betajob/backend.hcl -reconfigure && terraform apply -var-file=betajob/betajob.tfvars diff --git a/terraform/README.md b/terraform/README.md new file mode 100644 index 0000000..6304cb9 --- /dev/null +++ b/terraform/README.md @@ -0,0 +1,79 @@ +# Terraform configurations required to provision AWS infrastructure for d2c.modules.tf + +- HTTP API Gateway +- ACM +- Lambda Function +- S3 bucket for downloads +- Route53 records + +## Deployments + +### cloudcraft - prod + +``` +$ awsp modules-deploy # Assume IAM role in correct account +$ make cloudcraft +``` + +### betajob - dev + +``` +$ awsp private-anton # Assume IAM role in correct account +$ make betajob +``` + + +## Requirements + +| Name | Version | +|------|---------| +| [terraform](#requirement\_terraform) | >= 0.15, <1.0.0 | +| [aws](#requirement\_aws) | ~> 3.0 | + +## Providers + +| Name | Version | +|------|---------| +| [aws](#provider\_aws) | ~> 3.0 | + +## Modules + +| Name | Source | Version | +|------|--------|---------| +| [acm](#module\_acm) | terraform-aws-modules/acm/aws | ~> 3.0 | +| [alarm\_lambda\_is\_popular](#module\_alarm\_lambda\_is\_popular) | terraform-aws-modules/cloudwatch/aws//modules/metric-alarm | | +| [alarm\_lambda\_is\_slow](#module\_alarm\_lambda\_is\_slow) | terraform-aws-modules/cloudwatch/aws//modules/metric-alarm | | +| [alarm\_lambda\_with\_errors](#module\_alarm\_lambda\_with\_errors) | terraform-aws-modules/cloudwatch/aws//modules/metric-alarm | ~> 2.0 | +| [api\_gateway](#module\_api\_gateway) | terraform-aws-modules/apigateway-v2/aws | ~> 1.0 | +| [dl\_bucket](#module\_dl\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 2.0 | +| [lambda](#module\_lambda) | terraform-aws-modules/lambda/aws | ~> 2.0 | +| [records](#module\_records) | terraform-aws-modules/route53/aws//modules/records | ~> 2.0 | +| [sns\_topic](#module\_sns\_topic) | terraform-aws-modules/sns/aws | ~> 3.0 | + +## Resources + +| Name | Type | +|------|------| +| [aws_sns_topic_subscription.sns_to_email](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_subscription) | resource | +| [aws_route53_zone.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/route53_zone) | data source | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [allowed\_account\_ids](#input\_allowed\_account\_ids) | List of allowed AWS acount ids where infrastructure will be created | `list(string)` | n/a | yes | +| [aws\_region](#input\_aws\_region) | AWS region where infrastructure will be created | `string` | `"eu-west-1"` | no | +| [create\_dl\_bucket](#input\_create\_dl\_bucket) | Whether to create S3 bucket for downloads | `bool` | `false` | no | +| [dl\_bucket\_name](#input\_dl\_bucket\_name) | Name of S3 bucket for downloads (should not include route53\_zone\_name) | `string` | `null` | no | +| [dl\_dir](#input\_dl\_dir) | Name of directory in S3 bucket | `string` | `""` | no | +| [email](#input\_email) | Email address to receive CloudWatch alerts | `string` | n/a | yes | +| [name](#input\_name) | Name or prefix for many related resources | `string` | `"modulestf-d2c"` | no | +| [subdomain](#input\_subdomain) | Route53 subdomain | `string` | `""` | no | +| [zone\_name](#input\_zone\_name) | Zone name for ALB and ACM | `string` | n/a | yes | + +## Outputs + +| Name | Description | +|------|-------------| +| [fqdn](#output\_fqdn) | FQDN of API Endpoint | + diff --git a/terraform/betajob/backend.hcl b/terraform/betajob/backend.hcl new file mode 100644 index 0000000..87626aa --- /dev/null +++ b/terraform/betajob/backend.hcl @@ -0,0 +1,3 @@ +hostname = "app.terraform.io" +organization = "betajob" +workspaces { name = "modulestf-infra-betajob" } diff --git a/terraform/cloudcraft/backend.hcl b/terraform/cloudcraft/backend.hcl new file mode 100644 index 0000000..7ad2b44 --- /dev/null +++ b/terraform/cloudcraft/backend.hcl @@ -0,0 +1,3 @@ +hostname = "app.terraform.io" +organization = "betajob" +workspaces { name = "modulestf-infra-cloudcraft" } diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 0000000..168d444 --- /dev/null +++ b/terraform/main.tf @@ -0,0 +1,262 @@ +terraform { + required_version = ">= 0.15, <1.0.0" + + required_providers { + aws = "~> 3.0" + } + + backend "remote" {} +} + +provider "aws" { + region = var.aws_region + allowed_account_ids = var.allowed_account_ids +} + +locals { + zone_name = trimsuffix(data.aws_route53_zone.this.name, ".") + domain_name = join(".", compact([var.subdomain, local.zone_name])) + + dl_bucket_name = var.create_dl_bucket ? module.dl_bucket.s3_bucket_id : var.dl_bucket_name + dl_dir = trimsuffix(var.dl_dir, "/") + + tags = { + Name = var.name + } +} + +data "aws_route53_zone" "this" { + name = var.zone_name + private_zone = false +} + +module "api_gateway" { + source = "terraform-aws-modules/apigateway-v2/aws" + version = "~> 1.0" + + name = var.name + description = "HTTP API Gateway" + protocol_type = "HTTP" + + cors_configuration = { + allow_headers = ["content-type", "x-amz-date", "authorization", "x-api-key", "x-amz-security-token", "x-amz-user-agent"] + allow_methods = ["*"] + allow_origins = ["*"] + } + + domain_name = local.domain_name + domain_name_certificate_arn = module.acm.acm_certificate_arn + disable_execute_api_endpoint = true + + integrations = { + "GET /" = { + lambda_arn = module.lambda.lambda_function_arn + payload_format_version = "2.0" + } + + "POST /" = { + lambda_arn = module.lambda.lambda_function_arn + payload_format_version = "2.0" + } + } + + tags = local.tags +} + +module "lambda" { + source = "terraform-aws-modules/lambda/aws" + version = "~> 2.0" + + function_name = "${var.name}-lambda" + description = "Lambda function which converts blueprint into Terraform code" + handler = "handler.handler" + runtime = "python3.8" + memory_size = 3072 + timeout = 30 + publish = true + + source_path = "../src" + + environment_variables = { + S3_BUCKET = local.dl_bucket_name + S3_DIR = local.dl_dir + UPLOAD_TO_S3 = true + } + + cloudwatch_logs_retention_in_days = 30 + + attach_tracing_policy = true + tracing_mode = "Active" + + attach_policy_statements = true + policy_statements = { + s3 = { + effect = "Allow", + actions = ["s3:PutObject*"], + resources = [ + "arn:aws:s3:::${local.dl_bucket_name}/${local.dl_dir}", + "arn:aws:s3:::${local.dl_bucket_name}/${local.dl_dir}/*", + ] + } + } + + allowed_triggers = { + AllowExecutionFromAPIGateway = { + service = "apigateway" + source_arn = "${module.api_gateway.apigatewayv2_api_execution_arn}/*/*/" + } + } + + tags = local.tags +} + +module "acm" { + source = "terraform-aws-modules/acm/aws" + version = "~> 3.0" + + domain_name = local.zone_name + subject_alternative_names = setsubtract([local.domain_name], [local.zone_name]) + zone_id = data.aws_route53_zone.this.id + + tags = local.tags +} + +module "dl_bucket" { + source = "terraform-aws-modules/s3-bucket/aws" + version = "~> 2.0" + + create_bucket = var.create_dl_bucket + + bucket = var.dl_bucket_name + acl = "private" + force_destroy = true + block_public_policy = true + + cors_rule = [{ + allowed_methods = ["GET"] + allowed_origins = ["*"] + allowed_headers = ["*"] + max_age_seconds = 3000 + }] + + lifecycle_rule = [ + { + id = "delete-pretty-quick" + enabled = true + + expiration = { + days = 1 + } + } + ] + + tags = local.tags +} + +module "records" { + source = "terraform-aws-modules/route53/aws//modules/records" + version = "~> 2.0" + + zone_id = data.aws_route53_zone.this.zone_id + + records = [ + { + name = var.subdomain + type = "A" + alias = { + name = module.api_gateway.apigatewayv2_domain_name_configuration[0].target_domain_name + zone_id = module.api_gateway.apigatewayv2_domain_name_configuration[0].hosted_zone_id + } + }, + ] +} + +module "sns_topic" { + source = "terraform-aws-modules/sns/aws" + version = "~> 3.0" + + name_prefix = var.name +} + +resource "aws_sns_topic_subscription" "sns_to_email" { + topic_arn = module.sns_topic.sns_topic_arn + protocol = "email" + endpoint = var.email +} + +# Alarm when there is at least one error in a minute in AWS Lambda functions +module "alarm_lambda_with_errors" { + source = "terraform-aws-modules/cloudwatch/aws//modules/metric-alarm" + version = "~> 2.0" + + alarm_name = "lambda-errors-${module.lambda.lambda_function_name}" + alarm_description = "Lambda with errors" + comparison_operator = "GreaterThanOrEqualToThreshold" + evaluation_periods = 1 + threshold = 1 + period = 60 + unit = "Count" + treat_missing_data = "notBreaching" + + namespace = "AWS/Lambda" + metric_name = "Errors" + statistic = "Maximum" + + dimensions = { + FunctionName = module.lambda.lambda_function_name + } + + alarm_actions = [module.sns_topic.sns_topic_arn] + + depends_on = [module.sns_topic] +} + +module "alarm_lambda_is_slow" { + source = "terraform-aws-modules/cloudwatch/aws//modules/metric-alarm" + + alarm_name = "lambda-slow-${module.lambda.lambda_function_name}" + alarm_description = "Lambda is too high" + comparison_operator = "GreaterThanOrEqualToThreshold" + evaluation_periods = 1 + threshold = 20000 + period = 60 + unit = "Milliseconds" + treat_missing_data = "notBreaching" + + namespace = "AWS/Lambda" + metric_name = "Duration" + statistic = "Maximum" + + dimensions = { + FunctionName = module.lambda.lambda_function_name + } + + alarm_actions = [module.sns_topic.sns_topic_arn] + + depends_on = [module.sns_topic] +} + +module "alarm_lambda_is_popular" { + source = "terraform-aws-modules/cloudwatch/aws//modules/metric-alarm" + + alarm_name = "lambda-popular-${module.lambda.lambda_function_name}" + alarm_description = "Lambda is too popular" + comparison_operator = "GreaterThanOrEqualToThreshold" + evaluation_periods = 1 + threshold = 100 + period = 60 + unit = "Count" + treat_missing_data = "notBreaching" + + namespace = "AWS/Lambda" + metric_name = "Invocations" + statistic = "Maximum" + + dimensions = { + FunctionName = module.lambda.lambda_function_name + } + + alarm_actions = [module.sns_topic.sns_topic_arn] + + depends_on = [module.sns_topic] +} diff --git a/terraform/outputs.tf b/terraform/outputs.tf new file mode 100644 index 0000000..53421d8 --- /dev/null +++ b/terraform/outputs.tf @@ -0,0 +1,4 @@ +output "fqdn" { + description = "FQDN of API Endpoint" + value = "https://${module.records.route53_record_fqdn["${var.subdomain} A"]}" +} diff --git a/terraform/terraform.tfvars.sample b/terraform/terraform.tfvars.sample new file mode 100644 index 0000000..b3442de --- /dev/null +++ b/terraform/terraform.tfvars.sample @@ -0,0 +1,10 @@ +allowed_account_ids = ["111111111111"] + +zone_name = "modules.tf" +subdomain = "dev-d2c" + +create_dl_bucket = false +dl_bucket_name = "dl.modules.tf" +dl_dir = "dev" + +email = "alerts@domain.com" diff --git a/terraform/variables.tf b/terraform/variables.tf new file mode 100644 index 0000000..77115e9 --- /dev/null +++ b/terraform/variables.tf @@ -0,0 +1,50 @@ +variable "allowed_account_ids" { + description = "List of allowed AWS acount ids where infrastructure will be created" + type = list(string) +} + +variable "aws_region" { + description = "AWS region where infrastructure will be created" + type = string + default = "eu-west-1" +} + +variable "name" { + description = "Name or prefix for many related resources" + type = string + default = "modulestf-d2c" +} + +variable "zone_name" { + description = "Zone name for ALB and ACM" + type = string +} + +variable "subdomain" { + description = "Route53 subdomain" + type = string + default = "" +} + +variable "create_dl_bucket" { + description = "Whether to create S3 bucket for downloads" + type = bool + default = false +} + +variable "dl_bucket_name" { + description = "Name of S3 bucket for downloads (should not include route53_zone_name)" + type = string + default = null +} + +variable "dl_dir" { + description = "Name of directory in S3 bucket" + type = string + default = "" +} + +variable "email" { + description = "Email address to receive CloudWatch alerts" + type = string +} diff --git a/test_fixtures/api_gateway_request.json b/test_fixtures/api_gateway_request.json new file mode 100644 index 0000000..f75f3ef --- /dev/null +++ b/test_fixtures/api_gateway_request.json @@ -0,0 +1,69 @@ +{ + "version": "2.0", + "routeKey": "$default", + "rawPath": "/my/path", + "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", + "cookies": [ + "cookie1", + "cookie2" + ], + "headers": { + "header1": "value1", + "header2": "value1,value2" + }, + "queryStringParameters": { + "parameter1": "value1,value2", + "parameter2": "value" + }, + "requestContext": { + "accountId": "123456789012", + "apiId": "api-id", + "authentication": { + "clientCert": { + "clientCertPem": "CERT_CONTENT", + "subjectDN": "www.example.com", + "issuerDN": "Example issuer", + "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", + "validity": { + "notBefore": "May 28 12:30:02 2019 GMT", + "notAfter": "Aug 5 09:36:04 2021 GMT" + } + } + }, + "authorizer": { + "jwt": { + "claims": { + "claim1": "value1", + "claim2": "value2" + }, + "scopes": [ + "scope1", + "scope2" + ] + } + }, + "domainName": "id.execute-api.us-east-1.amazonaws.com", + "domainPrefix": "id", + "http": { + "method": "POST", + "path": "/my/path", + "protocol": "HTTP/1.1", + "sourceIp": "IP", + "userAgent": "agent" + }, + "requestId": "id", + "routeKey": "$default", + "stage": "$default", + "time": "12/Mar/2020:19:03:58 +0000", + "timeEpoch": 1583348638390 + }, + "body": "Hello from Lambda", + "pathParameters": { + "parameter1": "value1" + }, + "isBase64Encoded": false, + "stageVariables": { + "stageVariable1": "value1", + "stageVariable2": "value2" + } +} diff --git a/test_fixtures/input/blueprint_cloudfront_lambda_apigw.json b/test_fixtures/input/blueprint_cloudfront_lambda_apigw.json new file mode 100644 index 0000000..d426b3a --- /dev/null +++ b/test_fixtures/input/blueprint_cloudfront_lambda_apigw.json @@ -0,0 +1,190 @@ +{ + "id": "5b27afb9-1cce-4bbc-a0aa-6bc5febc7ba0", + "data": { + "grid": "standard", + "name": "sdfhdsfh", + "text": [{ + "id": "616cb32d-8c11-4697-a6fb-486407ef8a9b", + "text": "S3-files", + "type": "isotext", + "color": "#4286c5", + "mapPos": { + "relTo": "ae00b6e2-ed7c-47c8-8b1c-c9d9a03ed2f9", + "offset": [0.245, 0.6999999999999993] + }, + "outline": true, + "standing": false, + "textSize": 25, + "direction": "down", + "isometric": true + }, { + "id": "aac87f03-d7aa-4aea-9227-cb04db679ad2", + "text": "Infra-service-1", + "type": "isotext", + "color": "#4286c5", + "mapPos": { + "relTo": "dc672366-eced-42b9-bb73-6177e0a7d7a0", + "offset": [-0.25, 0.75] + }, + "outline": true, + "standing": false, + "textSize": 25, + "direction": "down", + "isometric": true + }], + "edges": [{ + "to": "d9dda8de-0d35-4231-962e-79a95b33759d", + "from": "1dc43817-99b6-4ebb-aa91-76737a9792d0", + "type": "edge", + "color": { + "2d": "#000000", + "isometric": "#000000" + }, + "width": 2, + "dashed": false, + "endCap": "arrow" + }, { + "to": "ae00b6e2-ed7c-47c8-8b1c-c9d9a03ed2f9", + "from": "d9dda8de-0d35-4231-962e-79a95b33759d", + "type": "edge", + "color": { + "2d": "#000000", + "isometric": "#000000" + }, + "width": 2, + "dashed": false, + "endCap": "arrow" + }], + "icons": [{ + "id": "dc672366-eced-42b9-bb73-6177e0a7d7a0", + "name": "AR & VR/AR-VR", + "type": "icon", + "color": {}, + "mapPos": [3, 12.25], + "iconSet": "aws2", + "iconSize": 3, + "standing": false, + "direction": "down", + "isometric": true, + "background": { + "2d": "rgba(0, 0, 0, 0)", + "isometric": "rgba(0, 0, 0, 0)" + } + }], + "nodes": [{ + "id": "b0fe9c7e-df37-4f75-aca4-d59e7b1bd6b6", + "type": "vpngateway", + "color": { + "2d": "#693cc5", + "isometric": "#ececed" + }, + "mapPos": [9.25, 6], + "region": "eu-west-1", + "direction": "down", + "accentColor": { + "2d": "#693cc5", + "isometric": "#4286c5" + } + }, { + "id": "ae00b6e2-ed7c-47c8-8b1c-c9d9a03ed2f9", + "type": "s3", + "color": { + "2d": "#3f8624", + "isometric": "#4286c5" + }, + "dataGb": 10, + "mapPos": [6.75, 10.5], + "region": "eu-west-1", + "volumeType": "Standard", + "accentColor": { + "2d": "#ffffff", + "isometric": "#4286c5" + }, + "getAndOtherRequests": 0, + "putCopyPostRequests": 0, + "lifecycleTransitions": 0 + }, { + "id": "1dc43817-99b6-4ebb-aa91-76737a9792d0", + "type": "lambda", + "color": { + "2d": "#d86613", + "isometric": "#3c3c3c" + }, + "mapPos": [11, 10.5], + "memory": 384, + "region": "eu-west-1", + "mRequests": 10, + "accentColor": { + "2d": "#ffffff", + "isometric": "#f4b934" + }, + "computeDuration": 0.5 + }, { + "id": "a4867d70-fbe4-49f4-ab68-9f4b3caf7d4f", + "type": "apigateway", + "cache": 1.6, + "color": { + "2d": "#693cc5", + "isometric": "#3c3c3c" + }, + "mapPos": [8.75, 10.75], + "region": "eu-west-1", + "apiType": "http", + "apiCalls": 5, + "direction": "down", + "accentColor": { + "2d": "#ffffff", + "isometric": "#f4b934" + }, + "connectionMinutes": 0 + }, { + "id": "d9dda8de-0d35-4231-962e-79a95b33759d", + "type": "cloudfront", + "color": { + "2d": "#693cc5", + "isometric": "#ececed" + }, + "mapPos": [8.75, 13.5], + "accentColor": { + "2d": "#ffffff", + "isometric": "#4286c5" + } + }], + "groups": [{ + "id": "532fbc90-fe0d-457d-9e45-2f36c0d5a85d", + "name": "my-awesome-vpc", + "type": "vpc", + "color": { + "2d": "#2196f3", + "isometric": "#2196f3" + }, + "nodes": ["b0fe9c7e-df37-4f75-aca4-d59e7b1bd6b6"], + "shape": "rectangular", + "region": "eu-west-1", + "padding": 1.5, + "peeringConnections": [] + }], + "images": [], + "linkKey": "lUUXCSmDFPggJ8ws7y3iD_LQ", + "version": 1, + "surfaces": [], + "shareDocs": false, + "connectors": [], + "projection": "isometric", + "liveOptions": { + "autoLabel": true, + "autoConnect": true, + "updatesEnabled": true, + "updateAllOnScan": true, + "updateGroupsOnScan": true, + "updateNodeOnSelect": true + }, + "disabledLayers": [] + }, + "readAccess": null, + "writeAccess": null, + "createdAt": "2021-04-15T17:22:56.027Z", + "updatedAt": "2021-05-09T12:22:37.875Z", + "CreatorId": "354474ae-8248-45a8-a1ef-34de7c2a4d47", + "LastUserId": "354474ae-8248-45a8-a1ef-34de7c2a4d47" +} diff --git a/test_fixtures/input_cloudcraft.json b/test_fixtures/input_cloudcraft.json index 40f5f7d..c567501 100644 --- a/test_fixtures/input_cloudcraft.json +++ b/test_fixtures/input_cloudcraft.json @@ -1,6 +1,6 @@ { - "queryStringParameters": - { - "cloudcraft": "https://app.cloudcraft.co/api/blueprint/b2eda0eb-21b2-45d8-93d5-c0b4906eb69e?key=XlAaasYL4pOa5f-Wzkt5CQ" + "body": "", + "queryStringParameters": { + "cloudcraft": "https://app.cloudcraft.co/api/blueprint/5b27afb9-1cce-4bbc-a0aa-6bc5febc7ba0?key=ip02sXL2cYlsqSqjvm9zaQ" } } diff --git a/test_fixtures/input_localfile.json b/test_fixtures/input_localfile.json index b2cc62d..71e9fc2 100644 --- a/test_fixtures/input_localfile.json +++ b/test_fixtures/input_localfile.json @@ -1,6 +1,6 @@ { - "queryStringParameters": - { - "localfile": "test_fixtures/input/blueprint_sg_rules.json" + "body": "", + "queryStringParameters": { + "localfile": "test_fixtures/input/blueprint_cloudfront_lambda_apigw.json" } } From fb1cbe26dbe88eaa48a90d3503ce6bb6d6bc3dbe Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Sun, 9 May 2021 22:05:59 +0200 Subject: [PATCH 11/16] Drop GH Actions and Serverless Framework --- .github/workflows/main.yml | 51 -------------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index ab07d7a..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,51 +0,0 @@ -# [ci skip] workaround from https://github.com/srz-zumix/ci-skip/blob/master/docs/github/WORKAROUND.md - - -name: Autodeploy to dev environment - -on: - push: - branches: - - master - -jobs: - prepare: - runs-on: ubuntu-latest - if: "! contains(github.event.head_commit.message, '[ci skip]')" - steps: - - run: echo "${{ github.event.head_commit.message }}" - - deploy: - runs-on: ubuntu-latest - needs: prepare - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python 3.7 - uses: actions/setup-python@v1.1.1 - with: - python-version: 3.7 - - - name: Install Python dependencies - run: | - python -m pip install --upgrade pip - pip install --user pipenv - - - uses: actions/setup-node@v1.4.0 - with: - node-version: 13 - - - name: Install Serverless Framework and other project dependencies - run: | - npm install -g serverless - npm install - pip install -r requirements.txt - - - name: Deploy Lambda function to dev - run: | - PATH="$PATH:/home/runner/.local/bin" - serverless deploy --stage dev --force --verbose - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} From 73ce9ae69605c0eb5c9c61fdff204728ef9352df Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Sun, 9 May 2021 22:08:02 +0200 Subject: [PATCH 12/16] Updated CHANGELOG --- CHANGELOG.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e451ff..8e9bebd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,24 @@ All notable changes to this project will be documented in this file. + +## [v1.7.0] - 2021-05-09 +BUG FIXES: +- Fixed version of minimist package ([#35](https://github.com/antonbabenko/modules.tf-lambda/issues/35)) +- resolved conflict for dependent botocore library ([#34](https://github.com/antonbabenko/modules.tf-lambda/issues/34)) +- Skip edges without from/to values (eg, VPN) +- Fixed case of dependencies to be always lowercase + +DOCS: +- Fix a few more links ([#52](https://github.com/antonbabenko/modules.tf-lambda/issues/52)) +- Updated links in README +- Updated link to modules.tf-lambda-infra repo + +FEATURES: +- Added Lambda, API Gateway, CloudFront modules, and some refactoring ([#60](https://github.com/antonbabenko/modules.tf-lambda/issues/60)) +- Adding security group rules ([#27](https://github.com/antonbabenko/modules.tf-lambda/issues/27)) + + ## [v1.6.0] - 2020-03-22 FEATURES: @@ -47,7 +65,8 @@ FEATURES: -[Unreleased]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.6.0...HEAD +[Unreleased]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.7.0...HEAD +[v1.7.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.6.0...v1.7.0 [v1.6.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.5.0...v1.6.0 [v1.5.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.4.0...v1.5.0 [v1.4.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.3.0...v1.4.0 From ebf0ccd9e3e7a02f9c0877968e00cb23691afde5 Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Mon, 10 May 2021 12:41:58 +0200 Subject: [PATCH 13/16] chore: Set alarm lower --- terraform/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terraform/main.tf b/terraform/main.tf index 168d444..6f407b9 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -243,7 +243,7 @@ module "alarm_lambda_is_popular" { alarm_description = "Lambda is too popular" comparison_operator = "GreaterThanOrEqualToThreshold" evaluation_periods = 1 - threshold = 100 + threshold = 20 period = 60 unit = "Count" treat_missing_data = "notBreaching" From e9788a076195e8d617e64cd790cfe9d5fab6e699 Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Mon, 10 May 2021 14:08:24 +0200 Subject: [PATCH 14/16] Fixes in arguments --- src/modulestf/convert.py | 32 ++++++++++++++------------ src/modulestf/modules.py | 2 +- src/modulestf/render.py | 2 +- src/templates/root/template/.gitignore | 2 ++ tests/test_dynamic_params.py | 6 ++--- 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/modulestf/convert.py b/src/modulestf/convert.py index 252d5a6..6c3abd3 100644 --- a/src/modulestf/convert.py +++ b/src/modulestf/convert.py @@ -152,7 +152,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 if sg_id: r.append_dependency(sg_id) r.update_dynamic_params("vpc_security_group_ids", - "[dependency." + sg_id + ".outputs.this_security_group_id]") + "[dependency." + sg_id + ".outputs.security_group_id]") r.update_params({"create_security_group": False}) if node.get("engine") == "aurora-mysql": @@ -195,6 +195,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 "family": "", "backup_retention_period": "0", # Disable backups to create DB faster "vpc_security_group_ids": [], + "create_db_subnet_group": False, }) if vpc_id: @@ -205,15 +206,15 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 if sg_id: r.append_dependency(sg_id) r.update_dynamic_params("vpc_security_group_ids", - "[dependency." + sg_id + ".outputs.this_security_group_id]") + "[dependency." + sg_id + ".outputs.security_group_id]") if node.get("engine") == "mysql": r.update_params({ "engine": "mysql", "port": "3306", - "engine_version": "5.7.19", - "major_engine_version": "5.7", - "family": "mysql5.7", + "engine_version": "8.0.20", + "major_engine_version": "8.0", + "family": "mysql8.0", }) elif node.get("engine") == "mariadb": r.update_params({ @@ -225,11 +226,11 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 }) elif node.get("engine") == "postgres": r.update_params({ - "engine": "mariadb", + "engine": "postgres", "port": "5432", - "engine_version": "9.6.9", - "major_engine_version": "9.6", - "family": "postgres9.6", + "engine_version": "11.10", + "major_engine_version": "11", + "family": "postgres11", }) else: r.update_params({ @@ -272,6 +273,8 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 "max_size": 1, "desired_capacity": 1, "health_check_type": "EC2", + "use_lt": True, + "create_lt": True, "image_id": "HCL:dependency.aws-data.outputs.amazon_linux2_aws_ami_id", "vpc_zone_identifier": [], "security_groups": [], @@ -285,7 +288,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 if sg_id: r.append_dependency(sg_id) - r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.this_security_group_id]") + r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.security_group_id]") if elb_id and elb_type == "application": r.update_params({ @@ -340,7 +343,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 if sg_id: r.append_dependency(sg_id) - r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.this_security_group_id]") + r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.security_group_id]") elif node.get("elbType") == "network": r = Resource(key, "nlb", node_text) @@ -380,7 +383,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 if sg_id: r.append_dependency(sg_id) - r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.this_security_group_id]") + r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.security_group_id]") resources.append(r.content()) @@ -407,7 +410,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 if sg_id: r.append_dependency(sg_id) - r.update_dynamic_params("vpc_security_group_ids", "[dependency." + sg_id + ".outputs.this_security_group_id]") + r.update_dynamic_params("vpc_security_group_ids", "[dependency." + sg_id + ".outputs.security_group_id]") resources.append(r.content()) @@ -525,7 +528,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 rules_with_cidr_blocks.append(tmp_rule) else: dependency_sg_id = rule.get("target") - tmp_rule.update({"source_security_group_id": "HCL:dependency." + dependency_sg_id + ".outputs.this_security_group_id"}) + tmp_rule.update({"source_security_group_id": "HCL:dependency." + dependency_sg_id + ".outputs.security_group_id"}) rules_with_source_security_group_id.append(tmp_rule) r.append_dependency(dependency_sg_id) @@ -570,7 +573,6 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 "database_subnets": "HCL:[for k,v in dependency.aws-data.outputs.available_aws_availability_zones_names: cidrsubnet(\"" + selected_vpc_cidr + "\", 8, k+20)]", - # "redshift_subnets": [], }) r.append_dependency("aws-data") diff --git a/src/modulestf/modules.py b/src/modulestf/modules.py index d260549..10abac6 100644 --- a/src/modulestf/modules.py +++ b/src/modulestf/modules.py @@ -166,7 +166,7 @@ def update_template_variables(var): # Data sources for aws_region and aws_availability_zones "aws-data": { - "source": "${get_parent_terragrunt_dir()}/../../../modules/aws-data", + "source": "${get_parent_terragrunt_dir()}/../../modules/aws-data", "registry_url": "", "variables": {}, }, diff --git a/src/modulestf/render.py b/src/modulestf/render.py index e24f5dd..99e2654 100644 --- a/src/modulestf/render.py +++ b/src/modulestf/render.py @@ -159,7 +159,7 @@ def make_dir_name(type, text, appendix=""): # Should start with "dependency." # # Examples: -# dependency.a3bfbba6-ff09-4efc-a56b-39b647f203f6.outputs.this_security_group_id => dependency.sg_2.outputs.this_security_group_id +# dependency.a3bfbba6-ff09-4efc-a56b-39b647f203f6.outputs.security_group_id => dependency.sg_2.outputs.security_group_id # Source: https://stackoverflow.com/a/38970181/550451 def recursive_replace_dependency(input, dirs): if isinstance(input, dict): diff --git a/src/templates/root/template/.gitignore b/src/templates/root/template/.gitignore index d9c1f28..3b21f37 100644 --- a/src/templates/root/template/.gitignore +++ b/src/templates/root/template/.gitignore @@ -1,5 +1,7 @@ # Local .terraform directories **/.terraform/* +.terraform +.terragrunt-cache # Terraform lockfile .terraform.lock.hcl diff --git a/tests/test_dynamic_params.py b/tests/test_dynamic_params.py index 1e49e30..9652d8c 100644 --- a/tests/test_dynamic_params.py +++ b/tests/test_dynamic_params.py @@ -2,21 +2,21 @@ from pprint import pprint dynamic_params = { - 'key': 'dependency.a3bfbbf.outputs.this_security_group_id', + 'key': 'dependency.a3bfbbf.outputs.security_group_id', 'egress_with_source_security_group_id': [], 'ingress_with_source_security_group_id': [ { 'description': 'All TCP from sg2', 'from_port': '0', 'protocol': 6, - 'source_security_group_id': 'dependency.a3bfbb.outputs.this_security_group_id', + 'source_security_group_id': 'dependency.a3bfbb.outputs.security_group_id', 'to_port': '65535' }, { 'description': 'All TCP from sg3', 'from_port': '0', 'protocol': 6, - 'source_security_group_id': '[dependency.a3bfbb.outputs.this_security_group_id] + dependency.abcdef.outputs.this_security_group_id', + 'source_security_group_id': '[dependency.a3bfbb.outputs.security_group_id] + dependency.abcdef.outputs.security_group_id', 'to_port': '65535' } ] From ceb9ef6d63fc9b145ae3b328318fe25dbd6953f3 Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Mon, 10 May 2021 15:17:03 +0200 Subject: [PATCH 15/16] fix: RDS module input --- src/modulestf/convert.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modulestf/convert.py b/src/modulestf/convert.py index 6c3abd3..7480c1f 100644 --- a/src/modulestf/convert.py +++ b/src/modulestf/convert.py @@ -196,6 +196,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 "backup_retention_period": "0", # Disable backups to create DB faster "vpc_security_group_ids": [], "create_db_subnet_group": False, + "skip_final_snapshot": True, }) if vpc_id: From 2f45db76ca3cc5c7296e153efe223bd0e9fdb37d Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Thu, 27 May 2021 14:34:35 +0200 Subject: [PATCH 16/16] Minor fixes in rendered output --- src/modulestf/convert.py | 27 ++++++++++++++++++++++++--- terraform/main.tf | 8 ++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/modulestf/convert.py b/src/modulestf/convert.py index 7480c1f..efaace1 100644 --- a/src/modulestf/convert.py +++ b/src/modulestf/convert.py @@ -423,6 +423,11 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 "read_capacity": node.get("readUnits"), "write_capacity": node.get("writeUnits"), "billing_mode": "PROVISIONED" if node.get("capacityMode") == "provisioned" else "PAY_PER_REQUEST", + "hash_key": "id", + "attributes": [{ + "name": "id", + "type": "N" + }] }) resources.append(r.content()) @@ -431,7 +436,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 r = Resource(key, "s3-bucket", node_text) r.update_params({ - "bucket": node_text if node_text else random_pet(), + "bucket": node_text.lower() if node_text else random_pet(), "region": node.get("region", ""), }) @@ -441,7 +446,22 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 r = Resource(key, "cloudfront", node_text) r.update_params({ - "wait_for_deployment": False + "wait_for_deployment": False, + "origin": "{ \ + \"default\": { \ + \"domain_name\": \"website.example.com\", \ + \"custom_origin_config\": { \ + \"http_port\": 80, \ + \"https_port\": 443, \ + \"origin_protocol_policy\": \"match-viewer\", \ + \"origin_ssl_protocols\": [\"TLSv1\"], \ + } \ + } \ + }", + "default_cache_behavior": "{ \ + \"target_origin_id\": \"default\", \ + \"viewer_protocol_policy\": \"allow-all\", \ + }" }) resources.append(r.content()) @@ -454,7 +474,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 "function_name": node_text if node_text else random_pet(), "handler": "handler.lambda_handler", "runtime": "python3.8", - "source_path": "\"handler.py\"" # @todo: create this file also + "source_path": "jsonencode(\"handler.py\")" }) resources.append(r.content()) @@ -465,6 +485,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901 r.update_params({ "name": node_text if node_text else random_pet(), "protocol_type": "WEBSOCKET" if node.get("apiType") == "websocket" else "HTTP", + "create_api_domain_name": False }) resources.append(r.content()) diff --git a/terraform/main.tf b/terraform/main.tf index 6f407b9..69dcab9 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -193,7 +193,7 @@ module "alarm_lambda_with_errors" { alarm_description = "Lambda with errors" comparison_operator = "GreaterThanOrEqualToThreshold" evaluation_periods = 1 - threshold = 1 + threshold = 5 period = 60 unit = "Count" treat_missing_data = "notBreaching" @@ -217,8 +217,8 @@ module "alarm_lambda_is_slow" { alarm_name = "lambda-slow-${module.lambda.lambda_function_name}" alarm_description = "Lambda is too high" comparison_operator = "GreaterThanOrEqualToThreshold" - evaluation_periods = 1 - threshold = 20000 + evaluation_periods = 2 + threshold = 29000 period = 60 unit = "Milliseconds" treat_missing_data = "notBreaching" @@ -243,7 +243,7 @@ module "alarm_lambda_is_popular" { alarm_description = "Lambda is too popular" comparison_operator = "GreaterThanOrEqualToThreshold" evaluation_periods = 1 - threshold = 20 + threshold = 50 period = 60 unit = "Count" treat_missing_data = "notBreaching"