From 2c00682610233db5449a133169a4d07ed2d03e6a Mon Sep 17 00:00:00 2001 From: Jared Hirsch Date: Fri, 16 Aug 2019 10:03:23 -0700 Subject: [PATCH 01/25] chore(deps): Enable renovate for all packages in the monorepo Fixes #2228. --- renovate.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/renovate.json b/renovate.json index 1e34dfed13..82071f5e7d 100644 --- a/renovate.json +++ b/renovate.json @@ -4,11 +4,6 @@ "extends": [ "config:base" ], - "includePaths": [ - "packages/fxa-payments-server/package.json", - "packages/fxa-payments-server/Dockerfile", - "packages/fxa-support-panel/package.json" - ], "rangeStrategy": "replace", "prConcurrentLimit": 2, "schedule": "every weekend" From e4c7eef426a979062af91f4d20544b4277a9ea83 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Mon, 19 Aug 2019 12:34:02 -0700 Subject: [PATCH 02/25] chore(ts): prepare fxa-shared for conversion to typescript --- packages/fxa-shared/.gitignore | 1 + packages/fxa-shared/.prettierignore | 3 +- packages/fxa-shared/index.js | 4 +- packages/fxa-shared/package-lock.json | 1736 ++++++++++++------------- packages/fxa-shared/package.json | 41 +- packages/fxa-shared/tsconfig.json | 17 + packages/fxa-shared/tslint.json | 9 + 7 files changed, 889 insertions(+), 922 deletions(-) create mode 100644 packages/fxa-shared/tsconfig.json create mode 100644 packages/fxa-shared/tslint.json diff --git a/packages/fxa-shared/.gitignore b/packages/fxa-shared/.gitignore index 3c3629e647..f06235c460 100644 --- a/packages/fxa-shared/.gitignore +++ b/packages/fxa-shared/.gitignore @@ -1 +1,2 @@ node_modules +dist diff --git a/packages/fxa-shared/.prettierignore b/packages/fxa-shared/.prettierignore index f44c13d92a..bf0d80c496 100644 --- a/packages/fxa-shared/.prettierignore +++ b/packages/fxa-shared/.prettierignore @@ -1,2 +1,3 @@ LICENSE -.* \ No newline at end of file +.* +dist diff --git a/packages/fxa-shared/index.js b/packages/fxa-shared/index.js index 182046f816..afc7fc9e7d 100644 --- a/packages/fxa-shared/index.js +++ b/packages/fxa-shared/index.js @@ -6,11 +6,11 @@ module.exports = { email: { - popularDomains: require('./email/popularDomains'), + popularDomains: require('./email/popularDomains.json'), }, l10n: { localizeTimestamp: require('./l10n/localizeTimestamp'), - supportedLanguages: require('./l10n/supportedLanguages'), + supportedLanguages: require('./l10n/supportedLanguages.json'), }, metrics: { amplitude: require('./metrics/amplitude'), diff --git a/packages/fxa-shared/package-lock.json b/packages/fxa-shared/package-lock.json index 2060cbe7b0..3f5887e648 100644 --- a/packages/fxa-shared/package-lock.json +++ b/packages/fxa-shared/package-lock.json @@ -4,10 +4,38 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + } + } + }, "@sinonjs/commons": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.1.tgz", - "integrity": "sha512-rgmZk5CrBGAMATk0HlHOFvo8V44/r+On6cKS80tqid0Eljd+fFBWBOXZp9H2/EB3faxdNdzXTx6QZIKLkbJ7mA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", + "integrity": "sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -24,14 +52,14 @@ } }, "@sinonjs/samsam": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.2.0.tgz", - "integrity": "sha512-j5F1rScewLtx6pbTK0UAjA3jJj4RYiSKOix53YWv+Jzy/AZ69qHxUpU8fwVLjyKbEEud9QrLpv6Ggs7WqTimYw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", + "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", "dev": true, "requires": { - "@sinonjs/commons": "^1.0.2", + "@sinonjs/commons": "^1.3.0", "array-from": "^2.1.1", - "lodash": "^4.17.11" + "lodash": "^4.17.15" } }, "@sinonjs/text-encoding": { @@ -40,6 +68,54 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, + "@types/chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-zw8UvoBEImn392tLjxoavuonblX/4Yb9ha4KBU10FirCfwgzhKO0dvyJSF9ByxV1xK1r2AgnAi/tvQaLgxQqxA==", + "dev": true + }, + "@types/generic-pool": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@types/generic-pool/-/generic-pool-3.1.9.tgz", + "integrity": "sha512-IkXMs8fhV6+E4J8EWv8iL7mLvApcLLQUH4m1Rex3KCPRqT+Xya0DDHIeGAokk/6VXe9zg8oTWyr+FGyeuimEYQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "@types/node": { + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz", + "integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==", + "dev": true + }, + "@types/proxyquire": { + "version": "1.3.28", + "resolved": "https://registry.npmjs.org/@types/proxyquire/-/proxyquire-1.3.28.tgz", + "integrity": "sha512-SQaNzWQ2YZSr7FqAyPPiA3FYpux2Lqh3HWMZQk47x3xbMCqgC/w0dY3dw9rGqlweDDkrySQBcaScXWeR+Yb11Q==", + "dev": true + }, + "@types/redis": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.13.tgz", + "integrity": "sha512-p86cm5P6DMotUqCS6odQRz0JJwc5QXZw9eyH0ALVIqmq12yqtex5ighWyGFHKxak9vaA/GF/Ilu0KZ0MuXXUbg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/sinon": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.0.13.tgz", + "integrity": "sha512-d7c/C/+H/knZ3L8/cxhicHUiTDxdgap0b/aNJfsmLwFu/iOP17mdgbQsbHA3SJmrzsjD0l3UEE5SN4xxuz5ung==", + "dev": true + }, "accept-language": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/accept-language/-/accept-language-2.0.17.tgz", @@ -48,33 +124,10 @@ "bcp47": "^1.1.2" } }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -82,28 +135,22 @@ "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "arg": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", + "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==", "dev": true }, "argparse": { @@ -121,68 +168,12 @@ "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", "dev": true }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.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=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -195,9 +186,9 @@ "integrity": "sha1-NUvjMH/9CEM6ePXh4glYRfifx/4=" }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" }, "brace-expansion": { "version": "1.1.11", @@ -221,33 +212,30 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "dev": true, "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" + "pathval": "^1.1.0", + "type-detect": "^4.0.5" } }, "chalk": { @@ -281,43 +269,27 @@ } } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "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=", "dev": true }, "color-convert": { @@ -335,56 +307,40 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "debug": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", - "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -394,25 +350,13 @@ "type-detect": "^4.0.0" } }, - "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=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "object-keys": "^1.0.12" } }, "diff": { @@ -421,136 +365,65 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "double-ended-queue": { "version": "2.1.0-0", "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "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=", "dev": true }, - "eslint": { - "version": "4.19.1", - "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "eslint-plugin-prettier": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", + "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-5.0.0.tgz", - "integrity": "sha512-c17Aqiz5e8LEqoc/QPmYnaxQFAHTx2KlCZBPxXXjEMmNchOLnV/7j0HoPZuC+rL/tDC9bazUYOKJW9bOhftI/w==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-plugin-fxa": { - "version": "git://github.com/mozilla/eslint-plugin-fxa.git#e082927b4c6dc17d21414e35f4c94312adbaba92", - "from": "git://github.com/mozilla/eslint-plugin-fxa.git#e082927b4c6dc17d21414e35f4c94312adbaba92", - "dev": true - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" } }, "esprima": { @@ -559,45 +432,25 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "external-editor": { - "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" + "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" } }, "fast-deep-equal": { @@ -605,36 +458,17 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, "fill-keys": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", @@ -645,16 +479,22 @@ "merge-descriptors": "~1.0.0" } }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" } }, "fs.realpath": { @@ -663,16 +503,22 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "generic-pool": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.6.1.tgz", - "integrity": "sha512-iMmD/pY4q0+V+f8o4twE9JPeqfNuX+gJAaIPB3B0W1lFkBOtTxBo6B0HxHPgGhzQA8jego7EWopcYq/UDJO2KA==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.7.1.tgz", + "integrity": "sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-func-name": { "version": "2.0.0", @@ -680,11 +526,14 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, "glob": { "version": "7.1.3", @@ -700,45 +549,19 @@ "path-is-absolute": "^1.0.0" } }, - "globals": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", - "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "function-bind": "^1.1.1" } }, "has-flag": { @@ -747,31 +570,16 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "inflight": { @@ -790,27 +598,29 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -824,47 +634,29 @@ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", "dev": true }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "has": "^1.0.1" } }, - "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=", - "dev": true, - "requires": { - "path-is-inside": "^1.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=", - "dev": true - }, - "is-resolvable": { + "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } }, "isexe": { "version": "2.0.0", @@ -872,10 +664,10 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", "dev": true }, "js-yaml": { @@ -893,48 +685,82 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, "just-extend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "invert-kv": "^2.0.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, - "lolex": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", - "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "chalk": "^2.0.1" + } + }, + "lolex": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", + "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", + "dev": true + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, "merge-descriptors": { @@ -944,9 +770,9 @@ "dev": true }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { @@ -974,67 +800,34 @@ } }, "mocha": { - "version": "5.0.5", - "resolved": "http://registry.npmjs.org/mocha/-/mocha-5.0.5.tgz", - "integrity": "sha512-3MM3UjZ5p8EJrYpG7s+29HAI9G7sTzKEe4+w37Dg0QP7qL4XGsV+Q2xet2cE37AqdgN1OtYQB6Vl98YiPV3PgA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.0.tgz", + "integrity": "sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==", "dev": true, "requires": { + "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", - "commander": "2.11.0", - "debug": "3.1.0", + "debug": "3.2.6", "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "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" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.2.2", + "yargs-parser": "13.0.0", + "yargs-unparser": "1.5.0" } }, "module-not-found-error": { @@ -1044,9 +837,9 @@ "dev": true }, "moment": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", - "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + "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.1", @@ -1054,45 +847,86 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "nise": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", - "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.1.tgz", + "integrity": "sha512-edFWm0fsFG2n318rfEnKlTZTkjlbVOFF9XIA+fj+Ed+Qz1laYW2lobwavWoMzGrYDHH1EpiNJgDfvGnkZztR/g==", "dev": true, "requires": { - "@sinonjs/formatio": "^3.1.0", + "@sinonjs/formatio": "^3.2.1", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^2.3.2", + "lolex": "^4.1.0", "path-to-regexp": "^1.7.0" + } + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" }, "dependencies": { - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "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=", + "dev": true, + "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=", "dev": true }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1102,33 +936,63 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "p-try": "^2.0.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-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.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==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-is-absolute": { @@ -1137,10 +1001,10 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "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=", "dev": true }, "path-parse": { @@ -1172,94 +1036,49 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, "prettier": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", "dev": true }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, "proxyquire": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.0.tgz", - "integrity": "sha512-kptdFArCfGRtQFv3Qwjr10lwbEV0TBJYvfqzhwucyfEXqVgmnAkyEw/S3FYzR5HI9i5QOq4rcqQjZ6AlknlCDQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", "dev": true, "requires": { "fill-keys": "^1.0.2", - "module-not-found-error": "^1.0.0", - "resolve": "~1.8.1" + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + }, + "dependencies": { + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "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==", - "dev": true, - "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" - } - }, "redis": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", @@ -1280,21 +1099,17 @@ "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "resolve": { "version": "1.8.1", @@ -1305,73 +1120,18 @@ "path-parse": "^1.0.5" } }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, - "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==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, "semver": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1394,17 +1154,17 @@ "dev": true }, "sinon": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.5.tgz", - "integrity": "sha512-1c2KK6g5NQr9XNYCEcUbeFtBpKZD1FXEw0VX7gNhWUBtkchguT2lNdS7XmS7y64OpQWfSNeeV/f8py3NNcQ63Q==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.4.1.tgz", + "integrity": "sha512-7s9buHGHN/jqoy/v4bJgmt0m1XEkCEd/tqdHXumpBp0JSujaT4Ng84JU5wDdK4E85ZMq78NuDe0I3NAqXY8TFg==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.0", - "@sinonjs/formatio": "^3.1.0", - "@sinonjs/samsam": "^3.2.0", + "@sinonjs/commons": "^1.4.0", + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/samsam": "^3.3.2", "diff": "^3.5.0", - "lolex": "^3.1.0", - "nise": "^1.4.10", + "lolex": "^4.2.0", + "nise": "^1.5.1", "supports-color": "^5.5.0" }, "dependencies": { @@ -1419,13 +1179,20 @@ } } }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "sprintf-js": { @@ -1444,15 +1211,6 @@ "strip-ansi": "^4.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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -1460,16 +1218,14 @@ "dev": true, "requires": { "ansi-regex": "^3.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=", - "dev": true - } } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -1477,79 +1233,94 @@ "dev": true }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "has-flag": "^3.0.0" + } + }, + "ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", "dev": true } } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "tslint": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz", + "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + } } }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "tslint-config-prettier": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", + "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", + "dev": true + }, + "tslint-plugin-prettier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-2.0.1.tgz", + "integrity": "sha512-4FX9JIx/1rKHIPJNfMb+ooX1gPk5Vg3vNi7+dyFYpLO+O57F4g+b/fo1+W/G0SUOkBLHB/YKScxjX/P+7ZT/Tw==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "eslint-plugin-prettier": "^2.2.0", + "lines-and-columns": "^1.1.6", + "tslib": "^1.7.1" + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" } }, "type-detect": { @@ -1558,10 +1329,10 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", "dev": true }, "uri-js": { @@ -1572,12 +1343,6 @@ "punycode": "^2.1.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -1587,31 +1352,196 @@ "isexe": "^2.0.0" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", + "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", "dev": true, "requires": { - "mkdirp": "^0.5.1" + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", + "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.11", + "yargs": "^12.0.5" + }, + "dependencies": { + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true } } diff --git a/packages/fxa-shared/package.json b/packages/fxa-shared/package.json index 7e3e46e53b..881b6044b9 100644 --- a/packages/fxa-shared/package.json +++ b/packages/fxa-shared/package.json @@ -2,10 +2,11 @@ "name": "fxa-shared", "version": "1.143.4", "description": "Shared module for FxA repositories", - "main": "index.js", + "main": "dist/index.js", "scripts": { - "test": "mocha --recursive test", - "lint": "eslint .", + "build": "tsc", + "test": "mocha -r ts-node/register --recursive test", + "lint": "tslint -p . --force", "format": "prettier '**' --write" }, "repository": { @@ -25,21 +26,29 @@ }, "homepage": "https://github.com/mozilla/fxa/tree/master/packages/fxa-shared#readme", "devDependencies": { - "chai": "4.1.2", - "eslint": "4.19.1", - "eslint-config-prettier": "^5.0.0", - "eslint-plugin-fxa": "git://github.com/mozilla/eslint-plugin-fxa.git#e082927b4c6dc17d21414e35f4c94312adbaba92", - "mocha": "5.0.5", + "@types/chai": "^4.2.0", + "@types/generic-pool": "^3.1.9", + "@types/mocha": "^5.2.7", + "@types/proxyquire": "^1.3.28", + "@types/redis": "^2.8.13", + "@types/sinon": "^7.0.13", + "chai": "^4.2.0", + "mocha": "^6.2.0", "prettier": "^1.18.2", - "proxyquire": "2.1.0", - "sinon": "7.2.5" + "proxyquire": "^2.1.3", + "sinon": "^7.4.1", + "ts-node": "^8.3.0", + "tslint": "^5.18.0", + "tslint-config-prettier": "^1.18.0", + "tslint-plugin-prettier": "^2.0.1", + "typescript": "^3.5.3" }, "dependencies": { - "accept-language": "2.0.17", - "ajv": "6.10.0", - "bluebird": "3.5.3", - "generic-pool": "3.6.1", - "moment": "2.20.1", - "redis": "2.8.0" + "accept-language": "^2.0.17", + "ajv": "^6.10.2", + "bluebird": "^3.5.5", + "generic-pool": "^3.7.1", + "moment": "^2.24.0", + "redis": "^2.8.0" } } diff --git a/packages/fxa-shared/tsconfig.json b/packages/fxa-shared/tsconfig.json new file mode 100644 index 0000000000..e443f801b9 --- /dev/null +++ b/packages/fxa-shared/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "outDir": "./dist", + "allowJs": true, + "target": "es6", + "sourceMap": true, + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "strict": true, + "typeRoots": ["./types", "node_modules/@types"], + "skipLibCheck": true + }, + "include": ["./**/*", "./*"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/fxa-shared/tslint.json b/packages/fxa-shared/tslint.json new file mode 100644 index 0000000000..cc9d0ad47d --- /dev/null +++ b/packages/fxa-shared/tslint.json @@ -0,0 +1,9 @@ +{ + "extends": ["tslint:recommended", "tslint-config-prettier"], + "rulesDirectory": ["tslint-plugin-prettier"], + "rules": { + "interface-name": [true, "never-prefix"], + "interface-over-type-literal": false, + "prettier": [true, ".prettierrc"] + } +} From 317d4ad40fb4e5d0ffb7f79484cc83f6930466b7 Mon Sep 17 00:00:00 2001 From: Phil Booth Date: Tue, 20 Aug 2019 16:32:34 +0100 Subject: [PATCH 03/25] chore(scripts): fix link to needs:qa label in the deploy bug --- release.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/release.sh b/release.sh index 3625baeee6..a43c7dc3aa 100755 --- a/release.sh +++ b/release.sh @@ -407,8 +407,7 @@ if [ "$BUILD_TYPE" = "Train" ]; then echo '> ```' echo "> git fetch origin $TRAIN_BRANCH" echo "> git fetch $PRIVATE_REMOTE $PRIVATE_BRANCH" - echo "> git checkout -b $PRIVATE_BRANCH $PRIVATE_REMOTE/$PRIVATE_BRANCH" - echo "> git diff origin/$TRAIN_BRANCH" + echo "> git diff origin/$TRAIN_BRANCH..$PRIVATE_REMOTE/$PRIVATE_BRANCH" echo '> ```' echo ">" echo "> That diff should show only the changes from the private repo, proving that the $TRAIN_BRANCH branches are equal in other respects." @@ -426,8 +425,9 @@ if [ "$BUILD_TYPE" = "Train" ]; then echo "Include links to the needs:qa label for this milestone:" echo echo "### Needs QA" - echo "* https://github.com/mozilla/fxa/issues?utf8=%E2%9C%93&q=label%3Aneeds%3Aqa+is%3Aclosed+milestone%3A%22Train+$TRAIN%22" - echo "* https://github.com/mozilla/fxa/pulls?utf8=%E2%9C%93&q=label%3Aneeds%3Aqa+is%3Aclosed+milestone%3A%22Train+$TRAIN%22" + echo + echo "* https://github.com/mozilla/fxa/issues?q=label%3Aneeds%3Aqa+is%3Aclosed+milestone%3A%22Train+$TRAIN%3A+FxA%22" + echo "* https://github.com/mozilla/fxa/issues?utf8=%E2%9C%93&q=label%3Aneeds%3Aqa++is%3Aclosed+milestone%3A%22Train+$TRAIN%3A+Subscription+Platform%22" echo else echo "Don't forget to leave a comment in the deploy bug." @@ -437,6 +437,7 @@ fi echo "Include links to the tags:" echo echo "### Tags" +echo echo "* https://github.com/mozilla/fxa/releases/tag/$NEW_TAG" echo "* https://github.com/mozilla/fxa-private/releases/tag/$PRIVATE_TAG" echo @@ -444,7 +445,8 @@ echo if [ "$PERTINENT_CHANGELOGS" != "" ]; then echo "Include links to the pertinent changelogs:" echo - echo "### Changelogs" + echo "### Pertinent changelogs" + echo for PACKAGE in $PERTINENT_CHANGELOGS; do echo "* https://github.com/mozilla/fxa/blob/$NEW_TAG/$PACKAGE/CHANGELOG.md" done From 2934dce574f5ea433ad7785acb45cf00bfed1c17 Mon Sep 17 00:00:00 2001 From: Vijay Budhram Date: Tue, 20 Aug 2019 09:11:37 -0700 Subject: [PATCH 04/25] fix(deps): Remove remaining amd loader parts --- packages/fxa-js-client/node/amd-loader.js | 66 ----------------------- packages/fxa-js-client/node/index.js | 9 +--- 2 files changed, 1 insertion(+), 74 deletions(-) delete mode 100644 packages/fxa-js-client/node/amd-loader.js diff --git a/packages/fxa-js-client/node/amd-loader.js b/packages/fxa-js-client/node/amd-loader.js deleted file mode 100644 index 7fb8fd34a6..0000000000 --- a/packages/fxa-js-client/node/amd-loader.js +++ /dev/null @@ -1,66 +0,0 @@ -// This is intended to be the simplest possible AMD shim that works -// It is not intended a general AMD loader just enough to load this package -// This relies on the fact that Node.js require() is synchronous. -// It attempts to let the node.js module loader do as much work as possible -// Also provides a way to replace modules with api compatible counterparts - -var path = require('path'); - -module.exports = function amdload(absoluteFilename, map) { - // Store this so we can put it back later. - var oldDefine = global.define; - - map = map || {}; - var loaded = {}, - dirs = [], - exported; - - /** - * These two functions operate as a pair - */ - function amdrequire(filepath) { - // Return real node modules if we have them mapped - if (filepath in map) { - return require(map[filepath]); - } - - // Resolve target against 'current working directory' - var fullpath = path.resolve(dirs[0], filepath); - - if (!loaded[fullpath]) { - // Put current operation on stack - dirs.unshift(path.dirname(fullpath)); - - // setup fake define and delegate to real require() - global.define = define; - - require(fullpath); - - // Capture and store exported module - loaded[fullpath] = exported; - exported = null; - - // Restore previous define() state - if (oldDefine) { - global.define = define; - } else { - delete global.define; - } - - // return to cwd from before define - dirs.shift(); - } - - // return value captured by define() - return loaded[fullpath]; - } - function define(deps, factory) { - // Load all dependencies - var modules = deps.map(amdrequire); - // Capture the exported value - exported = factory.apply(null, modules); - } - define.amd = true; - - return amdrequire(absoluteFilename); -}; diff --git a/packages/fxa-js-client/node/index.js b/packages/fxa-js-client/node/index.js index 0818b7ff60..9bf151de2a 100644 --- a/packages/fxa-js-client/node/index.js +++ b/packages/fxa-js-client/node/index.js @@ -1,13 +1,6 @@ var util = require('util'); -var amd = require('./amd-loader'); - -var map = { - 'es6-promise': 'es6-promise', - sjcl: 'sjcl', -}; - -var FxAccountClient = amd(__dirname + '/../client/FxAccountClient.js', map); +var FxAccountClient = require('../client/FxAccountClient.js'); function NodeFxAccountClient(uri, config) { if (!(this instanceof FxAccountClient)) { From 62c5dbbacdf098e9b3916766bd974e464bb8d66a Mon Sep 17 00:00:00 2001 From: Phil Booth Date: Wed, 21 Aug 2019 13:26:24 +0100 Subject: [PATCH 05/25] fix(build): run as app user when installing deps etc --- packages/fxa-content-server/Dockerfile-build | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/fxa-content-server/Dockerfile-build b/packages/fxa-content-server/Dockerfile-build index 4ab2e789bf..3c6e174aac 100644 --- a/packages/fxa-content-server/Dockerfile-build +++ b/packages/fxa-content-server/Dockerfile-build @@ -14,6 +14,9 @@ ENTRYPOINT ["/usr/local/bin/dumb-init", "--"] RUN apk add --no-cache git +RUN chown app:app /app +USER app + COPY fxa-content-server/npm-shrinkwrap.json npm-shrinkwrap.json COPY fxa-content-server/package.json package.json COPY fxa-content-server/scripts/download_l10n.sh scripts/download_l10n.sh @@ -24,13 +27,20 @@ COPY fxa-content-server /app COPY ["fxa-geodb", "../fxa-geodb/"] WORKDIR /fxa-geodb +USER root +RUN chown -R app:app /fxa-geodb +USER app RUN npm ci COPY ["fxa-shared", "../fxa-shared/"] WORKDIR /fxa-shared +USER root +RUN chown -R app:app /fxa-shared +USER app RUN npm ci WORKDIR /app -RUN npm run build-production --unsafe-perm - +USER root +RUN chown -R app:app /app USER app +RUN npm run build-production --unsafe-perm From a5cef8cf6f2d7ea7e97645bbe778acfceefbb3cf Mon Sep 17 00:00:00 2001 From: Les Orchard Date: Mon, 19 Aug 2019 18:32:04 -0400 Subject: [PATCH 06/25] chore(payments): 100% test coverage for subscription management route - lots of additional test cases for subscription management page - sprinkle in lots of data-testid in subscription route components - refactor some more shared stuff into test-utils.tsx fixes #2102 --- packages/fxa-payments-server/package.json | 8 +- .../src/lib/test-utils.tsx | 148 +++- .../src/routes/Product/index.test.tsx | 146 +--- .../Subscriptions/PaymentUpdateForm.tsx | 4 +- .../routes/Subscriptions/SubscriptionItem.tsx | 18 +- .../src/routes/Subscriptions/index.test.tsx | 696 +++++++++++++++--- .../src/routes/Subscriptions/index.tsx | 37 +- 7 files changed, 790 insertions(+), 267 deletions(-) diff --git a/packages/fxa-payments-server/package.json b/packages/fxa-payments-server/package.json index b26e033cfe..74903f05a3 100644 --- a/packages/fxa-payments-server/package.json +++ b/packages/fxa-payments-server/package.json @@ -131,10 +131,10 @@ ], "coverageThreshold": { "global": { - "branches": 84, - "functions": 71, - "lines": 78, - "statements": 78 + "branches": 94, + "functions": 84, + "lines": 88, + "statements": 88 } } }, diff --git a/packages/fxa-payments-server/src/lib/test-utils.tsx b/packages/fxa-payments-server/src/lib/test-utils.tsx index 4ad31739e4..b1901eb433 100644 --- a/packages/fxa-payments-server/src/lib/test-utils.tsx +++ b/packages/fxa-payments-server/src/lib/test-utils.tsx @@ -4,8 +4,9 @@ import { AppContext, AppContextType } from '../../src/lib/AppContext'; import { config, updateConfig } from '../../src/lib/config'; import ScreenInfo from '../../src/lib/screen-info'; import { ReactStripeElements } from 'react-stripe-elements'; +import nock from 'nock'; -import { State } from '../../src/store/types'; +import { Store, State } from '../../src/store/types'; import { createAppStore } from '../../src/store'; declare global { @@ -21,6 +22,12 @@ export const wait = (delay: number) => resolve => setTimeout(resolve, delay) ); +export function expectNockScopesDone(scopes: nock.Scope[]) { + for (const scope of scopes) { + expect(scope.isDone()).toBeTruthy(); + } +} + export const mockConfig = { productRedirectURLs: { product_8675309: 'https://example.com/product', @@ -44,6 +51,32 @@ export const mockConfig = { export const mockServerUrl = (name: 'auth' | 'oauth' | 'profile' | 'content') => config.servers[name].url; +const CORS_OPTIONS_HEADERS = { + 'access-control-allow-methods': 'GET,POST', + 'access-control-allow-origin': 'http://localhost', + 'access-control-allow-headers': + 'Accept,Authorization,Content-Type,If-None-Match', +}; + +export const VALID_CREATE_TOKEN_RESPONSE: stripe.TokenResponse = { + token: { + id: 'tok_8675309', + object: 'test', + client_ip: '123.123.123.123', + created: Date.now(), + livemode: false, + type: 'card', + used: false, + }, +}; + +export function mockOptionsResponses(baseUrl: string) { + return nock(baseUrl) + .options(/\/v1/) + .reply(200, '', CORS_OPTIONS_HEADERS) + .persist(); +} + export const setupMockConfig = (config?: typeof mockConfig) => { updateConfig(config || mockConfig); }; @@ -156,6 +189,7 @@ export const defaultAppContextValue = (): AppContextType => ({ type MockAppProps = { children: ReactNode; + store?: Store, appContextValue?: AppContextType; initialState?: State; storeEnhancers?: Array; @@ -164,14 +198,14 @@ type MockAppProps = { export const MockApp = ({ children, + store, initialState, storeEnhancers, appContextValue, mockStripe, }: MockAppProps) => { - const store = createAppStore(initialState, storeEnhancers); return ( - + { expect(queryByText(message)).toBeInTheDocument(); }); }); - -function expectNockScopesDone(scopes: nock.Scope[]) { - for (const scope of scopes) { - expect(scope.isDone()).toBeTruthy(); - } -} - -function mockOptionsResponses(baseUrl: string) { - return nock(baseUrl) - .options(/\/v1/) - .reply(200, '', CORS_OPTIONS_HEADERS) - .persist(); -} - -const STRIPE_FIELDS = [ - 'cardNumberElement', - 'cardCVCElement', - 'cardExpiryElement', -]; - -const VALID_CREATE_TOKEN_RESPONSE: stripe.TokenResponse = { - token: { - id: 'tok_8675309', - object: 'test', - client_ip: '123.123.123.123', - created: Date.now(), - livemode: false, - type: 'card', - used: false, - }, -}; - -const CORS_OPTIONS_HEADERS = { - 'access-control-allow-methods': 'GET,POST', - 'access-control-allow-origin': 'http://localhost', - 'access-control-allow-headers': - 'Accept,Authorization,Content-Type,If-None-Match', -}; - -const PLAN_ID = 'plan_12345'; - -const PLAN_NAME = 'Plan 12345'; - -const PRODUCT_ID = 'product_8675309'; - -const PRODUCT_REDIRECT_URLS = { - [PRODUCT_ID]: 'https://example.com/product', -}; - -const MOCK_PLANS = [ - { - plan_id: PLAN_ID, - plan_name: PLAN_NAME, - product_id: PRODUCT_ID, - product_name: 'Product 67890', - interval: 'month', - amount: '500', - currency: 'usd', - }, -]; - -const MOCK_PROFILE = { - email: 'foo@example.com', - locale: 'en-US,en;q=0.5', - amrValues: ['pwd', 'email'], - twoFactorAuthentication: false, - uid: 'a90fef48240b49b2b6a33d333aee9b13', - avatar: 'http://127.0.0.1:1112/a/00000000000000000000000000000000', - avatarDefault: true, -}; - -const MOCK_ACTIVE_SUBSCRIPTIONS = [ - { - uid: 'a90fef48240b49b2b6a33d333aee9b13', - subscriptionId: 'sub0.28964929339372136', - productName: '123doneProProduct', - createdAt: 1565816388815, - cancelledAt: null, - }, -]; - -const MOCK_ACTIVE_SUBSCRIPTIONS_AFTER_SUBSCRIPTION = [ - { - uid: 'a90fef48240b49b2b6a33d333aee9b13', - subscriptionId: 'sub0.28964929339372136', - productName: '123doneProProduct', - createdAt: 1565816388815, - cancelledAt: null, - }, - { - uid: 'a90fef48240b49b2b6a33d333aee9b13', - subscriptionId: 'sub0.21234123424', - productName: 'prod_67890', - createdAt: 1565816388815, - cancelledAt: null, - }, -]; - -const MOCK_CUSTOMER = { - payment_type: 'tok_1F7TltEOSeHhIAfQo9u6eqTc', - last4: '8675', - exp_month: 8, - exp_year: 2020, - subscriptions: [ - { - subscription_id: 'sub0.28964929339372136', - plan_id: '123doneProMonthly', - plan_name: '123done Pro Monthly', - status: 'active', - cancel_at_period_end: false, - current_period_start: 1565816388.815, - current_period_end: 1568408388.815, - }, - ], -}; - -const MOCK_CUSTOMER_AFTER_SUBSCRIPTION = { - ...MOCK_CUSTOMER, - subscriptions: [ - ...MOCK_CUSTOMER.subscriptions, - { - subscription_id: 'sub0.21234123424', - plan_id: PLAN_ID, - plan_name: 'Plan 12345', - status: 'active', - cancel_at_period_end: false, - current_period_start: 1565816388.815, - current_period_end: 1568408388.815, - }, - ], -}; diff --git a/packages/fxa-payments-server/src/routes/Subscriptions/PaymentUpdateForm.tsx b/packages/fxa-payments-server/src/routes/Subscriptions/PaymentUpdateForm.tsx index 366ac9880f..7a372168c2 100644 --- a/packages/fxa-payments-server/src/routes/Subscriptions/PaymentUpdateForm.tsx +++ b/packages/fxa-payments-server/src/routes/Subscriptions/PaymentUpdateForm.tsx @@ -90,7 +90,7 @@ export const PaymentUpdateForm = ({
{createTokenError.error && ( -

Payment submission failed

+

Payment submission failed

{getErrorMessage(createTokenError.type)}

)} @@ -113,7 +113,7 @@ export const PaymentUpdateForm = ({
Expires {expirationDate}
-
diff --git a/packages/fxa-payments-server/src/routes/Subscriptions/SubscriptionItem.tsx b/packages/fxa-payments-server/src/routes/Subscriptions/SubscriptionItem.tsx index 2d6aeea2ab..a31dde0bf4 100644 --- a/packages/fxa-payments-server/src/routes/Subscriptions/SubscriptionItem.tsx +++ b/packages/fxa-payments-server/src/routes/Subscriptions/SubscriptionItem.tsx @@ -39,24 +39,24 @@ export const SubscriptionItem = ({ }: SubscriptionItemProps) => { const { locationReload } = useContext(AppContext); - if (subscription === null) { + if (!subscription) { // TOOD: Maybe need a better message here? This shouldn't happen. But, if it // does, it's because subhub reports a subscription that we don't have in // the fxa-auth-server database. The two should be kept in eventual sync. return ( -

Problem loading subscriptions

+

Problem loading subscriptions

Please try again later.

); } - if (plan === null) { + if (!plan) { // TODO: This really shouldn't happen, would mean the user has a // subscription to a plan that no longer exists in API results. return ( -

Plan not found

+

Plan not found

No such plan for this subscription.

); @@ -64,7 +64,7 @@ export const SubscriptionItem = ({ return (
-
+

{plan.plan_name}

@@ -142,7 +142,7 @@ const CancelSubscriptionPanel = ({

Cancel Subscription

-
@@ -159,6 +159,7 @@ const CancelSubscriptionPanel = ({

-
diff --git a/packages/fxa-payments-server/src/routes/Subscriptions/index.test.tsx b/packages/fxa-payments-server/src/routes/Subscriptions/index.test.tsx index 2bb364f475..ab8f77c5d5 100644 --- a/packages/fxa-payments-server/src/routes/Subscriptions/index.test.tsx +++ b/packages/fxa-payments-server/src/routes/Subscriptions/index.test.tsx @@ -1,106 +1,610 @@ import React from 'react'; -import { render, cleanup } from '@testing-library/react'; +import { render, cleanup, fireEvent, act } from '@testing-library/react'; import '@testing-library/jest-dom/extend-expect'; -import { Subscriptions, SubscriptionsProps } from './index'; +import nock from 'nock'; +import waitForExpect from 'wait-for-expect'; + +import { AuthServerErrno } from '../../lib/errors'; + +import { QueryParams } from '../../lib/types'; +import { createAppStore, actions } from '../../store'; +import { Store } from '../../store/types'; + +import { PAYMENT_ERROR_1 } from '../../lib/errors'; import { - AppContext, - AppContextType, - defaultAppContext, -} from '../../lib/AppContext'; -import { defaultConfig } from '../../lib/config'; -import { Customer, Profile, Subscription } from '../../store/types'; + wait, + defaultAppContextValue, + MockApp, + setupMockConfig, + mockConfig, + mockServerUrl, + mockOptionsResponses, + mockStripeElementOnChangeFns, + elementChangeResponse, + STRIPE_FIELDS, + VALID_CREATE_TOKEN_RESPONSE, + MOCK_PROFILE, + MOCK_PLANS, + MOCK_ACTIVE_SUBSCRIPTIONS, + MOCK_CUSTOMER, + MOCK_ACTIVE_SUBSCRIPTIONS_AFTER_SUBSCRIPTION, + MOCK_CUSTOMER_AFTER_SUBSCRIPTION, +} from '../../lib/test-utils'; -beforeEach(() => {}); +import { SettingsLayout } from '../../components/AppLayout'; +import Subscriptions from './index'; -afterEach(cleanup); +describe('routes/Subscriptions', () => { + let contentServer = ''; + let authServer = ''; + let profileServer = ''; -const mockProfile: Profile = { - amrValues: [], - avatar: 'avatar', - avatarDefault: true, - displayName: null, - email: 'email', - locale: 'locale', - twoFactorAuthentication: false, - uid: 'uid', -}; -const mockCustomer: Customer = { - payment_type: 'cc', - last4: '4444', - exp_month: '12', - exp_year: '22', - subscriptions: [], -}; -const mockSubscription: Subscription = { - subscriptionId: 'abc', - cancelledAt: null, - createdAt: Date.now(), - productName: 'pro jest', -}; -const mockPlan = { - plan_id: 'abc', - plan_name: 'abc', - product_id: 'abc', - product_name: 'abc', - currency: 'abc', - amount: 100, - interval: 'abc', -}; -const mockCustomerSubscription = { - cancel_at_period_end: false, - current_period_end: 99, - current_period_start: 9, - end_at: null, - nickname: 'abc', - plan_id: 'abc', - status: 'abc', - subscription_id: 'abc', -}; -const mockedSubscriptionsProps = { - profile: { error: null, loading: false, result: mockProfile }, - plans: { error: null, loading: false, result: [mockPlan] }, - customer: { error: null, loading: false, result: mockCustomer }, - subscriptions: { error: null, loading: false, result: [mockSubscription] }, - customerSubscriptions: [mockCustomerSubscription], - fetchSubscriptionsRouteResources: jest.fn(), - cancelSubscription: jest.fn(), - cancelSubscriptionStatus: { - error: null, - loading: false, - result: mockSubscription, - }, - resetCancelSubscription: jest.fn(), - reactivateSubscription: jest.fn(), - reactivateSubscriptionStatus: { error: null, loading: false, result: null }, - resetReactivateSubscription: jest.fn(), - updatePayment: jest.fn(), - updatePaymentStatus: { error: null, loading: false, result: null }, - resetUpdatePayment: jest.fn(), -}; -const Subject = (props: SubscriptionsProps) => { - const config = defaultConfig(); - const appContextValue = { - ...defaultAppContext, - config: { - ...config, - servers: { - ...config.servers, - content: { - url: 'http://127.0.0.1:3030' - } - } - }, - queryParams: { successfulSupportTicketSubmission: 'quux' }, + beforeEach(() => { + setupMockConfig(mockConfig); + contentServer = mockServerUrl('content'); + authServer = mockServerUrl('auth'); + mockOptionsResponses(authServer); + profileServer = mockServerUrl('profile'); + mockOptionsResponses(profileServer); + }); + + afterEach(() => { + nock.cleanAll(); + return cleanup(); + }); + + const Subject = ({ + store, + queryParams = {}, + navigateToUrl = jest.fn(), + createToken = jest.fn().mockResolvedValue(VALID_CREATE_TOKEN_RESPONSE), + }: { + store?: Store; + queryParams?: QueryParams; + navigateToUrl?: (url: string) => void; + createToken?: jest.Mock; + }) => { + const props = {}; + const mockStripe = { + createToken, + }; + const appContextValue = { + ...defaultAppContextValue(), + navigateToUrl: navigateToUrl || jest.fn(), + queryParams, + }; + return ( + + + + + + ); }; - return ( - - - - ); -}; + const initApiMocks = ({ + displayName = undefined, + mockCustomer = MOCK_CUSTOMER, + mockActiveSubscriptions = MOCK_ACTIVE_SUBSCRIPTIONS, + }: { + displayName?: string | undefined, + mockCustomer?: typeof MOCK_CUSTOMER, + mockActiveSubscriptions?: typeof MOCK_ACTIVE_SUBSCRIPTIONS + } = {}) => [ + nock(profileServer) + .get('/v1/profile') + .reply(200, { ...MOCK_PROFILE, displayName }), + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS), + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, mockActiveSubscriptions), + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, mockCustomer), + ]; -it('renders successful support ticket submission messsage when query param exists', () => { - const { getByTestId } = render(); - expect(getByTestId('supportFormSuccess')).toBeInTheDocument(); + it('lists all subscriptions', async () => { + // Use mocks for subscription lists that exercise multiple plans + initApiMocks({ + mockCustomer: MOCK_CUSTOMER_AFTER_SUBSCRIPTION, + mockActiveSubscriptions: MOCK_ACTIVE_SUBSCRIPTIONS_AFTER_SUBSCRIPTION, + }); + const { findByTestId, queryAllByTestId, queryByTestId } = render( + + ); + await findByTestId('subscription-management-loaded'); + const items = queryAllByTestId('subscription-item'); + expect(items.length).toBe(2); + expect(queryByTestId('no-subscriptions-available')).not.toBeInTheDocument(); + }); + + it('offers a button for support', async () => { + initApiMocks(); + const navigateToUrl = jest.fn(); + const { getByTestId, findByTestId, findByText } = render(); + await findByTestId('subscription-management-loaded'); + fireEvent.click(getByTestId('contact-support-button')); + await waitForExpect(() => expect(navigateToUrl).toBeCalled()); + expect(navigateToUrl).toBeCalledWith(`${contentServer}/support`); + }); + + it('renders successful support ticket submission messsage when query param exists', async () => { + initApiMocks(); + const { findByTestId } = render( + + ); + await findByTestId('supportFormSuccess'); + }); + + it('displays profile displayName if available', async () => { + initApiMocks({displayName: 'Foo Barson'}); + const { findByText } = render(); + await findByText('Foo Barson'); + }); + + it('displays a message if no subscriptions are available', async () => { + const apiMocks = [ + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE), + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS), + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, []), + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, { + ...MOCK_CUSTOMER, + subscriptions: [], + }), + ]; + const { findByTestId, queryAllByTestId, queryByTestId } = render( + + ); + await findByTestId('subscription-management-loaded'); + const items = queryAllByTestId('subscription-item'); + expect(items.length).toBe(0); + expect(queryByTestId('no-subscriptions-available')).toBeInTheDocument(); + }); + + it('displays an error if profile fetch fails', async () => { + nock(profileServer) + .get('/v1/profile') + .reply(500, MOCK_PROFILE); + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(500, MOCK_ACTIVE_SUBSCRIPTIONS); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(403, MOCK_CUSTOMER); + const { findByTestId } = render(); + await findByTestId('error-profile-fetch'); + }); + + it('displays an error if plans fetch fails', async () => { + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE); + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(500, MOCK_PLANS); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(500, MOCK_ACTIVE_SUBSCRIPTIONS); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(403, MOCK_CUSTOMER); + const { findByTestId } = render(); + await findByTestId('error-plans-fetch'); + }); + + it('displays an error if subscriptions fetch fails', async () => { + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE); + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(500, {}); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(403, MOCK_CUSTOMER); + const { findByTestId } = render(); + await findByTestId('error-subscriptions-fetch'); + }); + + it('displays an error if customer fetch fails', async () => { + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE); + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, MOCK_ACTIVE_SUBSCRIPTIONS); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(403, {}); + const { findByTestId } = render(); + await findByTestId('error-customer-fetch'); + }); + + it('does not display an error if customer fetch fails with 404', async () => { + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE); + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, MOCK_ACTIVE_SUBSCRIPTIONS); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(404, { + errno: AuthServerErrno.UNKNOWN_SUBSCRIPTION_CUSTOMER, + }); + const { findByTestId, queryByTestId, debug } = render(); + await findByTestId('subscription-management-loaded'); + expect(queryByTestId('error-customer-fetch')).not.toBeInTheDocument(); + expect(queryByTestId('no-subscriptions-available')).toBeInTheDocument(); + }); + + it('supports cancelling a subscription', async () => { + initApiMocks(); + + nock(authServer) + .delete('/v1/oauth/subscriptions/active/sub0.28964929339372136') + .reply(200, {}); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, [ + { + uid: 'a90fef48240b49b2b6a33d333aee9b13', + subscriptionId: 'sub0.28964929339372136', + productName: '123doneProProduct', + createdAt: 1565816388815, + cancelledAt: 1566252991684, + }, + ]); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, { + ...MOCK_CUSTOMER, + subscriptions: [ + { + subscription_id: 'sub0.28964929339372136', + plan_id: '123doneProMonthly', + plan_name: '123done Pro Monthly', + status: 'active', + cancel_at_period_end: true, + current_period_start: 1565816388.815, + current_period_end: 1568408388.815, + }, + ], + }); + + const { findByTestId, queryAllByTestId, getByTestId } = render( + + ); + + // Wait for the page to load with one subscription + await findByTestId('subscription-management-loaded'); + const items = queryAllByTestId('subscription-item'); + expect(items.length).toBe(1); + + // Click the button to reveal the cancellation panel + fireEvent.click(getByTestId('reveal-cancel-subscription-button')); + await findByTestId('cancel-subscription-button'); + + // Click the confirmation checkbox, wait for the button to be enabled + const cancelButton = getByTestId('cancel-subscription-button'); + fireEvent.click(getByTestId('confirm-cancel-subscription-checkbox')); + await waitForExpect(() => + expect(cancelButton).not.toHaveAttribute('disabled') + ); + + // Click the cancellation button + fireEvent.click(cancelButton); + + // A farewell dialog should appear + await findByTestId('cancellation-message-title'); + }); + + async function commonReactivationSetup() { + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE), + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS), + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, [ + { + uid: 'a90fef48240b49b2b6a33d333aee9b13', + subscriptionId: 'sub0.28964929339372136', + productName: '123doneProProduct', + createdAt: 1565816388815, + cancelledAt: 1566252991684, + }, + ]); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, { + ...MOCK_CUSTOMER, + subscriptions: [ + { + subscription_id: 'sub0.28964929339372136', + plan_id: '123doneProMonthly', + plan_name: '123done Pro Monthly', + status: 'active', + cancel_at_period_end: true, + current_period_start: 1565816388.815, + current_period_end: 1568408388.815, + }, + ], + }); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, [ + { + uid: 'a90fef48240b49b2b6a33d333aee9b13', + subscriptionId: 'sub0.28964929339372136', + productName: '123doneProProduct', + createdAt: 1565816388815, + cancelledAt: null, + }, + ]); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, { + ...MOCK_CUSTOMER, + subscriptions: [ + { + subscription_id: 'sub0.28964929339372136', + plan_id: '123doneProMonthly', + plan_name: '123done Pro Monthly', + status: 'active', + cancel_at_period_end: false, + current_period_start: 1565816388.815, + current_period_end: 1568408388.815, + }, + ], + }); + } + + it('supports reactivating a subscription', async () => { + commonReactivationSetup(); + nock(authServer) + .post('/v1/oauth/subscriptions/reactivate') + .reply(200, {}); + + const { findByTestId, getByTestId } = render(); + + // Wait for the page to load with one subscription + await findByTestId('subscription-management-loaded'); + + const reactivateButton = getByTestId('reactivate-subscription-button'); + fireEvent.click(reactivateButton); + + await findByTestId('reveal-cancel-subscription-button'); + }); + + it('should display an error message if reactivation fails', async () => { + commonReactivationSetup(); + nock(authServer) + .post('/v1/oauth/subscriptions/reactivate') + .reply(500, {}); + + const { debug, findByTestId, getByTestId } = render(); + + // Wait for the page to load with one subscription + await findByTestId('subscription-management-loaded'); + + const reactivateButton = getByTestId('reactivate-subscription-button'); + fireEvent.click(reactivateButton); + + await findByTestId('error-reactivation'); + }); + + it('should display an error message if subhub reports a subscription not found in auth-server', async () => { + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE); + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, MOCK_PLANS); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, []); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, MOCK_CUSTOMER); + const { findByTestId } = render(); + await findByTestId('error-fxa-missing-subscription'); + }); + + it('should display an error message for a plan found in auth-server but not subhub', async () => { + nock(profileServer) + .get('/v1/profile') + .reply(200, MOCK_PROFILE); + nock(authServer) + .get('/v1/oauth/subscriptions/plans') + .reply(200, []); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, MOCK_ACTIVE_SUBSCRIPTIONS); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, MOCK_CUSTOMER); + const { findByTestId } = render(); + await findByTestId('error-subhub-missing-plan'); + }); + + it('support updating billing information', async () => { + initApiMocks(); + + nock(authServer) + .post('/v1/oauth/subscriptions/updatePayment') + .reply(200, {}); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, MOCK_ACTIVE_SUBSCRIPTIONS); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, MOCK_CUSTOMER); + + const createToken = jest + .fn() + .mockResolvedValue(VALID_CREATE_TOKEN_RESPONSE); + const { findByTestId, getByTestId } = render( + + ); + await findByTestId('subscription-management-loaded'); + + // Click button to reveal the payment update form + fireEvent.click(getByTestId('reveal-payment-update-button')); + await findByTestId('paymentForm'); + + act(() => { + for (const testid of STRIPE_FIELDS) { + mockStripeElementOnChangeFns[testid]( + elementChangeResponse({ complete: true, value: 'test' }) + ); + } + }); + fireEvent.change(getByTestId('name'), { target: { value: 'Foo Barson' } }); + fireEvent.change(getByTestId('zip'), { target: { value: '90210' } }); + fireEvent.click(getByTestId('submit')); + + await findByTestId('success-billing-update'); + + // click outside the payment success dialog to trigger dismiss + fireEvent.click(getByTestId('clear-success-alert')); + waitForExpect(() => + expect(getByTestId('success-billing-update')).not.toBeInTheDocument() + ); + }); + + it('displays an error message if updating billing information fails', async () => { + initApiMocks(); + + nock(authServer) + .post('/v1/oauth/subscriptions/updatePayment') + .reply(500, {}); + nock(authServer) + .get('/v1/oauth/subscriptions/active') + .reply(200, MOCK_ACTIVE_SUBSCRIPTIONS); + nock(authServer) + .get('/v1/oauth/subscriptions/customer') + .reply(200, MOCK_CUSTOMER); + + const createToken = jest + .fn() + .mockResolvedValue(VALID_CREATE_TOKEN_RESPONSE); + const { + debug, + findByTestId, + getByTestId, + queryAllByTestId, + queryByTestId, + } = render(); + await findByTestId('subscription-management-loaded'); + + // Click button to reveal the payment update form + fireEvent.click(getByTestId('reveal-payment-update-button')); + await findByTestId('paymentForm'); + + act(() => { + for (const testid of STRIPE_FIELDS) { + mockStripeElementOnChangeFns[testid]( + elementChangeResponse({ complete: true, value: 'test' }) + ); + } + }); + fireEvent.change(getByTestId('name'), { target: { value: 'Foo Barson' } }); + fireEvent.change(getByTestId('zip'), { target: { value: '90210' } }); + fireEvent.click(getByTestId('submit')); + + await findByTestId('error-billing-update'); + }); + + it('displays an error message if createToken resolves to an unexpected value', async () => { + initApiMocks(); + + const createToken = jest.fn().mockResolvedValue({ foo: 'bad value' }); + const { + debug, + findByTestId, + getByTestId, + queryAllByTestId, + queryByTestId, + } = render(); + await findByTestId('subscription-management-loaded'); + + // Click button to reveal the payment update form + fireEvent.click(getByTestId('reveal-payment-update-button')); + await findByTestId('paymentForm'); + + act(() => { + for (const testid of STRIPE_FIELDS) { + mockStripeElementOnChangeFns[testid]( + elementChangeResponse({ complete: true, value: 'test' }) + ); + } + }); + fireEvent.change(getByTestId('name'), { target: { value: 'Foo Barson' } }); + fireEvent.change(getByTestId('zip'), { target: { value: '90210' } }); + fireEvent.click(getByTestId('submit')); + + await findByTestId('error-payment-submission'); + }); + + it('displays an error message if createToken fails', async () => { + initApiMocks(); + + const createToken = jest.fn().mockRejectedValue({ + type: 'try_again_later', + }); + + const { container, findByTestId, getByTestId, queryByText } = render( + + ); + await findByTestId('subscription-management-loaded'); + + // Click button to reveal the payment update form + fireEvent.click(getByTestId('reveal-payment-update-button')); + await findByTestId('paymentForm'); + + act(() => { + for (const testid of STRIPE_FIELDS) { + mockStripeElementOnChangeFns[testid]( + elementChangeResponse({ complete: true, value: 'test' }) + ); + } + }); + fireEvent.change(getByTestId('name'), { target: { value: 'Foo Barson' } }); + fireEvent.change(getByTestId('zip'), { target: { value: '90210' } }); + fireEvent.click(getByTestId('submit')); + + await findByTestId('error-payment-submission'); + expect(queryByText(PAYMENT_ERROR_1)).toBeInTheDocument(); + + // click outside the payment error dialog to trigger dismiss + fireEvent.click(container); + waitForExpect(() => + expect(getByTestId('error-payment-submission')).not.toBeInTheDocument() + ); + }); }); diff --git a/packages/fxa-payments-server/src/routes/Subscriptions/index.tsx b/packages/fxa-payments-server/src/routes/Subscriptions/index.tsx index 2c338e911a..a5acda75a1 100644 --- a/packages/fxa-payments-server/src/routes/Subscriptions/index.tsx +++ b/packages/fxa-payments-server/src/routes/Subscriptions/index.tsx @@ -80,9 +80,7 @@ export const Subscriptions = ({ // Fetch subscriptions and customer on initial render or auth change. useEffect(() => { - if (accessToken) { - fetchSubscriptionsRouteResources(accessToken); - } + fetchSubscriptionsRouteResources(accessToken); }, [fetchSubscriptionsRouteResources, accessToken]); const onSupportClick = useCallback(() => navigateToUrl(SUPPORT_FORM_URL), [ @@ -102,7 +100,7 @@ export const Subscriptions = ({ if (profile.error !== null) { return ( -

Problem loading profile

+

Problem loading profile

{profile.error.message}

); @@ -111,7 +109,7 @@ export const Subscriptions = ({ if (plans.error !== null) { return ( -

Problem loading plans

+

Problem loading plans

{plans.error.message}

); @@ -120,7 +118,7 @@ export const Subscriptions = ({ if (subscriptions.error !== null) { return ( -

Problem loading subscriptions

+

Problem loading subscriptions

{subscriptions.error.message}

); @@ -133,7 +131,7 @@ export const Subscriptions = ({ ) { return ( -

Problem loading customer information

+

Problem loading customer information

{customer.error.message}

); @@ -155,10 +153,10 @@ export const Subscriptions = ({ {updatePaymentStatus.result && showPaymentSuccessAlert && ( - + Your billing information has been updated successfully - + )} @@ -170,7 +168,7 @@ export const Subscriptions = ({ {updatePaymentStatus.error && ( -

Updating billing information failed

+

Updating billing information failed

{updatePaymentStatus.error.message}

)} @@ -180,7 +178,7 @@ export const Subscriptions = ({ className="dialog-error" onDismiss={resetReactivateSubscription} > -

Reactivating subscription failed

+

Reactivating subscription failed

{reactivateSubscriptionStatus.error.message}

)} @@ -196,7 +194,7 @@ export const Subscriptions = ({ {profile.result && } -
+
@@ -204,6 +202,7 @@ export const Subscriptions = ({

Subscriptions

+ + diff --git a/packages/fxa-content-server/app/scripts/templates/settings.mustache b/packages/fxa-content-server/app/scripts/templates/settings.mustache index 2bbd12dd13..49631055e6 100644 --- a/packages/fxa-content-server/app/scripts/templates/settings.mustache +++ b/packages/fxa-content-server/app/scripts/templates/settings.mustache @@ -30,4 +30,10 @@
- + diff --git a/packages/fxa-content-server/app/scripts/views/security_events.js b/packages/fxa-content-server/app/scripts/views/security_events.js new file mode 100644 index 0000000000..59c5708aad --- /dev/null +++ b/packages/fxa-content-server/app/scripts/views/security_events.js @@ -0,0 +1,65 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import 'modal'; +import BaseView from './base'; +import SecurityEvent from '../../scripts/models/security-events'; +import Template from 'templates/security_events.mustache'; + +let account; + +const View = BaseView.extend({ + template: Template, + className: 'security-events', + viewName: 'security_events', + + mustVerify: true, + + events: { + 'click #delete-events': '_deleteSecurityEvents', + }, + + beforeRender() { + account = this.getSignedInAccount(); + if (!account) { + this.navigate('/signin'); + } + + return this._fetchSecurityEvents(); + }, + + setInitialContext(context) { + context.set({ + securityEvents: this._securityEvents, + }); + }, + + _fetchSecurityEvents() { + return account.securityEvents().then(events => { + this._securityEvents = events.map(event => { + event.createdAt = formatDate(new Date(event.createdAt)); + + return new SecurityEvent(event).toJSON(); + }); + }); + }, + + _deleteSecurityEvents() { + return account.deleteSecurityEvents().then(() => { + this._securityEvents = []; + return this.render(); + }); + }, +}); + +function formatDate(dateObj) { + const date = dateObj.toDateString(); + let time = dateObj.toTimeString(); + const indexOfFirstSpace = time.indexOf(' '); + time = time.substring(0, indexOfFirstSpace); + + return `${date} ${time}`; +} + +export default View; diff --git a/packages/fxa-content-server/app/scripts/views/settings.js b/packages/fxa-content-server/app/scripts/views/settings.js index d98a41d4f6..7dd633874d 100644 --- a/packages/fxa-content-server/app/scripts/views/settings.js +++ b/packages/fxa-content-server/app/scripts/views/settings.js @@ -90,6 +90,7 @@ const View = BaseView.extend({ context.set({ ccExpired: !!this._ccExpired, escapedCcExpiredLinkAttrs: `href="/subscriptions" class="alert-link"`, + securityEventsVisible: this.displaySecurityEvents(), showSignOut: !account.isFromSync(), unsafeHeaderHTML: this._getHeaderHTML(account), }); @@ -146,6 +147,7 @@ const View = BaseView.extend({ afterRender() { const account = this.getSignedInAccount(); + this.listenTo(account, 'change:displayName', this._onAccountUpdate); this.listenTo(account, 'change:email', this._onAccountUpdate); @@ -288,6 +290,14 @@ const View = BaseView.extend({ }, this.SUCCESS_MESSAGE_DELAY_MS); return BaseView.prototype.unsafeDisplaySuccess.apply(this, arguments); }, + + displaySecurityEvents() { + if (this.broker.hasCapability('showSecurityEvents')) { + return true; + } + + return false; + }, }); Cocktail.mixin( diff --git a/packages/fxa-content-server/app/styles/_modules.scss b/packages/fxa-content-server/app/styles/_modules.scss index 9385982758..fd3d181afb 100644 --- a/packages/fxa-content-server/app/styles/_modules.scss +++ b/packages/fxa-content-server/app/styles/_modules.scss @@ -19,3 +19,4 @@ @import 'modules/marketing-ios'; @import 'modules/support'; @import 'modules/chosen'; +@import 'modules/security-events'; diff --git a/packages/fxa-content-server/app/styles/modules/_security-events.scss b/packages/fxa-content-server/app/styles/modules/_security-events.scss new file mode 100644 index 0000000000..4ff809af5d --- /dev/null +++ b/packages/fxa-content-server/app/styles/modules/_security-events.scss @@ -0,0 +1,13 @@ +html { + background-color: $html-background-color; + height: 100%; +} + +table, +th, +td { + border: solid 1px #000; + font-size: 1.2rem; + padding: 5px; + text-align: center; +} diff --git a/packages/fxa-content-server/app/tests/spec/lib/fxa-client.js b/packages/fxa-content-server/app/tests/spec/lib/fxa-client.js index cba31018d6..ddfd0ad20e 100644 --- a/packages/fxa-content-server/app/tests/spec/lib/fxa-client.js +++ b/packages/fxa-content-server/app/tests/spec/lib/fxa-client.js @@ -1604,6 +1604,53 @@ describe('lib/fxa-client', function() { }); }); + describe('securityEvents', () => { + it('delegates to the fxa-js-client', () => { + const events = [ + { + name: 'account.login', + verified: 1, + createdAt: new Date().getTime(), + }, + { + name: 'account.create', + verified: 1, + createdAt: new Date().getTime(), + }, + ]; + + sinon.stub(realClient, 'securityEvents').callsFake(() => { + return Promise.resolve(events); + }); + + return client.securityEvents('sessionToken').then(res => { + assert.isTrue(realClient.securityEvents.calledWith('sessionToken')); + assert.isTrue(realClient.securityEvents.calledOnce); + + assert.equal(res.length, 2); + assert.deepEqual(res[0], events[0]); + assert.deepEqual(res[1], events[1]); + }); + }); + }); + + describe('deleteSecurityEvents', () => { + it('delegates to the fxa-js-client', () => { + sinon.stub(realClient, 'deleteSecurityEvents').callsFake(() => { + return Promise.resolve({}); + }); + + return client.deleteSecurityEvents('sessionToken').then(res => { + assert.isTrue( + realClient.deleteSecurityEvents.calledWith('sessionToken') + ); + assert.isTrue(realClient.deleteSecurityEvents.calledOnce); + + assert.deepEqual(res, {}); + }); + }); + }); + describe('smsStatus', () => { it('delegates to the fxa-js-client', () => { sinon.stub(realClient, 'smsStatus').callsFake(() => diff --git a/packages/fxa-content-server/app/tests/spec/models/account.js b/packages/fxa-content-server/app/tests/spec/models/account.js index 74f8d9fddb..e7bcb6e47c 100644 --- a/packages/fxa-content-server/app/tests/spec/models/account.js +++ b/packages/fxa-content-server/app/tests/spec/models/account.js @@ -3020,4 +3020,49 @@ describe('models/account', function() { }); }); }); + + describe('securityEvents', () => { + const events = [ + { + name: 'account.login', + verified: 1, + createdAt: new Date().getTime(), + }, + { + name: 'account.create', + verified: 1, + createdAt: new Date().getTime(), + }, + ]; + + it('gets the security events', () => { + account.set('sessionToken', SESSION_TOKEN); + sinon.stub(fxaClient, 'securityEvents').callsFake(() => { + return Promise.resolve(events); + }); + + return account.securityEvents().then(res => { + assert.isTrue(fxaClient.securityEvents.calledOnce); + assert.isTrue(fxaClient.securityEvents.calledWith(SESSION_TOKEN)); + + assert.equal(res.length, 2); + assert.deepEqual(res, events); + }); + }); + }); + + describe('deleteSecurityEvents', () => { + it('deletes the security events', () => { + account.set('sessionToken', SESSION_TOKEN); + sinon.stub(fxaClient, 'deleteSecurityEvents').callsFake(() => { + return Promise.resolve({}); + }); + + return account.deleteSecurityEvents().then(res => { + assert.isTrue(fxaClient.deleteSecurityEvents.calledOnce); + assert.isTrue(fxaClient.deleteSecurityEvents.calledWith(SESSION_TOKEN)); + assert.deepEqual(res, {}); + }); + }); + }); }); diff --git a/packages/fxa-content-server/app/tests/spec/models/security-events.js b/packages/fxa-content-server/app/tests/spec/models/security-events.js new file mode 100644 index 0000000000..0e48f84fd4 --- /dev/null +++ b/packages/fxa-content-server/app/tests/spec/models/security-events.js @@ -0,0 +1,35 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import { assert } from 'chai'; +import SecurityEvent from 'models/security-events'; + +describe('models/security-events', () => { + let securityEvent; + const events = [ + { + name: 'account.login', + verified: true, + createdAt: new Date().getTime(), + }, + { + name: 'account.create', + verified: false, + createdAt: new Date().getTime(), + }, + ]; + + beforeEach(() => { + securityEvent = events.map(event => { + return new SecurityEvent(event); + }); + }); + + describe('create', () => { + it('correctly sets model properties', () => { + assert.deepEqual(securityEvent[0].attributes, events[0]); + assert.deepEqual(securityEvent[1].attributes, events[1]); + }); + }); +}); diff --git a/packages/fxa-content-server/app/tests/spec/views/settings.js b/packages/fxa-content-server/app/tests/spec/views/settings.js index 55c0ca0dfd..afba1bc0f8 100644 --- a/packages/fxa-content-server/app/tests/spec/views/settings.js +++ b/packages/fxa-content-server/app/tests/spec/views/settings.js @@ -7,6 +7,7 @@ import _ from 'underscore'; import { assert } from 'chai'; import AuthErrors from 'lib/auth-errors'; import BaseView from 'views/base'; +import Broker from 'models/auth_brokers/base'; import Cocktail from 'cocktail'; import CommunicationPreferencesView from 'views/settings/communication_preferences'; import SubscriptionView from 'views/settings/subscription'; @@ -35,6 +36,7 @@ Cocktail.mixin(SettingsPanelView, SettingsPanelMixin); describe('views/settings', function() { var account; + var broker; var experimentGroupingRules; var formPrefill; var initialChildView; @@ -58,7 +60,9 @@ describe('views/settings', function() { function createSettingsView() { subPanelRenderSpy = sinon.spy(() => Promise.resolve()); + broker = new Broker(); view = new View({ + broker: broker, childView: initialChildView, config: { lang: 'en', diff --git a/packages/fxa-content-server/app/tests/test_start.js b/packages/fxa-content-server/app/tests/test_start.js index be23712262..419e4bc92d 100644 --- a/packages/fxa-content-server/app/tests/test_start.js +++ b/packages/fxa-content-server/app/tests/test_start.js @@ -118,6 +118,7 @@ require('./spec/models/reliers/pairing/supplicant'); require('./spec/models/reliers/relier'); require('./spec/models/reliers/sync'); require('./spec/models/resume-token'); +require('./spec/models/security-events'); require('./spec/models/sync-engines'); require('./spec/models/unique-user-id'); require('./spec/models/user'); diff --git a/packages/fxa-content-server/server/lib/routes/get-frontend.js b/packages/fxa-content-server/server/lib/routes/get-frontend.js index de9cd749bb..516a63771e 100644 --- a/packages/fxa-content-server/server/lib/routes/get-frontend.js +++ b/packages/fxa-content-server/server/lib/routes/get-frontend.js @@ -37,6 +37,7 @@ module.exports = function() { 'reset_password_confirmed', 'reset_password_verified', 'reset_password_with_recovery_key_verified', + 'security_events', 'settings', 'settings/account_recovery', 'settings/account_recovery/confirm_password', diff --git a/packages/fxa-content-server/tests/functional.js b/packages/fxa-content-server/tests/functional.js index e15a6dc326..906e15ca7b 100644 --- a/packages/fxa-content-server/tests/functional.js +++ b/packages/fxa-content-server/tests/functional.js @@ -55,6 +55,7 @@ module.exports = [ 'tests/functional/recovery_key.js', 'tests/functional/refreshes_metrics.js', 'tests/functional/robots_txt.js', + 'tests/functional/security_events.js', 'tests/functional/send_sms.js', 'tests/functional/settings.js', 'tests/functional/settings_change_email.js', diff --git a/packages/fxa-content-server/tests/functional/lib/selectors.js b/packages/fxa-content-server/tests/functional/lib/selectors.js index a3425dd3dc..5c30ea4166 100644 --- a/packages/fxa-content-server/tests/functional/lib/selectors.js +++ b/packages/fxa-content-server/tests/functional/lib/selectors.js @@ -203,6 +203,13 @@ module.exports = { HEADER: '#fxa-reset-password-complete-header', SUB_HEADER: '.account-ready-service', }, + SECURITY_EVENTS: { + DELETE_EVENTS_BUTTON: '#delete-events', + FIRST_EVENT_NAME: '#security-events-table tr:first-child .event-name', + RECENT_ACTIVITY_HEADER: '#recent-activity-header', + SECURITY_EVENT: '.security-event', + SECURITY_EVENTS_HEADER: '#security-events', + }, SETTINGS: { CONTENT: '#fxa-settings-content', HEADER: '#fxa-settings-header', diff --git a/packages/fxa-content-server/tests/functional/security_events.js b/packages/fxa-content-server/tests/functional/security_events.js new file mode 100644 index 0000000000..137638298b --- /dev/null +++ b/packages/fxa-content-server/tests/functional/security_events.js @@ -0,0 +1,194 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +'use strict'; + +const { registerSuite } = intern.getInterface('object'); +const FunctionalHelpers = require('./lib/helpers'); +const FxaClient = require('fxa-js-client'); +const nodeXMLHttpRequest = require('xmlhttprequest'); +const selectors = require('./lib/selectors'); +const TestHelpers = require('../lib/helpers'); + +const { + clearBrowserState, + click, + createUser, + fillOutCompleteResetPassword, + fillOutSignIn, + getVerificationLink, + noSuchElement, + openPage, + testElementExists, + testElementTextInclude, + thenify, +} = FunctionalHelpers; + +const config = intern._config; +const AUTH_SERVER_ROOT = config.fxaAuthRoot; +const SECURITY_EVENTS_URL = `${config.fxaContentRoot}security_events`; +const COMPLETE_PAGE_URL_ROOT = + config.fxaContentRoot + 'complete_reset_password'; + +const PASSWORD = 'passwordzxcv'; +const TIMEOUT = 90 * 1000; + +let client; +let code; +let email; +let token; + +function ensureFxaJSClient() { + if (!client) { + client = new FxaClient(AUTH_SERVER_ROOT, { + xhr: nodeXMLHttpRequest.XMLHttpRequest, + }); + } +} + +const initiateResetPassword = thenify(function(emailAddress, emailNumber) { + ensureFxaJSClient(); + + return this.parent + .then(() => client.passwordForgotSendCode(emailAddress)) + .then(getVerificationLink(emailAddress, emailNumber)) + .then(link => { + // token and code are hex values + token = link.match(/token=([a-f\d]+)/)[1]; + code = link.match(/code=([a-f\d]+)/)[1]; + }); +}); + +const openCompleteResetPassword = thenify(function(email, token, code, header) { + let url = COMPLETE_PAGE_URL_ROOT + '?'; + + const queryParams = []; + if (email) { + queryParams.push('email=' + encodeURIComponent(email)); + } + + if (token) { + queryParams.push('token=' + encodeURIComponent(token)); + } + + if (code) { + queryParams.push('code=' + encodeURIComponent(code)); + } + + url += queryParams.join('&'); + return this.parent.then(openPage(url, header)); +}); + +registerSuite('security_events', { + beforeEach: function() { + email = TestHelpers.createEmail(); + + return this.remote + .then(createUser(email, PASSWORD, { preVerified: true })) + .then(initiateResetPassword(email, 0)) + .then(clearBrowserState()); + }, + + tests: { + 'gets security events table': function() { + return this.remote + .then(fillOutSignIn(email, PASSWORD, true)) + .then(testElementExists(selectors.SETTINGS.HEADER)) + + .then( + openPage( + SECURITY_EVENTS_URL, + selectors.SECURITY_EVENTS.RECENT_ACTIVITY_HEADER + ) + ) + .then( + testElementExists(selectors.SECURITY_EVENTS.SECURITY_EVENTS_HEADER) + ); + }, + + 'login event is shown': function() { + return this.remote + .then(fillOutSignIn(email, PASSWORD, true)) + .then(testElementExists(selectors.SETTINGS.HEADER)) + + .then( + openPage( + SECURITY_EVENTS_URL, + selectors.SECURITY_EVENTS.RECENT_ACTIVITY_HEADER + ) + ) + .then( + testElementTextInclude( + selectors.SECURITY_EVENTS.FIRST_EVENT_NAME, + 'account.login' + ) + ); + }, + + 'reset event is shown': function() { + this.timeout = TIMEOUT; + + return this.remote + .then( + openCompleteResetPassword( + email, + token, + code, + selectors.COMPLETE_RESET_PASSWORD.HEADER + ) + ) + .then(fillOutCompleteResetPassword(PASSWORD, PASSWORD)) + + .then(testElementExists(selectors.SETTINGS.HEADER)) + + .then( + openCompleteResetPassword( + email, + token, + code, + selectors.COMPLETE_RESET_PASSWORD.EXPIRED_LINK_HEADER + ) + ) + + .then(click(selectors.CONFIRM_RESET_PASSWORD.LINK_RESEND)) + + .then(testElementExists(selectors.CONFIRM_RESET_PASSWORD.HEADER)) + + .then( + openPage( + SECURITY_EVENTS_URL, + selectors.SECURITY_EVENTS.RECENT_ACTIVITY_HEADER + ) + ) + .then( + testElementTextInclude( + selectors.SECURITY_EVENTS.FIRST_EVENT_NAME, + 'account.reset' + ) + ); + }, + + 'delete security events': function() { + return this.remote + .then(fillOutSignIn(email, PASSWORD, true)) + .then(testElementExists(selectors.SETTINGS.HEADER)) + + .then( + openPage( + SECURITY_EVENTS_URL, + selectors.SECURITY_EVENTS.RECENT_ACTIVITY_HEADER + ) + ) + .then( + testElementTextInclude( + selectors.SECURITY_EVENTS.FIRST_EVENT_NAME, + 'account.login' + ) + ) + .then(testElementExists(selectors.SECURITY_EVENTS.DELETE_EVENTS_BUTTON)) + .then(click(selectors.SECURITY_EVENTS.DELETE_EVENTS_BUTTON)) + .then(noSuchElement(selectors.SECURITY_EVENTS.SECURITY_EVENT)); + }, + }, +}); diff --git a/packages/fxa-content-server/tests/functional/settings.js b/packages/fxa-content-server/tests/functional/settings.js index 58aec10295..e9f3a2a298 100644 --- a/packages/fxa-content-server/tests/functional/settings.js +++ b/packages/fxa-content-server/tests/functional/settings.js @@ -13,6 +13,8 @@ const selectors = require('./lib/selectors'); var config = intern._config; var SIGNIN_URL = config.fxaContentRoot + 'signin'; var SETTINGS_URL = config.fxaContentRoot + 'settings'; +var SETTINGS_URL_WITH_SECURITY_EVENTS = + config.fxaContentRoot + 'settings?security_events=true'; const { clearBrowserState, @@ -23,6 +25,7 @@ const { destroySessionForEmail, fillOutSignIn, focus, + noSuchElement, noSuchStoredAccountByEmail, openPage, openSettingsInNewTab, @@ -281,3 +284,35 @@ registerSuite('settings with expired session', { }, }, }); + +registerSuite('settings with recent activity link', { + beforeEach: function() { + email = TestHelpers.createEmail(); + + return this.remote + .then(createUser(email, FIRST_PASSWORD, { preVerified: true })) + .then(clearBrowserState()); + }, + + tests: { + 'gets recent activity link with ?security_events query param': function() { + return this.remote + .then(openPage(SIGNIN_URL, '#fxa-signin-header')) + .then(fillOutSignIn(email, FIRST_PASSWORD)) + .then(testElementExists('#fxa-settings-header')) + + .then(openPage(SETTINGS_URL_WITH_SECURITY_EVENTS)) + .then(testElementExists('#recent-activity-link')); + }, + + 'does not get recent activity link without ?security_events query param': function() { + return this.remote + .then(openPage(SIGNIN_URL, '#fxa-signin-header')) + .then(fillOutSignIn(email, FIRST_PASSWORD)) + .then(testElementExists('#fxa-settings-header')) + + .then(openPage(SETTINGS_URL)) + .then(noSuchElement('#recent-activity-link')); + }, + }, +}); From 955ecc02e1b9569c5fabf6753c548b93c97fb94f Mon Sep 17 00:00:00 2001 From: Les Orchard Date: Thu, 22 Aug 2019 23:04:03 +0000 Subject: [PATCH 14/25] chore(payments): upgrade eslint and react-scripts --- .../fxa-payments-server/package-lock.json | 4485 +++++++---------- packages/fxa-payments-server/package.json | 8 +- .../fxa-payments-server/server/lib/server.js | 4 +- 3 files changed, 1921 insertions(+), 2576 deletions(-) diff --git a/packages/fxa-payments-server/package-lock.json b/packages/fxa-payments-server/package-lock.json index 2cf1aed7d3..114dbf92e5 100644 --- a/packages/fxa-payments-server/package-lock.json +++ b/packages/fxa-payments-server/package-lock.json @@ -5,29 +5,29 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.5", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" @@ -41,14 +41,6 @@ "ms": "^2.1.1" } }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "requires": { - "minimist": "^1.2.0" - } - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -57,13 +49,13 @@ } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.5.5", "jsesc": "^2.5.1", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "source-map": "^0.5.0", "trim-right": "^1.0.1" }, @@ -112,26 +104,26 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", - "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", + "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4" } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { @@ -170,11 +162,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.5.5" } }, "@babel/helper-module-imports": { @@ -186,16 +178,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { @@ -212,11 +204,11 @@ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { @@ -232,14 +224,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/helper-simple-access": { @@ -271,19 +263,19 @@ } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", "requires": { "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -319,9 +311,9 @@ } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==" + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.2.0", @@ -334,20 +326,20 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz", - "integrity": "sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", + "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.0", + "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-proposal-decorators": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.0.tgz", - "integrity": "sha512-d08TLmXeK/XbgCo7ZeZ+JaeZDtDai/2ctapTRsWWkkmy7G/cqz8DQN/HlWG7RR4YmfXxmExsbU3SuCjlM7AtUg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz", + "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.0", + "@babel/helper-create-class-features-plugin": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-decorators": "^7.2.0" } @@ -374,7 +366,6 @@ "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0" @@ -480,9 +471,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", @@ -498,12 +489,12 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { @@ -519,101 +510,6 @@ "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", - "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", - "requires": { - "@babel/types": "^7.5.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-define-map": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", - "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.5.5", - "lodash": "^4.17.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", - "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", - "requires": { - "@babel/types": "^7.5.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", - "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" - } - }, - "@babel/parser": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", - "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" - }, - "@babel/traverse": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", - "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.5.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.5", - "@babel/types": "^7.5.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", - "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "@babel/plugin-transform-computed-properties": { @@ -643,9 +539,9 @@ } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0" } @@ -660,9 +556,9 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz", - "integrity": "sha512-C4ZVNejHnfB22vI2TYN4RUp2oCmq6cSEAg4RygSvYZUECRqUu9O4PMEMNJ4wsemaRGg27BbgYctG4BZh+AgIHw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz", + "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-flow": "^7.2.0" @@ -702,31 +598,34 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", "requires": { "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", "requires": { "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", "requires": { "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { @@ -755,12 +654,12 @@ } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-replace-supers": "^7.5.5" } }, "@babel/plugin-transform-parameters": { @@ -782,9 +681,9 @@ } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz", - "integrity": "sha512-YYQFg6giRFMsZPKUM9v+VcHOdfSQdz9jHCx3akAi3UYgyjndmdYGSXylQ/V+HswQt4fL8IklchD9HTsaOCrWQQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.5.0.tgz", + "integrity": "sha512-c5Ba8cpybZFp1Izkf2sWGuNjOxoQ32tFgBvvYvwGhi4+9f6vGiSK9Gex4uVuO/Va6YJFu41aAh1MzMjUWkp0IQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0" @@ -843,14 +742,21 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.3.tgz", - "integrity": "sha512-7Q61bU+uEI7bCUFReT1NKn7/X6sDQsZ7wL1sJ9IYMAO7cI+eg6x9re1cEw2fCRMbbTVyoeUKWSV1M6azEfKCfg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", + "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "resolve": "^1.8.1", "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "@babel/plugin-transform-shorthand-properties": { @@ -903,104 +809,6 @@ "@babel/helper-create-class-features-plugin": "^7.5.5", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-typescript": "^7.2.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", - "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", - "requires": { - "@babel/types": "^7.5.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz", - "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==", - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5", - "@babel/helper-split-export-declaration": "^7.4.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", - "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", - "requires": { - "@babel/types": "^7.5.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", - "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" - } - }, - "@babel/parser": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", - "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" - }, - "@babel/traverse": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", - "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.5.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.5", - "@babel/types": "^7.5.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", - "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "@babel/plugin-transform-unicode-regex": { @@ -1068,175 +876,6 @@ "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", - "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", - "requires": { - "@babel/types": "^7.5.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", - "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", - "requires": { - "@babel/types": "^7.5.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", - "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" - } - }, - "@babel/parser": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", - "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", - "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", - "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", - "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.13" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", - "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", - "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", - "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", - "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", - "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5" - } - }, - "@babel/traverse": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", - "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.5.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.5", - "@babel/types": "^7.5.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", - "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "@babel/preset-flow": { @@ -1271,23 +910,23 @@ } }, "@babel/register": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.4.4.tgz", - "integrity": "sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.5.5.tgz", + "integrity": "sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==", "dev": true, "requires": { "core-js": "^3.0.0", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "mkdirp": "^0.5.1", "pirates": "^4.0.0", "source-map-support": "^0.5.9" } }, "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", "requires": { "regenerator-runtime": "^0.13.2" } @@ -1303,19 +942,19 @@ } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" }, "dependencies": { "debug": { @@ -1329,12 +968,12 @@ } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, @@ -1370,9 +1009,9 @@ } }, "@emotion/core": { - "version": "10.0.15", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.15.tgz", - "integrity": "sha512-VHwwl3k/ddMfQOHYgOJryXOs2rGJ5AfKLQGm5AVolNonnr6tkmDI4nzIMNaPpveoXVs7sP0OrF24UunIPxveQw==", + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.16.tgz", + "integrity": "sha512-whbiiA7FfPreBY4BqWky2qRfAZvq+4dKQ1WNJuiYQwPCNmb0pEYDgNheSbZoNKtGTtfPaM28hBbZAKWD5EZXmQ==", "dev": true, "requires": { "@babel/runtime": "^7.4.3", @@ -1485,48 +1124,41 @@ "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==" }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, "@hapi/hoek": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz", - "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==" + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.2.1.tgz", + "integrity": "sha512-JPiBy+oSmsq3St7XlipfN5pNA6bDJ1kpa73PrK/zR29CVClDVqy04AanM/M/qx5bSF+I61DdCfAvRrujau+zRg==" }, "@hapi/joi": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.0.tgz", - "integrity": "sha512-n6kaRQO8S+kepUTbXL9O/UOL788Odqs38/VOfoCrATDtTvyfiO3fgjlSRaNkHabpTLgM7qru9ifqXlXbXk8SeQ==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", "requires": { "@hapi/address": "2.x.x", - "@hapi/hoek": "6.x.x", - "@hapi/marker": "1.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", "@hapi/topo": "3.x.x" } }, - "@hapi/marker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@hapi/marker/-/marker-1.0.0.tgz", - "integrity": "sha512-JOfdekTXnJexfE8PyhZFyHvHjt81rBFSAbTIRAhF2vv/2Y1JzoKsGqxH/GpZJoF7aEfYok8JVcAHmSz1gkBieA==" - }, "@hapi/topo": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.2.tgz", - "integrity": "sha512-r+aumOqJ5QbD6aLPJWqVjMAPsx5pZKz+F5yPqXZ/WWG9JTtHbQqlzrJoknJ0iJxLj9vlXtmpSdjlkszseeG8OA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.3.tgz", + "integrity": "sha512-JmS9/vQK6dcUYn7wc2YZTqzIKubAQcJKu2KCKAru6es482U5RT5fP1EXCPtlXpiK7PR0On/kpQKI4fRKkzpZBQ==", "requires": { "@hapi/hoek": "8.x.x" - }, - "dependencies": { - "@hapi/hoek": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.1.0.tgz", - "integrity": "sha512-b1J4jxYnW+n6lC91V6Pqg9imP9BZq0HNCeM+3sbXg05rQsE9cGYrKFpZjyztVesGmNRE6R+QaEoWGATeIiUVjA==" - } } }, "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "requires": { - "@jest/source-map": "^24.3.0", + "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", "slash": "^2.0.0" }, @@ -1560,39 +1192,45 @@ } }, "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", "requires": { "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", - "pirates": "^4.0.1", "realpath-native": "^1.1.0", "rimraf": "^2.5.4", + "slash": "^2.0.0", "strip-ansi": "^5.0.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==" + }, "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", @@ -1616,6 +1254,18 @@ "supports-color": "^5.3.0" } }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -1635,35 +1285,35 @@ } }, "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", @@ -1671,13 +1321,13 @@ "istanbul-lib-instrument": "^3.0.1", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", + "node-notifier": "^5.4.2", "slash": "^2.0.0", "source-map": "^0.6.0", "string-length": "^2.0.0" @@ -1702,11 +1352,11 @@ } }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -1729,9 +1379,9 @@ } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.1.15", @@ -1751,42 +1401,43 @@ } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", "@types/istanbul-lib-coverage": "^2.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", "micromatch": "^3.1.10", + "pirates": "^4.0.1", "realpath-native": "^1.1.0", "slash": "^2.0.0", "source-map": "^0.6.1", @@ -1837,13 +1488,13 @@ } }, "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" + "@types/yargs": "^13.0.0" } }, "@mrmlnc/readdir-enhanced": { @@ -1874,20 +1525,20 @@ } }, "@sentry/browser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.6.1.tgz", - "integrity": "sha512-EtuI3YUIXfSzbF2Z7c5UXcdkcjZj83Y0vj73kMXBxxYsmDkyU+KtJFFvonSUrLILMqYBNZXTgCrfglLfFkl7kA==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.6.2.tgz", + "integrity": "sha512-Nm/W/5ra6+OQCWQkdd86vHjcYUjHCVqCzQyPasd6HE7SNlWe5euGVfFfDuUFsiDrMAG5uKfGYw5u/AqoweiQkQ==", "requires": { - "@sentry/core": "5.6.1", + "@sentry/core": "5.6.2", "@sentry/types": "5.6.1", "@sentry/utils": "5.6.1", "tslib": "^1.9.3" } }, "@sentry/core": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.6.1.tgz", - "integrity": "sha512-gK8XfkJIZLsBEQehkr2q2fdHI50B3yo4RXiixSZiNBVIzQ+1z3JcMssDzGwhbY81NHUzHZ7of3oQ4Ab4OGRI/g==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.6.2.tgz", + "integrity": "sha512-grbjvNmyxP5WSPR6UobN2q+Nss7Hvz+BClBT8QTr7VTEG5q89TwNddn6Ej3bGkaUVbct/GpVlI3XflWYDsnU6Q==", "requires": { "@sentry/hub": "5.6.1", "@sentry/minimal": "5.6.1", @@ -1917,11 +1568,11 @@ } }, "@sentry/node": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.6.1.tgz", - "integrity": "sha512-8gNjFRrTOG3vu2RpWZnUSxNx6Ui2Dthq2VHeVImt7PYtVaSddlYZvt0xl8L/fJC/TvFZEPfX0d8Is9v8yvsgRQ==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.6.2.tgz", + "integrity": "sha512-A9CELco6SjF4zt8iS1pO3KdUVI2WVhtTGhSH6X04OVf2en1fimPR+Vs8YVY/04udwd7o+3mI6byT+rS9+/Qzow==", "requires": { - "@sentry/core": "5.6.1", + "@sentry/core": "5.6.2", "@sentry/hub": "5.6.1", "@sentry/types": "5.6.1", "@sentry/utils": "5.6.1", @@ -2205,30 +1856,6 @@ "webpack-hot-middleware": "^2.25.0" }, "dependencies": { - "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -2239,9 +1866,9 @@ } }, "cacache": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", - "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -2323,21 +1950,6 @@ "universalify": "^0.1.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==", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2450,9 +2062,9 @@ } }, "terser": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.4.tgz", - "integrity": "sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.0.tgz", + "integrity": "sha512-6lPt7lZdZ/13icQJp8XasFOwZjFJkxFFIb/N1fhYEQNoNI3Ilo3KABZ9OocZvZoB39r6SiIk/0+v/bt8nZoSeA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -2580,16 +2192,6 @@ "webpack-sources": "^1.4.1" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -2691,34 +2293,10 @@ "webpack": "^4.33.0" }, "dependencies": { - "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, "cacache": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", - "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -2790,9 +2368,9 @@ "dev": true }, "terser": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.4.tgz", - "integrity": "sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.0.tgz", + "integrity": "sha512-6lPt7lZdZ/13icQJp8XasFOwZjFJkxFFIb/N1fhYEQNoNI3Ilo3KABZ9OocZvZoB39r6SiIk/0+v/bt8nZoSeA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -2815,18 +2393,6 @@ "terser": "^4.1.2", "webpack-sources": "^1.4.0", "worker-farm": "^1.7.0" - }, - "dependencies": { - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } } }, "webpack": { @@ -2858,18 +2424,6 @@ "terser-webpack-plugin": "^1.4.1", "watchpack": "^1.6.0", "webpack-sources": "^1.4.1" - }, - "dependencies": { - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } } }, "y18n": { @@ -3004,9 +2558,9 @@ "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.0.tgz", - "integrity": "sha512-3eI17Pb3jlg3oqV4Tie069n1SelYKBUpI90txDcnBWk4EGFW+YQGyQjy6iuJAReH0RnpUJ9jUExrt/xniGvhqw==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.1.tgz", + "integrity": "sha512-p6z6JJroP989jHWcuraeWpzdejehTmLUpyC9smhTBWyPN0VVGe2phbYxpPTV7Vh8XzmFrcG55idrnfWn/2oQEw==" }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "4.2.0", @@ -3024,65 +2578,64 @@ "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" }, "@svgr/babel-preset": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.0.tgz", - "integrity": "sha512-Lgy1RJiZumGtv6yJroOxzFuL64kG/eIcivJQ7y9ljVWL+0QXvFz4ix1xMrmjMD+rpJWwj50ayCIcFelevG/XXg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.1.tgz", + "integrity": "sha512-rPFKLmyhlh6oeBv3j2vEAj2nd2QbWqpoJLKzBLjwQVt+d9aeXajVaPNEqrES2spjXKR4OxfgSs7U0NtmAEkr0Q==", "requires": { "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.3.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.3.1", "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", "@svgr/babel-plugin-transform-svg-component": "^4.2.0" } }, "@svgr/core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.0.tgz", - "integrity": "sha512-Ycu1qrF5opBgKXI0eQg3ROzupalCZnSDETKCK/3MKN4/9IEmt3jPX/bbBjftklnRW+qqsCEpO0y/X9BTRw2WBg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.2.tgz", + "integrity": "sha512-N+tP5CLFd1hP9RpO83QJPZY3NL8AtrdqNbuhRgBkjE/49RnMrrRsFm1wY8pueUfAGvzn6tSXUq29o6ah8RuR5w==", "requires": { - "@svgr/plugin-jsx": "^4.3.0", + "@svgr/plugin-jsx": "^4.3.2", "camelcase": "^5.3.1", - "cosmiconfig": "^5.2.0" + "cosmiconfig": "^5.2.1" } }, "@svgr/hast-util-to-babel-ast": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.2.0.tgz", - "integrity": "sha512-IvAeb7gqrGB5TH9EGyBsPrMRH/QCzIuAkLySKvH2TLfLb2uqk98qtJamordRQTpHH3e6TORfBXoTo7L7Opo/Ow==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", + "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", "requires": { - "@babel/types": "^7.4.0" + "@babel/types": "^7.4.4" } }, "@svgr/plugin-jsx": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.0.tgz", - "integrity": "sha512-0ab8zJdSOTqPfjZtl89cjq2IOmXXUYV3Fs7grLT9ur1Al3+x3DSp2+/obrYKUGbQUnLq96RMjSZ7Icd+13vwlQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.2.tgz", + "integrity": "sha512-+1GW32RvmNmCsOkMoclA/TppNjHPLMnNZG3/Ecscxawp051XJ2MkO09Hn11VcotdC2EPrDfT8pELGRo+kbZ1Eg==", "requires": { - "@babel/core": "^7.4.3", - "@svgr/babel-preset": "^4.3.0", - "@svgr/hast-util-to-babel-ast": "^4.2.0", - "rehype-parse": "^6.0.0", - "unified": "^7.1.0", - "vfile": "^4.0.0" + "@babel/core": "^7.4.5", + "@svgr/babel-preset": "^4.3.1", + "@svgr/hast-util-to-babel-ast": "^4.3.2", + "svg-parser": "^2.0.0" } }, "@svgr/plugin-svgo": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.2.0.tgz", - "integrity": "sha512-zUEKgkT172YzHh3mb2B2q92xCnOAMVjRx+o0waZ1U50XqKLrVQ/8dDqTAtnmapdLsGurv8PSwenjLCUpj6hcvw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", + "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", "requires": { - "cosmiconfig": "^5.2.0", + "cosmiconfig": "^5.2.1", "merge-deep": "^3.0.2", - "svgo": "^1.2.1" + "svgo": "^1.2.2" } }, "@svgr/webpack": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.1.0.tgz", "integrity": "sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==", + "dev": true, "requires": { "@babel/core": "^7.1.6", "@babel/plugin-transform-react-constant-elements": "^7.0.0", @@ -3095,33 +2648,23 @@ } }, "@testing-library/dom": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.0.0.tgz", - "integrity": "sha512-B5XTz3uMsbqbdR9CZlnwpZjTE3fCWuqRkz/zvDc2Ej/vuHmTM0Ur2v0XPwr7usWfGIBsahEK5HL1E91+4IFiBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.1.0.tgz", + "integrity": "sha512-qivqFvnbVIH3DyArFofEU/jlOhkGIioIemOy9A9M/NQTpPyDDQmtVkAfoB18RKN581f0s/RJMRBbq9WfMIhFTw==", "dev": true, "requires": { "@babel/runtime": "^7.5.5", "@sheerun/mutationobserver-shim": "^0.3.2", + "@types/testing-library__dom": "^6.0.0", "aria-query": "3.0.0", "pretty-format": "^24.8.0", "wait-for-expect": "^1.3.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - } } }, "@testing-library/jest-dom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.0.0.tgz", - "integrity": "sha512-YQA/LnRRfqHV5YRauawOGgMDgq43XfyqCz3whmxIPyrfvTdjLCNyY/BseGaa48y54yb3oiRo/NZT0oXNMQdkTA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.1.0.tgz", + "integrity": "sha512-cKAONDmJKGJ2DSu6R/+lgA8i8uyZIx4CaOiiK0yMjp+2UecH6kfjunJiy5hfExKMtR74eyzFriqO1w9aTC8VyQ==", "dev": true, "requires": { "@babel/runtime": "^7.5.1", @@ -3135,15 +2678,6 @@ "redent": "^3.0.0" }, "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -3201,25 +2735,14 @@ } }, "@testing-library/react": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.1.1.tgz", - "integrity": "sha512-mjX9l/onA5eVe8/4/obe7ZAw05U8s+kinXVglySVOMJo/oCSam9D9Dcg+aYVGsuBEuYV2W9m2LTP4KbNZh8BOw==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.1.3.tgz", + "integrity": "sha512-qFVo6TsEbpEFpOmKjIxMHDujOKVdvVpcYFcUfJeWBqMO8eja5pN9SZnt6W6AzW3a1MRvRfw3X0Fhx3eXnBJxjA==", "dev": true, "requires": { "@babel/runtime": "^7.5.5", "@testing-library/dom": "^6.0.0", - "@types/react-dom": "*" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - } + "@types/testing-library__react": "^9.1.0" } }, "@types/babel__core": { @@ -3265,10 +2788,15 @@ "integrity": "sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A==", "dev": true }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + }, "@types/history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.2.tgz", - "integrity": "sha512-ui3WwXmjTaY73fOQ3/m3nnajU/Orhi6cEu5rzX+BrAAJxa3eITXZ5ch9suPqtM03OWhAHhPSyBGCN4UKoxO20Q==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.3.tgz", + "integrity": "sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw==", "dev": true }, "@types/hoist-non-react-statics": { @@ -3304,9 +2832,9 @@ } }, "@types/jest": { - "version": "24.0.17", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.17.tgz", - "integrity": "sha512-1cy3xkOAfSYn78dsBWy4M3h/QF/HeWPchNFDjysVtp3GHeTdSmtluNnELfCmfNRRHo0OWEcpf+NsEJQvwQfdqQ==", + "version": "24.0.18", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.18.tgz", + "integrity": "sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==", "dev": true, "requires": { "@types/jest-diff": "*" @@ -3327,14 +2855,6 @@ "@types/node": "*", "@types/tough-cookie": "*", "parse5": "^4.0.0" - }, - "dependencies": { - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - } } }, "@types/json-schema": { @@ -3351,9 +2871,15 @@ } }, "@types/node": { - "version": "12.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz", - "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==" + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz", + "integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==" + }, + "@types/pretty-format": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-format/-/pretty-format-20.0.1.tgz", + "integrity": "sha512-Oh7wnvVUCtVIWnCHQWe9qDZKn0fGyk5AMq99jXml0x39K59P+z9qe31CNRtop9TceCpS7NmoK+J9eGeCnyFgnw==", + "dev": true }, "@types/prop-types": { "version": "15.7.1", @@ -3375,18 +2901,18 @@ } }, "@types/react-dom": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.5.tgz", - "integrity": "sha512-idCEjROZ2cqh29+trmTmZhsBAUNQuYrF92JHKzZ5+aiFM1mlSk3bb23CK7HhYuOY75Apgap5y2jTyHzaM2AJGA==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-OL2lk7LYGjxn4b0efW3Pvf2KBVP0y1v3wip1Bp7nA79NkOpElH98q3WdCEdDj93b2b0zaeBG9DvriuKjIK5xDA==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-redux": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.1.tgz", - "integrity": "sha512-owqNahzE8en/jR4NtrUJDJya3tKru7CIEGSRL/pVS84LtSCdSoT7qZTkrbBd3S4Lp11sAp+7LsvxIeONJVKMnw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.2.tgz", + "integrity": "sha512-Iim6UCtD0mZX9U3jBuT6ZObBZ8UlakoOgefiRgi5wakfbNnXd3TUwwUMgi3Ijc0fxsPLZ5ULoz0oDy15YIaLmQ==", "dev": true, "requires": { "@types/hoist-non-react-statics": "^3.3.0", @@ -3406,9 +2932,9 @@ } }, "@types/react-router-dom": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.4.tgz", - "integrity": "sha512-xrwaWHpnxKk/TTRe7pmoGy3E4SyF/ojFqNfFJacw7OLdfLXRvGfk4r/XePVaZNVfeJzL8fcnNilPN7xOdJ/vGw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.5.tgz", + "integrity": "sha512-eFajSUASYbPHg2BDM1G8Btx+YqGgvROPIg6sBhl3O4kbDdYXdFdfrgQFf/pcBuQVObjfT9AL/dd15jilR5DIEA==", "dev": true, "requires": { "@types/history": "*", @@ -3417,9 +2943,9 @@ } }, "@types/react-stripe-elements": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/react-stripe-elements/-/react-stripe-elements-1.3.1.tgz", - "integrity": "sha512-itZD2GZxJsZt9bl6JrNq7/tfZo5F5JfI16Hrp7hzyDbujcdJMgTtKTxoBys9jrh6PQ/K3FzMYtv9GeV0nsa/yQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/react-stripe-elements/-/react-stripe-elements-1.3.2.tgz", + "integrity": "sha512-b+H5HARxeVM4Qw07QKYaOwcNCwFEPpo0q7FDMmh7Wfh5ESSFD+SqFe0/AMuWi1mPIx2py8L+jIR/5C30jvDWDg==", "requires": { "@types/react": "*", "@types/stripe-v3": "*" @@ -3472,133 +2998,90 @@ "resolved": "https://registry.npmjs.org/@types/stripe-v3/-/stripe-v3-3.1.6.tgz", "integrity": "sha512-HdTIKbdFMYhJ9PA1UtWjm620JXNchjCTuya8TAKeVdCbmlumd86RldbgMHGxptLPy++xsB7lEDrhK/dO7JP9Pg==" }, + "@types/testing-library__dom": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.0.1.tgz", + "integrity": "sha512-j8wJmvER0VVrmDtab80SwA4MgF0vzFm6hSyk3j2bw9PXyJxgMjFDF8ihJDzo2gUOMP+HpEquHRZcUXOhLmYexA==", + "dev": true, + "requires": { + "@types/pretty-format": "*" + } + }, + "@types/testing-library__react": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.1.tgz", + "integrity": "sha512-8/toTJaIlS3BC7JrK2ElTnbjH8tmFP7atdL2ZsIa1JDmH9RKSm/7Wp5oMDJzXoWr988Mv7ym/XZ8LRglyoGCGw==", + "dev": true, + "requires": { + "@types/react-dom": "*", + "@types/testing-library__dom": "*" + } + }, "@types/tough-cookie": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", "dev": true }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - }, - "@types/vfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", - "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", - "requires": { - "@types/node": "*", - "@types/unist": "*", - "@types/vfile-message": "*" - } - }, - "@types/vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", - "requires": { - "@types/node": "*", - "@types/unist": "*" - } - }, "@types/webpack-env": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.13.9.tgz", - "integrity": "sha512-p8zp5xqkly3g4cCmo2mKOHI9+Z/kObmDj0BmjbDDJQlgDTiEGTbm17MEwTAusV6XceCy+bNw9q/ZHXHyKo3zkg==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.14.0.tgz", + "integrity": "sha512-Fv+0gYJzE/czLoRKq+gnXWr4yBpPM3tO3C8pDLFwqVKlMICQUq5OsxwwFZYDaVr7+L6mgNDp16iOcJHEz3J5RQ==", "dev": true }, "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==" + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", + "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==" }, "@typescript-eslint/eslint-plugin": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.9.0.tgz", - "integrity": "sha512-FOgfBorxjlBGpDIw+0LaZIXRX6GEEUfzj8LXwaQIUCp+gDOvkI+1WgugJ7SmWiISqK9Vj5r8S7NDKO/LB+6X9A==", - "dev": true, + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz", + "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==", "requires": { - "@typescript-eslint/experimental-utils": "1.9.0", - "@typescript-eslint/parser": "1.9.0", + "@typescript-eslint/experimental-utils": "1.13.0", "eslint-utils": "^1.3.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^2.0.1", - "requireindex": "^1.2.0", "tsutils": "^3.7.0" } }, "@typescript-eslint/experimental-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.9.0.tgz", - "integrity": "sha512-1s2dY9XxBwtS9IlSnRIlzqILPyeMly5tz1bfAmQ84Ul687xBBve5YsH5A5EKeIcGurYYqY2w6RkHETXIwnwV0A==", - "dev": true, + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", "requires": { - "@typescript-eslint/typescript-estree": "1.9.0" - }, - "dependencies": { - "@typescript-eslint/typescript-estree": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.9.0.tgz", - "integrity": "sha512-7Eg0TEQpCkTsEwsl1lIzd6i7L3pJLQFWesV08dS87bNz0NeSjbL78gNAP1xCKaCejkds4PhpLnZkaAjx9SU8OA==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" } }, "@typescript-eslint/parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.9.0.tgz", - "integrity": "sha512-CWgC1XrQ34H/+LwAU7vY5xteZDkNqeAkeidEpJnJgkKu0yqQ3ZhQ7S+dI6MX4vmmM1TKRbOrKuXc6W0fIHhdbA==", - "dev": true, + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz", + "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==", "requires": { - "@typescript-eslint/experimental-utils": "1.9.0", - "@typescript-eslint/typescript-estree": "1.9.0", - "eslint-scope": "^4.0.0", + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "1.13.0", + "@typescript-eslint/typescript-estree": "1.13.0", "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "@typescript-eslint/typescript-estree": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.9.0.tgz", - "integrity": "sha512-7Eg0TEQpCkTsEwsl1lIzd6i7L3pJLQFWesV08dS87bNz0NeSjbL78gNAP1xCKaCejkds4PhpLnZkaAjx9SU8OA==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } } }, "@typescript-eslint/typescript-estree": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.6.0.tgz", - "integrity": "sha512-A4CanUwfaG4oXobD5y7EXbsOHjCwn8tj1RDd820etpPAjH+Icjc2K9e/DQM1Hac5zH2BSy+u6bjvvF2wwREvYA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", "requires": { "lodash.unescape": "4.0.1", "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - } } }, "@webassemblyjs/ast": { @@ -3789,38 +3272,73 @@ } }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==" - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz", + "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==", "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" } }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==" }, "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" }, "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", + "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==" + }, + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } }, "agent-base": { "version": "4.3.0", @@ -3856,9 +3374,9 @@ } }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -3872,9 +3390,9 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" }, "alphanum-sort": { "version": "1.0.2", @@ -3935,9 +3453,12 @@ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" }, "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==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + } }, "ansi-html": { "version": "0.0.7", @@ -3997,9 +3518,9 @@ } }, "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", + "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==", "dev": true }, "argparse": { @@ -4019,6 +3540,11 @@ "commander": "^2.11.0" } }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -4213,9 +3739,9 @@ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "asynckit": { "version": "0.4.0", @@ -4237,17 +3763,17 @@ } }, "autoprefixer": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.0.tgz", - "integrity": "sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", "requires": { - "browserslist": "^4.6.1", - "caniuse-lite": "^1.0.30000971", + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.16", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" }, "dependencies": { "ansi-styles": { @@ -4268,6 +3794,11 @@ "supports-color": "^5.3.0" } }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -4314,9 +3845,10 @@ } }, "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz", + "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.0.0", @@ -4330,6 +3862,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -4388,15 +3921,15 @@ "dev": true }, "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", + "babel-preset-jest": "^24.9.0", "chalk": "^2.4.2", "slash": "^2.0.0" }, @@ -4430,14 +3963,23 @@ } }, "babel-loader": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", - "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "dev": true, "requires": { "find-cache-dir": "^2.0.0", "loader-utils": "^1.0.2", "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "babel-plugin-add-react-displayname": { @@ -4447,17 +3989,17 @@ "dev": true }, "babel-plugin-dynamic-import-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", - "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "requires": { "object.assign": "^4.1.0" } }, "babel-plugin-emotion": { - "version": "10.0.15", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.15.tgz", - "integrity": "sha512-E3W68Zk8EcKpRUDW2tsFKi4gsavapMRjfr2/KKgG3l7l2zZpiKk0BxB59Ul9C0w0ekv6my/ylGOk2WroaqKXPw==", + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.16.tgz", + "integrity": "sha512-a01Xrourr/VRpw4KicX9drDwfVGHmw8HmlQk++N4fv0j73EfHKWC1Ah4Vu8s1cTGVvTiwum+UhVpJenV8j03FQ==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -4502,17 +4044,17 @@ } }, "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", "requires": { "@types/babel__traverse": "^7.0.6" } }, "babel-plugin-macros": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz", - "integrity": "sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", + "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", "requires": { "@babel/runtime": "^7.4.2", "cosmiconfig": "^5.2.0", @@ -4535,15 +4077,15 @@ } }, "babel-plugin-minify-dead-code-elimination": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.0.tgz", - "integrity": "sha512-XQteBGXlgEoAKc/BhO6oafUdT4LBa7ARi55mxoyhLHNuA+RlzRmeMAfc31pb/UqU01wBzRc36YqHQzopnkd/6Q==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz", + "integrity": "sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg==", "dev": true, "requires": { "babel-helper-evaluate-path": "^0.5.0", "babel-helper-mark-eval-scopes": "^0.4.3", "babel-helper-remove-or-void": "^0.4.3", - "lodash.some": "^4.6.0" + "lodash": "^4.17.11" } }, "babel-plugin-minify-flip-comparisons": { @@ -4556,11 +4098,12 @@ } }, "babel-plugin-minify-guarded-expressions": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.3.tgz", - "integrity": "sha1-zHCbRFP9IbHzAod0RMifiEJ845c=", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", "dev": true, "requires": { + "babel-helper-evaluate-path": "^0.5.0", "babel-helper-flip-expressions": "^0.4.3" } }, @@ -4592,11 +4135,12 @@ "dev": true }, "babel-plugin-minify-simplify": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.0.tgz", - "integrity": "sha512-TM01J/YcKZ8XIQd1Z3nF2AdWHoDsarjtZ5fWPDksYZNsoOjQ2UO2EWm824Ym6sp127m44gPlLFiO5KFxU8pA5Q==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", "dev": true, "requires": { + "babel-helper-evaluate-path": "^0.5.0", "babel-helper-flip-expressions": "^0.4.3", "babel-helper-is-nodes-equiv": "^0.0.1", "babel-helper-to-multiple-sequence-expressions": "^0.5.0" @@ -4612,9 +4156,9 @@ } }, "babel-plugin-named-asset-import": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.2.tgz", - "integrity": "sha512-CxwvxrZ9OirpXQ201Ec57OmGhmI8/ui/GwTDy0hSp6CmRvgRC0pSair6Z04Ck+JStA0sMPZzSJ3uE4n17EXpPQ==" + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.3.tgz", + "integrity": "sha512-1XDRysF4894BUdMChT+2HHbtJYiO7zx5Be7U6bT8dISy7OdyETMGIAQBMPQCsY1YRf0xcubwnKKaDr5bk15JTA==" }, "babel-plugin-react-docgen": { "version": "3.1.0", @@ -4725,30 +4269,30 @@ "dev": true }, "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" + "babel-plugin-jest-hoist": "^24.9.0" } }, "babel-preset-minify": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.0.tgz", - "integrity": "sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz", + "integrity": "sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg==", "dev": true, "requires": { "babel-plugin-minify-builtins": "^0.5.0", "babel-plugin-minify-constant-folding": "^0.5.0", - "babel-plugin-minify-dead-code-elimination": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.1", "babel-plugin-minify-flip-comparisons": "^0.4.3", - "babel-plugin-minify-guarded-expressions": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.4", "babel-plugin-minify-infinity": "^0.4.3", "babel-plugin-minify-mangle-names": "^0.5.0", "babel-plugin-minify-numeric-literals": "^0.4.3", "babel-plugin-minify-replace": "^0.5.0", - "babel-plugin-minify-simplify": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.1", "babel-plugin-minify-type-constructors": "^0.4.3", "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", "babel-plugin-transform-member-expression-literals": "^6.9.4", @@ -4761,171 +4305,30 @@ "babel-plugin-transform-remove-undefined": "^0.5.0", "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", "babel-plugin-transform-undefined-to-void": "^6.9.4", - "lodash.isplainobject": "^4.0.6" + "lodash": "^4.17.11" } }, "babel-preset-react-app": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.0.tgz", - "integrity": "sha512-YVsDA8HpAKklhFLJtl9+AgaxrDaor8gGvDFlsg1ByOS0IPGUovumdv4/gJiAnLcDmZmKlH6+9sVOz4NVW7emAg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.1.tgz", + "integrity": "sha512-v7MeY+QxdBhM9oU5uOQCIHLsErYkEbbjctXsb10II+KAnttbe0rvprvP785dRxfa9dI4ZbsGXsRU07Qdi5BtOw==", "requires": { - "@babel/core": "7.4.3", - "@babel/plugin-proposal-class-properties": "7.4.0", - "@babel/plugin-proposal-decorators": "7.4.0", - "@babel/plugin-proposal-object-rest-spread": "7.4.3", + "@babel/core": "7.5.5", + "@babel/plugin-proposal-class-properties": "7.5.5", + "@babel/plugin-proposal-decorators": "7.4.4", + "@babel/plugin-proposal-object-rest-spread": "7.5.5", "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-transform-classes": "7.4.3", - "@babel/plugin-transform-destructuring": "7.4.3", - "@babel/plugin-transform-flow-strip-types": "7.4.0", - "@babel/plugin-transform-react-constant-elements": "7.2.0", + "@babel/plugin-transform-destructuring": "7.5.0", + "@babel/plugin-transform-flow-strip-types": "7.4.4", "@babel/plugin-transform-react-display-name": "7.2.0", - "@babel/plugin-transform-runtime": "7.4.3", - "@babel/preset-env": "7.4.3", + "@babel/plugin-transform-runtime": "7.5.5", + "@babel/preset-env": "7.5.5", "@babel/preset-react": "7.0.0", "@babel/preset-typescript": "7.3.3", - "@babel/runtime": "7.4.3", - "babel-plugin-dynamic-import-node": "2.2.0", - "babel-plugin-macros": "2.5.1", + "@babel/runtime": "7.5.5", + "babel-plugin-dynamic-import-node": "2.3.0", + "babel-plugin-macros": "2.6.1", "babel-plugin-transform-react-remove-prop-types": "0.4.24" - }, - "dependencies": { - "@babel/core": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.3.tgz", - "integrity": "sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", - "@babel/helpers": "^7.4.3", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz", - "integrity": "sha512-xC//6DNSSHVjq8O2ge0dyYlhshsH4T7XdCVoxbi5HzLYWfsC5ooFlJjrXk8RcAT+hjHAK9UjBXdylzSoDK3t4g==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.3.tgz", - "integrity": "sha512-PUaIKyFUDtG6jF5DUJOfkBdwAS/kFFV3XFk7Nn0a6vR7ZT8jYw5cGtIlat77wcnd0C6ViGqo/wyNf4ZHytF/nQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.0", - "@babel/helper-split-export-declaration": "^7.4.0", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.3.tgz", - "integrity": "sha512-rVTLLZpydDFDyN4qnXdzwoVpk1oaXHIvPEOkOLyr88o7oHxVc/LyrnDx+amuBWGOwUb7D1s/uLsKBNTx08htZg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/preset-env": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.3.tgz", - "integrity": "sha512-FYbZdV12yHdJU5Z70cEg0f6lvtpZ8jFSDakTm7WXeJbLXh4R0ztGEu/SW7G1nJ2ZvKwDhz8YrbA84eYyprmGqw==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.0", - "@babel/plugin-transform-classes": "^7.4.3", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.3", - "@babel/plugin-transform-dotall-regex": "^7.4.3", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.3", - "@babel/plugin-transform-function-name": "^7.4.3", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.3", - "@babel/plugin-transform-modules-systemjs": "^7.4.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", - "@babel/plugin-transform-new-target": "^7.4.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.3", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.3", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.3", - "@babel/types": "^7.4.0", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "requires": { - "minimist": "^1.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "babel-runtime": { @@ -4954,11 +4357,6 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, - "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -5020,9 +4418,9 @@ } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "basic-auth": { "version": "2.0.1", @@ -5206,6 +4604,12 @@ "requires": { "has-flag": "^3.0.0" } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true } } }, @@ -5343,21 +4747,6 @@ "caniuse-lite": "^1.0.30000984", "electron-to-chromium": "^1.3.191", "node-releases": "^1.1.25" - }, - "dependencies": { - "electron-to-chromium": { - "version": "1.3.230", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.230.tgz", - "integrity": "sha512-r0RljY5DZi9RX4v8mjHxJkDWnQe+nsrkGlHtrDF2uvZcvAkw+iglvlQi1794gZhwRtJoDOomMJlDHL2LfXSCZA==" - }, - "node-releases": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.27.tgz", - "integrity": "sha512-9iXUqHKSGo6ph/tdXVbHFbhRVQln4ZDTIBJCzsa90HimnBYc5jw8RWYt4wBYFHehGyC3koIz5O4mb2fHrbPOuA==", - "requires": { - "semver": "^5.3.0" - } - } } }, "bs-logger": { @@ -5413,15 +4802,16 @@ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "cacache": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", - "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", "glob": "^7.1.4", "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", @@ -5581,11 +4971,6 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "ccount": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz", - "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==" - }, "chai": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", @@ -5648,9 +5033,9 @@ "dev": true }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -5683,7 +5068,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5720,7 +5106,8 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -5729,7 +5116,8 @@ }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5832,7 +5220,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5842,6 +5231,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5861,11 +5251,13 @@ }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5882,6 +5274,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5954,7 +5347,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5964,6 +5358,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6039,7 +5434,8 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6069,6 +5465,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6086,6 +5483,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6124,11 +5522,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.3", - "bundled": true + "bundled": true, + "optional": true } } }, @@ -6140,9 +5540,9 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" }, "chrome-trace-event": { "version": "1.0.2", @@ -6220,11 +5620,11 @@ "dev": true }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-table3": { @@ -6416,7 +5816,8 @@ "comma-separated-tokens": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz", - "integrity": "sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ==" + "integrity": "sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ==", + "dev": true }, "commander": { "version": "2.20.0", @@ -6438,6 +5839,14 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "requires": { + "arity-n": "^1.0.4" + } + }, "compressible": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", @@ -6497,9 +5906,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.7.tgz", - "integrity": "sha512-cgHI1azax5ATrZ8rJ+ODDML9Fvu67PimB6aNxBrc/QwSaDaM9eTfIEUHx3bBLJJ82ioSb+/5zfsMCCEJax3ByQ==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", + "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==" }, "connect-history-api-fallback": { "version": "1.6.0", @@ -6565,16 +5974,6 @@ "moment": "2.24.0", "validator": "10.11.0", "yargs-parser": "13.0.0" - }, - "dependencies": { - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "requires": { - "minimist": "^1.2.0" - } - } } }, "cookie": { @@ -6615,31 +6014,31 @@ } }, "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", + "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==" }, "core-js-compat": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz", - "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", "requires": { - "browserslist": "^4.6.2", - "core-js-pure": "3.1.4", - "semver": "^6.1.1" + "browserslist": "^4.6.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "core-js-pure": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz", - "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.2.1.tgz", + "integrity": "sha512-+qpvnYrsi/JDeQTArB7NnNc2VoMYLE1YSkziCDHgjexC2KH7OFiGhLUd3urxfyWmNjSwSW7NYXPWHMhuIJx9Ow==", + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -6656,34 +6055,10 @@ "webpack": "^4.38.0" }, "dependencies": { - "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, "cacache": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", - "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -6725,9 +6100,9 @@ "dev": true }, "terser": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.4.tgz", - "integrity": "sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.0.tgz", + "integrity": "sha512-6lPt7lZdZ/13icQJp8XasFOwZjFJkxFFIb/N1fhYEQNoNI3Ilo3KABZ9OocZvZoB39r6SiIk/0+v/bt8nZoSeA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -6783,16 +6158,6 @@ "webpack-sources": "^1.4.1" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -6932,7 +6297,6 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, "requires": { "inherits": "^2.0.3", "source-map": "^0.6.1", @@ -6943,8 +6307,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -7046,11 +6409,11 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", "requires": { - "mdn-data": "~1.1.0", + "mdn-data": "2.0.4", "source-map": "^0.5.3" }, "dependencies": { @@ -7066,11 +6429,6 @@ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=" - }, "css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", @@ -7180,6 +6538,11 @@ "source-map": "^0.5.3" } }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -7188,22 +6551,22 @@ } }, "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==" + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "cssstyle": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", - "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "requires": { "cssom": "0.3.x" } }, "csstype": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.5.tgz", - "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==" + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz", + "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==" }, "currently-unhandled": { "version": "0.4.1", @@ -7222,7 +6585,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, "requires": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -7509,10 +6871,16 @@ } } }, + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" }, "diffie-hellman": { "version": "5.0.3", @@ -7598,12 +6966,19 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } } }, "dom-walk": { @@ -7725,14 +7100,14 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.166", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.166.tgz", - "integrity": "sha512-7XwtJz81H/PBnkmQ/07oVPOGTkBZs6ibZN8OqXNUrxjRPzR0Xj+MFcMmRZEXGilEg1Pm+97V8BZVI63qnBX1hQ==" + "version": "1.3.237", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.237.tgz", + "integrity": "sha512-SPAFjDr/7iiVK2kgTluwxela6eaWjjFkS9rO/iYpB/KGXgccUom5YC7OIf19c8m8GGptWxLU0Em8xM64A/N7Fg==" }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -7797,9 +7172,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" }, "errno": { "version": "0.1.7", @@ -7844,7 +7219,6 @@ "version": "0.10.50", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "dev": true, "requires": { "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.1", @@ -7866,7 +7240,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -7923,7 +7296,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, "requires": { "d": "1", "es5-ext": "~0.10.14" @@ -7952,9 +7324,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", "requires": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -7989,52 +7361,58 @@ } }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.2.1.tgz", + "integrity": "sha512-ES7BzEzr0Q6m5TK9i+/iTpKjclXitOdDK4vT07OqbkBT2/VcN/gO9EL1C4HlK3TAOXYv2ItcmbVR9jO1MR0fJg==", "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.0", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", + "glob-parent": "^5.0.0", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", "progress": "^2.0.0", "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { + "acorn": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==" + }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -8064,6 +7442,13 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "debug": { @@ -8074,23 +7459,60 @@ "ms": "^2.1.1" } }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.0.tgz", + "integrity": "sha512-boA7CHRLlVWUSg3iL5Kmlt/xT3Q+sXnKoRYYzj1YeM10A76TEJBbotV5pKbnK42hEUIr121zTv+QLRM5LsCPXQ==", + "requires": { + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "requires": { + "is-glob": "^4.0.1" + } + }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -8102,9 +7524,9 @@ } }, "eslint-config-prettier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", - "integrity": "sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.1.0.tgz", + "integrity": "sha512-k9fny9sPjIBQ2ftFTesJV21Rg4R/7a7t7LCtZVrYQiHEp8Nnuk3EGaDmsKSAnsPj0BYcgB2zxzHa2NTkIxcOLg==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -8119,11 +7541,11 @@ } }, "eslint-config-react-app": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-4.0.1.tgz", - "integrity": "sha512-ZsaoXUIGsK8FCi/x4lT2bZR5mMkL/Kgj+Lnw690rbvvUr/uiwgFiD8FcfAhkCycm7Xte6O5lYz4EqMx2vX7jgw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.0.1.tgz", + "integrity": "sha512-GYXP3F/0PSHlYfGHhahqnJze8rYKxzXgrzXVqRRd4rDO40ga4NA3aHM7/HKbwceDN0/C1Ij3BoAWFawJgRbXEw==", "requires": { - "confusing-browser-globals": "^1.0.7" + "confusing-browser-globals": "^1.0.8" } }, "eslint-import-resolver-node": { @@ -8151,9 +7573,9 @@ } }, "eslint-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", - "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", "requires": { "loader-fs-cache": "^1.0.0", "loader-utils": "^1.0.2", @@ -8238,11 +7660,11 @@ } }, "eslint-plugin-flowtype": { - "version": "2.50.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz", - "integrity": "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", + "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.15" } }, "eslint-plugin-fxa": { @@ -8252,20 +7674,21 @@ "dev": true }, "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", "requires": { + "array-includes": "^3.0.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", + "eslint-module-utils": "^2.4.0", "has": "^1.0.3", - "lodash": "^4.17.11", "minimatch": "^3.0.4", + "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "resolve": "^1.11.0" }, "dependencies": { "debug": { @@ -8379,44 +7802,19 @@ } }, "eslint-plugin-jest": { - "version": "22.15.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.15.1.tgz", - "integrity": "sha512-CWq/RR/3tLaKFB+FZcCJwU9hH5q/bKeO3rFP8G07+q7hcDCFNqpvdphVbEbGE6o6qo1UbciEev4ejUWv7brUhw==", + "version": "22.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.15.2.tgz", + "integrity": "sha512-p4NME9TgXIt+KgpxcXyNBvO30ZKxwFAO1dJZBc2OGfDnXVEtPwEyNs95GSr6RIE3xLHdjd8ngDdE2icRRXrbxg==", "requires": { "@typescript-eslint/experimental-utils": "^1.13.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", - "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-scope": "^4.0.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", - "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - } } }, "eslint-plugin-jsx-a11y": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", - "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", "requires": { + "@babel/runtime": "^7.4.5", "aria-query": "^3.0.0", "array-includes": "^3.0.3", "ast-types-flow": "^0.0.7", @@ -8424,14 +7822,13 @@ "damerau-levenshtein": "^1.0.4", "emoji-regex": "^7.0.2", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" + "jsx-ast-utils": "^2.2.1" } }, "eslint-plugin-react": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz", "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==", - "dev": true, "requires": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", @@ -8448,7 +7845,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -8456,9 +7852,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.6.1.tgz", - "integrity": "sha512-wHhmGJyVuijnYIJXZJHDUF2WM+rJYTjulUTqF9k61d3BTk8etydz+M4dXUVH7M76ZRS85rqBTCx0Es/lLsrjnA==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" }, "eslint-plugin-sorting": { "version": "0.4.1", @@ -8476,25 +7872,18 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==" - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -8517,14 +7906,14 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -8658,16 +8047,16 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" }, "dependencies": { "ansi-styles": { @@ -8778,9 +8167,9 @@ } }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "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", @@ -8952,9 +8341,9 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", "requires": { "escape-string-regexp": "^1.0.5" } @@ -9099,12 +8488,22 @@ "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" }, "flatten": { "version": "1.0.2", @@ -9173,9 +8572,9 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "fork-ts-checker-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-gqWAEMLlae/oeVnN6RWCAhesOJMswAN1MaKNqhhjXHV5O0/rTUjWI4UbgQHdlrVbCnb+xLotXmJbBlC66QmpFw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==", "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", @@ -9205,6 +8604,11 @@ "supports-color": "^5.3.0" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -9299,9 +8703,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.6.tgz", - "integrity": "sha512-vfmKZp3XPM36DNF0qhW+Cdxk7xm7gTEHY1clv1Xq1arwRQuKZgAhw+NZNWbJBtuaNxzNXwhfdPYRrvIbjfS33A==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", "optional": true }, "fstream": { @@ -9589,9 +8993,9 @@ } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, "growly": { "version": "1.3.0", @@ -9604,18 +9008,18 @@ "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "requires": { "duplexer": "^0.1.1", - "pify": "^3.0.0" + "pify": "^4.0.1" }, "dependencies": { "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" } } }, @@ -9711,11 +9115,6 @@ "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==" - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -9752,27 +9151,17 @@ "is-stream": "^1.0.1" } }, - "hast-util-from-parse5": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.1.tgz", - "integrity": "sha512-UfPzdl6fbxGAxqGYNThRUhRlDYY7sXu6XU9nQeX4fFZtV+IHbyEJtd+DUuwOqNV4z3K05E/1rIkoVr/JHmeWWA==", - "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } - }, "hast-util-parse-selector": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz", - "integrity": "sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw==" + "integrity": "sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw==", + "dev": true }, "hastscript": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.0.tgz", "integrity": "sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ==", + "dev": true, "requires": { "comma-separated-tokens": "^1.0.0", "hast-util-parse-selector": "^2.2.0", @@ -9883,9 +9272,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" }, "hpack.js": { "version": "2.1.6", @@ -10014,6 +9403,11 @@ "readable-stream": "^3.1.1" }, "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, "readable-stream": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", @@ -10221,8 +9615,7 @@ "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "inflight": { "version": "1.0.6", @@ -10244,29 +9637,29 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.4.0.tgz", - "integrity": "sha512-O3qJQ+fU/AI1K2y5/RjqefMEQTdJQf6sPTvyRA1bx6D634ADxcu97u6YOUciIeU2OWIuvpUsQs6Wx3Fdi3eFaQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", "requires": { - "ansi-escapes": "^3.2.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", "rxjs": "^6.4.0", - "string-width": "^2.1.0", + "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -10286,28 +9679,24 @@ "supports-color": "^5.3.0" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "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=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "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" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.0" } }, "strip-ansi": { @@ -10316,13 +9705,6 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - } } }, "supports-color": { @@ -10434,9 +9816,9 @@ } }, "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.1.4", @@ -10628,7 +10010,8 @@ "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=" + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true }, "is-plain-object": { "version": "2.0.4", @@ -10668,9 +10051,9 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, "is-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", - "integrity": "sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, "is-stream": { "version": "1.1.0", @@ -10785,9 +10168,9 @@ }, "dependencies": { "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -10847,18 +10230,18 @@ } }, "jest": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.7.1.tgz", - "integrity": "sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", + "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.7.1" + "jest-cli": "^24.8.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -10879,13 +10262,13 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "find-up": { @@ -10896,10 +10279,10 @@ "locate-path": "^3.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -10907,58 +10290,46 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "prompts": "^2.0.1", "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" } }, - "lcid": { + "require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "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": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "supports-color": { @@ -10974,29 +10345,42 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "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": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -11005,36 +10389,36 @@ } }, "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", + "pretty-format": "^24.9.0", "realpath-native": "^1.1.0" }, "dependencies": { @@ -11057,11 +10441,11 @@ } }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -11079,14 +10463,14 @@ } }, "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", "requires": { "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" }, "dependencies": { "ansi-styles": { @@ -11118,23 +10502,23 @@ } }, "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" }, "dependencies": { "ansi-styles": { @@ -11166,61 +10550,16 @@ } }, "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", "jsdom": "^11.5.1" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - } } }, "jest-environment-jsdom-fourteen": { @@ -11266,6 +10605,11 @@ "xml-name-validator": "^3.0.0" } }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -11296,36 +10640,36 @@ } }, "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" } }, "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" }, "jest-haste-map": { - "version": "24.8.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz", - "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", "micromatch": "^3.1.10", "sane": "^4.0.3", "walker": "^1.0.7" @@ -11348,7 +10692,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -11385,7 +10730,8 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -11394,7 +10740,8 @@ }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -11497,7 +10844,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -11507,6 +10855,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -11526,11 +10875,13 @@ }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -11547,6 +10898,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -11619,7 +10971,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -11629,6 +10982,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -11704,7 +11058,8 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -11734,6 +11089,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -11751,6 +11107,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -11789,36 +11146,38 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.3", - "bundled": true + "bundled": true, + "optional": true } } } } }, "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.8.0", + "expect": "^24.9.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", "throat": "^4.0.0" }, "dependencies": { @@ -11851,22 +11210,23 @@ } }, "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", "requires": { - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" }, "dependencies": { "ansi-styles": { @@ -11898,13 +11258,13 @@ } }, "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", @@ -11941,11 +11301,11 @@ } }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^24.9.0" } }, "jest-pnp-resolver": { @@ -11954,16 +11314,16 @@ "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==" }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" }, "jest-resolve": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.7.1.tgz", - "integrity": "sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw==", + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.8.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -11999,36 +11359,36 @@ } }, "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" + "jest-snapshot": "^24.9.0" } }, "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", + "jest-config": "^24.9.0", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" @@ -12053,11 +11413,11 @@ } }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -12075,39 +11435,39 @@ } }, "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", + "@jest/environment": "^24.9.0", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -12128,13 +11488,13 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "find-up": { @@ -12145,10 +11505,10 @@ "locate-path": "^3.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -12156,50 +11516,38 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", "realpath-native": "^1.1.0" } }, - "lcid": { + "require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "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": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { @@ -12220,29 +11568,42 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "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": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -12251,27 +11612,28 @@ } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==" + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" }, "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" + "pretty-format": "^24.9.0", + "semver": "^6.2.0" }, "dependencies": { "ansi-styles": { @@ -12293,17 +11655,22 @@ } }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", "realpath-native": "^1.1.0" } }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -12315,15 +11682,15 @@ } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -12372,16 +11739,16 @@ } }, "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" }, "dependencies": { "ansi-styles": { @@ -12413,9 +11780,9 @@ } }, "jest-watch-typeahead": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.0.tgz", - "integrity": "sha512-+uOtlppt9ysST6k6ZTqsPI0WNz2HLa8bowiZylZoQCQaAVn7XsVmHhZREkz73FhKelrFrpne4hQQjdq42nFEmA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.1.tgz", + "integrity": "sha512-cDIko96c4Yqg/7mfye1eEYZ6Pvugo9mnOOhGQod3Es7/KptNv1b+9gFVaotzdqNqTlwbkA80BnWHtzV4dc+trA==", "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.4.1", @@ -12425,6 +11792,11 @@ "strip-ansi": "^5.0.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==" + }, "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", @@ -12467,19 +11839,24 @@ } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.8.0", + "jest-util": "^24.9.0", "string-length": "^2.0.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==" + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -12509,11 +11886,11 @@ } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "requires": { - "merge-stream": "^1.0.1", + "merge-stream": "^2.0.0", "supports-color": "^6.1.0" }, "dependencies": { @@ -12566,6 +11943,46 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -12610,9 +12027,9 @@ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", "requires": { "minimist": "^1.2.0" } @@ -12648,11 +12065,12 @@ } }, "jsx-ast-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", - "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz", + "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==", "requires": { - "array-includes": "^3.0.3" + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" } }, "just-curry-it": { @@ -12671,13 +12089,6 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" - }, - "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==" - } } }, "klaw": { @@ -12727,25 +12138,10 @@ "dotenv-expand": "^5.1.0" }, "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "core-js": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", - "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==", - "dev": true - }, "dotenv": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", - "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", + "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==", "dev": true }, "dotenv-expand": { @@ -12770,9 +12166,9 @@ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.3.0", @@ -12837,6 +12233,16 @@ "big.js": "^5.2.2", "emojis-list": "^2.0.0", "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { @@ -12893,12 +12299,6 @@ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -12910,22 +12310,11 @@ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", - "dev": true - }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=" - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -13023,6 +12412,11 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -13098,9 +12492,9 @@ } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, "media-typer": { "version": "0.3.0", @@ -13194,17 +12588,14 @@ } }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "requires": { - "readable-stream": "^2.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==" }, "methods": { "version": "1.1.2", @@ -13474,9 +12865,9 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { "version": "2.14.0", @@ -13531,8 +12922,7 @@ "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, "nice-try": { "version": "1.0.5", @@ -13678,9 +13068,9 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "requires": { "growly": "^1.3.0", "is-wsl": "^1.1.0", @@ -13690,9 +13080,9 @@ } }, "node-releases": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.23.tgz", - "integrity": "sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==", + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.28.tgz", + "integrity": "sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g==", "requires": { "semver": "^5.3.0" } @@ -13983,34 +13373,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, "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=" }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -14055,30 +13422,31 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "yargs-parser": "^13.1.1" + }, + "dependencies": { + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } } } @@ -14123,6 +13491,11 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -14146,7 +13519,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.12.0", @@ -14220,33 +13592,25 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "requires": { - "mimic-fn": "^1.0.0" - }, - "dependencies": { - "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-fn": "^2.1.0" } }, "open": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, "requires": { "is-wsl": "^1.1.0" } }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "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" } @@ -14268,11 +13632,11 @@ } }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", "requires": { - "cssnano": "^4.1.0", + "cssnano": "^4.1.10", "last-call-webpack-plugin": "^3.0.0" } }, @@ -14360,9 +13724,9 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "requires": { "p-try": "^2.0.0" } @@ -14475,9 +13839,9 @@ } }, "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, "parseurl": { "version": "1.3.3", @@ -14685,11 +14049,11 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "pnp-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==", "requires": { - "ts-pnp": "^1.0.0" + "ts-pnp": "^1.1.2" } }, "polished": { @@ -14708,9 +14072,9 @@ "dev": true }, "portfinder": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz", - "integrity": "sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==", + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", + "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==", "requires": { "async": "^1.5.2", "debug": "^2.2.0", @@ -15272,9 +14636,9 @@ } }, "postcss-nesting": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.0.tgz", - "integrity": "sha512-WSsbVd5Ampi3Y0nk/SKr5+K34n52PqMqEfswu6RtU4r7wA8vSD+gM8/D9qq4aJkHImwn1+9iEFTbjoWsQeqtaQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", "requires": { "postcss": "^7.0.2" } @@ -15416,26 +14780,26 @@ } }, "postcss-preset-env": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.6.0.tgz", - "integrity": "sha512-I3zAiycfqXpPIFD6HXhLfWXIewAWO8emOKz+QSsxaUZb9Dp8HbF5kUf+4Wy/AxR33o+LRoO8blEWCHth0ZsCLA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", "requires": { - "autoprefixer": "^9.4.9", - "browserslist": "^4.4.2", - "caniuse-lite": "^1.0.30000939", + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", "css-blank-pseudo": "^0.1.4", "css-has-pseudo": "^0.10.0", "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.3.0", - "postcss": "^7.0.14", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", "postcss-attribute-case-insensitive": "^4.0.1", "postcss-color-functional-notation": "^2.0.1", "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.2", + "postcss-color-hex-alpha": "^5.0.3", "postcss-color-mod-function": "^3.0.3", "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.7", - "postcss-custom-properties": "^8.0.9", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", "postcss-custom-selectors": "^5.1.2", "postcss-dir-pseudo-class": "^5.0.0", "postcss-double-position-gradients": "^1.0.0", @@ -15619,11 +14983,11 @@ } }, "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" @@ -15680,9 +15044,9 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", - "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", + "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", "requires": { "asap": "~2.0.6" } @@ -15715,12 +15079,12 @@ } }, "prompts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", - "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" } }, "prop-types": { @@ -15740,9 +15104,10 @@ "dev": true }, "property-information": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.1.0.tgz", - "integrity": "sha512-tODH6R3+SwTkAQckSp2S9xyYX8dEKYkeXw+4TmJzTxnNzd6mQPu1OD4f9zPrvw/Rm4wpPgI+Zp63mNSGNzUgHg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.2.2.tgz", + "integrity": "sha512-N2moasZmjn2mjVGIWpaqz5qnz6QyeQSGgGvMtl81gA9cPTWa6wpesRSe/quNnOjUHpvSH1oZx0pdz0EEckLFnA==", + "dev": true, "requires": { "xtend": "^4.0.1" } @@ -15767,9 +15132,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", - "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" }, "public-encrypt": { "version": "4.0.3", @@ -15928,15 +15293,15 @@ } }, "react-app-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.1.tgz", - "integrity": "sha512-LbVpT1NdzTdDDs7xEZdebjDrqsvKi5UyVKUQqtTYYNyC1JJYVAwNQWe4ybWvoT2V2WW9PGVO2u5Y6aVj4ER/Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.2.tgz", + "integrity": "sha512-yZcpLnIr0FOIzrOOz9JC37NWAWEuCaQWmYn9EWjEzlCW4cOmA5MkT5L3iP8QuUeFnoqVCTJgjIWYbXEJgNXhGA==", "requires": { - "core-js": "3.0.1", + "core-js": "3.1.4", "object-assign": "4.1.1", - "promise": "8.0.2", + "promise": "8.0.3", "raf": "3.4.1", - "regenerator-runtime": "0.13.2", + "regenerator-runtime": "0.13.3", "whatwg-fetch": "3.0.0" } }, @@ -15950,30 +15315,30 @@ } }, "react-dev-utils": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.1.tgz", - "integrity": "sha512-pnaeMo/Pxel8aZpxk1WwxT3uXxM3tEwYvsjCYn5R7gNxjhN1auowdcLDzFB8kr7rafAj2rxmvfic/fbac5CzwQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.3.tgz", + "integrity": "sha512-OyInhcwsvycQ3Zr2pQN+HV4gtRXrky5mJXIy4HnqrWa+mI624xfYfqGuC9dYbxp4Qq3YZzP8GSGQjv0AgNU15w==", "requires": { - "@babel/code-frame": "7.0.0", - "address": "1.0.3", - "browserslist": "4.5.4", + "@babel/code-frame": "7.5.5", + "address": "1.1.0", + "browserslist": "4.6.6", "chalk": "2.4.2", "cross-spawn": "6.0.5", "detect-port-alt": "1.1.6", "escape-string-regexp": "1.0.5", "filesize": "3.6.1", "find-up": "3.0.0", - "fork-ts-checker-webpack-plugin": "1.1.1", + "fork-ts-checker-webpack-plugin": "1.5.0", "global-modules": "2.0.0", "globby": "8.0.2", - "gzip-size": "5.0.0", + "gzip-size": "5.1.1", "immer": "1.10.0", - "inquirer": "6.2.2", - "is-root": "2.0.0", + "inquirer": "6.5.0", + "is-root": "2.1.0", "loader-utils": "1.2.3", - "opn": "5.4.0", + "open": "^6.3.0", "pkg-up": "2.0.0", - "react-error-overlay": "^5.1.6", + "react-error-overlay": "^6.0.1", "recursive-readdir": "2.2.2", "shell-quote": "1.6.1", "sockjs-client": "1.3.0", @@ -15981,6 +15346,11 @@ "text-table": "0.2.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==" + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -15994,16 +15364,6 @@ "color-convert": "^1.9.0" } }, - "browserslist": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.4.tgz", - "integrity": "sha512-rAjx494LMjqKnMPhFkuLmLp8JWEX0o8ADTGeAbOqaF+XCvYLreZrG5uVjnPBlAQ8REZK4pzXGvp0bWgrFtKaag==", - "requires": { - "caniuse-lite": "^1.0.30000955", - "electron-to-chromium": "^1.3.122", - "node-releases": "^1.1.13" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -16014,6 +15374,14 @@ "supports-color": "^5.3.0" } }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -16026,6 +15394,14 @@ "which": "^1.2.9" } }, + "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" + } + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -16035,9 +15411,9 @@ } }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -16045,12 +15421,12 @@ "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.11", + "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.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" } }, @@ -16059,6 +15435,33 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, + "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==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "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" + } + }, + "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" + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -16156,23 +15559,12 @@ "object-assign": "^4.1.1", "prop-types": "^15.6.2", "scheduler": "^0.15.0" - }, - "dependencies": { - "scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", - "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } } }, "react-draggable": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.3.1.tgz", - "integrity": "sha512-JeKyuO5f1jnVwMHdNkFpmaQoYn/6CyIiCDGSKbTgRisEtekjeUCeKmlNaNTLlpKOEu0SaKcBA1HlypSqWN/8Tw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.3.2.tgz", + "integrity": "sha512-oaz8a6enjbPtx5qb0oDWxtDNuybOylvto1QLydsXgKmwT7e3GXC2eMVDwEMIUYJIFqVG72XpOv673UuuAq6LhA==", "dev": true, "requires": { "classnames": "^2.2.5", @@ -16180,9 +15572,9 @@ } }, "react-error-overlay": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz", - "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.1.tgz", + "integrity": "sha512-V9yoTr6MeZXPPd4nV/05eCBvGH9cGzc52FN8fs0O0TVQ3HYYf1n7EgZVtHbldRq5xU9zEzoXIITjYNIfxDDdUw==" }, "react-fast-compare": { "version": "2.0.4", @@ -16253,9 +15645,9 @@ } }, "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" }, "react-lifecycles-compat": { "version": "3.0.4", @@ -16381,176 +15773,163 @@ } }, "react-scripts": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz", - "integrity": "sha512-LKEjBhVpEB+c312NeJhzF+NATxF7JkHNr5GhtwMeRS1cMeLElMeIu8Ye7WGHtDP7iz7ra4ryy48Zpo6G/cwWUw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.1.1.tgz", + "integrity": "sha512-dbjTG9vJC61OI62hIswQYg5xHvwlxDTH6QXz6ICEuA5AqkFQWk1LKl76sk8fVL2WsyumbBc4FErALwKcEV2vNA==", "requires": { - "@babel/core": "7.4.3", - "@svgr/webpack": "4.1.0", - "@typescript-eslint/eslint-plugin": "1.6.0", - "@typescript-eslint/parser": "1.6.0", - "babel-eslint": "10.0.1", + "@babel/core": "7.5.5", + "@svgr/webpack": "4.3.2", + "@typescript-eslint/eslint-plugin": "1.13.0", + "@typescript-eslint/parser": "1.13.0", + "babel-eslint": "10.0.2", "babel-jest": "^24.8.0", - "babel-loader": "8.0.5", - "babel-plugin-named-asset-import": "^0.3.2", - "babel-preset-react-app": "^9.0.0", + "babel-loader": "8.0.6", + "babel-plugin-named-asset-import": "^0.3.3", + "babel-preset-react-app": "^9.0.1", "camelcase": "^5.2.0", "case-sensitive-paths-webpack-plugin": "2.2.0", "css-loader": "2.1.1", "dotenv": "6.2.0", "dotenv-expand": "4.2.0", - "eslint": "^5.16.0", - "eslint-config-react-app": "^4.0.1", - "eslint-loader": "2.1.2", - "eslint-plugin-flowtype": "2.50.1", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-jsx-a11y": "6.2.1", - "eslint-plugin-react": "7.12.4", - "eslint-plugin-react-hooks": "^1.5.0", + "eslint": "^6.1.0", + "eslint-config-react-app": "^5.0.1", + "eslint-loader": "2.2.1", + "eslint-plugin-flowtype": "3.13.0", + "eslint-plugin-import": "2.18.2", + "eslint-plugin-jsx-a11y": "6.2.3", + "eslint-plugin-react": "7.14.3", + "eslint-plugin-react-hooks": "^1.6.1", "file-loader": "3.0.1", "fs-extra": "7.0.1", - "fsevents": "2.0.6", + "fsevents": "2.0.7", "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", "is-wsl": "^1.1.0", - "jest": "24.7.1", + "jest": "24.8.0", "jest-environment-jsdom-fourteen": "0.1.0", - "jest-resolve": "24.7.1", - "jest-watch-typeahead": "0.3.0", + "jest-resolve": "24.8.0", + "jest-watch-typeahead": "0.3.1", "mini-css-extract-plugin": "0.5.0", - "optimize-css-assets-webpack-plugin": "5.0.1", - "pnp-webpack-plugin": "1.2.1", + "optimize-css-assets-webpack-plugin": "5.0.3", + "pnp-webpack-plugin": "1.5.0", "postcss-flexbugs-fixes": "4.1.0", "postcss-loader": "3.0.0", "postcss-normalize": "7.0.1", - "postcss-preset-env": "6.6.0", + "postcss-preset-env": "6.7.0", "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.1", - "react-dev-utils": "^9.0.1", - "resolve": "1.10.0", - "sass-loader": "7.1.0", - "semver": "6.0.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.2.3", + "react-app-polyfill": "^1.0.2", + "react-dev-utils": "^9.0.3", + "resolve": "1.12.0", + "resolve-url-loader": "3.1.0", + "sass-loader": "7.2.0", + "semver": "6.3.0", + "style-loader": "1.0.0", + "terser-webpack-plugin": "1.4.1", "ts-pnp": "1.1.2", - "url-loader": "1.1.2", - "webpack": "4.29.6", + "url-loader": "2.1.0", + "webpack": "4.39.1", "webpack-dev-server": "3.2.1", "webpack-manifest-plugin": "2.0.4", - "workbox-webpack-plugin": "4.2.0" + "workbox-webpack-plugin": "4.3.1" }, "dependencies": { - "@babel/core": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.3.tgz", - "integrity": "sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA==", + "@svgr/webpack": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.2.tgz", + "integrity": "sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==", + "requires": { + "@babel/core": "^7.4.5", + "@babel/plugin-transform-react-constant-elements": "^7.0.0", + "@babel/preset-env": "^7.4.5", + "@babel/preset-react": "^7.0.0", + "@svgr/core": "^4.3.2", + "@svgr/plugin-jsx": "^4.3.2", + "@svgr/plugin-svgo": "^4.3.1", + "loader-utils": "^1.2.3" + } + }, + "babel-eslint": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz", + "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==", "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", - "@babel/helpers": "^7.4.3", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.6.0.tgz", - "integrity": "sha512-U224c29E2lo861TQZs6GSmyC0OYeRNg6bE9UVIiFBxN2MlA0nq2dCrgIVyyRbC05UOcrgf2Wk/CF2gGOPQKUSQ==", - "requires": { - "@typescript-eslint/parser": "1.6.0", - "@typescript-eslint/typescript-estree": "1.6.0", - "requireindex": "^1.2.0", - "tsutils": "^3.7.0" - } - }, - "@typescript-eslint/parser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.6.0.tgz", - "integrity": "sha512-VB9xmSbfafI+/kI4gUK3PfrkGmrJQfh0N4EScT1gZXSZyUxpsBirPL99EWZg9MmPG0pzq/gMtgkk7/rAHj4aQw==", - "requires": { - "@typescript-eslint/typescript-estree": "1.6.0", - "eslint-scope": "^4.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "requires": { - "ms": "^2.1.1" + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" } }, - "doctrine": { + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "schema-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.1.0.tgz", + "integrity": "sha512-g6SViEZAfGNrToD82ZPUjq52KUPDYc+fN5+g6Euo5mLokl/9Yx14z0Cu4RR1m55HtBXejO0sBt+qw79axN+Fiw==", "requires": { - "esutils": "^2.0.2" - } - }, - "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "object.fromentries": "^2.0.0", - "prop-types": "^15.6.2", - "resolve": "^1.9.0" - } - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "requires": { - "minimist": "^1.2.0" - } - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "requires": { - "path-parse": "^1.0.6" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "style-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", + "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + } + }, + "url-loader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.1.0.tgz", + "integrity": "sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==", + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.0.0" + } } } }, "react-stripe-elements": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-stripe-elements/-/react-stripe-elements-4.0.0.tgz", - "integrity": "sha512-/GK7oMJSp06gNww/3vp7BHie3VavjaCa2m7IQ+it7QLcPTGaG+sTVFz2tRz9OGKlcM2HqqTiutrNwYfRRK+YIw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-stripe-elements/-/react-stripe-elements-4.0.1.tgz", + "integrity": "sha512-S+O2+hphs6ASz29l85nj6mpS7YWTa3NMwZTonIMt4+8xrfS/jET+0Xd3cNdJoGkHiCtLEId6UimqivONK+liOw==", "requires": { "prop-types": "^15.5.10" } @@ -16577,13 +15956,6 @@ "prop-types": "^15.6.2", "react-is": "^16.9.0", "scheduler": "^0.15.0" - }, - "dependencies": { - "react-is": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", - "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" - } } }, "react-textarea-autosize": { @@ -16812,14 +16184,14 @@ } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", "requires": { "private": "^0.1.6" } @@ -16833,10 +16205,15 @@ "safe-regex": "^1.1.0" } }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" + }, "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==" + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", + "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==" }, "regexp.prototype.flags": { "version": "1.2.0", @@ -16853,12 +16230,12 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", + "regenerate-unicode-properties": "^8.1.0", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", @@ -16885,16 +16262,6 @@ } } }, - "rehype-parse": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.0.tgz", - "integrity": "sha512-V2OjMD0xcSt39G4uRdMTqDXXm6HwkUbLMDayYKA/d037j8/OtVSQ+tqKwYWOuyBeoCs/3clXRe30VUjeMDTBSA==", - "requires": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.1" - } - }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -16965,11 +16332,6 @@ "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -17065,11 +16427,6 @@ } } }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==" - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -17082,9 +16439,9 @@ "dev": true }, "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "requires": { "path-parse": "^1.0.6" } @@ -17119,12 +16476,87 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "resolve-url-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz", + "integrity": "sha512-2QcrA+2QgVqsMJ1Hn5NnJXIGCX1clQ1F6QJTqOeiaDw9ACo1G2k+8/shq3mtqne03HOFyskAClqfxKyFBriXZg==", "requires": { - "onetime": "^2.0.0", + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.0.0", + "compose-function": "3.0.3", + "convert-source-map": "1.6.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.14", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -17133,6 +16565,27 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -17144,9 +16597,9 @@ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -17505,6 +16958,15 @@ "onetime": "^1.0.0" } }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "run-async": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", @@ -17594,35 +17056,25 @@ } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.2.0.tgz", + "integrity": "sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA==", "requires": { - "clone-deep": "^2.0.1", + "clone-deep": "^4.0.1", "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", "neo-async": "^2.5.0", - "pify": "^3.0.0", + "pify": "^4.0.1", "semver": "^5.5.0" }, "dependencies": { "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" - } - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "requires": { - "for-in": "^1.0.1" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "kind-of": { @@ -17631,25 +17083,16 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "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": "^6.0.2" } } } @@ -17660,11 +17103,11 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "saxes": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.10.tgz", - "integrity": "sha512-G/mVZCCGhJqgS+I7wT5gBHyTNXLe2SQcu2qmhwl1OKcSHyJEXKQY2CLT+qWIxV+m6uiGMLfSOJGLQQHhklIeEQ==", + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", "requires": { - "xmlchars": "^1.3.1" + "xmlchars": "^2.1.1" } }, "scheduler": { @@ -17716,9 +17159,9 @@ } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "send": { "version": "0.17.1", @@ -17763,9 +17206,9 @@ } }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.8.0.tgz", + "integrity": "sha512-3tHgtF4OzDmeKYj6V9nSyceRS0UJ3C7VqyD2Yj28vC/z2j6jG5FmFGahOKMD9CrglxTm3tETr87jEypaYV8DUg==" }, "serve-favicon": { "version": "2.5.0", @@ -17906,11 +17349,6 @@ "mixin-object": "^2.0.1" }, "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": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", @@ -18023,9 +17461,9 @@ } }, "sisteransi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.2.tgz", - "integrity": "sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==" }, "slash": { "version": "2.0.0", @@ -18234,9 +17672,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -18257,7 +17695,8 @@ "space-separated-tokens": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz", - "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA==" + "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA==", + "dev": true }, "spawn-wrap": { "version": "1.4.2", @@ -18296,14 +17735,14 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -18445,9 +17884,9 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, "store2": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.8.0.tgz", - "integrity": "sha512-FBJpcOEZQLZBIGL4Yp7W5RgZ0ejaURmcfUjIpyOb64BpI8z/iJXw7zd/NTBeq304dVMxuWVDZEUUCGn7llaVrA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.9.0.tgz", + "integrity": "sha512-JmK+95jLX2zAP75DVAJ1HAziQ6f+f495h4P9ez2qbmxazN6fE7doWlitqx9hj2YohH3kOi6RVksJe1UH0sJfPw==", "dev": true }, "stream-browserify": { @@ -18621,15 +18060,11 @@ "get-stdin": "^4.0.1" } }, - "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=" - }, "style-loader": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "dev": true, "requires": { "loader-utils": "^1.1.0", "schema-utils": "^1.0.0" @@ -18662,17 +18097,21 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, + "svg-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz", + "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==" + }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", + "css-tree": "1.0.0-alpha.33", "csso": "^3.5.1", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", @@ -18736,12 +18175,12 @@ } }, "table": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz", - "integrity": "sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", + "ajv": "^6.10.2", + "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, @@ -18850,13 +18289,13 @@ } }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.0.tgz", + "integrity": "sha512-6lPt7lZdZ/13icQJp8XasFOwZjFJkxFFIb/N1fhYEQNoNI3Ilo3KABZ9OocZvZoB39r6SiIk/0+v/bt8nZoSeA==", "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -18867,18 +18306,19 @@ } }, "terser-webpack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", - "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "serialize-javascript": "^1.7.0", "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" }, "dependencies": { "source-map": { @@ -19001,9 +18441,9 @@ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "requires": { "setimmediate": "^1.0.4" } @@ -19021,14 +18461,14 @@ "optional": true }, "tiny-invariant": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz", - "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", + "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" }, "tiny-warning": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", - "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, "tmp": { "version": "0.0.33", @@ -19155,11 +18595,6 @@ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, - "trough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==" - }, "true-case-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", @@ -19191,15 +18626,6 @@ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "yargs-parser": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", @@ -19222,14 +18648,6 @@ "make-error": "^1.1.1", "source-map-support": "^0.5.6", "yn": "^3.0.0" - }, - "dependencies": { - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - } } }, "ts-pnp": { @@ -19243,9 +18661,9 @@ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tsutils": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.14.0.tgz", - "integrity": "sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", "requires": { "tslib": "^1.8.1" } @@ -19269,10 +18687,9 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", - "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", + "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==" }, "type-check": { "version": "0.3.2", @@ -19289,10 +18706,9 @@ "dev": true }, "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" }, "type-is": { "version": "1.6.18", @@ -19320,9 +18736,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", - "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", "dev": true }, "ua-parser-js": { @@ -19379,34 +18795,6 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" }, - "unified": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", - "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", - "requires": { - "@types/unist": "^2.0.0", - "@types/vfile": "^3.0.0", - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^3.0.0", - "x-is-string": "^0.1.0" - }, - "dependencies": { - "vfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", - "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", - "requires": { - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - } - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -19444,11 +18832,6 @@ "imurmurhash": "^0.1.4" } }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==" - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -19543,6 +18926,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "dev": true, "requires": { "loader-utils": "^1.1.0", "mime": "^2.0.3", @@ -19552,7 +18936,8 @@ "mime": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true } } }, @@ -19617,9 +19002,14 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -19660,45 +19050,6 @@ "extsprintf": "^1.2.0" } }, - "vfile": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.1.tgz", - "integrity": "sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz", - "integrity": "sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile-message": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.1.tgz", - "integrity": "sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw==", - "requires": { - "@types/unist": "^2.0.2", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - }, "vm-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", @@ -19763,45 +19114,39 @@ "minimalistic-assert": "^1.0.0" } }, - "web-namespaces": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.3.tgz", - "integrity": "sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA==" - }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.29.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", - "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.1.tgz", + "integrity": "sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ==", "requires": { "@webassemblyjs/ast": "1.8.5", "@webassemblyjs/helper-module-context": "1.8.5", "@webassemblyjs/wasm-edit": "1.8.5", "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" } }, "webpack-dev-middleware": { @@ -19941,6 +19286,11 @@ "mem": "^4.0.0" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -20034,9 +19384,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -20304,13 +19654,13 @@ "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" }, "workbox-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-YZsiA+y/ns/GdWRaBsfYv8dln1ebWtGnJcTOg1ppO0pO1tScAHX0yGtHIjndxz3L/UUhE8b0NQE9KeLNwJwA5A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", + "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", "requires": { "@babel/runtime": "^7.0.0", "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.2.0" + "workbox-build": "^4.3.1" } }, "workbox-window": { @@ -20377,11 +19727,6 @@ "async-limiter": "~1.0.0" } }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=" - }, "x-xss-protection": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.2.0.tgz", @@ -20393,9 +19738,9 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, "xmlchars": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz", - "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz", + "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==" }, "xregexp": { "version": "4.0.0", @@ -20403,9 +19748,9 @@ "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "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", @@ -20462,9 +19807,9 @@ } }, "yn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", - "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true } } diff --git a/packages/fxa-payments-server/package.json b/packages/fxa-payments-server/package.json index 74903f05a3..90aa2eb092 100644 --- a/packages/fxa-payments-server/package.json +++ b/packages/fxa-payments-server/package.json @@ -61,11 +61,11 @@ "@typescript-eslint/eslint-plugin": "^1.9.0", "@typescript-eslint/parser": "^1.9.0", "audit-filter": "^0.5.0", - "babel-eslint": "^10.0.1", - "babel-loader": "^8.0.5", + "babel-eslint": "^10.0.2", + "babel-loader": "^8.0.6", "browserslist": "^4.6.6", "caniuse-lite": "^1.0.30000989", - "eslint": "^5.16.0", + "eslint": "^6.2.1", "eslint-config-prettier": "^6.0.0", "eslint-plugin-fxa": "^1.0.0", "eslint-plugin-react": "^7.14.3", @@ -103,7 +103,7 @@ "react-dom": "^16.9.0", "react-redux": "^7.1.0-alpha.4", "react-router-dom": "^5.0.0", - "react-scripts": "3.0.1", + "react-scripts": "^3.1.1", "react-stripe-elements": "^4.0.0", "react-test-renderer": "^16.9.0", "redux": "^4.0.4", diff --git a/packages/fxa-payments-server/server/lib/server.js b/packages/fxa-payments-server/server/lib/server.js index 50dab53991..9253f1a7e3 100644 --- a/packages/fxa-payments-server/server/lib/server.js +++ b/packages/fxa-payments-server/server/lib/server.js @@ -175,12 +175,12 @@ module.exports = () => { CLIENT_CONFIG, {} ); - for (const route of INDEX_ROUTES) { + INDEX_ROUTES.forEach(route => { // FIXME: should set ETag, Not-Modified: app.get(route, (req, res) => { res.send(renderedStaticHtml); }); - } + }); app.use( serveStatic(STATIC_DIRECTORY, { maxAge: config.get('staticResources.maxAge'), From 675c089247cbb93228651a424ea662fc3f246143 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Thu, 22 Aug 2019 14:59:33 -0700 Subject: [PATCH 15/25] chore(deps): remove newrelic step one --- packages/fxa-auth-db-mysql/lib/newrelic.js | 6 - .../fxa-auth-db-mysql/npm-shrinkwrap.json | 125 +----------------- packages/fxa-auth-db-mysql/package.json | 1 - packages/fxa-auth-server/lib/newrelic.js | 6 - packages/fxa-auth-server/npm-shrinkwrap.json | 107 +-------------- packages/fxa-auth-server/package.json | 1 - packages/fxa-customs-server/lib/newrelic.js | 6 - .../fxa-customs-server/npm-shrinkwrap.json | 58 +------- packages/fxa-customs-server/package.json | 1 - packages/fxa-profile-server/lib/newrelic.js | 6 - .../fxa-profile-server/npm-shrinkwrap.json | 124 +---------------- packages/fxa-profile-server/package.json | 1 - 12 files changed, 20 insertions(+), 422 deletions(-) diff --git a/packages/fxa-auth-db-mysql/lib/newrelic.js b/packages/fxa-auth-db-mysql/lib/newrelic.js index 1636d55eb3..f68223b38e 100644 --- a/packages/fxa-auth-db-mysql/lib/newrelic.js +++ b/packages/fxa-auth-db-mysql/lib/newrelic.js @@ -7,12 +7,6 @@ // NEW_RELIC_LICENSE_KEY. function maybeRequireNewRelic() { - var env = process.env; - - if (env.NEW_RELIC_APP_NAME && env.NEW_RELIC_LICENSE_KEY) { - return require('newrelic'); - } - return null; } diff --git a/packages/fxa-auth-db-mysql/npm-shrinkwrap.json b/packages/fxa-auth-db-mysql/npm-shrinkwrap.json index 6ba0e78a43..92e739a782 100644 --- a/packages/fxa-auth-db-mysql/npm-shrinkwrap.json +++ b/packages/fxa-auth-db-mysql/npm-shrinkwrap.json @@ -159,37 +159,6 @@ "to-fast-properties": "^2.0.0" } }, - "@newrelic/koa": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@newrelic/koa/-/koa-1.0.8.tgz", - "integrity": "sha512-kY//FlLQkGdUIKEeGJlyY3dJRU63EG77YIa48ACMGZxQbWRd3WZMikyft33f8XScTq6WpCDo9xa0viNo8zeYkg==", - "requires": { - "methods": "^1.1.2" - } - }, - "@newrelic/native-metrics": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@newrelic/native-metrics/-/native-metrics-3.1.2.tgz", - "integrity": "sha512-JjUmPrp2LEEkhVtelICme5p7sHHpfpu2Wjk5/L1D3Zvt01v4mCsrL2XaIMBmHgg3T2ZbqMiqWZCn2LtGZ6nklA==", - "optional": true, - "requires": { - "nan": "^2.10.0", - "semver": "^5.5.1" - } - }, - "@newrelic/superagent": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@newrelic/superagent/-/superagent-1.0.3.tgz", - "integrity": "sha512-lJbsqKa79qPLbHZsbiRaXl1jfzaXAN7zqqnLRqBY+zI/O5zcfyNngTmdi+9y+qIUq7xHYNaLsAxCXerrsoINKg==", - "requires": { - "methods": "^1.1.2" - } - }, - "@tyriar/fibonacci-heap": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.9.tgz", - "integrity": "sha512-bYuSNomfn4hu2tPiDN+JZtnzCpSpbJ/PNeulmocDy3xN2X5OkJL65zo6rPZp65cPPhLF9vfT/dgE+RtFRCSxOA==" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -208,14 +177,6 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, - "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" - } - }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", @@ -406,11 +367,6 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, "bunyan": { "version": "1.8.12", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", @@ -565,17 +521,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "convict": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/convict/-/convict-4.4.0.tgz", @@ -678,14 +623,6 @@ "resolved": "https://registry.npmjs.org/dbug/-/dbug-0.4.2.tgz", "integrity": "sha1-MrSzEF6IYQQ6b5rHVdgOVC02WzE=" }, - "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" - } - }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -818,19 +755,6 @@ "is-symbol": "^1.0.2" } }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" - }, - "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" - } - }, "escape-regexp-component": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz", @@ -1648,15 +1572,6 @@ "sshpk": "^1.7.0" } }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -2124,11 +2039,6 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -2268,7 +2178,8 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true }, "multimatch": { "version": "2.1.0", @@ -2352,33 +2263,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "newrelic": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/newrelic/-/newrelic-4.10.0.tgz", - "integrity": "sha512-ih/tdO5jMcZ7oYiL7xtES4RBPp7EzBg5Shj8VWBmJ2lOxjWNFwTJ7EqQ7Q0U1xK1zkuZ6Gp5q37Un/N3+QAMFw==", - "requires": { - "@newrelic/koa": "^1.0.0", - "@newrelic/native-metrics": "^3.0.0", - "@newrelic/superagent": "^1.0.0", - "@tyriar/fibonacci-heap": "^2.0.7", - "async": "^2.1.4", - "concat-stream": "^1.5.0", - "https-proxy-agent": "^2.2.1", - "json-stringify-safe": "^5.0.0", - "readable-stream": "^2.1.4", - "semver": "^5.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - } - } - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -4503,11 +4387,6 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "underscore.string": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", diff --git a/packages/fxa-auth-db-mysql/package.json b/packages/fxa-auth-db-mysql/package.json index 9240db9929..831fc21e59 100644 --- a/packages/fxa-auth-db-mysql/package.json +++ b/packages/fxa-auth-db-mysql/package.json @@ -38,7 +38,6 @@ "mozlog": "2.2.0", "mysql": "2.16.0", "mysql-patcher": "0.7.0", - "newrelic": "4.10.0", "raven": "2.6.4", "request": "2.88.0", "restify": "7.2.2" diff --git a/packages/fxa-auth-server/lib/newrelic.js b/packages/fxa-auth-server/lib/newrelic.js index 1c278c0e2c..8593556bf3 100644 --- a/packages/fxa-auth-server/lib/newrelic.js +++ b/packages/fxa-auth-server/lib/newrelic.js @@ -9,12 +9,6 @@ // NEW_RELIC_LICENSE_KEY. function maybeRequireNewRelic() { - const env = process.env; - - if (env.NEW_RELIC_APP_NAME && env.NEW_RELIC_LICENSE_KEY) { - return require('newrelic'); - } - return null; } diff --git a/packages/fxa-auth-server/npm-shrinkwrap.json b/packages/fxa-auth-server/npm-shrinkwrap.json index a95728a860..ea35a5d7ee 100644 --- a/packages/fxa-auth-server/npm-shrinkwrap.json +++ b/packages/fxa-auth-server/npm-shrinkwrap.json @@ -171,32 +171,6 @@ "to-fast-properties": "^2.0.0" } }, - "@newrelic/koa": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@newrelic/koa/-/koa-1.0.8.tgz", - "integrity": "sha512-kY//FlLQkGdUIKEeGJlyY3dJRU63EG77YIa48ACMGZxQbWRd3WZMikyft33f8XScTq6WpCDo9xa0viNo8zeYkg==", - "requires": { - "methods": "^1.1.2" - } - }, - "@newrelic/native-metrics": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@newrelic/native-metrics/-/native-metrics-3.1.2.tgz", - "integrity": "sha512-JjUmPrp2LEEkhVtelICme5p7sHHpfpu2Wjk5/L1D3Zvt01v4mCsrL2XaIMBmHgg3T2ZbqMiqWZCn2LtGZ6nklA==", - "optional": true, - "requires": { - "nan": "^2.10.0", - "semver": "^5.5.1" - } - }, - "@newrelic/superagent": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@newrelic/superagent/-/superagent-1.0.3.tgz", - "integrity": "sha512-lJbsqKa79qPLbHZsbiRaXl1jfzaXAN7zqqnLRqBY+zI/O5zcfyNngTmdi+9y+qIUq7xHYNaLsAxCXerrsoINKg==", - "requires": { - "methods": "^1.1.2" - } - }, "@sinonjs/commons": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", @@ -241,11 +215,6 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "@tyriar/fibonacci-heap": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.9.tgz", - "integrity": "sha512-bYuSNomfn4hu2tPiDN+JZtnzCpSpbJ/PNeulmocDy3xN2X5OkJL65zo6rPZp65cPPhLF9vfT/dgE+RtFRCSxOA==" - }, "a-sync-waterfall": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", @@ -275,14 +244,6 @@ "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" }, - "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" - } - }, "ajv": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.1.7.tgz", @@ -805,7 +766,8 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "buildmail": { "version": "4.0.1", @@ -1109,6 +1071,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -1450,19 +1413,6 @@ "event-emitter": "~0.3.5" } }, - "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": "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" - } - }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -3417,30 +3367,6 @@ "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" }, - "https-proxy-agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", - "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", - "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" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "i18n-abide": { "version": "0.0.26", "resolved": "https://registry.npmjs.org/i18n-abide/-/i18n-abide-0.0.26.tgz", @@ -4436,11 +4362,6 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4823,23 +4744,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, - "newrelic": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/newrelic/-/newrelic-4.10.0.tgz", - "integrity": "sha512-ih/tdO5jMcZ7oYiL7xtES4RBPp7EzBg5Shj8VWBmJ2lOxjWNFwTJ7EqQ7Q0U1xK1zkuZ6Gp5q37Un/N3+QAMFw==", - "requires": { - "@newrelic/koa": "^1.0.0", - "@newrelic/native-metrics": "^3.0.0", - "@newrelic/superagent": "^1.0.0", - "@tyriar/fibonacci-heap": "^2.0.7", - "async": "^2.1.4", - "concat-stream": "^1.5.0", - "https-proxy-agent": "^2.2.1", - "json-stringify-safe": "^5.0.0", - "readable-stream": "^2.1.4", - "semver": "^5.3.0" - } - }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -7753,10 +7657,11 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "uap-core": { - "version": "git://github.com/ua-parser/uap-core.git#286809e09706ea891b9434ed875574d65e0ff6b7", + "version": "git://github.com/ua-parser/uap-core.git#2e6c983e42e7aae7d957a263cb4d3de7ccbd92af", "from": "git://github.com/ua-parser/uap-core.git" }, "uap-ref-impl": { diff --git a/packages/fxa-auth-server/package.json b/packages/fxa-auth-server/package.json index 7c96a974a7..5d49fb8a7f 100644 --- a/packages/fxa-auth-server/package.json +++ b/packages/fxa-auth-server/package.json @@ -71,7 +71,6 @@ "mozlog": "2.2.0", "mysql": "2.15.0", "mysql-patcher": "0.7.0", - "newrelic": "4.10.0", "node-uap": "git+https://github.com/vladikoff/node-uap.git#9cdd16247", "node-zendesk": "^1.4.0", "nodemailer": "2.7.2", diff --git a/packages/fxa-customs-server/lib/newrelic.js b/packages/fxa-customs-server/lib/newrelic.js index 1636d55eb3..f68223b38e 100644 --- a/packages/fxa-customs-server/lib/newrelic.js +++ b/packages/fxa-customs-server/lib/newrelic.js @@ -7,12 +7,6 @@ // NEW_RELIC_LICENSE_KEY. function maybeRequireNewRelic() { - var env = process.env; - - if (env.NEW_RELIC_APP_NAME && env.NEW_RELIC_LICENSE_KEY) { - return require('newrelic'); - } - return null; } diff --git a/packages/fxa-customs-server/npm-shrinkwrap.json b/packages/fxa-customs-server/npm-shrinkwrap.json index 2eb4a7c946..edb42c0a86 100644 --- a/packages/fxa-customs-server/npm-shrinkwrap.json +++ b/packages/fxa-customs-server/npm-shrinkwrap.json @@ -192,23 +192,6 @@ "protobufjs": "^6.8.6" } }, - "@newrelic/koa": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@newrelic/koa/-/koa-1.0.8.tgz", - "integrity": "sha512-kY//FlLQkGdUIKEeGJlyY3dJRU63EG77YIa48ACMGZxQbWRd3WZMikyft33f8XScTq6WpCDo9xa0viNo8zeYkg==", - "requires": { - "methods": "^1.1.2" - } - }, - "@newrelic/native-metrics": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@newrelic/native-metrics/-/native-metrics-2.4.0.tgz", - "integrity": "sha512-6Pv2Z9vkinr0MTnH1BORBs/SFOdKei43tQo2z30h9NtTc1pmWb/n5VWjgp7ReZ7FwzTI2oIhjbgnk2gZzpl6bw==", - "optional": true, - "requires": { - "nan": "^2.8.0" - } - }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -309,11 +292,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" }, - "@tyriar/fibonacci-heap": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.9.tgz", - "integrity": "sha512-bYuSNomfn4hu2tPiDN+JZtnzCpSpbJ/PNeulmocDy3xN2X5OkJL65zo6rPZp65cPPhLF9vfT/dgE+RtFRCSxOA==" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -485,14 +463,6 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - }, "async-each": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", @@ -638,7 +608,8 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "bunyan": { "version": "1.8.0", @@ -840,6 +811,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3273,11 +3245,6 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "mime": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.1.tgz", @@ -3394,22 +3361,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "newrelic": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/newrelic/-/newrelic-4.1.0.tgz", - "integrity": "sha1-c3nJxB8/9XgfmNT436TTvlwtESk=", - "requires": { - "@newrelic/koa": "^1.0.0", - "@newrelic/native-metrics": "^2.1.0", - "@tyriar/fibonacci-heap": "^2.0.7", - "async": "^2.1.4", - "concat-stream": "^1.5.0", - "https-proxy-agent": "^2.2.1", - "json-stringify-safe": "^5.0.0", - "readable-stream": "^2.1.4", - "semver": "^5.3.0" - } - }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -5900,7 +5851,8 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "typescript": { "version": "3.4.1", diff --git a/packages/fxa-customs-server/package.json b/packages/fxa-customs-server/package.json index 0086fcc023..6b6b578921 100644 --- a/packages/fxa-customs-server/package.json +++ b/packages/fxa-customs-server/package.json @@ -32,7 +32,6 @@ "lodash.isequal": "4.5.0", "lodash.merge": "4.6.2", "memcached": "2.2.1", - "newrelic": "4.1.0", "raven": "2.3.0", "restify": "7.2.1", "restify-errors": "6.1.1", diff --git a/packages/fxa-profile-server/lib/newrelic.js b/packages/fxa-profile-server/lib/newrelic.js index 1636d55eb3..f68223b38e 100644 --- a/packages/fxa-profile-server/lib/newrelic.js +++ b/packages/fxa-profile-server/lib/newrelic.js @@ -7,12 +7,6 @@ // NEW_RELIC_LICENSE_KEY. function maybeRequireNewRelic() { - var env = process.env; - - if (env.NEW_RELIC_APP_NAME && env.NEW_RELIC_LICENSE_KEY) { - return require('newrelic'); - } - return null; } diff --git a/packages/fxa-profile-server/npm-shrinkwrap.json b/packages/fxa-profile-server/npm-shrinkwrap.json index ed9db679e4..57d11d75ee 100644 --- a/packages/fxa-profile-server/npm-shrinkwrap.json +++ b/packages/fxa-profile-server/npm-shrinkwrap.json @@ -165,32 +165,6 @@ "to-fast-properties": "^2.0.0" } }, - "@newrelic/koa": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@newrelic/koa/-/koa-1.0.8.tgz", - "integrity": "sha512-kY//FlLQkGdUIKEeGJlyY3dJRU63EG77YIa48ACMGZxQbWRd3WZMikyft33f8XScTq6WpCDo9xa0viNo8zeYkg==", - "requires": { - "methods": "^1.1.2" - } - }, - "@newrelic/native-metrics": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@newrelic/native-metrics/-/native-metrics-3.1.2.tgz", - "integrity": "sha512-JjUmPrp2LEEkhVtelICme5p7sHHpfpu2Wjk5/L1D3Zvt01v4mCsrL2XaIMBmHgg3T2ZbqMiqWZCn2LtGZ6nklA==", - "optional": true, - "requires": { - "nan": "^2.10.0", - "semver": "^5.5.1" - } - }, - "@newrelic/superagent": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@newrelic/superagent/-/superagent-1.0.3.tgz", - "integrity": "sha512-lJbsqKa79qPLbHZsbiRaXl1jfzaXAN7zqqnLRqBY+zI/O5zcfyNngTmdi+9y+qIUq7xHYNaLsAxCXerrsoINKg==", - "requires": { - "methods": "^1.1.2" - } - }, "@sinonjs/commons": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", @@ -243,11 +217,6 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "@tyriar/fibonacci-heap": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.9.tgz", - "integrity": "sha512-bYuSNomfn4hu2tPiDN+JZtnzCpSpbJ/PNeulmocDy3xN2X5OkJL65zo6rPZp65cPPhLF9vfT/dgE+RtFRCSxOA==" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -304,14 +273,6 @@ } } }, - "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" - } - }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -583,7 +544,8 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "call": { "version": "4.0.2", @@ -829,6 +791,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -1089,19 +1052,6 @@ "event-emitter": "~0.3.5" } }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" - }, - "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" - } - }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -1978,30 +1928,6 @@ "sshpk": "^1.7.0" } }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "requires": { - "agent-base": "^4.1.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" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -2513,11 +2439,6 @@ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "mime-db": { "version": "1.38.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", @@ -2708,39 +2629,6 @@ } } }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "optional": true - }, - "newrelic": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/newrelic/-/newrelic-4.9.0.tgz", - "integrity": "sha512-02lsCULkqPpZmWdj7XIxoXICgGp/f/KMsPYwrmRT2c/iTvZJvtTCcAYYYyqF708WUe+qVohjI3n7dmUGM+VrHw==", - "requires": { - "@newrelic/koa": "^1.0.0", - "@newrelic/native-metrics": "^3.0.0", - "@newrelic/superagent": "^1.0.0", - "@tyriar/fibonacci-heap": "^2.0.7", - "async": "^2.1.4", - "concat-stream": "^1.5.0", - "https-proxy-agent": "^2.2.1", - "json-stringify-safe": "^5.0.0", - "readable-stream": "^2.1.4", - "semver": "^5.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - } - } - }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -4421,7 +4309,8 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true }, "shelljs": { "version": "0.6.1", @@ -4904,7 +4793,8 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "underscore.string": { "version": "3.3.5", diff --git a/packages/fxa-profile-server/package.json b/packages/fxa-profile-server/package.json index aeacccf8a9..f242f0c782 100644 --- a/packages/fxa-profile-server/package.json +++ b/packages/fxa-profile-server/package.json @@ -32,7 +32,6 @@ "mozlog": "2.2.0", "mysql": "2.16.0", "mysql-patcher": "0.7.0", - "newrelic": "4.9.0", "poolee": "1.0.0", "raven": "2.1.2", "request": "2.83.0", From a448452fcf9c96a6710df049c9e65ce810ff4db7 Mon Sep 17 00:00:00 2001 From: mirefly Date: Thu, 22 Aug 2019 23:35:43 -0600 Subject: [PATCH 16/25] docs(oauth-server): add introspect endpoint in API.md --- .../fxa-oauth-server/docs/api.md | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/packages/fxa-auth-server/fxa-oauth-server/docs/api.md b/packages/fxa-auth-server/fxa-oauth-server/docs/api.md index 4b5561e5ea..974b200177 100644 --- a/packages/fxa-auth-server/fxa-oauth-server/docs/api.md +++ b/packages/fxa-auth-server/fxa-oauth-server/docs/api.md @@ -75,6 +75,7 @@ The currently-defined error responses are: - [POST /v1/key-data][key-data] - [POST /v1/authorized-clients][authorized-clients] - [POST /v1/authorized-clients/destroy][authorized-clients-destroy] +- [POST /v1/introspect][introspect] - (**DEPRECATED**) [GET /v1/client-tokens][client-tokens] - (**DEPRECATED**) [DELETE /v1/client-tokens/:id][client-tokens-delete] @@ -709,6 +710,53 @@ curl -X POST \ A valid 200 response will return an empty JSON object. +### POST /v1/introspect + +This endpoint returns the status of the token and meta-information about this token. + +#### Request Parameters + +- `token`: An OAuth token for the user. +- `token_type_hint`: A literal string `"access_token"` or `"refresh_token"` + +**Example:** + +```sh +curl -X POST \ + -H "Content-Type: application/json" \ + "https://oauth.accounts.firefox.com/v1/introspect" \ + -d '{"token":"5e00491407a01507bdc4002fd7b675fb4e7d039045a7e6755e4aed0d3e287c69"}' +``` + +#### Response + +A valid request will return a JSON response with these properties: + +- `active`: Boolean indicator of weather the presented token is active. +- `scope`: Optional. A space-seperated list of scopes associated with this token. +- `client_id`: Optional. The hex id of the client whose token was passed. +- `token_type`: A string representing the token type. It will be `"access_token"` or `"refresh_token"`. +- `iat`: Optional. Integer time of token creation. +- `sub`: Optional. The hex id of the user. +- `jti`: Optional. The hex id of the token +- `exp`: Optional. Integer time of token expiration. +- `fxa-lastUsedAt`: Optional. Integer time when this token is last used. + +**Example:** + +```json +{ + "active": true, + "scope":"profile https://identity.mozilla.com/account/subscriptions", + "client_id":"59cceb6f8c32317c", + "token_type":"access_token", + "iat": 1566535888243, + "sub": "913fe9395bb946b48c1521d7beb2cb24", + "jti": "5ae05d8fe413a749e0f4eb3c495a1c526fb52c85ca5fde516df5dd77d41f7b5b", + "exp": 1566537688243 +} +``` + ### GET /v1/client-tokens **DEPRECATED**: Please use [POST /v1/authorized-clients][authorized-clients] instead. @@ -785,7 +833,7 @@ curl -X DELETE A valid 200 response will return an empty JSON object. [client]: #get-v1clientid -[register]: #post-v1clientregister +[register]: #post-v1client [clients]: #get-v1clients [client-update]: #post-v1clientid [client-delete]: #delete-v1clientid @@ -797,8 +845,9 @@ A valid 200 response will return an empty JSON object. [developer-activate]: #post-v1developeractivate [jwks]: #get-v1jwks [key-data]: #post-v1post-keydata -[authorized-clients]: #post-v1authorized-clients +[authorized-clients]: #get-v1authorized-clients [authorized-clients-destroy]: #post-v1authorized-clientsdestroy +[introspect]: #post-v1introspect [client-tokens]: #get-v1client-tokens [client-tokens-delete]: #delete-v1client-tokensid [prompt-none]: https://github.com/mozilla/fxa/blob/master/packages/fxa-auth-server/fxa-oauth-server/docs/prompt-none.md From fee467d87ea631394da1aaac27722d9aa57fced6 Mon Sep 17 00:00:00 2001 From: mirefly Date: Sun, 25 Aug 2019 00:34:38 -0600 Subject: [PATCH 17/25] chore(js-client): simplify release process --- packages/fxa-js-client/CONTRIBUTING.md | 4 - packages/fxa-js-client/Gruntfile.js | 9 - packages/fxa-js-client/package-lock.json | 985 ------------------- packages/fxa-js-client/package.json | 3 - packages/fxa-js-client/tasks/buildcontrol.js | 29 - packages/fxa-js-client/tasks/bump.js | 21 - packages/fxa-js-client/tasks/changelog.js | 13 - 7 files changed, 1064 deletions(-) delete mode 100644 packages/fxa-js-client/tasks/buildcontrol.js delete mode 100644 packages/fxa-js-client/tasks/bump.js delete mode 100644 packages/fxa-js-client/tasks/changelog.js diff --git a/packages/fxa-js-client/CONTRIBUTING.md b/packages/fxa-js-client/CONTRIBUTING.md index 2f141ef895..194379b883 100644 --- a/packages/fxa-js-client/CONTRIBUTING.md +++ b/packages/fxa-js-client/CONTRIBUTING.md @@ -56,10 +56,6 @@ The `build` directory should have `fxa-client.js` and `fxa-client.min.js`. `grunt debug` - builds the regular library, runs test, watches for changes. Helpful when you are debugging. -`grunt release` - will prepare a new release of this library with the version in `package.json`. -It will create or update the repositories in `build` and `docs`. If the version in `package.json` has not changed, -then the tagging will be skipped. - ### SJCL Notes Currently [SJCL](http://bitwiseshiftleft.github.io/sjcl/) is built with `./configure --without-random --without-ocb2 --without-gcm --without-ccm`. diff --git a/packages/fxa-js-client/Gruntfile.js b/packages/fxa-js-client/Gruntfile.js index 5623b4ab16..d678b933cc 100644 --- a/packages/fxa-js-client/Gruntfile.js +++ b/packages/fxa-js-client/Gruntfile.js @@ -27,15 +27,6 @@ module.exports = function(grunt) { grunt.registerTask('default', ['build']); - grunt.registerTask('release', [ - 'build', - 'bump-only', - 'conventionalChangelog', - 'bump-commit', - 'yuidoc', - 'buildcontrol', - ]); - grunt.registerTask('dev', ['watch:dev']); grunt.registerTask('debug', ['watch:debug']); diff --git a/packages/fxa-js-client/package-lock.json b/packages/fxa-js-client/package-lock.json index 2eb8b403c1..bc2950369e 100644 --- a/packages/fxa-js-client/package-lock.json +++ b/packages/fxa-js-client/package-lock.json @@ -105,16 +105,6 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -160,12 +150,6 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", - "dev": true - }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -195,12 +179,6 @@ "repeat-string": "^1.5.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -219,12 +197,6 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -288,12 +260,6 @@ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -306,12 +272,6 @@ "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", "dev": true }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -719,12 +679,6 @@ "isarray": "^1.0.0" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -775,22 +729,6 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -815,19 +753,6 @@ "type-detect": "^4.0.5" } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -992,16 +917,6 @@ "integrity": "sha1-eX8rhmKJFaWtBFtqpX1CcgUJ5lc=", "dev": true }, - "compare-func": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - } - }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -1014,18 +929,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -1053,125 +956,6 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "conventional-changelog": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-0.2.1.tgz", - "integrity": "sha1-vzy+TukOCPhuOfa431SBkWgM7QI=", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "compare-func": "^1.3.1", - "conventional-changelog-writer": "^0.2.0", - "conventional-commits-parser": "0.0.19", - "dateformat": "^1.0.11", - "get-pkg-repo": "^0.1.0", - "git-raw-commits": "0.1.0", - "git-semver-tags": "^1.0.0", - "lodash": "^3.9.3", - "meow": "^3.3.0", - "q": "^1.4.1", - "semver": "^5.0.1", - "tempfile": "^1.1.1", - "through2": "^2.0.0" - }, - "dependencies": { - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } - } - }, - "conventional-changelog-writer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-0.2.1.tgz", - "integrity": "sha1-XyMr7xTcigMznN4UFNjfyl0AINI=", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "conventional-commits-filter": "^0.1.0", - "dateformat": "^1.0.11", - "handlebars": "^3.0.3", - "lodash": "^3.8.0", - "meow": "^3.3.0", - "semver": "^5.0.1", - "split": "^1.0.0", - "through2": "^2.0.0" - }, - "dependencies": { - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-0.1.1.tgz", - "integrity": "sha1-2dJsdZn4nePSScuj3veRH8UcDas=", - "dev": true, - "requires": { - "is-subset": "^0.1.1", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-0.0.19.tgz", - "integrity": "sha1-G9IRiZUVaXph6iYOLElbY9F8E28=", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.0", - "lodash": "^3.3.1", - "meow": "^3.3.0", - "split": "^1.0.0", - "through2": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -1301,15 +1085,6 @@ "dev": true, "optional": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -1319,15 +1094,6 @@ "es5-ext": "^0.10.9" } }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -1352,16 +1118,6 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - } - }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -1503,15 +1259,6 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2409,16 +2156,6 @@ } } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "findup-sync": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", @@ -3173,24 +2910,6 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "get-pkg-repo": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-0.1.0.tgz", - "integrity": "sha1-fwTZaFZL+c0ukBgQV3+Ew38rA70=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "through2": "^2.0.0" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -3209,184 +2928,6 @@ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", "dev": true }, - "git-raw-commits": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-0.1.0.tgz", - "integrity": "sha1-v28G7UZoOgu0ve6EHNaZR8bt6ts=", - "dev": true, - "requires": { - "dargs": "^4.0.1", - "lodash.template": "^3.6.1", - "meow": "^3.1.0", - "split2": "^1.0.0", - "through2": "^2.0.0" - } - }, - "git-semver-tags": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", - "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", - "dev": true, - "requires": { - "meow": "^4.0.0", - "semver": "^5.5.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, "glob": { "version": "3.1.21", "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", @@ -3490,23 +3031,6 @@ "which": "~1.0.5" } }, - "grunt-build-control": { - "version": "git://github.com/robwierzbowski/grunt-build-control.git#2749527df5480a150e997831ca951d4adefe9217", - "from": "git://github.com/robwierzbowski/grunt-build-control.git#274952", - "dev": true, - "requires": { - "shelljs": "~0.2.6" - } - }, - "grunt-bump": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/grunt-bump/-/grunt-bump-0.3.1.tgz", - "integrity": "sha1-R3uLVpIRD/7/xRQ9MKcAs5BuoUo=", - "dev": true, - "requires": { - "semver": "^4.3.3" - } - }, "grunt-bytesize": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/grunt-bytesize/-/grunt-bytesize-0.1.1.tgz", @@ -3579,19 +3103,6 @@ "yuidocjs": "^0.8.0" } }, - "grunt-conventional-changelog": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-conventional-changelog/-/grunt-conventional-changelog-3.0.0.tgz", - "integrity": "sha1-JcBLL21WfBSBviC/F7gVyo/u6fQ=", - "dev": true, - "requires": { - "chalk": "^1.1.0", - "concat-stream": "^1.5.0", - "conventional-changelog": "^0.2.1", - "plur": "^2.0.0", - "q": "^1.4.1" - } - }, "grunt-copyright": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/grunt-copyright/-/grunt-copyright-0.2.0.tgz", @@ -3672,17 +3183,6 @@ } } }, - "handlebars": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-3.0.6.tgz", - "integrity": "sha512-LxzdOvkYFsdL6ZT92igXthJIZLYKBSowtrM3oxfMdOwjv0dRWk6EK4PygNgXc0xwjH38BWMCSnktrOpKbec+Qw==", - "dev": true, - "requires": { - "optimist": "^0.6.1", - "source-map": "^0.1.40", - "uglify-js": "^2.6" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3692,15 +3192,6 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", @@ -3894,15 +3385,6 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -4029,12 +3511,6 @@ "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", "dev": true }, - "irregular-plurals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", - "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", - "dev": true - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -4117,15 +3593,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "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", @@ -4153,18 +3620,6 @@ "kind-of": "^3.0.2" } }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "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=", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4195,12 +3650,6 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -4210,21 +3659,6 @@ "has-symbols": "^1.0.0" } }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -4304,12 +3738,6 @@ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", @@ -4334,12 +3762,6 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, "just-extend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", @@ -4431,27 +3853,6 @@ } } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } - } - }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -4504,113 +3905,6 @@ "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", "dev": true }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -4669,16 +3963,6 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, "lru-cache": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", @@ -4700,12 +3984,6 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -4787,24 +4065,6 @@ "readable-stream": "^2.0.1" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -4911,16 +4171,6 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -5345,12 +4595,6 @@ } } }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -5733,24 +4977,6 @@ "is-wsl": "^1.1.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -5903,15 +5129,6 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5942,25 +5159,6 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } - } - }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", @@ -5986,30 +5184,6 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true, - "requires": { - "irregular-plurals": "^1.0.0" - } - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -6105,12 +5279,6 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, "qs": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", @@ -6129,12 +5297,6 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6183,27 +5345,6 @@ } } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -6238,16 +5379,6 @@ } } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -6282,15 +5413,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, "request": { "version": "2.40.0", "resolved": "https://registry.npmjs.org/request/-/request-2.40.0.tgz", @@ -6570,12 +5692,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shelljs": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", - "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=", - "dev": true - }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -6791,15 +5907,6 @@ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", @@ -6851,15 +5958,6 @@ "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "dev": true }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -6869,15 +5967,6 @@ "extend-shallow": "^3.0.0" } }, - "split2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz", - "integrity": "sha1-Fi2bGIZfAqsvKtlYVSLbm1TEgfk=", - "dev": true, - "requires": { - "through2": "~2.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -6992,42 +6081,18 @@ "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, "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=", "dev": true }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, "table": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz", @@ -7110,22 +6175,6 @@ "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", "dev": true }, - "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", - "dev": true, - "requires": { - "os-tmpdir": "^1.0.0", - "uuid": "^2.0.1" - } - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -7144,16 +6193,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -7233,12 +6272,6 @@ "punycode": "^2.1.1" } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -7283,12 +6316,6 @@ "mime-types": "~2.1.18" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -7499,12 +6526,6 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -7770,12 +6791,6 @@ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", diff --git a/packages/fxa-js-client/package.json b/packages/fxa-js-client/package.json index fb3b6b8249..1ad4584cde 100644 --- a/packages/fxa-js-client/package.json +++ b/packages/fxa-js-client/package.json @@ -39,14 +39,11 @@ "chai": "4.2.0", "eslint-config-prettier": "^5.0.0", "grunt": "0.4.2", - "grunt-build-control": "git://github.com/robwierzbowski/grunt-build-control#274952", - "grunt-bump": "0.3.1", "grunt-bytesize": "0.1.1", "grunt-cli": "0.1.13", "grunt-contrib-clean": "0.6.0", "grunt-contrib-watch": "0.6.1", "grunt-contrib-yuidoc": "0.9.0", - "grunt-conventional-changelog": "3.0.0", "grunt-copyright": "0.2.0", "grunt-eslint": "21.1.0", "grunt-open": "0.2.4", diff --git a/packages/fxa-js-client/tasks/buildcontrol.js b/packages/fxa-js-client/tasks/buildcontrol.js deleted file mode 100644 index dbd0e5db8f..0000000000 --- a/packages/fxa-js-client/tasks/buildcontrol.js +++ /dev/null @@ -1,29 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -module.exports = function(grunt) { - 'use strict'; - - grunt.config('buildcontrol', { - options: { - commit: true, - push: true, - remote: 'git@github.com:mozilla/fxa-js-client.git', - }, - release: { - options: { - branch: 'release', - dir: 'build', - tag: '<%= pkg.version %>', - }, - }, - docs: { - options: { - branch: 'gh-pages', - dir: 'docs', - tag: 'docs-<%= pkg.version %>', - }, - }, - }); -}; diff --git a/packages/fxa-js-client/tasks/bump.js b/packages/fxa-js-client/tasks/bump.js deleted file mode 100644 index 3a6c87b0f0..0000000000 --- a/packages/fxa-js-client/tasks/bump.js +++ /dev/null @@ -1,21 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -module.exports = function(grunt) { - 'use strict'; - - grunt.config('bump', { - options: { - files: ['package.json'], - updateConfigs: ['pkg'], - push: true, - pushTo: 'git@github.com:mozilla/fxa-js-client.git update-master', - commitMessage: 'source-%VERSION%', - tagName: 'source-%VERSION%', - // commit all modified files - commitFiles: ['-a'], - commit: true, - }, - }); -}; diff --git a/packages/fxa-js-client/tasks/changelog.js b/packages/fxa-js-client/tasks/changelog.js deleted file mode 100644 index 247277759a..0000000000 --- a/packages/fxa-js-client/tasks/changelog.js +++ /dev/null @@ -1,13 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -module.exports = function(grunt) { - 'use strict'; - - grunt.config('conventionalChangelog', { - options: { - from: 'source-<%= pkgReadOnly.version %>', - }, - }); -}; From 99f3fce63dd85d89d14140aa793f9cf83ad07fa2 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Tue, 20 Aug 2019 11:20:51 -0700 Subject: [PATCH 18/25] chore(ts): convert fxa-shared/l10n/localizeTimestamp to typescript --- .circleci/test-content-server.sh | 6 +++ packages/fxa-auth-server/Dockerfile-build | 1 + .../fxa-auth-server/Dockerfile-oauth-build | 1 + packages/fxa-content-server/Dockerfile-build | 23 +++++------ .../app/scripts/lib/constants.js | 4 +- packages/fxa-shared/index.js | 23 ----------- packages/fxa-shared/index.ts | 28 ++++++++++++++ ...alizeTimestamp.js => localizeTimestamp.ts} | 38 +++++++++---------- packages/fxa-shared/package.json | 2 +- .../fxa-shared/test/email/popularDomains.js | 2 +- ...alizeTimestamp.js => localizeTimestamp.ts} | 38 +++---------------- .../test/l10n/supportedLanguages.js | 2 +- packages/fxa-shared/tslint.json | 3 ++ .../types/accept-language/index.d.ts | 1 + 14 files changed, 77 insertions(+), 95 deletions(-) delete mode 100644 packages/fxa-shared/index.js create mode 100644 packages/fxa-shared/index.ts rename packages/fxa-shared/l10n/{localizeTimestamp.js => localizeTimestamp.ts} (76%) rename packages/fxa-shared/test/l10n/{localizeTimestamp.js => localizeTimestamp.ts} (77%) create mode 100644 packages/fxa-shared/types/accept-language/index.d.ts diff --git a/.circleci/test-content-server.sh b/.circleci/test-content-server.sh index 0829947666..ecb80def47 100755 --- a/.circleci/test-content-server.sh +++ b/.circleci/test-content-server.sh @@ -38,6 +38,12 @@ if grep -e "$MODULE" -e 'all' $DIR/../packages/test.list; then cd ../fxa-shared npm ci + npm run build + + cd ../fxa-auth-server + node scripts/gen_keys.js + node scripts/gen_vapid_keys.js + node fxa-oauth-server/scripts/gen_keys.js cd ../fxa-content-server diff --git a/packages/fxa-auth-server/Dockerfile-build b/packages/fxa-auth-server/Dockerfile-build index 4b0e16100e..86b6ca8180 100644 --- a/packages/fxa-auth-server/Dockerfile-build +++ b/packages/fxa-auth-server/Dockerfile-build @@ -32,6 +32,7 @@ COPY ["fxa-shared", "../fxa-shared/"] WORKDIR /fxa-shared USER root RUN npm ci +RUN npm run build WORKDIR /app diff --git a/packages/fxa-auth-server/Dockerfile-oauth-build b/packages/fxa-auth-server/Dockerfile-oauth-build index 181c33dc8f..6f7e3846f8 100644 --- a/packages/fxa-auth-server/Dockerfile-oauth-build +++ b/packages/fxa-auth-server/Dockerfile-oauth-build @@ -29,6 +29,7 @@ COPY ["fxa-shared", "../fxa-shared/"] WORKDIR /fxa-shared USER root RUN npm ci +RUN npm run build USER app # Build final image by copying from builder diff --git a/packages/fxa-content-server/Dockerfile-build b/packages/fxa-content-server/Dockerfile-build index 3c6e174aac..956cd47507 100644 --- a/packages/fxa-content-server/Dockerfile-build +++ b/packages/fxa-content-server/Dockerfile-build @@ -1,7 +1,5 @@ FROM node:10-alpine -RUN npm install -g npm@6 && rm -rf ~app/.npm /tmp/* - RUN addgroup -g 10001 app && \ adduser -D -G app -h /app -u 10001 app @@ -14,33 +12,30 @@ ENTRYPOINT ["/usr/local/bin/dumb-init", "--"] RUN apk add --no-cache git -RUN chown app:app /app USER app -COPY fxa-content-server/npm-shrinkwrap.json npm-shrinkwrap.json -COPY fxa-content-server/package.json package.json -COPY fxa-content-server/scripts/download_l10n.sh scripts/download_l10n.sh +COPY --chown=app:app fxa-content-server/npm-shrinkwrap.json npm-shrinkwrap.json +COPY --chown=app:app fxa-content-server/package.json package.json +COPY --chown=app:app fxa-content-server/scripts/download_l10n.sh scripts/download_l10n.sh -RUN npm install --production --unsafe-perm && rm -rf ~/.cache ~/.npm /tmp/* +RUN npm install --production && rm -rf ~/.cache ~/.npm /tmp/* -COPY fxa-content-server /app +COPY --chown=app:app fxa-content-server /app -COPY ["fxa-geodb", "../fxa-geodb/"] +COPY --chown=app:app ["fxa-geodb", "../fxa-geodb/"] WORKDIR /fxa-geodb USER root RUN chown -R app:app /fxa-geodb USER app RUN npm ci -COPY ["fxa-shared", "../fxa-shared/"] +COPY --chown=app:app ["fxa-shared", "../fxa-shared/"] WORKDIR /fxa-shared USER root RUN chown -R app:app /fxa-shared USER app RUN npm ci +RUN npm run build WORKDIR /app -USER root -RUN chown -R app:app /app -USER app -RUN npm run build-production --unsafe-perm +RUN npm run build-production diff --git a/packages/fxa-content-server/app/scripts/lib/constants.js b/packages/fxa-content-server/app/scripts/lib/constants.js index b986850184..730304d844 100644 --- a/packages/fxa-content-server/app/scripts/lib/constants.js +++ b/packages/fxa-content-server/app/scripts/lib/constants.js @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -const popularEmailDomains = require('../../../../fxa-shared/email/popularDomains.json'); +const popularDomains = require('../../../../fxa-shared/dist/email/popularDomains.json'); /*eslint-disable sorting/sort-object-props*/ module.exports = { @@ -122,7 +122,7 @@ module.exports = { // 20 most popular email domains, used for metrics. Matches the list // we use in the auth server, converted to a map for faster lookup. - POPULAR_EMAIL_DOMAINS: popularEmailDomains.reduce((map, domain) => { + POPULAR_EMAIL_DOMAINS: popularDomains.reduce((map, domain) => { map[domain] = true; return map; }, {}), diff --git a/packages/fxa-shared/index.js b/packages/fxa-shared/index.js deleted file mode 100644 index afc7fc9e7d..0000000000 --- a/packages/fxa-shared/index.js +++ /dev/null @@ -1,23 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -'use strict'; - -module.exports = { - email: { - popularDomains: require('./email/popularDomains.json'), - }, - l10n: { - localizeTimestamp: require('./l10n/localizeTimestamp'), - supportedLanguages: require('./l10n/supportedLanguages.json'), - }, - metrics: { - amplitude: require('./metrics/amplitude'), - }, - oauth: { - scopes: require('./oauth/scopes'), - }, - promise: require('./promise'), - redis: require('./redis'), -}; diff --git a/packages/fxa-shared/index.ts b/packages/fxa-shared/index.ts new file mode 100644 index 0000000000..b1bec7b13c --- /dev/null +++ b/packages/fxa-shared/index.ts @@ -0,0 +1,28 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +import * as popularDomains from './email/popularDomains.json'; +import { localizeTimestamp } from './l10n/localizeTimestamp'; +import * as supportedLanguages from './l10n/supportedLanguages.json'; +import * as amplitude from './metrics/amplitude'; +import * as scopes from './oauth/scopes'; +import * as promise from './promise'; +import * as redis from './redis'; + +module.exports = { + email: { + popularDomains, + }, + l10n: { + localizeTimestamp, + supportedLanguages, + }, + metrics: { + amplitude, + }, + oauth: { + scopes, + }, + promise, + redis, +}; diff --git a/packages/fxa-shared/l10n/localizeTimestamp.js b/packages/fxa-shared/l10n/localizeTimestamp.ts similarity index 76% rename from packages/fxa-shared/l10n/localizeTimestamp.js rename to packages/fxa-shared/l10n/localizeTimestamp.ts index 081d5c5ee1..7ddebd9ca0 100644 --- a/packages/fxa-shared/l10n/localizeTimestamp.js +++ b/packages/fxa-shared/l10n/localizeTimestamp.ts @@ -2,25 +2,21 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -var moment = require('moment'); -var acceptLanguage = require('accept-language'); +import * as acceptLanguage from 'accept-language'; +import * as moment from 'moment'; + +type localizeOptions = { + defaultLanguage: string; + supportedLanguages?: string[]; +}; /** * This module contains localization utils for the server - **/ -module.exports = function(options) { - options = options || {}; - - if (!options.defaultLanguage) { - throw new Error('defaultLanguage is required'); - } - - var defaultLanguage = options.defaultLanguage; - var supportedLanguages = options.supportedLanguages; - if (!Array.isArray(supportedLanguages)) { - supportedLanguages = []; - } - + */ +export function localizeTimestamp({ + defaultLanguage, + supportedLanguages = [], +}: localizeOptions) { if (supportedLanguages.length === 0) { // must support at least one language. supportedLanguages = [defaultLanguage]; @@ -43,16 +39,16 @@ module.exports = function(options) { * @returns {String} Returns a localized string based on a given timestamp. * Returns an empty string if no timestamp provided. */ - format: function format(timestamp, acceptLanguageHeader) { + format: function format(timestamp?: number, acceptLanguageHeader?: string) { if (!timestamp) { return ''; } // create a new moment from a timestamp - var lastAccessTime = moment(timestamp); - var language = defaultLanguage; + const lastAccessTime = moment(timestamp); + let language = defaultLanguage; try { if (acceptLanguageHeader) { - var parseHeader = acceptLanguage.parse(acceptLanguageHeader); + const parseHeader = acceptLanguage.parse(acceptLanguageHeader); // parse should return an Array of parsed languages in priority order based on the `acceptLanguageHeader`. if ( parseHeader && @@ -77,4 +73,4 @@ module.exports = function(options) { return lastAccessTime.fromNow(); }, }; -}; +} diff --git a/packages/fxa-shared/package.json b/packages/fxa-shared/package.json index c692fa821a..cfa66fabc0 100644 --- a/packages/fxa-shared/package.json +++ b/packages/fxa-shared/package.json @@ -6,7 +6,7 @@ "scripts": { "build": "tsc", "test": "mocha -r ts-node/register --recursive test", - "lint": "tslint -p . --force", + "lint": "tslint -p .", "format": "prettier '**' --write" }, "repository": { diff --git a/packages/fxa-shared/test/email/popularDomains.js b/packages/fxa-shared/test/email/popularDomains.js index 9d94e8ba7a..ad11411750 100644 --- a/packages/fxa-shared/test/email/popularDomains.js +++ b/packages/fxa-shared/test/email/popularDomains.js @@ -10,7 +10,7 @@ describe('email/popularDomains:', () => { let popularDomains; before(() => { - popularDomains = require('../../email/popularDomains'); + popularDomains = require('../../email/popularDomains.json'); }); it('returns an array of 20 domains', () => { diff --git a/packages/fxa-shared/test/l10n/localizeTimestamp.js b/packages/fxa-shared/test/l10n/localizeTimestamp.ts similarity index 77% rename from packages/fxa-shared/test/l10n/localizeTimestamp.js rename to packages/fxa-shared/test/l10n/localizeTimestamp.ts index 9c39cf84d9..7d1dc4471e 100644 --- a/packages/fxa-shared/test/l10n/localizeTimestamp.js +++ b/packages/fxa-shared/test/l10n/localizeTimestamp.ts @@ -2,41 +2,20 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -'use strict'; - -const { assert } = require('chai'); +import { assert } from 'chai'; +import { localizeTimestamp } from '../../l10n/localizeTimestamp'; describe('l10n/localizeTimestamp:', () => { - let localizeTimestamp; - - before(() => { - localizeTimestamp = require('../../l10n/localizeTimestamp'); - }); - - it('returned a function with one parameter', () => { - assert.isFunction(localizeTimestamp); - assert.lengthOf(localizeTimestamp, 1); - }); - - it('throws if called without defaultLanguage', () => { - assert.throws(() => localizeTimestamp({ supportedLanguages: ['en'] })); - }); - describe('call with supported language:', () => { - let format; + let format: any; before(() => { format = localizeTimestamp({ - supportedLanguages: ['ar', 'es', 'ru'], defaultLanguage: 'en', + supportedLanguages: ['ar', 'es', 'ru'], }).format; }); - it('returned a function with one parameter', () => { - assert.isFunction(localizeTimestamp); - assert.lengthOf(localizeTimestamp, 1); - }); - it('returns the empty string if called without arguments', () => { assert.strictEqual(format(), ''); }); @@ -81,20 +60,15 @@ describe('l10n/localizeTimestamp:', () => { }); describe('call with no supported languages:', () => { - let format; + let format: (timestamp?: number, acceptLanguageHeader?: string) => string; before(() => { format = localizeTimestamp({ - supportedLanguages: [], defaultLanguage: 'en', + supportedLanguages: [], }).format; }); - it('returned a function with one parameter', () => { - assert.isFunction(localizeTimestamp); - assert.lengthOf(localizeTimestamp, 1); - }); - it('returns the empty string if called without arguments', () => { assert.strictEqual(format(), ''); }); diff --git a/packages/fxa-shared/test/l10n/supportedLanguages.js b/packages/fxa-shared/test/l10n/supportedLanguages.js index 3da9108d61..e7ca888d7d 100644 --- a/packages/fxa-shared/test/l10n/supportedLanguages.js +++ b/packages/fxa-shared/test/l10n/supportedLanguages.js @@ -10,7 +10,7 @@ describe('l10n/supportedLanguages:', () => { let supportedLanguages; before(() => { - supportedLanguages = require('../../l10n/supportedLanguages'); + supportedLanguages = require('../../l10n/supportedLanguages.json'); }); it('returns an array of languages', () => { diff --git a/packages/fxa-shared/tslint.json b/packages/fxa-shared/tslint.json index cc9d0ad47d..83a191110d 100644 --- a/packages/fxa-shared/tslint.json +++ b/packages/fxa-shared/tslint.json @@ -1,6 +1,9 @@ { "extends": ["tslint:recommended", "tslint-config-prettier"], "rulesDirectory": ["tslint-plugin-prettier"], + "linterOptions": { + "exclude": ["**/*.js"] + }, "rules": { "interface-name": [true, "never-prefix"], "interface-over-type-literal": false, diff --git a/packages/fxa-shared/types/accept-language/index.d.ts b/packages/fxa-shared/types/accept-language/index.d.ts new file mode 100644 index 0000000000..3af134af02 --- /dev/null +++ b/packages/fxa-shared/types/accept-language/index.d.ts @@ -0,0 +1 @@ +declare module 'accept-language'; From 2ffe1334df4b97e50ee1aa19047f7d543333cf31 Mon Sep 17 00:00:00 2001 From: dave justice Date: Tue, 6 Aug 2019 16:52:06 -0400 Subject: [PATCH 19/25] feat(fortress): add "fortress" relying party - fixes #1894 --- .circleci/config.yml | 15 + _scripts/install_packages.sh | 1 + mysql_servers.json | 11 + package.json | 1 + packages/fortress/.bowerrc | 3 + packages/fortress/.dockerignore | 5 + packages/fortress/.eslintignore | 2 + packages/fortress/.eslintrc | 6 + packages/fortress/.gitignore | 6 + packages/fortress/.prettierignore | 9 + packages/fortress/.prettierrc | 4 + packages/fortress/Dockerfile | 26 + packages/fortress/README.md | 15 + packages/fortress/bower.json | 23 + packages/fortress/config-local.json | 5 + packages/fortress/config.js | 12 + packages/fortress/config.json | 5 + packages/fortress/package-lock.json | 2219 +++++++++++++++++ packages/fortress/package.json | 43 + packages/fortress/server.js | 46 + packages/fortress/static/css/main.css | 277 ++ packages/fortress/static/download.html | 96 + packages/fortress/static/favicon.ico | Bin 0 -> 1150 bytes packages/fortress/static/img/grad.png | Bin 0 -> 147 bytes packages/fortress/static/img/grad@2x.png | Bin 0 -> 164 bytes packages/fortress/static/img/growth.png | Bin 0 -> 3075 bytes packages/fortress/static/img/growth@2x.png | Bin 0 -> 6703 bytes packages/fortress/static/img/loading.gif | Bin 0 -> 2536 bytes packages/fortress/static/img/logo.png | Bin 0 -> 873 bytes packages/fortress/static/img/logo100.png | Bin 0 -> 1890 bytes packages/fortress/static/img/logo@2x.png | Bin 0 -> 1550 bytes .../fortress/static/img/pro-header-bg.gif | Bin 0 -> 81460 bytes packages/fortress/static/img/rocket.png | Bin 0 -> 3388 bytes packages/fortress/static/img/rocket@2x.png | Bin 0 -> 7345 bytes .../fortress/static/img/transparent-logo.png | Bin 0 -> 7357 bytes packages/fortress/static/index.html | 117 + packages/fortress/static/js/fortress.js | 15 + packages/fortress/static/pp.txt | 7 + packages/fortress/static/tos.txt | 6 + packages/fxa-auth-server/config/dev.json | 9 + .../server/config/index.js | 5 +- .../src/routes/Product/PlanDetails/index.tsx | 14 +- servers.json | 11 + 43 files changed, 3009 insertions(+), 5 deletions(-) create mode 100644 packages/fortress/.bowerrc create mode 100644 packages/fortress/.dockerignore create mode 100644 packages/fortress/.eslintignore create mode 100644 packages/fortress/.eslintrc create mode 100644 packages/fortress/.gitignore create mode 100644 packages/fortress/.prettierignore create mode 100644 packages/fortress/.prettierrc create mode 100644 packages/fortress/Dockerfile create mode 100755 packages/fortress/README.md create mode 100755 packages/fortress/bower.json create mode 100755 packages/fortress/config-local.json create mode 100755 packages/fortress/config.js create mode 100755 packages/fortress/config.json create mode 100644 packages/fortress/package-lock.json create mode 100755 packages/fortress/package.json create mode 100755 packages/fortress/server.js create mode 100644 packages/fortress/static/css/main.css create mode 100755 packages/fortress/static/download.html create mode 100644 packages/fortress/static/favicon.ico create mode 100644 packages/fortress/static/img/grad.png create mode 100644 packages/fortress/static/img/grad@2x.png create mode 100644 packages/fortress/static/img/growth.png create mode 100644 packages/fortress/static/img/growth@2x.png create mode 100644 packages/fortress/static/img/loading.gif create mode 100644 packages/fortress/static/img/logo.png create mode 100644 packages/fortress/static/img/logo100.png create mode 100644 packages/fortress/static/img/logo@2x.png create mode 100644 packages/fortress/static/img/pro-header-bg.gif create mode 100644 packages/fortress/static/img/rocket.png create mode 100644 packages/fortress/static/img/rocket@2x.png create mode 100644 packages/fortress/static/img/transparent-logo.png create mode 100755 packages/fortress/static/index.html create mode 100755 packages/fortress/static/js/fortress.js create mode 100755 packages/fortress/static/pp.txt create mode 100755 packages/fortress/static/tos.txt diff --git a/.circleci/config.yml b/.circleci/config.yml index f5bdc8d0da..ff830c0eb6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -302,6 +302,11 @@ workflows: module: 123done requires: - install + - build-module: + name: fortress + module: fortress + requires: + - install - build-module: name: browserid-verifier module: browserid-verifier @@ -395,6 +400,16 @@ workflows: module: 123done requires: - install + - deploy-module: + filters: + tags: + only: /.*/ + branches: + ignore: /.*/ + name: fortress + module: fortress + requires: + - install - deploy-module: filters: tags: diff --git a/_scripts/install_packages.sh b/_scripts/install_packages.sh index 9f4cfad522..41f66ae767 100755 --- a/_scripts/install_packages.sh +++ b/_scripts/install_packages.sh @@ -24,6 +24,7 @@ PATH=$PATH:$HOME/.cargo/bin "cd fxa-profile-server; npm ci; mkdir -p var/public/" \ "cd fxa-basket-proxy; npm ci" \ "cd 123done; npm i" \ + "cd fortress; npm i" \ "cd fxa-shared; npm ci" \ "cd fxa-geodb; npm i" \ "cd fxa-email-event-proxy; npm i" \ diff --git a/mysql_servers.json b/mysql_servers.json index c5effc34d6..fed9847bd1 100644 --- a/mysql_servers.json +++ b/mysql_servers.json @@ -96,6 +96,17 @@ }, "min_uptime": "2m" }, + { + "name": "Fortress PORT 9292", + "script": "server.js", + "cwd": "packages/fortress", + "max_restarts": "1", + "env": { + "CONFIG_FORTRESS": "./config-local.json", + "NODE_ENV": "dev" + }, + "min_uptime": "2m" + }, { "name": "123done PORT 8080", "script": "server.js", diff --git a/package.json b/package.json index bb35b2ab28..3e62a50fb6 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "moduleDependencies": { "fxa-content-server": [ "123done", + "fortress", "fxa-auth-server", "fxa-js-client", "fxa-shared", diff --git a/packages/fortress/.bowerrc b/packages/fortress/.bowerrc new file mode 100644 index 0000000000..df22955714 --- /dev/null +++ b/packages/fortress/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "static/bower_components" +} diff --git a/packages/fortress/.dockerignore b/packages/fortress/.dockerignore new file mode 100644 index 0000000000..48295e89e0 --- /dev/null +++ b/packages/fortress/.dockerignore @@ -0,0 +1,5 @@ +*~ +node_modules +public-key.json +secret-key.json +static/bower_components diff --git a/packages/fortress/.eslintignore b/packages/fortress/.eslintignore new file mode 100644 index 0000000000..86ff9afc98 --- /dev/null +++ b/packages/fortress/.eslintignore @@ -0,0 +1,2 @@ +static/** +node_modules/** diff --git a/packages/fortress/.eslintrc b/packages/fortress/.eslintrc new file mode 100644 index 0000000000..11ef1ac5d4 --- /dev/null +++ b/packages/fortress/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": "prettier", + "parserOptions": { + "ecmaVersion": 2018 + } +} diff --git a/packages/fortress/.gitignore b/packages/fortress/.gitignore new file mode 100644 index 0000000000..7ee5b38f7d --- /dev/null +++ b/packages/fortress/.gitignore @@ -0,0 +1,6 @@ +public-key.json +secret-key.json +/node_modules +static/bower_components +*~ +*.log diff --git a/packages/fortress/.prettierignore b/packages/fortress/.prettierignore new file mode 100644 index 0000000000..71440a9270 --- /dev/null +++ b/packages/fortress/.prettierignore @@ -0,0 +1,9 @@ +LICENSE +.* +Dockerfile +*.sh +*.ico +*.txt +ansible/* +static/bower_components/* +static/img/* \ No newline at end of file diff --git a/packages/fortress/.prettierrc b/packages/fortress/.prettierrc new file mode 100644 index 0000000000..c1a6f66713 --- /dev/null +++ b/packages/fortress/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "es5" +} diff --git a/packages/fortress/Dockerfile b/packages/fortress/Dockerfile new file mode 100644 index 0000000000..3f0f7719ad --- /dev/null +++ b/packages/fortress/Dockerfile @@ -0,0 +1,26 @@ +FROM node:10-alpine + +# as root +RUN apk update +RUN apk add g++ git +RUN npm install -g bower + +RUN addgroup -g 10001 app && adduser -D -G app -h /app -u 10001 app +WORKDIR /app +USER app + +# as app +COPY package.json package.json +COPY bower.json bower.json +COPY .bowerrc .bowerrc +RUN npm install +RUN /bin/rm -rf .npm + +COPY . /app + +USER root +RUN apk del -r g++ git + +CMD node ./server.js + + diff --git a/packages/fortress/README.md b/packages/fortress/README.md new file mode 100755 index 0000000000..ff1dd0d39a --- /dev/null +++ b/packages/fortress/README.md @@ -0,0 +1,15 @@ +## A demo of Product Relying party + +## running locally + +1. install [git] and [node] +1. get a local copy of the repository: `git clone https://github.com/mozilla/fxa` +1. `cd fxa/packages/fortress` +1. install dependencies: `npm install` +1. generate keys `node scripts/gen_keys.js` +1. run the server: `npm start` +1. visit it in your browser: `http://127.0.0.1:9292/` +1. hack and reload! (web resources don't require a server restart) + +[git]: http://git-scm.org +[node]: http://nodejs.org diff --git a/packages/fortress/bower.json b/packages/fortress/bower.json new file mode 100755 index 0000000000..182ab165b8 --- /dev/null +++ b/packages/fortress/bower.json @@ -0,0 +1,23 @@ +{ + "name": "firefox-fortress", + "version": "0.0.0", + "homepage": "https://github.com/mozilla/123done", + "authors": ["johngruen "], + "description": "fxa-oauth-demo", + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "app/bower_components", + "test", + "tests", + "static/bower_components" + ], + "private": true, + "dependencies": { + "jquery": "2.1.0", + "normalize-css": "3.0.1", + "modernizr": "2.7.2" + } +} diff --git a/packages/fortress/config-local.json b/packages/fortress/config-local.json new file mode 100755 index 0000000000..5f64ce2fbb --- /dev/null +++ b/packages/fortress/config-local.json @@ -0,0 +1,5 @@ +{ + "client_id": "dcdb5ae7add825d2", + "client_secret": "b93ef8a8f3e553a430d7e5b904c6132b2722633af9f03128029201d24a97f2a8", + "redirect_uri": "http://127.0.0.1:9292/download" +} diff --git a/packages/fortress/config.js b/packages/fortress/config.js new file mode 100755 index 0000000000..dd021c2645 --- /dev/null +++ b/packages/fortress/config.js @@ -0,0 +1,12 @@ +var path = require('path'); + +var configTarget = process.env.CONFIG_FORTRESS || './config.json'; +var configFile = path.resolve(__dirname, configTarget); + +var now = '[' + new Date().toISOString() + ']'; +console.log(now, 'loading configuration File', configFile); //eslint-disable-line no-console + +var config = require(configFile); +console.log(now, 'config:', JSON.stringify(config, null, 2)); //eslint-disable-line no-console + +module.exports = config; diff --git a/packages/fortress/config.json b/packages/fortress/config.json new file mode 100755 index 0000000000..5f64ce2fbb --- /dev/null +++ b/packages/fortress/config.json @@ -0,0 +1,5 @@ +{ + "client_id": "dcdb5ae7add825d2", + "client_secret": "b93ef8a8f3e553a430d7e5b904c6132b2722633af9f03128029201d24a97f2a8", + "redirect_uri": "http://127.0.0.1:9292/download" +} diff --git a/packages/fortress/package-lock.json b/packages/fortress/package-lock.json new file mode 100644 index 0000000000..6a1138f072 --- /dev/null +++ b/packages/fortress/package-lock.json @@ -0,0 +1,2219 @@ +{ + "name": "firefox-fortress", + "version": "0.0.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-1.0.3.tgz", + "integrity": "sha1-KBuj7B8kSP52X5Kk7s+IP+E2S1Q=", + "requires": { + "bn.js": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bluebird": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.0.5.tgz", + "integrity": "sha1-L/nQfJs+2ynW0oD+B1KDZefs05I=" + }, + "bn.js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-1.3.0.tgz", + "integrity": "sha1-DbTL+W+PI7dC9by50ap6mZSgXoM=", + "optional": true + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "bower": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", + "integrity": "sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "client-sessions": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/client-sessions/-/client-sessions-0.6.0.tgz", + "integrity": "sha1-sZu10J8KvH2WwjeYLc8StwF+e0M=", + "requires": { + "cookies": "0.3.8" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookies": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.3.8.tgz", + "integrity": "sha1-kv5QkY89Va7Erp2Xi83doq2ijOk=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "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=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "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" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "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=", + "dev": true + }, + "eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-5.0.0.tgz", + "integrity": "sha512-c17Aqiz5e8LEqoc/QPmYnaxQFAHTx2KlCZBPxXXjEMmNchOLnV/7j0HoPZuC+rL/tDC9bazUYOKJW9bOhftI/w==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fetch": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/fetch/-/fetch-0.3.6.tgz", + "integrity": "sha1-N1Q3GMIqisA8fHscUTe7N/Y9g9g=", + "requires": { + "encoding": "*" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "fxa-jwtool": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/fxa-jwtool/-/fxa-jwtool-0.7.2.tgz", + "integrity": "sha1-Mu61wC4CWCjrIPUIFiyJ+vSjS/s=", + "requires": { + "bluebird": "3.0.5", + "fetch": "0.3.6", + "pem-jwk": "1.5.1" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "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" + } + }, + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true + }, + "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==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.2.tgz", + "integrity": "sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w==", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "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" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "dev": true, + "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.11", + "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-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "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=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "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=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "requires": { + "mime-db": "~1.38.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==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-rsa": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.0.5.tgz", + "integrity": "sha512-9o51yfV167CtQANnuAf+5owNs7aIMsAKVLhNaKuRxihsUUnfoBMN5OTVOK/2mHSOWaWq9zZBiRM3bHORbTZqrg==", + "requires": { + "asn1": "^0.2.4" + }, + "dependencies": { + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + } + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.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=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-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=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pem-jwk": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-1.5.1.tgz", + "integrity": "sha1-eoY3/S9nqCflfAxC4cI8P9Us+wE=", + "requires": { + "asn1.js": "1.0.3" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pidtree": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", + "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "redis": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/redis/-/redis-0.7.1.tgz", + "integrity": "sha1-DcwCYzLH1b4Rq0NnjtKK9qnMjXU=" + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "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=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "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=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "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=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "dev": true, + "requires": { + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "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" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } +} diff --git a/packages/fortress/package.json b/packages/fortress/package.json new file mode 100755 index 0000000000..9a8c1184fd --- /dev/null +++ b/packages/fortress/package.json @@ -0,0 +1,43 @@ +{ + "name": "firefox-fortress", + "description": "A simple tasklist app that demonstrates FxA Sign-In", + "version": "0.0.2", + "author": { + "name": "Mozilla", + "url": "https://mozilla.org/" + }, + "licenses": [ + { + "type": "MPL 2.0", + "url": "https://mozilla.org/MPL/2.0/" + } + ], + "homepage": "http://fortress.firefox.org/", + "bugs": "https://github.com/mozilla/fxa/issues", + "repository": { + "type": "git", + "url": "https://github.com/mozilla/fxa.git" + }, + "private": true, + "dependencies": { + "bower": "*", + "client-sessions": "0.6.x", + "express": "4.16.4", + "morgan": "1.9.1" + }, + "engines": { + "node": ">=10", + "npm": ">=6.4.1" + }, + "devDependencies": { + "eslint": "5.16.0", + "eslint-config-prettier": "^5.0.0", + "prettier": "^1.18.2" + }, + "scripts": { + "postinstall": "bower install --config.interactive=false -s", + "start": "node server.js", + "test": "eslint .", + "format": "prettier '**' --write" + } +} diff --git a/packages/fortress/server.js b/packages/fortress/server.js new file mode 100755 index 0000000000..1738080a9b --- /dev/null +++ b/packages/fortress/server.js @@ -0,0 +1,46 @@ +const express = require('express'); +const morgan = require('morgan'); +const path = require('path'); +const sessions = require('client-sessions'); + +const config = require('./config'); + +const logger = morgan('short'); + +const app = express(); + +app.use(logger, express.json()); + +app.use(function(req, res, next) { + if (/^\/api/.test(req.url)) { + res.setHeader('Cache-Control', 'no-cache, max-age=0'); + + return sessions({ + cookieName: config.cookieName || 'fortress', + secret: process.env['COOKIE_SECRET'] || 'define a real secret, please', + requestKey: 'session', + cookie: { + path: '/api', + httpOnly: true, + }, + })(req, res, next); + } else { + return next(); + } +}); + +app.get('/download', function(req, res, next) { + req.url = '/download.html'; + next(); +}); + +app.get(/^\/iframe(:?\/(?:index.html)?)?$/, function(req, res, next) { + req.url = '/index.html'; + next(); +}); + +app.use(express.static(path.join(__dirname, 'static'))); + +const port = process.env['PORT'] || config.port || 9292; +app.listen(port, '0.0.0.0'); +console.log('Firefox Fortress started on port', port); //eslint-disable-line no-console diff --git a/packages/fortress/static/css/main.css b/packages/fortress/static/css/main.css new file mode 100644 index 0000000000..91f997aa84 --- /dev/null +++ b/packages/fortress/static/css/main.css @@ -0,0 +1,277 @@ +*, +*:before, +*:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +body { + background: #f2f2f2; + color: #424f59; + font-family: 'Open Sans', sans-serif; + font-size: 85%; +} + +a { + color: #0095dd; + text-decoration: none; +} + +.container { + margin: 0 auto; + max-width: 960px; + min-width: 320px; + padding: 0 40px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: lighter; +} + +/* Reset `button` default styles */ +button { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + background: none; + border: 0; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + -webkit-user-select: none; /* for button */ + -moz-user-select: none; + -ms-user-select: none; +} + +button::-moz-focus-inner { + border: 0; + padding: 0; +} + +.banner { + background: #304050; + position: fixed; + top: 0; + width: 100%; + padding: 20px; + + display: flex; + align-items: center; + justify-content: center; +} + +.btn { + background: #eef2f0; + border-radius: 2px; + margin: 10px; + padding: 10px; + color: black; +} + +#splash .btn { + background: #5cae40; + color: white; + display: block; + margin: 20px auto 0px; + text-align: center; + width: 140px; +} + +.btn:hover { + background: #fff; +} + +#splash { + font-family: 'Alegreya Sans', sans-serif; + margin-bottom: 60px; + margin-top: 150px; +} + +#splash header { + font-weight: 300; + background: #eef2f0; + margin: 0 0 60px 0; + width: 100%; +} + +#splash-logo { + display: block; + margin: 20px auto 0 auto; + width: 72px; +} + +#splash h1 { + font-size: 72px; + font-weight: 100; + margin: 0; + text-align: center; +} + +#splash h2 { + font-size: 24px; + font-weight: 300; + margin: 0; + text-align: center; +} + +.two-col { + border-bottom: 1px dotted #ccc; + clear: both; + margin: 50px auto; + padding: 0 0 50px 0; + text-align: center; + width: 720px; +} + +.left-col { + float: left; + width: 50%; +} +.right-col { + float: left; + width: 50%; +} + +.two-col h3 { + font-size: 42px; + font-weight: 300; + margin: 20px 0; +} + +.two-col p { + font-size: 20px; +} + +#header-main { + background: #fff; + box-shadow: 0px 2px 2px #ccc; + margin: 0; + padding: 10px 0; + position: fixed; + top: 0; + width: 100%; +} + +#subscriptionCTA { + float: right; + margin: 7px 0; + padding: 5px 10px; +} + +.is-subscribed #subscriptionCTA { + display: none; +} + +#header-main h1 { + float: left; + font-size: 24px; + line-height: 1em; + margin: 0; +} + +.title { + margin: 0 0 0 10px; + position: relative; + top: -8px; +} + +#header-main h1 .pro-status { + display: none; +} +.is-subscribed #header-main h1 .pro-status { + display: inline; +} +.is-subscribed #header-main { + background-image: url(/img/pro-header-bg.gif); +} + +#footer-main { + background: url(/img/grad@2x.png) repeat-x #304050; + background-size: 5px 20px; + bottom: 0; + color: #fff; + margin: 0; + padding: 10px 0 0 0; + position: fixed; + width: 100%; +} + +#footer-main p { + font-size: 0.8em; + margin: 0; + padding: 10px 0; + text-align: center; +} + +.logo { + background: url(/img/logo@2x.png) no-repeat center center; + background-size: 36px 34px; + display: inline-block; + height: 35px; + margin: 5px auto 0 auto; + position: relative; + width: 36px; +} + +div.logo { + background-size: 26px 25px; + display: block; +} + +@media only screen and (max-width: 960px) { + .container { + margin: 0 auto; + width: 96%; + } +} + +@media only screen and (max-width: 500px) { + body { + background: #fff; + } + + #header-main { + background: #f2f2f2; + box-shadow: none; + } +} + +@media only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and (min--moz-device-pixel-ratio: 2), + only screen and (-moz-min-device-pixel-ratio: 2), + only screen and (-o-min-device-pixel-ratio: 2/1), + only screen and (min-device-pixel-ratio: 2), + only screen and (min-resolution: 192dpi), + only screen and (min-resolution: 2dppx) { + #logo { + background-image: url(/img/logo@2x.png); + } +} + +.clearfix:after { + visibility: hidden; + display: block; + font-size: 0; + content: ' '; + clear: both; + height: 0; +} +.clearfix { + display: inline-block; +} +/* start commented backslash hack \*/ +* html .clearfix { + height: 1%; +} +.clearfix { + display: block; +} +/* close commented backslash hack */ diff --git a/packages/fortress/static/download.html b/packages/fortress/static/download.html new file mode 100755 index 0000000000..6a65d408b4 --- /dev/null +++ b/packages/fortress/static/download.html @@ -0,0 +1,96 @@ + + + + + Firefox Fortress + + + + + + + + + + + +
+
+ +

Firefox Fortress

+ Download Firefox Fortress +
+
+
+
+
+

Download Firefox Fortress

+ Click Here +
+
+ list-logo +
+
+
+
+
+ +
+
+
+

+ Firefox Fortress Pro! +

+ +
+
+
+
+
+
+ Subscribe for pro! LINK TBD! + productId=fortressProProduct& +
+
+
+
+
+ + + + diff --git a/packages/fortress/static/favicon.ico b/packages/fortress/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..046b913c89669dbcc5bcd58c045f34de205600a4 GIT binary patch literal 1150 zcmbV~y-EW?6h>!>79x^}AV?6CB9K<{01ClEtVBetL@W|WA!2Fa16ZW667dOq2n!LB z6c!c|B;*k!NDvWO&lhrG2;*kshLgE}-`$zJ<6OiqmvcM?SD$ij5vvRe6(Ab?JGV|Q z@brj%PC%d9gE)>Of&B#^aG!z>H9v6Z>Gkdh^OIKU8h_|pqdMv`u;Rz@kJIR>nTHF| zS$83$KCEN))GWgdd_xRvs0{Td*rD^ch|fS3Iv}0TEB+GHAf$gHo`*XyoxY1O{|dVZ z&v0aO!Pfi-^J85F-G?{OUN%8__0W4YlM+-z`r#S($*+0&Ccf=K^W1`IFR%WO=8vxA zvTzO7ql>*^b=cA?rrDkb*e0fPx50Y6V9%-ttMr;v5@+Nqpt)F&TkHkU{n$%D^Vk91 kN7b2LvuN5m(ynOELE3k?OslgxG}^P~*?>8=!+!qHFYYFYv;Y7A literal 0 HcmV?d00001 diff --git a/packages/fortress/static/img/grad.png b/packages/fortress/static/img/grad.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2161a035e3152644f8fe9dd6512f3fc54847ea GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTn!2~2vwI}odDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MW&uEjv*Ddk|u_lCpa+a=;XXvQ4?k+VrR^)%{9MsChOGm tM|#5NO`Is$d%oq2`$HZ^JBJ2F2JZO`zY|LSiU18@@O1TaS?83{1OQB-EW!W) literal 0 HcmV?d00001 diff --git a/packages/fortress/static/img/grad@2x.png b/packages/fortress/static/img/grad@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dab3c2c62eaa42069212ea1f1f97b7e23a451839 GIT binary patch literal 164 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 F`~!)L5n%uT literal 0 HcmV?d00001 diff --git a/packages/fortress/static/img/logo.png b/packages/fortress/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0a66eb522573fc6496f6053465108ad155e1044c GIT binary patch literal 873 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 literal 0 HcmV?d00001 diff --git a/packages/fortress/static/img/pro-header-bg.gif b/packages/fortress/static/img/pro-header-bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..554e7caced2b096695c4d2b6d6ed96445bdb8967 GIT binary patch literal 81460 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
LNl4mpWlU<*Mn(?IAUQ}u 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�RZ47Kb%bw23Sa*&D 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 literal 0 HcmV?d00001 diff --git a/packages/fortress/static/img/rocket.png b/packages/fortress/static/img/rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2b947f147c8920c5cf746a77ba4e384bb4b714 GIT binary patch literal 3388 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 literal 0 HcmV?d00001 diff --git a/packages/fortress/static/img/transparent-logo.png b/packages/fortress/static/img/transparent-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..07950138768aaeeec24c3ccecc36798cfe4dc340 GIT binary patch literal 7357 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 literal 0 HcmV?d00001 diff --git a/packages/fortress/static/index.html b/packages/fortress/static/index.html new file mode 100755 index 0000000000..01d65b15ed --- /dev/null +++ b/packages/fortress/static/index.html @@ -0,0 +1,117 @@ + + + + + Firefox Fortress + + + + + + + + + + + +
+
+ +

Firefox Fortress

+ Subscribe for Pro +
+
+
+
+
+

Protect your data

+

+ With Firefox Fortress, you can protect your data. +

+
+
+ list-logo +
+
+
+
+ growth-logo +
+
+

Discover Yourself

+

+ Explore patterns in the way you work and improve your routines. +

+
+
+
+
+

Do The Impossible

+

Achieve your dreams.

+
+
+ rocket-logo +
+
+
+
+
+ +
+
+
+

+ Firefox Fortress Pro! +

+ +
+
+
+
+
+
+ Subscribe for pro! LINK TBD! + productId=fortressProProduct& +
+
+
+
+
+ + + + + + diff --git a/packages/fortress/static/js/fortress.js b/packages/fortress/static/js/fortress.js new file mode 100755 index 0000000000..2a9a91fe0e --- /dev/null +++ b/packages/fortress/static/js/fortress.js @@ -0,0 +1,15 @@ +q$(document).ready(function() { + let paymentURL; + switch (window.location.host) { + case 'fortress-latest.dev.lcip.org': + paymentURL = + 'https://latest.dev.lcip.org/subscriptions/products/plan_FUUOYlhpIhWtoo'; + break; + default: + paymentURL = '//127.0.0.1:3030/subscriptions/products/fortressProProduct'; + break; + } + $('.btn-subscribe').each(function(index) { + $(this).attr('href', paymentURL); + }); +}); diff --git a/packages/fortress/static/pp.txt b/packages/fortress/static/pp.txt new file mode 100755 index 0000000000..8789bee319 --- /dev/null +++ b/packages/fortress/static/pp.txt @@ -0,0 +1,7 @@ +This is a Privacy Policy document for Firefox Fortress. If this were a +real site, it would give you the policies which we adhere to as we +deal with your personal, private data. Policies that you must accept +in order to use the site. + +But this is not a real site, it's a demonstration. So this document +isn't really all that useful. diff --git a/packages/fortress/static/tos.txt b/packages/fortress/static/tos.txt new file mode 100755 index 0000000000..17b1b7f775 --- /dev/null +++ b/packages/fortress/static/tos.txt @@ -0,0 +1,6 @@ +This is a Terms Of Service document for Firefox Fortress. If this were a +real site, it would give you the terms of service that you must accept +to use the site. + +But this is not a real site, it's a demonstration. So this document +isn't really all that useful. diff --git a/packages/fxa-auth-server/config/dev.json b/packages/fxa-auth-server/config/dev.json index e1e7be1445..d0ef690335 100644 --- a/packages/fxa-auth-server/config/dev.json +++ b/packages/fxa-auth-server/config/dev.json @@ -69,6 +69,15 @@ "amount": 50, "currency": "usd" }, + { + "plan_id": "fortressProMonthly", + "plan_name": "Fortress Pro Monthly", + "product_id": "fortressProProduct", + "product_name": "Fortress Pro", + "interval": "month", + "amount": 50, + "currency": "usd" + }, { "plan_id": "321doneProWeekly", "plan_name": "321done Pro Weekly", diff --git a/packages/fxa-payments-server/server/config/index.js b/packages/fxa-payments-server/server/config/index.js index b3a60bb05e..ca88e12b8f 100644 --- a/packages/fxa-payments-server/server/config/index.js +++ b/packages/fxa-payments-server/server/config/index.js @@ -101,8 +101,11 @@ const conf = convict({ productRedirectURLs: { default: { '123doneProProduct': 'http://127.0.0.1:8080/', + fortressProProduct: 'http://127.0.0.1:9292/download', + prod_FUUNYnlDso7FeB: 'https://fortress-latest.dev.lcip.org/', prod_Ex9Z1q5yVydhyk: 'https://123done-latest.dev.lcip.org/', - prod_FUUNYnlDso7FeB: 'https://123done-stage.dev.lcip.org', + // todo get new prod_id for 123done stage + prod_FfiuDs9u11ESbD: 'https://123done-stage.dev.lcip.org', }, doc: 'Mapping between product IDs and post-subscription redirect URLs', env: 'PRODUCT_REDIRECT_URLS', diff --git a/packages/fxa-payments-server/src/routes/Product/PlanDetails/index.tsx b/packages/fxa-payments-server/src/routes/Product/PlanDetails/index.tsx index 44dbe6fff0..d89f5a20e8 100644 --- a/packages/fxa-payments-server/src/routes/Product/PlanDetails/index.tsx +++ b/packages/fxa-payments-server/src/routes/Product/PlanDetails/index.tsx @@ -11,11 +11,17 @@ type availableDetailsType = { (props: PlanDetailsProps) => JSX.Element >; }; + + +const loadDetails123DonePro = + /* istanbul ignore next */ + () => import('./Details123DonePro'); + const availableDetails: availableDetailsType = { - // Examples: - // '123doneProProduct': React.lazy(() => import('./Details123donePro')), - // '321doneProProduct': React.lazy(() => import('./Details321donePro')), - plan_F4bof27uz71Vk7: React.lazy(() => import('./Details123DonePro')), + 'fortressProMonthly': React.lazy(loadDetails123DonePro), + 'plan_FUUOYlhpIhWtoo': React.lazy(loadDetails123DonePro), + 'plan_F4bof27uz71Vk7': React.lazy(loadDetails123DonePro), + 'prod_FfiuDs9u11ESbD': React.lazy(loadDetails123DonePro), }; const defaultDetails = React.lazy(() => import('./DetailsDefault')); diff --git a/servers.json b/servers.json index 477bd98fb2..b8de8174b2 100644 --- a/servers.json +++ b/servers.json @@ -88,6 +88,17 @@ }, "min_uptime": "2m" }, + { + "name": "Fortress PORT 9292", + "script": "server.js", + "cwd": "packages/fortress", + "max_restarts": "1", + "env": { + "CONFIG_FORTRESS": "./config-local.json", + "NODE_ENV": "dev" + }, + "min_uptime": "2m" + }, { "name": "123done PORT 8080", "script": "server.js", From d0c78405114f7b9993cf82e86be04703464166d5 Mon Sep 17 00:00:00 2001 From: Lauren Zugai Date: Wed, 21 Aug 2019 13:05:10 -0500 Subject: [PATCH 20/25] chore(async): Convert unblock-code routes to async/await --- .../lib/routes/unblock-codes.js | 86 +++++++++---------- 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/packages/fxa-auth-server/lib/routes/unblock-codes.js b/packages/fxa-auth-server/lib/routes/unblock-codes.js index b585030ddc..0144ed20ca 100644 --- a/packages/fxa-auth-server/lib/routes/unblock-codes.js +++ b/packages/fxa-auth-server/lib/routes/unblock-codes.js @@ -35,53 +35,48 @@ module.exports = (log, db, mailer, config, customs) => { const { flowId, flowBeginTime } = await request.app.metricsContext; - return customs - .check(request, email, 'sendUnblockCode') - .then(lookupAccount) - .then(createUnblockCode) - .then(mailUnblockCode) - .then(() => request.emitMetricsEvent('account.login.sentUnblockCode')) - .then(() => { - return {}; - }); + await customs.check(request, email, 'sendUnblockCode'); + const uid = await lookupAccount(); + const code = await createUnblockCode(uid); + await mailUnblockCode(code); + await request.emitMetricsEvent('account.login.sentUnblockCode'); + return {}; - function lookupAccount() { - return db.accountRecord(email).then(record => { - emailRecord = record; - return record.uid; - }); + async function lookupAccount() { + const record = await db.accountRecord(email); + emailRecord = record; + return record.uid; } - function createUnblockCode(uid) { + async function createUnblockCode(uid) { return db.createUnblockCode(uid); } - function mailUnblockCode(code) { - return db.accountEmails(emailRecord.uid).then(emails => { - const geoData = request.app.geo; - const { - browser: uaBrowser, - browserVersion: uaBrowserVersion, - os: uaOS, - osVersion: uaOSVersion, - deviceType: uaDeviceType, - } = request.app.ua; + async function mailUnblockCode(code) { + const emails = await db.accountEmails(emailRecord.uid); + const geoData = request.app.geo; + const { + browser: uaBrowser, + browserVersion: uaBrowserVersion, + os: uaOS, + osVersion: uaOSVersion, + deviceType: uaDeviceType, + } = request.app.ua; - return mailer.sendUnblockCode(emails, emailRecord, { - acceptLanguage: request.app.acceptLanguage, - unblockCode: code, - flowId, - flowBeginTime, - ip: request.app.clientAddress, - location: geoData.location, - timeZone: geoData.timeZone, - uaBrowser, - uaBrowserVersion, - uaOS, - uaOSVersion, - uaDeviceType, - uid: emailRecord.uid, - }); + return mailer.sendUnblockCode(emails, emailRecord, { + acceptLanguage: request.app.acceptLanguage, + unblockCode: code, + flowId, + flowBeginTime, + ip: request.app.clientAddress, + location: geoData.location, + timeZone: geoData.timeZone, + uaBrowser, + uaBrowserVersion, + uaOS, + uaOSVersion, + uaDeviceType, + uid: emailRecord.uid, }); } }, @@ -111,13 +106,12 @@ module.exports = (log, db, mailer, config, customs) => { const uid = request.payload.uid; const code = request.payload.unblockCode.toUpperCase(); - return db.consumeUnblockCode(uid, code).then(() => { - log.info('account.login.rejectedUnblockCode', { - uid, - unblockCode: code, - }); - return {}; + await db.consumeUnblockCode(uid, code); + log.info('account.login.rejectedUnblockCode', { + uid, + unblockCode: code, }); + return {}; }, }, ]; From 1304e1b2bc310408f9a8008e0596640add0f33db Mon Sep 17 00:00:00 2001 From: irrationalagent Date: Mon, 26 Aug 2019 15:29:21 -0600 Subject: [PATCH 21/25] feat(metrics): allow get-metrics-flow to take form_type button --- .../server/lib/amplitude.js | 1 + .../server/lib/routes/get-metrics-flow.js | 22 ++++++++++ .../server/lib/validation.js | 2 +- .../tests/server/amplitude.js | 23 +++++++++++ .../tests/server/routes/get-metrics-flow.js | 40 +++++++++++++++++++ packages/fxa-shared/metrics/amplitude.js | 2 + 6 files changed, 89 insertions(+), 1 deletion(-) diff --git a/packages/fxa-content-server/server/lib/amplitude.js b/packages/fxa-content-server/server/lib/amplitude.js index 91f8dd48b3..f435553976 100644 --- a/packages/fxa-content-server/server/lib/amplitude.js +++ b/packages/fxa-content-server/server/lib/amplitude.js @@ -74,6 +74,7 @@ const EVENTS = { }; const VIEW_ENGAGE_SUBMIT_EVENT_GROUPS = { + button: GROUPS.button, 'enter-email': GROUPS.emailFirst, 'force-auth': GROUPS.login, settings: GROUPS.settings, diff --git a/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js b/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js index bc9724eaac..06ad7c2083 100644 --- a/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js +++ b/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js @@ -30,7 +30,10 @@ module.exports = function(config) { const FLOW_EVENT_NAME = 'flow.begin'; const ENTER_EMAIL_SCREEN_EVENT_NAME = 'screen.enter-email'; const ENTER_EMAIL_FLOW_EVENT_NAME = 'flow.enter-email.view'; + const BUTTON_SCREEN_EVENT_NAME = 'screen.button'; + const BUTTON_FLOW_EVENT_NAME = 'flow.button.view'; const FORM_TYPE_EMAIL = 'email'; + const FORM_TYPE_BUTTON = 'button'; const ALLOWED_CORS_ORIGINS = config.get('allowed_metrics_flow_cors_origins'); const CORS_OPTIONS = { methods: 'GET', @@ -114,6 +117,25 @@ module.exports = function(config) { metricsData, req ); + } else if (metricsData.form_type === FORM_TYPE_BUTTON) { + amplitude( + { + flowTime: flowBeginTime, + time: flowBeginTime, + type: BUTTON_SCREEN_EVENT_NAME, + }, + req, + metricsData + ); + logFlowEvent( + { + flowTime: flowBeginTime, + time: flowBeginTime, + type: BUTTON_FLOW_EVENT_NAME, + }, + metricsData, + req + ); } // charset must be set on json responses. diff --git a/packages/fxa-content-server/server/lib/validation.js b/packages/fxa-content-server/server/lib/validation.js index 7109827716..396591ddb4 100644 --- a/packages/fxa-content-server/server/lib/validation.js +++ b/packages/fxa-content-server/server/lib/validation.js @@ -23,7 +23,7 @@ const PATTERNS = { ENTRYPOINT: /^[\w.:-]+$/, EVENT_TYPE: /^[\w\s.:-]+$/, // the space is to allow for error contexts that contain spaces, e.g., `error.unknown context.auth.108` EXPERIMENT: /^[\w.-]+$/, - FORM_TYPE: /^(email|other)$/, + FORM_TYPE: /^(email|other|button)$/, MIGRATION: /^(sync11|amo|none)$/, SERVICE: /^(sync|content-server|none|[0-9a-f]{16})$/, SYNC_ENGINE: /^[a-z]+$/, diff --git a/packages/fxa-content-server/tests/server/amplitude.js b/packages/fxa-content-server/tests/server/amplitude.js index e3eaab3fdc..ddc7e54444 100644 --- a/packages/fxa-content-server/tests/server/amplitude.js +++ b/packages/fxa-content-server/tests/server/amplitude.js @@ -1050,6 +1050,29 @@ registerSuite('amplitude', { assert.equal(logger.info.args[0][1].event_type, 'fxa_email_first - view'); }, + 'screen.button': () => { + amplitude( + { + time: 'a', + type: 'screen.button', + }, + { + connection: {}, + headers: { + 'x-forwarded-for': '63.245.221.32', + }, + }, + { + flowBeginTime: 'b', + flowId: 'c', + uid: 'd', + } + ); + + assert.equal(logger.info.callCount, 1); + assert.equal(logger.info.args[0][1].event_type, 'fxa_button - view'); + }, + 'screen.force-auth': () => { amplitude( { diff --git a/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js b/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js index 1f37708775..442d6ecc89 100644 --- a/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js +++ b/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js @@ -301,6 +301,46 @@ registerSuite('routes/get-metrics-flow', { assert.ok(metricsData.flowId); }, + 'logs button.view amplitude and flow events if form_type button is set': function() { + request = { + headers: {}, + query: { + entrypoint: 'bar', + form_type: 'button', + service: 'sync', + utm_campaign: 'foo', + utm_content: 'bar', + utm_medium: 'biz', + utm_source: 'baz', + utm_term: 'quix', + }, + }; + instance.process(request, response); + + assert.isFalse(mocks.log.info.called); + + assert.equal(mocks.amplitude.callCount, 2); + let args = mocks.amplitude.args[1]; + assert.equal(args.length, 3); + assert.ok(args[0].flowTime); + assert.ok(args[0].time); + assert.equal(args[0].type, 'screen.button'); + assert.equal(args[2].entrypoint, 'bar'); + assert.equal(args[2].location.country, 'United States'); + assert.equal(args[2].location.state, 'California'); + assert.ok(args[2].flowId); + + assert.equal(mocks.flowEvent.logFlowEvent.callCount, 2); + args = mocks.flowEvent.logFlowEvent.args[1]; + const eventData = args[0]; + const metricsData = args[1]; + assert.ok(eventData.flowTime); + assert.ok(eventData.time); + assert.equal(eventData.type, 'flow.button.view'); + assert.equal(metricsData.entrypoint, 'bar'); + assert.ok(metricsData.flowId); + }, + 'validates CORS': function() { const dfd = this.async(1000); const corsFunc = instance.cors.origin; diff --git a/packages/fxa-shared/metrics/amplitude.js b/packages/fxa-shared/metrics/amplitude.js index 12f645b352..20d49437f5 100644 --- a/packages/fxa-shared/metrics/amplitude.js +++ b/packages/fxa-shared/metrics/amplitude.js @@ -10,6 +10,7 @@ const FOUR_WEEKS = WEEK * 4; const GROUPS = { activity: 'fxa_activity', + button: 'fxa_button', connectDevice: 'fxa_connect_device', email: 'fxa_email', emailFirst: 'fxa_email_first', @@ -34,6 +35,7 @@ const NEWSLETTER_STATES = { const EVENT_PROPERTIES = { [GROUPS.activity]: NOP, + [GROUPS.button]: NOP, [GROUPS.connectDevice]: mapConnectDeviceFlow, [GROUPS.email]: mapEmailType, [GROUPS.emailFirst]: NOP, From 2b13d5ad1ef32446adf9723b702c65e92f79cd6c Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Wed, 21 Aug 2019 11:11:19 -0700 Subject: [PATCH 22/25] chore(async): Convert sign route to async/await --- packages/fxa-auth-server/lib/routes/sign.js | 185 +++++++++----------- 1 file changed, 87 insertions(+), 98 deletions(-) diff --git a/packages/fxa-auth-server/lib/routes/sign.js b/packages/fxa-auth-server/lib/routes/sign.js index 746dff93c6..9ae052148b 100644 --- a/packages/fxa-auth-server/lib/routes/sign.js +++ b/packages/fxa-auth-server/lib/routes/sign.js @@ -6,7 +6,6 @@ const error = require('../error'); const isA = require('joi'); -const P = require('../promise'); const validators = require('./validators'); module.exports = (log, signer, db, domain, devices) => { @@ -56,7 +55,7 @@ module.exports = (log, signer, db, domain, devices) => { const publicKey = request.payload.publicKey; const duration = request.payload.duration; const service = request.query.service; - let deviceId, uid, certResult; + let deviceId; if (request.headers['user-agent']) { const { browser: uaBrowser, @@ -90,107 +89,97 @@ module.exports = (log, signer, db, domain, devices) => { throw error.unverifiedSession(); } - return P.resolve() - .then(() => { - if (sessionToken.deviceId) { - deviceId = sessionToken.deviceId; - } else if (!service || service === 'sync') { - // Synthesize a device record for Sync sessions that don't already have one. - // Include the UA info so that we can synthesize a device name - // for any push notifications. - const deviceInfo = { - uaBrowser: sessionToken.uaBrowser, - uaBrowserVersion: sessionToken.uaBrowserVersion, - uaOS: sessionToken.uaOS, - uaOSVersion: sessionToken.uaOSVersion, - }; - return devices - .upsert(request, sessionToken, deviceInfo) - .then(result => { - deviceId = result.id; - }) - .catch(err => { - // There's a small chance that a device registration was performed - // concurrently. If so, just use that device id. - if (err.errno !== error.ERRNO.DEVICE_CONFLICT) { - throw err; - } - deviceId = err.output.payload.deviceId; - }); - } - }) - .then(() => { - if (publicKey.algorithm === 'RS') { - if (!publicKey.n) { - throw error.missingRequestParameter('n'); - } - if (!publicKey.e) { - throw error.missingRequestParameter('e'); - } - } else { - // DS - if (!publicKey.y) { - throw error.missingRequestParameter('y'); - } - if (!publicKey.p) { - throw error.missingRequestParameter('p'); - } - if (!publicKey.q) { - throw error.missingRequestParameter('q'); - } - if (!publicKey.g) { - throw error.missingRequestParameter('g'); - } + if (sessionToken.deviceId) { + deviceId = sessionToken.deviceId; + } else if (!service || service === 'sync') { + // Synthesize a device record for Sync sessions that don't already have one. + // Include the UA info so that we can synthesize a device name + // for any push notifications. + const deviceInfo = { + uaBrowser: sessionToken.uaBrowser, + uaBrowserVersion: sessionToken.uaBrowserVersion, + uaOS: sessionToken.uaOS, + uaOSVersion: sessionToken.uaOSVersion, + }; + try { + const result = await devices.upsert( + request, + sessionToken, + deviceInfo + ); + deviceId = result.id; + } catch (err) { + // There's a small chance that a device registration was performed + // concurrently. If so, just use that device id. + if (err.errno !== error.ERRNO.DEVICE_CONFLICT) { + throw err; } + deviceId = err.output.payload.deviceId; + } + } - if (!sessionToken.locale) { - if (request.app.acceptLanguage) { - // Log details to sanity-check locale backfilling. - log.info('signer.updateLocale', { - locale: request.app.acceptLanguage, - }); - db.updateLocale(sessionToken.uid, request.app.acceptLanguage); - // meh on the result - } else { - // We're seeing a surprising number of accounts that don't get - // a proper locale. Log details to help debug this. - log.info('signer.emptyLocale', { - email: sessionToken.email, - locale: request.app.acceptLanguage, - agent: request.headers['user-agent'], - }); - } - } - uid = sessionToken.uid; + if (publicKey.algorithm === 'RS') { + if (!publicKey.n) { + throw error.missingRequestParameter('n'); + } + if (!publicKey.e) { + throw error.missingRequestParameter('e'); + } + } else { + // DS + if (!publicKey.y) { + throw error.missingRequestParameter('y'); + } + if (!publicKey.p) { + throw error.missingRequestParameter('p'); + } + if (!publicKey.q) { + throw error.missingRequestParameter('q'); + } + if (!publicKey.g) { + throw error.missingRequestParameter('g'); + } + } - return signer.sign({ - email: `${uid}@${domain}`, - publicKey: publicKey, - domain: domain, - duration: duration, - generation: sessionToken.verifierSetAt, - lastAuthAt: sessionToken.lastAuthAt(), - verifiedEmail: sessionToken.email, - deviceId: deviceId, - tokenVerified: sessionToken.tokenVerified, - authenticationMethods: Array.from( - sessionToken.authenticationMethods - ), - authenticatorAssuranceLevel: - sessionToken.authenticatorAssuranceLevel, - profileChangedAt: sessionToken.profileChangedAt, + if (!sessionToken.locale) { + if (request.app.acceptLanguage) { + // Log details to sanity-check locale backfilling. + log.info('signer.updateLocale', { + locale: request.app.acceptLanguage, }); - }) - .then(result => { - certResult = result; - return request.emitMetricsEvent('account.signed', { - uid: uid, - device_id: deviceId, + db.updateLocale(sessionToken.uid, request.app.acceptLanguage); + // meh on the result + } else { + // We're seeing a surprising number of accounts that don't get + // a proper locale. Log details to help debug this. + log.info('signer.emptyLocale', { + email: sessionToken.email, + locale: request.app.acceptLanguage, + agent: request.headers['user-agent'], }); - }) - .then(() => { - return certResult; - }); + } + } + const uid = sessionToken.uid; + + const certResult = await signer.sign({ + email: `${uid}@${domain}`, + publicKey: publicKey, + domain: domain, + duration: duration, + generation: sessionToken.verifierSetAt, + lastAuthAt: sessionToken.lastAuthAt(), + verifiedEmail: sessionToken.email, + deviceId: deviceId, + tokenVerified: sessionToken.tokenVerified, + authenticationMethods: Array.from(sessionToken.authenticationMethods), + authenticatorAssuranceLevel: sessionToken.authenticatorAssuranceLevel, + profileChangedAt: sessionToken.profileChangedAt, + }); + request.emitMetricsEvent('account.signed', { + uid: uid, + device_id: deviceId, + }); + return certResult; }, }, ]; From 8997205d92ad837d937c6a88737ac50022cf4eab Mon Sep 17 00:00:00 2001 From: Jared Hirsch Date: Wed, 21 Aug 2019 22:53:10 -0700 Subject: [PATCH 23/25] chore(async): Convert routes/util.js to async/await --- packages/fxa-auth-server/lib/routes/util.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/fxa-auth-server/lib/routes/util.js b/packages/fxa-auth-server/lib/routes/util.js index 848bdd723b..22d795586c 100644 --- a/packages/fxa-auth-server/lib/routes/util.js +++ b/packages/fxa-auth-server/lib/routes/util.js @@ -15,14 +15,13 @@ module.exports = (log, config, redirectDomain) => { method: 'POST', path: '/get_random_bytes', handler: async function getRandomBytes(request) { - return random(32).then( - bytes => { - return { data: bytes.toString('hex') }; - }, - err => { - throw err; - } - ); + let bytes; + try { + bytes = await random(32); + return { data: bytes.toString('hex') }; + } catch (err) { + throw err; + } }, }, { From 3268114b4a5d8748720eb787385a540d7ab0fa31 Mon Sep 17 00:00:00 2001 From: Vijay Budhram Date: Wed, 21 Aug 2019 13:41:13 -0700 Subject: [PATCH 24/25] chore(async): Convert totp routes to async/await --- packages/fxa-auth-server/lib/routes/totp.js | 411 ++++++++------------ 1 file changed, 170 insertions(+), 241 deletions(-) diff --git a/packages/fxa-auth-server/lib/routes/totp.js b/packages/fxa-auth-server/lib/routes/totp.js index e3537060b2..c8c5c9f0e4 100644 --- a/packages/fxa-auth-server/lib/routes/totp.js +++ b/packages/fxa-auth-server/lib/routes/totp.js @@ -7,9 +7,9 @@ const errors = require('../error'); const validators = require('./validators'); const isA = require('joi'); -const P = require('../promise'); const otplib = require('otplib'); const qrcode = require('qrcode'); +const { promisify } = require('util'); const METRICS_CONTEXT_SCHEMA = require('../metrics/context').schema; module.exports = (log, db, mailer, customs, config) => { @@ -31,7 +31,7 @@ module.exports = (log, db, mailer, customs, config) => { const RECOVERY_CODE_COUNT = (config.recoveryCodes && config.recoveryCodes.count) || 8; - P.promisify(qrcode.toDataURL); + promisify(qrcode.toDataURL); return [ { @@ -56,52 +56,36 @@ module.exports = (log, db, mailer, customs, config) => { handler: async function(request) { log.begin('totp.create', request); - let response; - let secret; const sessionToken = request.auth.credentials; const uid = sessionToken.uid; + const authenticator = new otplib.authenticator.Authenticator(); authenticator.options = otplib.authenticator.options; - return customs - .check(request, sessionToken.email, 'totpCreate') - .then(() => { - secret = authenticator.generateSecret(); - return createTotpToken(); - }) - .then(emitMetrics) - .then(createResponse) - .then(() => response); + await customs.check(request, sessionToken.email, 'totpCreate'); - function createTotpToken() { - if (sessionToken.tokenVerificationId) { - throw errors.unverifiedSession(); - } - - return db.createTotpToken(uid, secret, 0); + if (sessionToken.tokenVerificationId) { + throw errors.unverifiedSession(); } - function createResponse() { - const otpauth = authenticator.keyuri( - sessionToken.email, - config.serviceName, - secret - ); + const secret = authenticator.generateSecret(); + await db.createTotpToken(uid, secret, 0); - return qrcode.toDataURL(otpauth, qrCodeOptions).then(qrCodeUrl => { - response = { - qrCodeUrl, - secret, - }; - }); - } + log.info('totpToken.created', { uid }); + await request.emitMetricsEvent('totpToken.created', { uid }); - function emitMetrics() { - log.info('totpToken.created', { - uid: uid, - }); - return request.emitMetricsEvent('totpToken.created', { uid: uid }); - } + const otpauth = authenticator.keyuri( + sessionToken.email, + config.serviceName, + secret + ); + + const qrCodeUrl = await qrcode.toDataURL(otpauth, qrCodeOptions); + + return { + qrCodeUrl, + secret, + }; }, }, { @@ -117,69 +101,57 @@ module.exports = (log, db, mailer, customs, config) => { log.begin('totp.destroy', request); const sessionToken = request.auth.credentials; - const uid = sessionToken.uid; - let hasEnabledToken = false; + const { uid } = sessionToken; - return customs - .check(request, sessionToken.email, 'totpDestroy') - .then(checkTotpToken) - .then(deleteTotpToken) - .then(sendEmailNotification) - .then(() => { - return {}; - }); + await customs.check(request, sessionToken.email, 'totpDestroy'); - function checkTotpToken() { - // If a TOTP token is not verified, we should be able to safely delete regardless of session - // verification state. - return totpUtils - .hasTotpToken({ uid }) - .then(result => (hasEnabledToken = result)); + // If a TOTP token is not verified, we should be able to safely delete regardless of session + // verification state. + const hasEnabledToken = await totpUtils.hasTotpToken({ uid }); + + // To help prevent users from getting locked out of their account, sessions created and verified + // before TOTP was enabled, can remove TOTP. Any new sessions after TOTP is enabled, are only considered + // verified *if and only if* they have verified a TOTP code. + if (!sessionToken.tokenVerified) { + throw errors.unverifiedSession(); } - function deleteTotpToken() { - // To help prevent users from getting locked out of their account, sessions created and verified - // before TOTP was enabled, can remove TOTP. Any new sessions after TOTP is enabled, are only considered - // verified *if and only if* they have verified a TOTP code. - if (!sessionToken.tokenVerified) { - throw errors.unverifiedSession(); - } + await db.deleteTotpToken(uid); - return db.deleteTotpToken(uid).then(() => { - return log.notifyAttachedServices('profileDataChanged', request, { - uid: sessionToken.uid, - }); - }); - } + await log.notifyAttachedServices('profileDataChanged', request, { + uid, + }); - function sendEmailNotification() { - if (!hasEnabledToken) { - return; - } + if (hasEnabledToken) { + const account = await db.account(uid); + const geoData = request.app.geo; + const ip = request.app.clientAddress; + const emailOptions = { + acceptLanguage: request.app.acceptLanguage, + ip, + location: geoData.location, + timeZone: geoData.timeZone, + uaBrowser: request.app.ua.browser, + uaBrowserVersion: request.app.ua.browserVersion, + uaOS: request.app.ua.os, + uaOSVersion: request.app.ua.osVersion, + uaDeviceType: request.app.ua.deviceType, + uid, + }; - return db.account(sessionToken.uid).then(account => { - const geoData = request.app.geo; - const ip = request.app.clientAddress; - const emailOptions = { - acceptLanguage: request.app.acceptLanguage, - ip: ip, - location: geoData.location, - timeZone: geoData.timeZone, - uaBrowser: request.app.ua.browser, - uaBrowserVersion: request.app.ua.browserVersion, - uaOS: request.app.ua.os, - uaOSVersion: request.app.ua.osVersion, - uaDeviceType: request.app.ua.deviceType, - uid: sessionToken.uid, - }; - - mailer.sendPostRemoveTwoStepAuthNotification( + try { + await mailer.sendPostRemoveTwoStepAuthNotification( account.emails, account, emailOptions ); - }); + } catch (err) { + // If email fails, log the error without aborting the operation. + log.error('mailer.sendPostRemoveTwoStepAuthNotification', { err }); + } } + + return {}; }, }, { @@ -201,42 +173,30 @@ module.exports = (log, db, mailer, customs, config) => { const sessionToken = request.auth.credentials; let exists = false; - return getTotpToken().then(() => { - return { exists }; - }); - - function getTotpToken() { - return P.resolve() - .then(() => { - if (sessionToken.tokenVerificationId) { - throw errors.unverifiedSession(); - } - - return db.totpToken(sessionToken.uid); - }) - - .then( - token => { - // If the token is not verified, lets delete it and report that - // it doesn't exist. This will help prevent some edge - // cases where the user started creating a token but never completed. - if (!token.verified) { - return db.deleteTotpToken(sessionToken.uid).then(() => { - exists = false; - }); - } else { - exists = true; - } - }, - err => { - if (err.errno === errors.ERRNO.TOTP_TOKEN_NOT_FOUND) { - exists = false; - return; - } - throw err; - } - ); + if (sessionToken.tokenVerificationId) { + throw errors.unverifiedSession(); } + + try { + const token = await db.totpToken(sessionToken.uid); + + // If the token is not verified, lets delete it and report that + // it doesn't exist. This will help prevent some edge + // cases where the user started creating a token but never completed. + if (!token.verified) { + await db.deleteTotpToken(sessionToken.uid); + } else { + exists = true; + } + } catch (err) { + if (err.errno === errors.ERRNO.TOTP_TOKEN_NOT_FOUND) { + exists = false; + } else { + throw err; + } + } + + return { exists }; }, }, { @@ -271,141 +231,110 @@ module.exports = (log, db, mailer, customs, config) => { const code = request.payload.code; const sessionToken = request.auth.credentials; - const uid = sessionToken.uid; - const email = sessionToken.email; - let sharedSecret, isValidCode, tokenVerified, recoveryCodes; + const { uid, email } = sessionToken; + let recoveryCodes; - return customs - .check(request, email, 'verifyTotpCode') - .then(getTotpToken) - .then(verifyTotpCode) - .then(verifyTotpToken) - .then(replaceRecoveryCodes) - .then(verifySession) - .then(emitMetrics) - .then(sendEmailNotification) - .then(() => { - const response = { - success: isValidCode, - }; + await customs.check(request, email, 'verifyTotpCode'); - if (recoveryCodes) { - response.recoveryCodes = recoveryCodes; - } + const token = await db.totpToken(sessionToken.uid); + const sharedSecret = token.sharedSecret; + const tokenVerified = token.verified; - return response; - }); - - function getTotpToken() { - return db.totpToken(sessionToken.uid).then(token => { - sharedSecret = token.sharedSecret; - tokenVerified = token.verified; - }); - } - - function verifyTotpCode() { - const authenticator = new otplib.authenticator.Authenticator(); - authenticator.options = Object.assign( - {}, - otplib.authenticator.options, - { secret: sharedSecret } - ); - isValidCode = authenticator.check(code, sharedSecret); - } + const authenticator = new otplib.authenticator.Authenticator(); + authenticator.options = Object.assign( + {}, + otplib.authenticator.options, + { secret: sharedSecret } + ); + const isValidCode = authenticator.check(code, sharedSecret); // Once a valid TOTP code has been detected, the token becomes verified // and enabled for the user. - function verifyTotpToken() { - if (isValidCode && !tokenVerified) { - return db - .updateTotpToken(sessionToken.uid, { - verified: true, - enabled: true, - }) - .then(() => { - return log.notifyAttachedServices( - 'profileDataChanged', - request, - { - uid: sessionToken.uid, - } - ); - }); - } + if (isValidCode && !tokenVerified) { + await db.updateTotpToken(sessionToken.uid, { + verified: true, + enabled: true, + }); + + await log.notifyAttachedServices('profileDataChanged', request, { + uid: sessionToken.uid, + }); } // If this is a new registration, replace and generate recovery codes - function replaceRecoveryCodes() { - if (isValidCode && !tokenVerified) { - return db - .replaceRecoveryCodes(uid, RECOVERY_CODE_COUNT) - .then(result => (recoveryCodes = result)); - } + if (isValidCode && !tokenVerified) { + recoveryCodes = await db.replaceRecoveryCodes( + uid, + RECOVERY_CODE_COUNT + ); } // If a valid code was sent, this verifies the session using the `totp-2fa` method. - function verifySession() { - if (isValidCode && sessionToken.authenticatorAssuranceLevel <= 1) { - return db.verifyTokensWithMethod(sessionToken.id, 'totp-2fa'); - } + if (isValidCode && sessionToken.authenticatorAssuranceLevel <= 1) { + await db.verifyTokensWithMethod(sessionToken.id, 'totp-2fa'); } - function emitMetrics() { - if (isValidCode) { - log.info('totp.verified', { - uid: uid, - }); - request.emitMetricsEvent('totpToken.verified', { uid: uid }); - } else { - log.info('totp.unverified', { - uid: uid, - }); - request.emitMetricsEvent('totpToken.unverified', { uid: uid }); - } + if (isValidCode) { + log.info('totp.verified', { uid }); + await request.emitMetricsEvent('totpToken.verified', { uid }); + } else { + log.info('totp.unverified', { uid }); + await request.emitMetricsEvent('totpToken.unverified', { uid }); } - function sendEmailNotification() { - return db.account(sessionToken.uid).then(account => { - const geoData = request.app.geo; - const ip = request.app.clientAddress; - const service = request.payload.service || request.query.service; - const emailOptions = { - acceptLanguage: request.app.acceptLanguage, - ip: ip, - location: geoData.location, - service: service, - timeZone: geoData.timeZone, - uaBrowser: request.app.ua.browser, - uaBrowserVersion: request.app.ua.browserVersion, - uaOS: request.app.ua.os, - uaOSVersion: request.app.ua.osVersion, - uaDeviceType: request.app.ua.deviceType, - uid: sessionToken.uid, - }; + await sendEmailNotification(); - // Check to see if this token was just verified, if it is, then this means - // the user has enabled two step authentication, otherwise send new device - // login email. - if (isValidCode && !tokenVerified) { - return mailer.sendPostAddTwoStepAuthNotification( - account.emails, - account, - emailOptions - ); - } + const response = { + success: isValidCode, + }; - // All accounts that have a TOTP token, force the session to be verified, therefore - // we can not check `session.mustVerify=true` to determine sending the new device - // login email. Instead, lets perform a basic check that the service is `sync`, otherwise - // don't send. - if (isValidCode && service === 'sync') { - return mailer.sendNewDeviceLoginNotification( - account.emails, - account, - emailOptions - ); - } - }); + if (recoveryCodes) { + response.recoveryCodes = recoveryCodes; + } + + return response; + + async function sendEmailNotification() { + const account = await db.account(sessionToken.uid); + const geoData = request.app.geo; + const ip = request.app.clientAddress; + const service = request.payload.service || request.query.service; + const emailOptions = { + acceptLanguage: request.app.acceptLanguage, + ip: ip, + location: geoData.location, + service: service, + timeZone: geoData.timeZone, + uaBrowser: request.app.ua.browser, + uaBrowserVersion: request.app.ua.browserVersion, + uaOS: request.app.ua.os, + uaOSVersion: request.app.ua.osVersion, + uaDeviceType: request.app.ua.deviceType, + uid: sessionToken.uid, + }; + + // Check to see if this token was just verified, if it is, then this means + // the user has enabled two step authentication, otherwise send new device + // login email. + if (isValidCode && !tokenVerified) { + return mailer.sendPostAddTwoStepAuthNotification( + account.emails, + account, + emailOptions + ); + } + + // All accounts that have a TOTP token, force the session to be verified, therefore + // we can not check `session.mustVerify=true` to determine sending the new device + // login email. Instead, lets perform a basic check that the service is `sync`, otherwise + // don't send. + if (isValidCode && service === 'sync') { + return mailer.sendNewDeviceLoginNotification( + account.emails, + account, + emailOptions + ); + } } }, }, From 16f553bbaafc2aa954413eb0e508e84e3c2cb039 Mon Sep 17 00:00:00 2001 From: irrationalagent Date: Tue, 27 Aug 2019 10:05:05 -0600 Subject: [PATCH 25/25] feat(metrics): change name of button event --- packages/fxa-content-server/server/lib/amplitude.js | 2 +- .../server/lib/routes/get-metrics-flow.js | 4 ++-- packages/fxa-content-server/tests/server/amplitude.js | 6 +++--- .../tests/server/routes/get-metrics-flow.js | 4 ++-- packages/fxa-shared/metrics/amplitude.js | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/fxa-content-server/server/lib/amplitude.js b/packages/fxa-content-server/server/lib/amplitude.js index f435553976..c926ca05a8 100644 --- a/packages/fxa-content-server/server/lib/amplitude.js +++ b/packages/fxa-content-server/server/lib/amplitude.js @@ -74,9 +74,9 @@ const EVENTS = { }; const VIEW_ENGAGE_SUBMIT_EVENT_GROUPS = { - button: GROUPS.button, 'enter-email': GROUPS.emailFirst, 'force-auth': GROUPS.login, + 'rp-button': GROUPS.button, settings: GROUPS.settings, signin: GROUPS.login, signup: GROUPS.registration, diff --git a/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js b/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js index 06ad7c2083..23034b505a 100644 --- a/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js +++ b/packages/fxa-content-server/server/lib/routes/get-metrics-flow.js @@ -30,8 +30,8 @@ module.exports = function(config) { const FLOW_EVENT_NAME = 'flow.begin'; const ENTER_EMAIL_SCREEN_EVENT_NAME = 'screen.enter-email'; const ENTER_EMAIL_FLOW_EVENT_NAME = 'flow.enter-email.view'; - const BUTTON_SCREEN_EVENT_NAME = 'screen.button'; - const BUTTON_FLOW_EVENT_NAME = 'flow.button.view'; + const BUTTON_SCREEN_EVENT_NAME = 'screen.rp-button'; + const BUTTON_FLOW_EVENT_NAME = 'flow.rp-button.view'; const FORM_TYPE_EMAIL = 'email'; const FORM_TYPE_BUTTON = 'button'; const ALLOWED_CORS_ORIGINS = config.get('allowed_metrics_flow_cors_origins'); diff --git a/packages/fxa-content-server/tests/server/amplitude.js b/packages/fxa-content-server/tests/server/amplitude.js index ddc7e54444..4ebdfcf268 100644 --- a/packages/fxa-content-server/tests/server/amplitude.js +++ b/packages/fxa-content-server/tests/server/amplitude.js @@ -1050,11 +1050,11 @@ registerSuite('amplitude', { assert.equal(logger.info.args[0][1].event_type, 'fxa_email_first - view'); }, - 'screen.button': () => { + 'screen.rp-button': () => { amplitude( { time: 'a', - type: 'screen.button', + type: 'screen.rp-button', }, { connection: {}, @@ -1070,7 +1070,7 @@ registerSuite('amplitude', { ); assert.equal(logger.info.callCount, 1); - assert.equal(logger.info.args[0][1].event_type, 'fxa_button - view'); + assert.equal(logger.info.args[0][1].event_type, 'fxa_rp_button - view'); }, 'screen.force-auth': () => { diff --git a/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js b/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js index 442d6ecc89..8bcfee54fe 100644 --- a/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js +++ b/packages/fxa-content-server/tests/server/routes/get-metrics-flow.js @@ -324,7 +324,7 @@ registerSuite('routes/get-metrics-flow', { assert.equal(args.length, 3); assert.ok(args[0].flowTime); assert.ok(args[0].time); - assert.equal(args[0].type, 'screen.button'); + assert.equal(args[0].type, 'screen.rp-button'); assert.equal(args[2].entrypoint, 'bar'); assert.equal(args[2].location.country, 'United States'); assert.equal(args[2].location.state, 'California'); @@ -336,7 +336,7 @@ registerSuite('routes/get-metrics-flow', { const metricsData = args[1]; assert.ok(eventData.flowTime); assert.ok(eventData.time); - assert.equal(eventData.type, 'flow.button.view'); + assert.equal(eventData.type, 'flow.rp-button.view'); assert.equal(metricsData.entrypoint, 'bar'); assert.ok(metricsData.flowId); }, diff --git a/packages/fxa-shared/metrics/amplitude.js b/packages/fxa-shared/metrics/amplitude.js index 20d49437f5..521bd8ba80 100644 --- a/packages/fxa-shared/metrics/amplitude.js +++ b/packages/fxa-shared/metrics/amplitude.js @@ -10,7 +10,7 @@ const FOUR_WEEKS = WEEK * 4; const GROUPS = { activity: 'fxa_activity', - button: 'fxa_button', + button: 'fxa_rp_button', connectDevice: 'fxa_connect_device', email: 'fxa_email', emailFirst: 'fxa_email_first',