diff --git a/config/watcher.ts b/config/watcher.ts index 89da62bf6..f974e4283 100644 --- a/config/watcher.ts +++ b/config/watcher.ts @@ -40,6 +40,22 @@ const config: Config = { paths: [], executor: new LongRunningExecutor("npm run start:webpackDevServer"), }, + runDocz: { + paths: [], + executor: new LongRunningExecutor("npm run docz -- dev"), + }, + }, + defaultSet: "client", + sets: { + server: ["runServer"], + client: [ + "runServer", + "runWebpackDevServer", + "compileCSSTypes", + "compileRelayStream", + ], + docz: ["runDocz", "compileCSSTypes"], + compile: ["compileCSSTypes", "compileRelayStream"], }, }; diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index fcbb75fe2..359d53f7b 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -180,7 +180,7 @@ module.exports = { // All available locales can be loadable on demand. // To restrict available locales set: - // availableLocales: ["en-US"] + // availableLocales: ["en-US"], }, }, ], @@ -247,6 +247,7 @@ module.exports = { options: { modules: true, importLoaders: 1, + localIdentName: "[name]-[local]-[hash:base64:5]", }, }, { diff --git a/config/webpackDevServer.config.js b/config/webpackDevServer.config.js index 668433652..b3e6f1578 100644 --- a/config/webpackDevServer.config.js +++ b/config/webpackDevServer.config.js @@ -9,6 +9,7 @@ const paths = require("./paths"); const protocol = process.env.HTTPS === "true" ? "https" : "http"; const host = process.env.HOST || "0.0.0.0"; const serverPort = process.env.PORT || 3000; +const doczPort = process.env.DOCZ_PORT || 3030; module.exports = function(proxy, allowedHost) { return { @@ -81,8 +82,8 @@ module.exports = function(proxy, allowedHost) { disableDotRule: true, }, public: allowedHost, - // Proxy to the graphql server. proxy: proxy || { + // Proxy to the graphql server. "/api": { target: `http://localhost:${serverPort}`, }, diff --git a/doczrc.js b/doczrc.js index 19542a6b6..9d7ef1b12 100644 --- a/doczrc.js +++ b/doczrc.js @@ -14,7 +14,7 @@ export default { source: "./src", typescript: true, host: process.env.HOST || "0.0.0.0", - port: parseInt(process.env.DOCZ_PORT, 10) || 3000, + port: parseInt(process.env.DOCZ_PORT, 10) || 3030, modifyBundlerConfig: config => { config.module.rules.push({ test: /\.css$/, diff --git a/package-lock.json b/package-lock.json index 9d09a9577..573b9bc4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -597,18 +597,18 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.0.0-beta.51.tgz", - "integrity": "sha1-ovJwH/ZdAGJoy8hK0buO6rY4sMQ=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.0.0-beta.53.tgz", + "integrity": "sha1-V1oWPLFEsJS09yQOQ0utrYMexFU=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-beta.53" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.51.tgz", - "integrity": "sha1-D2pfK20cZERBP4+rYJQNebY8IDE=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.53.tgz", + "integrity": "sha1-1kRYY2/8JYtCcUqd2Trrb4uM8+0=", "dev": true } } @@ -773,79 +773,79 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.52.tgz", - "integrity": "sha1-AQTvGDzcL9Q9CGAhHMzOee8YAX4=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.53.tgz", + "integrity": "sha1-68P7ocWmyHQ7kJQD7NPn42gcr6U=", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.0.0-beta.52", - "@babel/helper-plugin-utils": "7.0.0-beta.52", - "@babel/helper-simple-access": "7.0.0-beta.52" + "@babel/helper-module-transforms": "7.0.0-beta.53", + "@babel/helper-plugin-utils": "7.0.0-beta.53", + "@babel/helper-simple-access": "7.0.0-beta.53" }, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.52.tgz", - "integrity": "sha1-GSSDv6DR5GfBAVccIQKcy3SvKAE=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.53.tgz", + "integrity": "sha1-mA0VYLhjV1v1o3eSUDfgEy71kh4=", "dev": true, "requires": { - "@babel/highlight": "7.0.0-beta.52" + "@babel/highlight": "7.0.0-beta.53" } }, "@babel/helper-module-imports": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.52.tgz", - "integrity": "sha1-cIQOg66JH5RwLGxhN4fEjuPJZbs=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.53.tgz", + "integrity": "sha1-5zXmqjClBLD52Fw4ptRwqfSqgdk=", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.52", + "@babel/types": "7.0.0-beta.53", "lodash": "^4.17.5" } }, "@babel/helper-module-transforms": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.52.tgz", - "integrity": "sha1-vIRE6tJSo3LJKJlq4XM96vOwjJA=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.53.tgz", + "integrity": "sha1-e6IUzcyPhiPy0Xl96v8f80mqzhM=", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0-beta.52", - "@babel/helper-simple-access": "7.0.0-beta.52", - "@babel/helper-split-export-declaration": "7.0.0-beta.52", - "@babel/template": "7.0.0-beta.52", - "@babel/types": "7.0.0-beta.52", + "@babel/helper-module-imports": "7.0.0-beta.53", + "@babel/helper-simple-access": "7.0.0-beta.53", + "@babel/helper-split-export-declaration": "7.0.0-beta.53", + "@babel/template": "7.0.0-beta.53", + "@babel/types": "7.0.0-beta.53", "lodash": "^4.17.5" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.52.tgz", - "integrity": "sha1-LwWMX3w6X+S8IZA2sueOEb3et60=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.53.tgz", + "integrity": "sha1-1kRYY2/8JYtCcUqd2Trrb4uM8+0=", "dev": true }, "@babel/helper-simple-access": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.52.tgz", - "integrity": "sha1-0plc6cTJ8D/nKvkiNzZ3qOtkJO4=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.53.tgz", + "integrity": "sha1-cvbbmr5C+GgfpvAo79WdgVRHUrM=", "dev": true, "requires": { - "@babel/template": "7.0.0-beta.52", - "@babel/types": "7.0.0-beta.52", + "@babel/template": "7.0.0-beta.53", + "@babel/types": "7.0.0-beta.53", "lodash": "^4.17.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.52.tgz", - "integrity": "sha1-SqxPMOpjhK82duBLUkZydjLkYN8=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.53.tgz", + "integrity": "sha1-rvVLix+ZYW6jfJhHhxajeAJjMls=", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.52" + "@babel/types": "7.0.0-beta.53" } }, "@babel/highlight": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.52.tgz", - "integrity": "sha1-7ySTFDLwYVXnvDnNuKaze0oos9A=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.53.tgz", + "integrity": "sha1-9OlS2tF4fSBeGI0+OEzc5JyjaPs=", "dev": true, "requires": { "chalk": "^2.0.0", @@ -854,27 +854,27 @@ } }, "@babel/parser": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.52.tgz", - "integrity": "sha1-TpNbYs2b+HK9N7zx9j2C/nsCN6I=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.53.tgz", + "integrity": "sha1-H0XrYXv5Rj1IKywE00nZ5O2/SJI=", "dev": true }, "@babel/template": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.52.tgz", - "integrity": "sha1-ROGPrDglH1f5JRHWdI8JWrAvmW4=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.53.tgz", + "integrity": "sha1-MyIpCQDQsYewpxdDgeHzu3EFDS4=", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.52", - "@babel/parser": "7.0.0-beta.52", - "@babel/types": "7.0.0-beta.52", + "@babel/code-frame": "7.0.0-beta.53", + "@babel/parser": "7.0.0-beta.53", + "@babel/types": "7.0.0-beta.53", "lodash": "^4.17.5" } }, "@babel/types": { - "version": "7.0.0-beta.52", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.52.tgz", - "integrity": "sha1-o+ViCxU0slOlCrzyIitSDiOxbaI=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.53.tgz", + "integrity": "sha1-GaRhwNpRVZXftnQLS0Xce7Dms3U=", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1108,19 +1108,19 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.0.0-beta.51.tgz", - "integrity": "sha1-HZ5bp7+T/jdIPMMh28mn67pf81s=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.0.0-beta.53.tgz", + "integrity": "sha1-d10qU+Rv1KdWLzFP5nSmrS+Dc8A=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/plugin-syntax-typescript": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-beta.53", + "@babel/plugin-syntax-typescript": "7.0.0-beta.53" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.51.tgz", - "integrity": "sha1-D2pfK20cZERBP4+rYJQNebY8IDE=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.53.tgz", + "integrity": "sha1-1kRYY2/8JYtCcUqd2Trrb4uM8+0=", "dev": true } } @@ -1238,31 +1238,39 @@ } }, "@babel/preset-typescript": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.0.0-beta.51.tgz", - "integrity": "sha1-lVELKxSTxrIQpJm3PoDNip4vitE=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.0.0-beta.53.tgz", + "integrity": "sha1-Ffrd7M4nuQYrpQ4aE8IB4s4qubA=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0-beta.51", - "@babel/plugin-transform-typescript": "7.0.0-beta.51" + "@babel/helper-plugin-utils": "7.0.0-beta.53", + "@babel/plugin-transform-typescript": "7.0.0-beta.53" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.51.tgz", - "integrity": "sha1-D2pfK20cZERBP4+rYJQNebY8IDE=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.53.tgz", + "integrity": "sha1-1kRYY2/8JYtCcUqd2Trrb4uM8+0=", "dev": true } } }, "@babel/runtime": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.51.tgz", - "integrity": "sha1-SLjtGDBwNMZiD2Q1FGUMoszAFlo=", + "version": "7.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.53.tgz", + "integrity": "sha1-nfIq40gjzon3kAYFlLg+5XLixdI=", "dev": true, "requires": { "core-js": "^2.5.7", - "regenerator-runtime": "^0.11.1" + "regenerator-runtime": "^0.12.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.0.tgz", + "integrity": "sha512-SpV2LhF5Dm9UYMEprB3WwsBnWwqTrmjrm2UZb42cl2G02WVGgx7Mg8aa9pdLEKp6hZ+/abcMc2NxKA8f02EG2w==", + "dev": true + } } }, "@babel/template": { @@ -1330,14 +1338,14 @@ "dev": true }, "@emotion/babel-utils": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@emotion/babel-utils/-/babel-utils-0.6.4.tgz", - "integrity": "sha1-Lqxp6zGulE++SioOc2o121+BCGY=", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-utils/-/babel-utils-0.6.5.tgz", + "integrity": "sha1-NNeETrUy0Rdcj8cBdb63TQcb++s=", "dev": true, "requires": { "@emotion/hash": "^0.6.3", - "@emotion/memoize": "^0.6.2", - "@emotion/serialize": "^0.8.2", + "@emotion/memoize": "^0.6.3", + "@emotion/serialize": "^0.8.3", "convert-source-map": "^1.5.1", "find-root": "^1.1.0", "source-map": "^0.7.2" @@ -1358,28 +1366,28 @@ "dev": true }, "@emotion/is-prop-valid": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.6.2.tgz", - "integrity": "sha1-p2oWsXT/A/jjon+vYlm6zSGgKtw=", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.6.3.tgz", + "integrity": "sha1-sElW4tZVAn/ojGI0Zp/XBk+wccw=", "dev": true, "requires": { - "@emotion/memoize": "^0.6.2" + "@emotion/memoize": "^0.6.3" } }, "@emotion/memoize": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.2.tgz", - "integrity": "sha1-E44AszLVGbTjB73tYVnlukiro64=", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.3.tgz", + "integrity": "sha1-ZDeaHWr2+NT+i9bv6dnoJOpLItg=", "dev": true }, "@emotion/serialize": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.8.2.tgz", - "integrity": "sha1-07LK3fyTEH1jx5/Gu8EeVV47di4=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.8.3.tgz", + "integrity": "sha1-D61Vual/lSPmsf1vtvdLbLQcf4s=", "dev": true, "requires": { "@emotion/hash": "^0.6.3", - "@emotion/memoize": "^0.6.2", + "@emotion/memoize": "^0.6.3", "@emotion/unitless": "^0.6.3", "@emotion/utils": "^0.7.1" } @@ -1403,18 +1411,18 @@ "dev": true }, "@mdx-js/loader": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-0.11.1.tgz", - "integrity": "sha512-6RSmpiePjo+UMdx0wMMIq5P14WhlytdMSJ6vRO1ARc7dF8893RjVTvfXxFvZoYlFPyTEH4Ikxg8MZoiEFvPBmw==", + "version": "0.13.1-1", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-0.13.1-1.tgz", + "integrity": "sha512-jOz477iknGVwfOdw8TAHsPkErRXppICDpZZvKf8C/8YLGTDhpkebU5gawWM0YwQtI0k8MfexgcricIvd4iJu8w==", "dev": true, "requires": { - "@mdx-js/tag": "^0.11.0" + "@mdx-js/tag": "^0.13.1-1" } }, "@mdx-js/mdx": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-0.10.1.tgz", - "integrity": "sha512-2Mip8+44opmpPcJ5h7dtZ31pW9/ntslCEOsZk5xuP+SaafQzUjTRlDh6ifgp5+MDBgvjMzdAuHv3WgO2jj0Zyw==", + "version": "0.13.1-1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-0.13.1-1.tgz", + "integrity": "sha512-XofSLeW49U/OIIybhVfwmy+tTXekGzb+Bf90G5dM0AVn2eC65O1ozIwxgpTzdBDNCD4Hfu9SxSlt8208mv2w2w==", "dev": true, "requires": { "@mdx-js/mdxast": "^0.10.0", @@ -1451,11 +1459,12 @@ } }, "@mdx-js/tag": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@mdx-js/tag/-/tag-0.11.0.tgz", - "integrity": "sha512-o//BoBPtlyYC5HdohjpaQ9+4epL2a9o5JYYWhRzwF6pMJnjyDnmulz88178Yu5GuI8AVxwqwbCHZ0qvXSUSDEg==", + "version": "0.13.1-1", + "resolved": "https://registry.npmjs.org/@mdx-js/tag/-/tag-0.13.1-1.tgz", + "integrity": "sha512-ke76StkCSy10wj2fAX/HK6yOtZy62Eq52ECKhJYm+E6SdfKNPbX8CkNfJ/VjinjCfMOHx7n6UyA8Zpb6M7mhqw==", "dev": true, "requires": { + "create-react-context": "^0.2.2", "prop-types": "^15.6.1" } }, @@ -1497,6 +1506,12 @@ "debug": "^2.6.8" } }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, "@sindresorhus/slugify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-0.3.0.tgz", @@ -1516,10 +1531,16 @@ "samsam": "1.3.0" } }, + "@sinonjs/samsam": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.0.0.tgz", + "integrity": "sha512-D7VxhADdZbDJ0HjUTMnSQ5xIGb4H2yWpg8k9Sf1T08zfFiQYlaxM8LZydpR4FQ2E6LZJX8IlabNZ5io4vdChwg==", + "dev": true + }, "@types/bluebird": { - "version": "3.5.20", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.20.tgz", - "integrity": "sha512-Wk41MVdF+cHBfVXj/ufUHJeO3BlIQr1McbHZANErMykaCWeDSZbH5erGjNBw2/3UlRdSxZbLfSuQTzFmPOYFsA==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.21.tgz", + "integrity": "sha512-6UNEwyw+6SGMC/WMI0ld0PS4st7Qq51qgguFrFizOSpGvZiqe9iswztFSdZvwJBEhLOy2JaxNE6VC7yMAlbfyQ==", "dev": true }, "@types/body-parser": { @@ -1533,9 +1554,9 @@ } }, "@types/bson": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-1.0.8.tgz", - "integrity": "sha512-PMa4nkRhLaqwsXQDDTzGbTyCIpej0ERznyAP9fyuGnlsmUbcC4Y25mdqjibYjkOPNyK/BWWUKneruaKHcS3Q8g==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-1.0.10.tgz", + "integrity": "sha512-gRf+Qy5Qiyjz28ZkPRP37bDHtGG67op/lV2qcIMhWUq4vIMJ6/j13ajeYH7LFhJ5RNflyLHmdANPGDXZ5a8EzQ==", "dev": true, "requires": { "@types/node": "*" @@ -1663,15 +1684,15 @@ } }, "@types/graphql": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.13.1.tgz", - "integrity": "sha512-a6vRcP4M6+7Lqev1JeF3hGFmC3FNBIJ5cRnaSN/z1LtGVr/CaY6nqSlQbnFr2j8ucDlUAQU43LCnJrz6uLUyHg==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.13.3.tgz", + "integrity": "sha512-YNGkX5HtcDtufyQquww05yoWYiDdZPPubLafXqukYqGmpawHjodAXwufhTemqDdgGk48WU7RX2Ouj0VTc9b3AA==", "dev": true }, "@types/ioredis": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-3.2.8.tgz", - "integrity": "sha512-L2Qoq7Di43X0V7eccmSHn3ECLyxzS5810YKiV9Z5bLTNNuD/3xlaipywbynrkxAi29UIh7NIGikXm6OJNlM9hg==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-3.2.12.tgz", + "integrity": "sha512-n1jXNSx4CFcDSmuV1Zchb6YpmcovMgCZtsboqGExlDRR6DWKorS9Dy44ekaM5Txq0CYlZhqJSj86gG0/nW/EBA==", "dev": true, "requires": { "@types/bluebird": "*", @@ -1679,9 +1700,9 @@ } }, "@types/jest": { - "version": "23.1.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.1.2.tgz", - "integrity": "sha512-qXPAaH+1KJBCRtQub2cd7GOnKfWkgRr++luya81ksUs+DA8QG2nMNZuved5K4Nb4enR61aS64CocEJNsjCKwog==", + "version": "23.1.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.1.5.tgz", + "integrity": "sha512-GlN74UAcT2i+G4BzVVI/aHip0HDXZaiY11VEjHzAz74+dB3hIeM5lJmnnZx4acxxinK9lT+uEH1Vsa5aWj6w4Q==", "dev": true }, "@types/joi": { @@ -1703,9 +1724,9 @@ } }, "@types/lodash": { - "version": "4.14.109", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.109.tgz", - "integrity": "sha512-hop8SdPUEzbcJm6aTsmuwjIYQo1tqLseKCM+s2bBqTU2gErwI4fE+aqUVOlscPSQbKHKgtMMPoC+h4AIGOJYvw==", + "version": "4.14.111", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.111.tgz", + "integrity": "sha512-t2FwnkdqdZNYPJHTEF+Zf//j5d2I7UbM2Ng+vqqmUCE2RuiVVINJi9RlVdpKvqPqVItsJa0X+ra/tvmwLzlcgg==", "dev": true }, "@types/luxon": { @@ -1721,9 +1742,9 @@ "dev": true }, "@types/mongodb": { - "version": "3.0.19", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.0.19.tgz", - "integrity": "sha512-KK30PZmGuCqSJQgb3tozzjy5hpQswMsAuqkO+T8vCUh9bSz1sZGx1nAOu79IzVNh2vBy1Xj46vk4A0PUHN5yBg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.1.1.tgz", + "integrity": "sha512-lHEH+OwYNeuC28jlmdPT/wBAVMuB6M1sHjZKAtaho/LeJf78ILJPYUq2OD7mWVj9QR7uYiKVt4ExGkXegHFCJQ==", "dev": true, "requires": { "@types/bson": "*", @@ -1732,9 +1753,9 @@ } }, "@types/node": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.3.1.tgz", - "integrity": "sha512-IsX9aDHDzJohkm3VCDB8tkzl5RQ34E/PFA29TQk6uDGb7Oc869ZBtmdKVDBzY3+h9GnXB8ssrRXEPVZrlIOPOw==", + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz", + "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==", "dev": true }, "@types/passport": { @@ -1829,6 +1850,15 @@ "from": "github:coralproject/patched#types/relay-runtime", "dev": true }, + "@types/sane": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/sane/-/sane-2.0.0.tgz", + "integrity": "sha512-6o/YMfcKcWIK5IAxeo/1DEoVnGKBkPSPj9odxczz2i1gFY78GvguqgtNo28nyKgJUiKEWuFj11acpgdRmRFz7A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", @@ -2121,15 +2151,59 @@ "long": "^3.2.0" } }, + "@webpack-contrib/cli-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@webpack-contrib/cli-utils/-/cli-utils-1.0.2.tgz", + "integrity": "sha512-ZuV0pTi7x0Xd8MVZPIcDXbu7pg5+sNdrkdpmiW8mVto8+ru2+E0n8Opx36UxlDchBSiI6HouvaYcxmGOIS5yQA==", + "dev": true, + "requires": { + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", + "camelize": "^1.0.0", + "chalk": "^2.4.1", + "decamelize": "^2.0.0", + "loader-utils": "^1.1.0", + "meant": "^1.0.1", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "webpack-log": "^1.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 + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "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" + } + } + } + }, "@webpack-contrib/config-loader": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@webpack-contrib/config-loader/-/config-loader-1.1.3.tgz", - "integrity": "sha512-lOliuisjrh24MfhOYE5ljqyFlKfzyWGFrn3bbR0KlXQHY90j3pXWfFtEl4gNvqz69tJsM+1s7PUGJrK9CF46ng==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz", + "integrity": "sha512-C7XsS6bXft0aRlyt7YCLg+fm97Mb3tWd+i5fVVlEl0NW5HKy8LoXVKj3mB7ECcEHNEEdHhgzg8gxP+Or8cMj8Q==", "dev": true, "requires": { "@webpack-contrib/schema-utils": "^1.0.0-beta.0", "chalk": "^2.1.0", "cosmiconfig": "^5.0.2", + "is-plain-obj": "^1.1.0", "loud-rejection": "^1.6.0", "merge-options": "^1.0.1", "minimist": "^1.2.0", @@ -2360,19 +2434,19 @@ } }, "apollo-link": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.1.tgz", - "integrity": "sha512-6Ghf+j3cQLCIvjXd2dJrLw+16HZbWbwmB1qlTc41BviB2hv+rK1nJr17Y9dWK0UD4p3i9Hfddx3tthpMKrueHg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.2.tgz", + "integrity": "sha512-Uk/BC09dm61DZRDSu52nGq0nFhq7mcBPTjy5EEH1eunJndtCaNXQhQz/BjkI2NdrfGI+B+i5he6YSoRBhYizdw==", "requires": { - "@types/node": "^9.4.6", + "@types/graphql": "0.12.6", "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.6" + "zen-observable-ts": "^0.8.9" }, "dependencies": { - "@types/node": { - "version": "9.6.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.22.tgz", - "integrity": "sha512-RIg9EkxzVMkNH0M4sLRngK23f5QiigJC0iODQmu4nopzstt8AjegYund3r82iMrd2BNCjcZVnklaItvKHaGfBA==" + "@types/graphql": { + "version": "0.12.6", + "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.12.6.tgz", + "integrity": "sha512-wXAVyLfkG1UMkKOdMijVWFky39+OD/41KftzqfX1Oejd0Gm6dOIKjCihSVECg6X7PHjftxXmfOKA/d1H79ZfvQ==" } } }, @@ -2663,17 +2737,25 @@ "dev": true }, "autoprefixer": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.4.tgz", - "integrity": "sha512-9D0OoxWCqq9Okp9wD+igaCf6ZaNjYNFSCKxgMLAxAGqXwpapaZ+D0PBv265VHQLgam8a7gld4E6KgJJM6SKfQQ==", + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", + "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", "dev": true, "requires": { "browserslist": "^3.2.8", - "caniuse-lite": "^1.0.30000859", + "caniuse-lite": "^1.0.30000864", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^6.0.23", "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30000865", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz", + "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==", + "dev": true + } } }, "aws-sign2": { @@ -2899,12 +2981,12 @@ } }, "babel-plugin-emotion": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.4.tgz", - "integrity": "sha1-pOVKgJf2ugbLvHqQY5J6+v6f5zo=", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.5.tgz", + "integrity": "sha1-AEbgO+XBYnb4U4BHb4jJ/L98lTY=", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0-beta.40", + "@babel/helper-module-imports": "7.0.0-beta.51", "@emotion/babel-utils": "^0.6.4", "@emotion/hash": "^0.6.2", "@emotion/memoize": "^0.6.1", @@ -2919,34 +3001,25 @@ }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.40.tgz", - "integrity": "sha512-QFOskAKWbqJSBbGIl/Y1igJI4mW0A+wD5NFqsgDJj85KSvj/dHM4wNGIeqCi85nN9aMa4DgTBBrzUK4zSMsN2Q==", + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.51.tgz", + "integrity": "sha1-zgBCgEX7t9XrwOp7+DV4nxU2arI=", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.40", - "lodash": "^4.2.0" + "@babel/types": "7.0.0-beta.51", + "lodash": "^4.17.5" } }, "@babel/types": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.40.tgz", - "integrity": "sha512-uXCGCzTgMZxcSUzutCPtZmXbVC+cvENgS2e0tRuhn+Y1hZnMb8IHP0Trq7Q2MB/eFmG5pKrAeTIUfQIe5kA4Tg==", + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz", + "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.2.0", + "lodash": "^4.17.5", "to-fast-properties": "^2.0.0" } - }, - "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } } } }, @@ -4657,43 +4730,6 @@ "string-width": "^2.0.0", "term-size": "^1.2.0", "widest-line": "^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" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "brace-expansion": { @@ -4985,6 +5021,16 @@ "unset-value": "^1.0.0" } }, + "cache-content-type": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.0.tgz", + "integrity": "sha512-cVbmz0rAnsK3jPcQAlK4IDUUPaYAe4yl7MAfiKftHAcrW/azF1yikn2wE/8VAcC3yWtXi3lvXwsF1akK27Vo7w==", + "dev": true, + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -5023,6 +5069,12 @@ "quick-lru": "^1.0.0" } }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=", + "dev": true + }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", @@ -5374,6 +5426,17 @@ "execa": "^0.8.0" }, "dependencies": { + "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=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, "execa": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", @@ -5387,19 +5450,6 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" - }, - "dependencies": { - "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=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } } } } @@ -5485,12 +5535,6 @@ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "clorox": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clorox/-/clorox-1.0.3.tgz", - "integrity": "sha512-w3gKAUKMJYmmaJyc+p+iDrDtLvsFasrx/y6/zWo2U1TZfsz3y4Vl4T9PHCZrOwk1eMTOSRI6xHdpDR4PhTdy8Q==", - "dev": true - }, "cluster-key-slot": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.0.12.tgz", @@ -5744,9 +5788,9 @@ "dev": true }, "convict": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/convict/-/convict-4.3.0.tgz", - "integrity": "sha512-R13duHXr424EDWO1dg/r43G5KF8IlN8O1gHJ140v/R6Mi8CWMSruLgRTUk0n4C5SoyQB22DQ7LKl5Lhni9hQ7w==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/convict/-/convict-4.3.1.tgz", + "integrity": "sha512-BLgyHUJREKCHVZ8rbXKIuNTDX/Is2GB/HZyUqh1IwvV0EeYBWtX+54OCG8tkIiAxB2yKowdP19+RHY5kCQ/SOg==", "requires": { "depd": "1.1.2", "json5": "1.0.1", @@ -5868,6 +5912,19 @@ "require-from-string": "^2.0.1" } }, + "cp-file": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.0.0.tgz", + "integrity": "sha512-OtHMgPugkgwHlbph25wlMKd358lZNhX1Y2viUpPoFmlBPlEiPIRhztYWha11grbGPnlM+urp5saVmwsChCIOEg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^3.0.0", + "safe-buffer": "^5.0.1" + } + }, "cpx": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz", @@ -6028,6 +6085,49 @@ } } }, + "cpy": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-7.0.1.tgz", + "integrity": "sha512-Zo52tXKLJcgy/baacn6KaNoRAakkl2wb+R4u6qJ4wlD0uchncwRQcIk66PlGlkzuToCJO6A6PWX27Tdwc8LU2g==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "cp-file": "^6.0.0", + "globby": "^8.0.1", + "nested-error-stacks": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + } + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -6039,9 +6139,9 @@ } }, "create-emotion": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.2.4.tgz", - "integrity": "sha1-CkN59r8HCMVP4mv81ra9NZLozyM=", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.2.5.tgz", + "integrity": "sha1-XbTwbZNgJeQ70xJFOj7pRuTV5ds=", "dev": true, "requires": { "@emotion/hash": "^0.6.2", @@ -6054,9 +6154,9 @@ } }, "create-emotion-styled": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/create-emotion-styled/-/create-emotion-styled-9.2.3.tgz", - "integrity": "sha1-F/sTs65MFl6m5aETVquLnKHa2cU=", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/create-emotion-styled/-/create-emotion-styled-9.2.5.tgz", + "integrity": "sha1-P1VTZXECM/DyaDHR7PC473YNSyo=", "dev": true, "requires": { "@emotion/is-prop-valid": "^0.6.1" @@ -6102,6 +6202,10 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.2.tgz", "integrity": "sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A==", +<<<<<<< HEAD +======= + "dev": true, +>>>>>>> abfa39529ff398007bb67cd814c4217a97bdb38b "requires": { "fbjs": "^0.8.0", "gud": "^1.0.0" @@ -6943,46 +7047,134 @@ } }, "docz": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/docz/-/docz-0.2.11.tgz", - "integrity": "sha1-JpQDcirdfoTG52+0o1G/QP6nZrU=", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/docz/-/docz-0.5.8.tgz", + "integrity": "sha1-lnwx+TjQ/Z8eMbp6TJVujF9HGpM=", "dev": true, "requires": { - "@mdx-js/tag": "^0.11.0", + "@mdx-js/tag": "^0.13.1-1", "@sindresorhus/slugify": "^0.3.0", + "create-react-context": "^0.2.2", "deepmerge": "^2.1.1", - "docz-core": "^0.2.11", - "docz-theme-default": "^0.2.11", + "docz-core": "^0.5.7", + "docz-theme-default": "^0.5.8", "invariant": "^2.2.4", "loadable-components": "^2.2.2", "pascalcase": "^0.1.1", - "react": "^16.4.1", - "react-dom": "^16.4.1", + "react": "^16.2.0", + "react-dom": "^16.2.0", "react-router-dom": "^4.3.1", - "yargs": "^11.0.0" + "react-router-hash-link": "^1.2.0", + "yargs": "^12.0.1" + }, + "dependencies": { + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "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": { + "locate-path": "^3.0.0" + } + }, + "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" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "yargs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", + "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.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": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } } }, "docz-core": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/docz-core/-/docz-core-0.2.11.tgz", - "integrity": "sha1-53tAf2iKg1T/DHs2iPFJLHOVyfc=", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/docz-core/-/docz-core-0.5.7.tgz", + "integrity": "sha1-mXx8AXsEx6w3nEjgVvSGB6cpNII=", "dev": true, "requires": { - "@babel/core": "7.0.0-beta.51", - "@babel/preset-typescript": "^7.0.0-beta.51", - "@babel/runtime": "^7.0.0-beta.51", - "@mdx-js/loader": "^0.11.0", - "@mdx-js/mdx": "^0.10.1", + "@babel/core": "7.0.0-beta.52", + "@babel/preset-typescript": "^7.0.0-beta.52", + "@babel/runtime": "^7.0.0-beta.52", + "@mdx-js/loader": "^0.13.1-1", + "@mdx-js/mdx": "^0.13.1-1", "@mdx-js/mdxast": "^0.10.0", "@sindresorhus/slugify": "^0.3.0", "art-template": "^4.12.2", - "babel-loader": "^8.0.0-beta.3", + "babel-loader": "^8.0.0-beta.4", "babel-plugin-react-docgen": "^2.0.0-rc.1", "babel-polyfill": "^7.0.0-beta.3", "babel-preset-react-app": "^4.0.0-next.b2fd8db8", + "babel-traverse": "^6.26.0", + "babylon": "^6.18.0", "chalk": "^2.4.1", "chokidar": "^2.0.4", "connect-history-api-fallback": "^1.5.0", + "cpy": "^7.0.1", "deepmerge": "^2.1.1", "detect-port": "^1.2.3", "express": "^4.16.3", @@ -6997,9 +7189,9 @@ "koa-connect": "^2.0.1", "koa-mount": "^3.0.0", "koa-static": "^5.0.0", - "load-cfg": "^0.2.8", + "load-cfg": "^0.5.6", "lodash.get": "^4.4.2", - "prettier": "^1.13.5", + "prettier": "^1.13.7", "react-dev-utils": "^5.0.1", "react-docgen-typescript-loader": "^2.1.1", "react-hot-loader": "4.3.3", @@ -7011,8 +7203,10 @@ "remark-slug": "^5.0.0", "resolve": "^1.8.1", "signale": "^1.2.1", + "strip-indent": "^2.0.0", + "titleize": "^1.0.1", "to-vfile": "^5.0.0", - "uglifyjs-webpack-plugin": "^1.2.6", + "uglifyjs-webpack-plugin": "^1.2.7", "ulid": "^2.3.0", "unified": "^7.0.0", "unist-util-find": "^1.0.1", @@ -7020,38 +7214,39 @@ "unist-util-remove": "^1.0.1", "unist-util-visit": "^1.3.1", "url-loader": "^1.0.1", - "webpack": "^4.12.0", + "webpack": "^4.15.1", "webpack-chain": "^4.8.0", - "webpack-hot-client": "^4.0.3", + "webpack-hot-client": "^4.1.1", "webpack-manifest-plugin": "^2.0.3", - "webpack-serve": "^1.0.4", + "webpack-serve": "^2.0.2", + "webpack-serve-waitpage": "^1.0.0", "webpackbar": "^2.6.1", - "ws": "^5.2.0", - "yargs": "^11.0.0" + "ws": "^5.2.1", + "yargs": "^12.0.1" }, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz", - "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.52.tgz", + "integrity": "sha1-GSSDv6DR5GfBAVccIQKcy3SvKAE=", "dev": true, "requires": { - "@babel/highlight": "7.0.0-beta.51" + "@babel/highlight": "7.0.0-beta.52" } }, "@babel/core": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.51.tgz", - "integrity": "sha1-DlS9a2OHNrKuWTwxpH8JaeKyuW0=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.52.tgz", + "integrity": "sha1-8nqaRo+M+chgqryl9ghPpS+8blU=", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/generator": "7.0.0-beta.51", - "@babel/helpers": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", + "@babel/code-frame": "7.0.0-beta.52", + "@babel/generator": "7.0.0-beta.52", + "@babel/helpers": "7.0.0-beta.52", + "@babel/parser": "7.0.0-beta.52", + "@babel/template": "7.0.0-beta.52", + "@babel/traverse": "7.0.0-beta.52", + "@babel/types": "7.0.0-beta.52", "convert-source-map": "^1.1.0", "debug": "^3.1.0", "json5": "^0.5.0", @@ -7063,12 +7258,12 @@ } }, "@babel/generator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.51.tgz", - "integrity": "sha1-bHV1/952HQdIXgS67cA5LG2eMPY=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.52.tgz", + "integrity": "sha1-JpaPEvrYGM2XTISbKGtDfh6MzZE=", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51", + "@babel/types": "7.0.0-beta.52", "jsesc": "^2.5.1", "lodash": "^4.17.5", "source-map": "^0.5.0", @@ -7076,49 +7271,49 @@ } }, "@babel/helper-function-name": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz", - "integrity": "sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.52.tgz", + "integrity": "sha1-qGelj/VxsldysteZsyhmBYVzxFA=", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/helper-get-function-arity": "7.0.0-beta.52", + "@babel/template": "7.0.0-beta.52", + "@babel/types": "7.0.0-beta.52" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz", - "integrity": "sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.52.tgz", + "integrity": "sha1-HAzaWOC3X0XpLq+9j+GJpO7pK3Q=", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-beta.52" } }, "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz", - "integrity": "sha1-imw/ZsTSZTUvwHdIT59ugKUauXg=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.52.tgz", + "integrity": "sha1-SqxPMOpjhK82duBLUkZydjLkYN8=", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.51" + "@babel/types": "7.0.0-beta.52" } }, "@babel/helpers": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.51.tgz", - "integrity": "sha1-lScr4qtGNNaCBCX4klAxqSiRg5c=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.52.tgz", + "integrity": "sha1-ib7r5OT9ayL111QHFgJ2KUCMSmM=", "dev": true, "requires": { - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" + "@babel/template": "7.0.0-beta.52", + "@babel/traverse": "7.0.0-beta.52", + "@babel/types": "7.0.0-beta.52" } }, "@babel/highlight": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz", - "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.52.tgz", + "integrity": "sha1-7ySTFDLwYVXnvDnNuKaze0oos9A=", "dev": true, "requires": { "chalk": "^2.0.0", @@ -7127,35 +7322,35 @@ } }, "@babel/parser": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.51.tgz", - "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.52.tgz", + "integrity": "sha1-TpNbYs2b+HK9N7zx9j2C/nsCN6I=", "dev": true }, "@babel/template": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.51.tgz", - "integrity": "sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.52.tgz", + "integrity": "sha1-ROGPrDglH1f5JRHWdI8JWrAvmW4=", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", + "@babel/code-frame": "7.0.0-beta.52", + "@babel/parser": "7.0.0-beta.52", + "@babel/types": "7.0.0-beta.52", "lodash": "^4.17.5" } }, "@babel/traverse": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.51.tgz", - "integrity": "sha1-mB2vLOw0emIx06odnhgDsDqqpKg=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.52.tgz", + "integrity": "sha1-m4uplPcmTZhHhYrS/uzCc4xeLvM=", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/generator": "7.0.0-beta.51", - "@babel/helper-function-name": "7.0.0-beta.51", - "@babel/helper-split-export-declaration": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", + "@babel/code-frame": "7.0.0-beta.52", + "@babel/generator": "7.0.0-beta.52", + "@babel/helper-function-name": "7.0.0-beta.52", + "@babel/helper-split-export-declaration": "7.0.0-beta.52", + "@babel/parser": "7.0.0-beta.52", + "@babel/types": "7.0.0-beta.52", "debug": "^3.1.0", "globals": "^11.1.0", "invariant": "^2.2.0", @@ -7163,9 +7358,9 @@ } }, "@babel/types": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz", - "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=", + "version": "7.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.52.tgz", + "integrity": "sha1-o+ViCxU0slOlCrzyIitSDiOxbaI=", "dev": true, "requires": { "esutils": "^2.0.2", @@ -7173,25 +7368,214 @@ "to-fast-properties": "^2.0.0" } }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "@webassemblyjs/ast": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz", + "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "debug": "^3.1.0", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz", + "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz", + "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz", + "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", + "dev": true, + "requires": { + "debug": "^3.1.0" + } + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz", + "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.5.13" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz", + "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz", + "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz", + "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz", + "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "debug": "^3.1.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz", + "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", + "dev": true, + "requires": { + "ieee754": "^1.1.11" + } + }, + "@webassemblyjs/leb128": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz", + "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==", + "dev": true, + "requires": { + "long": "4.0.0" + }, + "dependencies": { + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true + } + } + }, + "@webassemblyjs/utf8": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz", + "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz", + "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/helper-wasm-section": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "@webassemblyjs/wast-printer": "1.5.13", + "debug": "^3.1.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz", + "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz", + "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "debug": "^3.1.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz", + "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz", + "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/floating-point-hex-parser": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-code-frame": "1.5.13", + "@webassemblyjs/helper-fsm": "1.5.13", + "long": "^3.2.0", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz", + "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "long": "^3.2.0" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "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=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "debug": { @@ -7203,6 +7587,15 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, "detect-port-alt": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", @@ -7224,16 +7617,64 @@ } } }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "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": { + "locate-path": "^3.0.0" + } + }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, - "prettier": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.6.tgz", - "integrity": "sha512-p5eqCNiohWZN++7aJXUVj0JgLqHCPLf9GLIcLBHGNWs4Y9FJOPs6+KNO2WT0udJIQJTbeZFrJkjzjcb8fkAYYQ==", + "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" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, "react-dev-utils": { @@ -7274,41 +7715,105 @@ "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } - }, - "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=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } } } + }, + "webpack": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.0.tgz", + "integrity": "sha512-oNx9djAd6uAcccyfqN3hyXLNMjZHiRySZmBQ4c8FNmf1SNJGhx7n9TSvHNyXxgToRdH65g/Q97s94Ip9N6F7xg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/wasm-edit": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^3.7.1", + "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", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yargs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", + "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.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": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } }, "docz-theme-default": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/docz-theme-default/-/docz-theme-default-0.2.11.tgz", - "integrity": "sha1-fMKeebffxnqPyQpkWfNkaeJ0BH8=", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/docz-theme-default/-/docz-theme-default-0.5.8.tgz", + "integrity": "sha1-brlkb7d7v8eY4s3lO2ubY+aZjME=", "dev": true, "requires": { - "docz": "^0.2.11", - "emotion": "^9.2.3", - "emotion-theming": "^9.2.3", + "docz": "^0.5.8", + "emotion": "^9.2.5", + "emotion-theming": "^9.2.5", + "facepaint": "^1.2.1", "fast-deep-equal": "^2.0.1", + "fuse.js": "^3.2.1", "prismjs": "^1.15.0", "prop-types": "15.6.2", - "react": "^16.4.1", - "react-dom": "^16.4.1", - "react-emotion": "^9.2.3", - "react-feather": "^1.1.0", + "react": "^16.2.0", + "react-adopt": "^0.6.0", + "react-breakpoints": "^3.0.0", + "react-content-loader": "^3.1.2", + "react-dom": "^16.2.0", + "react-emotion": "^9.2.5", + "react-feather": "^1.1.1", "react-lightweight-tooltip": "^1.0.0", - "react-powerplug": "^0.1.6", - "react-spinners": "^0.3.2", + "react-powerplug": "^1.0.0-rc.1", "webfontloader": "^1.6.28" } }, @@ -7470,6 +7975,12 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, "electron-to-chromium": { "version": "1.3.50", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.50.tgz", @@ -7504,19 +8015,19 @@ "dev": true }, "emotion": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/emotion/-/emotion-9.2.4.tgz", - "integrity": "sha1-ATnnzBVLKEX0ua+qmW3U3hO7kOM=", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/emotion/-/emotion-9.2.5.tgz", + "integrity": "sha1-Zm+xUaacJcdYL/PeBvYPjYSPdKo=", "dev": true, "requires": { - "babel-plugin-emotion": "^9.2.4", - "create-emotion": "^9.2.4" + "babel-plugin-emotion": "^9.2.5", + "create-emotion": "^9.2.5" } }, "emotion-theming": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-9.2.4.tgz", - "integrity": "sha1-l1g3hh7yAocEoBSmDGTr+r1DJ1U=", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-9.2.5.tgz", + "integrity": "sha1-8z8hDxHIDhE2QbNK7J4L+eBMvYk=", "dev": true, "requires": { "hoist-non-react-statics": "^2.3.1" @@ -7775,9 +8286,9 @@ } }, "esm": { - "version": "3.0.55", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.0.55.tgz", - "integrity": "sha512-YmOhwp5znUfxH5UCfAjXg3CP5ihWa5QgG24gS0GON4DI/B+fkYTK/t7WTpMwPMqJLzPTRUKcQJ31MtRgkHPXcg==", + "version": "3.0.69", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.0.69.tgz", + "integrity": "sha512-ECQbEBAzGE15NJXO+ediu/Zdk7rtxIkPAlFbgoJbLM96lAJEKC0XfmN2PmFHNvh6k6m+wAJUffL3E49KO7xCLg==", "dev": true }, "esprima": { @@ -8185,6 +8696,12 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, + "facepaint": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/facepaint/-/facepaint-1.2.1.tgz", + "integrity": "sha512-oNvBekbhsm/0PNSOWca5raHNAi6dG960Bx6LJgxDPNF59WpuspgQ17bN5MKwOr7JcFdQYc7StW3VZ28DBZLavQ==", + "dev": true + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -8427,12 +8944,20 @@ } }, "flat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.0.0.tgz", - "integrity": "sha512-ji/WMv2jdsE+LaznpkIF9Haax0sdpTBozrz/Dtg4qSRMfbs8oVg4ypJunIRYPiMLvH/ed6OflXbnbTIKJhtgeg==", + "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": "~1.1.5" + "is-buffer": "~2.0.3" + }, + "dependencies": { + "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 + } } }, "flatten": { @@ -9186,6 +9711,12 @@ "is-callable": "^1.1.3" } }, + "fuse.js": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.2.1.tgz", + "integrity": "sha1-YyDLlM5W7JdVyJred1vNuwNY1CU=", + "dev": true + }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -9536,9 +10067,9 @@ } }, "graphql-playground-middleware-express": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.0.tgz", - "integrity": "sha512-t5MxpVvAyZBGEGUv+p/GZgh10oEBhGH5pNtJlpLNc448wX2718fwWMJSfGhQkXlSm+nst4tdLoYu5TI1/HpGAQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.2.tgz", + "integrity": "sha512-JvKsVOR/U5QguBtEvTt0ozQ49uh1C6cW8O1xR6krQpJZIxjLYqpgusLUddTiVkka6Q/A4/AXBohY85jPudxYDg==", "dev": true, "requires": { "graphql-playground-html": "1.6.0" @@ -9571,11 +10102,11 @@ } }, "graphql-tools": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.0.2.tgz", - "integrity": "sha512-bhDGrvmSgcJBFX3EZEYagmKPk/EJ9vZIcF1WtSFveWfvSsh7crMFSQ9ldftuIXC9UeRwfutpGf3A1q4UpVLaRg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.0.5.tgz", + "integrity": "sha512-MawfVPwaqy+L48IiP4QXHpFFOgCH+vWmB9oeU70lckac22nOpDLwbkKtddtdodoTHV54EKbkTpPdW6u6bcjjFA==", "requires": { - "apollo-link": "1.2.1", + "apollo-link": "1.2.2", "apollo-utilities": "^1.0.1", "deprecated-decorator": "^0.1.6", "iterall": "^1.1.3", @@ -9591,7 +10122,12 @@ "gud": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", +<<<<<<< HEAD "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" +======= + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", + "dev": true +>>>>>>> abfa39529ff398007bb67cd814c4217a97bdb38b }, "gzip-size": { "version": "3.0.0", @@ -10206,6 +10742,32 @@ "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=", "dev": true }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -11236,13 +11798,13 @@ "dev": true }, "jest": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-23.3.0.tgz", - "integrity": "sha1-E1XNeS84zyD7pNoC3dt8oU2UhLU=", + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-23.4.1.tgz", + "integrity": "sha512-HTOuA9epknN7RKdzhmp9qrbP0z3TibAMXI+sluLOcrEoF54ZCG8/urFB2DK/sOINcMeyX6epMUqka8i0+d0xOA==", "dev": true, "requires": { "import-local": "^1.0.0", - "jest-cli": "^23.3.0" + "jest-cli": "^23.4.1" }, "dependencies": { "ansi-regex": { @@ -11251,6 +11813,116 @@ "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" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "babel-jest": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.4.0.tgz", + "integrity": "sha1-IsNMOS4hdvakw2eZKn/P9p0uhVc=", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expect": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.4.0.tgz", + "integrity": "sha1-baTsyZwUcSU+cogziYOtHrrbYMM=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^23.2.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -11265,10 +11937,25 @@ "path-is-absolute": "^1.0.0" } }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, "jest-cli": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.3.0.tgz", - "integrity": "sha1-MH6b53M0Q7eJqCedaUBU0FGp5eI=", + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.4.1.tgz", + "integrity": "sha512-Cmd7bex+kYmMGwGrIh/crwUieUFr+4PCTaK32tEA0dm0wklXV8zGgWh8n+8WbhsFPNzacolxdtcfBKIorcV5FQ==", "dev": true, "requires": { "ansi-escapes": "^3.0.0", @@ -11282,22 +11969,22 @@ "istanbul-lib-coverage": "^1.2.0", "istanbul-lib-instrument": "^1.10.1", "istanbul-lib-source-maps": "^1.2.4", - "jest-changed-files": "^23.2.0", - "jest-config": "^23.3.0", - "jest-environment-jsdom": "^23.3.0", + "jest-changed-files": "^23.4.0", + "jest-config": "^23.4.1", + "jest-environment-jsdom": "^23.4.0", "jest-get-type": "^22.1.0", - "jest-haste-map": "^23.2.0", - "jest-message-util": "^23.3.0", + "jest-haste-map": "^23.4.1", + "jest-message-util": "^23.4.0", "jest-regex-util": "^23.3.0", - "jest-resolve-dependencies": "^23.3.0", - "jest-runner": "^23.3.0", - "jest-runtime": "^23.3.0", - "jest-snapshot": "^23.3.0", - "jest-util": "^23.3.0", - "jest-validate": "^23.3.0", - "jest-watcher": "^23.2.0", + "jest-resolve-dependencies": "^23.4.1", + "jest-runner": "^23.4.1", + "jest-runtime": "^23.4.1", + "jest-snapshot": "^23.4.1", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "jest-watcher": "^23.4.0", "jest-worker": "^23.2.0", - "micromatch": "^3.1.10", + "micromatch": "^2.3.11", "node-notifier": "^5.2.1", "prompts": "^0.1.9", "realpath-native": "^1.0.0", @@ -11309,6 +11996,192 @@ "yargs": "^11.0.0" } }, + "jest-config": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.4.1.tgz", + "integrity": "sha512-OT29qlcw9Iw7u0PC04wD9tjLJL4vpGdMZrrHMFwYSO3HxOikbHywjmtQ7rntW4qvBcpbi7iCMTPPRmpDjImQEw==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^23.4.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^23.4.1", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.4.1", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "pretty-format": "^23.2.0" + } + }, + "jest-each": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.4.0.tgz", + "integrity": "sha1-L6nt2J2qGk7cn/m/YGKja3E0UUM=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "pretty-format": "^23.2.0" + } + }, + "jest-environment-jsdom": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" + } + }, + "jest-jasmine2": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.4.1.tgz", + "integrity": "sha512-nHmRgTtM9fuaK3RBz2z4j9mYVEJwB7FdoflQSvrwHV8mCT5z4DeHoKCvPp2R27F8fZTYJUYVMb36xn+ydg0tfA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^23.4.0", + "is-generator-fn": "^1.0.0", + "jest-diff": "^23.2.0", + "jest-each": "^23.4.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.4.1", + "jest-util": "^23.4.0", + "pretty-format": "^23.2.0" + } + }, + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-resolve": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.4.1.tgz", + "integrity": "sha512-VNk4YRNR5gsHhNS0Lp46/DzTT11e+ecbUC61ikE593cKbtdrhrMO+zXkOJaE8YDD5sHxH9W6OfssNn4FkZBzZQ==", + "dev": true, + "requires": { + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" + } + }, + "jest-snapshot": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.4.1.tgz", + "integrity": "sha512-oMjaQ4vB4uT211zx00X0R7hg+oLVRDvhVKiC6+vSg7Be9S/AmkDMCVUoaPcLRK/0NkZBTzrh4WCzrSZgUEZW3g==", + "dev": true, + "requires": { + "babel-traverse": "^6.0.0", + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.2.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.4.1", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.2.0", + "semver": "^5.5.0" + } + }, + "jest-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^23.4.0", + "mkdirp": "^0.5.1", + "slash": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "jest-validate": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.4.0.tgz", + "integrity": "sha1-2W7t4B7wOskJwAnpyORVGX1IwgE=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.2.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -11330,9 +12203,9 @@ } }, "jest-changed-files": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.2.0.tgz", - "integrity": "sha1-oUWm5LZtASn8fJnO4TTck3pkPZw=", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.0.tgz", + "integrity": "sha1-8bME+YwjWvXZox7FJCYsXk3jxv8=", "dev": true, "requires": { "throat": "^4.0.0" @@ -11470,9 +12343,9 @@ "dev": true }, "jest-haste-map": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.2.0.tgz", - "integrity": "sha1-0Qy6wAfGlZSMjvGCGisu0tTy1Ng=", + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.4.1.tgz", + "integrity": "sha512-PGQxOEGAfRbTyJkmZeOKkVSs+KVeWgG625p89KUuq+sIIchY5P8iPIIc+Hw2tJJPBzahU3qopw1kF/qyhDdNBw==", "dev": true, "requires": { "fb-watchman": "^2.0.0", @@ -11480,10 +12353,69 @@ "jest-docblock": "^23.2.0", "jest-serializer": "^23.0.1", "jest-worker": "^23.2.0", - "micromatch": "^3.1.10", + "micromatch": "^2.3.11", "sane": "^2.0.0" }, "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, "jest-docblock": { "version": "23.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", @@ -11492,6 +12424,36 @@ "requires": { "detect-newline": "^2.1.0" } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } } } }, @@ -11571,76 +12533,194 @@ } }, "jest-resolve-dependencies": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.3.0.tgz", - "integrity": "sha1-hETTsLEoi4CGTYgB/1C0Sk1pXR0=", + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.4.1.tgz", + "integrity": "sha512-Jp0wgNJg3OYPvXJfNVX4k4/niwGS6ARuKacum/vue48+4A1XPJ2H3aVFuNb3gUaiB/6Le7Zyl8AUb4MELBfcmg==", "dev": true, "requires": { "jest-regex-util": "^23.3.0", - "jest-snapshot": "^23.3.0" + "jest-snapshot": "^23.4.1" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-resolve": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.4.1.tgz", + "integrity": "sha512-VNk4YRNR5gsHhNS0Lp46/DzTT11e+ecbUC61ikE593cKbtdrhrMO+zXkOJaE8YDD5sHxH9W6OfssNn4FkZBzZQ==", + "dev": true, + "requires": { + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" + } + }, + "jest-snapshot": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.4.1.tgz", + "integrity": "sha512-oMjaQ4vB4uT211zx00X0R7hg+oLVRDvhVKiC6+vSg7Be9S/AmkDMCVUoaPcLRK/0NkZBTzrh4WCzrSZgUEZW3g==", + "dev": true, + "requires": { + "babel-traverse": "^6.0.0", + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.2.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.4.1", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.2.0", + "semver": "^5.5.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + } } }, "jest-runner": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.3.0.tgz", - "integrity": "sha1-BMfkWKYXUBpIddsNf/vg48vUO/s=", + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.4.1.tgz", + "integrity": "sha512-78KyhObsx0VEuUQ74ikGt68NpP6PApTjGpJPSyZ7AvwOFRqFlxdHpCU/lFPQxW/fLEghl4irz9OHjRLGcGFNyQ==", "dev": true, "requires": { "exit": "^0.1.2", "graceful-fs": "^4.1.11", - "jest-config": "^23.3.0", + "jest-config": "^23.4.1", "jest-docblock": "^23.2.0", - "jest-haste-map": "^23.2.0", - "jest-jasmine2": "^23.3.0", + "jest-haste-map": "^23.4.1", + "jest-jasmine2": "^23.4.1", "jest-leak-detector": "^23.2.0", - "jest-message-util": "^23.3.0", - "jest-runtime": "^23.3.0", - "jest-util": "^23.3.0", + "jest-message-util": "^23.4.0", + "jest-runtime": "^23.4.1", + "jest-util": "^23.4.0", "jest-worker": "^23.2.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" }, "dependencies": { - "jest-docblock": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", - "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "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": { - "detect-newline": "^2.1.0" + "color-convert": "^1.9.0" } - } - } - }, - "jest-runtime": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.3.0.tgz", - "integrity": "sha1-SGWqtM7/gvnOxjNf164UIswd598=", - "dev": true, - "requires": { - "babel-core": "^6.0.0", - "babel-plugin-istanbul": "^4.1.6", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "exit": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.11", - "jest-config": "^23.3.0", - "jest-haste-map": "^23.2.0", - "jest-message-util": "^23.3.0", - "jest-regex-util": "^23.3.0", - "jest-resolve": "^23.2.0", - "jest-snapshot": "^23.3.0", - "jest-util": "^23.3.0", - "jest-validate": "^23.3.0", - "micromatch": "^3.1.10", - "realpath-native": "^1.0.0", - "slash": "^1.0.0", - "strip-bom": "3.0.0", - "write-file-atomic": "^2.1.0", - "yargs": "^11.0.0" - }, - "dependencies": { + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, "babel-core": { "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", @@ -11668,17 +12748,644 @@ "source-map": "^0.5.7" } }, + "babel-jest": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.4.0.tgz", + "integrity": "sha1-IsNMOS4hdvakw2eZKn/P9p0uhVc=", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" + } + }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expect": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.4.0.tgz", + "integrity": "sha1-baTsyZwUcSU+cogziYOtHrrbYMM=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^23.2.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.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" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "jest-config": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.4.1.tgz", + "integrity": "sha512-OT29qlcw9Iw7u0PC04wD9tjLJL4vpGdMZrrHMFwYSO3HxOikbHywjmtQ7rntW4qvBcpbi7iCMTPPRmpDjImQEw==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^23.4.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^23.4.1", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.4.1", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "pretty-format": "^23.2.0" + } + }, + "jest-docblock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", + "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.4.0.tgz", + "integrity": "sha1-L6nt2J2qGk7cn/m/YGKja3E0UUM=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "pretty-format": "^23.2.0" + } + }, + "jest-environment-jsdom": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" + } + }, + "jest-jasmine2": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.4.1.tgz", + "integrity": "sha512-nHmRgTtM9fuaK3RBz2z4j9mYVEJwB7FdoflQSvrwHV8mCT5z4DeHoKCvPp2R27F8fZTYJUYVMb36xn+ydg0tfA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^23.4.0", + "is-generator-fn": "^1.0.0", + "jest-diff": "^23.2.0", + "jest-each": "^23.4.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.4.1", + "jest-util": "^23.4.0", + "pretty-format": "^23.2.0" + } + }, + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-resolve": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.4.1.tgz", + "integrity": "sha512-VNk4YRNR5gsHhNS0Lp46/DzTT11e+ecbUC61ikE593cKbtdrhrMO+zXkOJaE8YDD5sHxH9W6OfssNn4FkZBzZQ==", + "dev": true, + "requires": { + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" + } + }, + "jest-snapshot": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.4.1.tgz", + "integrity": "sha512-oMjaQ4vB4uT211zx00X0R7hg+oLVRDvhVKiC6+vSg7Be9S/AmkDMCVUoaPcLRK/0NkZBTzrh4WCzrSZgUEZW3g==", + "dev": true, + "requires": { + "babel-traverse": "^6.0.0", + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.2.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.4.1", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.2.0", + "semver": "^5.5.0" + } + }, + "jest-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^23.4.0", + "mkdirp": "^0.5.1", + "slash": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "jest-validate": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.4.0.tgz", + "integrity": "sha1-2W7t4B7wOskJwAnpyORVGX1IwgE=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.2.0" + } + }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + } + } + }, + "jest-runtime": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.4.1.tgz", + "integrity": "sha512-fnInrsEAbLpNctQa+RLnKZyQLMmb5u4YdoT9CbRKWhjMY7q6ledOu+x+ORZ3glQOK/vJIS701RaJRp1pc5ziaA==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-plugin-istanbul": "^4.1.6", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-config": "^23.4.1", + "jest-haste-map": "^23.4.1", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.4.1", + "jest-snapshot": "^23.4.1", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^11.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" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "babel-jest": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.4.0.tgz", + "integrity": "sha1-IsNMOS4hdvakw2eZKn/P9p0uhVc=", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expect": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.4.0.tgz", + "integrity": "sha1-baTsyZwUcSU+cogziYOtHrrbYMM=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^23.2.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.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" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "jest-config": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.4.1.tgz", + "integrity": "sha512-OT29qlcw9Iw7u0PC04wD9tjLJL4vpGdMZrrHMFwYSO3HxOikbHywjmtQ7rntW4qvBcpbi7iCMTPPRmpDjImQEw==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^23.4.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^23.4.1", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.4.1", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "pretty-format": "^23.2.0" + } + }, + "jest-each": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.4.0.tgz", + "integrity": "sha1-L6nt2J2qGk7cn/m/YGKja3E0UUM=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "pretty-format": "^23.2.0" + } + }, + "jest-environment-jsdom": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" + } + }, + "jest-jasmine2": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.4.1.tgz", + "integrity": "sha512-nHmRgTtM9fuaK3RBz2z4j9mYVEJwB7FdoflQSvrwHV8mCT5z4DeHoKCvPp2R27F8fZTYJUYVMb36xn+ydg0tfA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^23.4.0", + "is-generator-fn": "^1.0.0", + "jest-diff": "^23.2.0", + "jest-each": "^23.4.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.4.1", + "jest-util": "^23.4.0", + "pretty-format": "^23.2.0" + } + }, + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-resolve": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.4.1.tgz", + "integrity": "sha512-VNk4YRNR5gsHhNS0Lp46/DzTT11e+ecbUC61ikE593cKbtdrhrMO+zXkOJaE8YDD5sHxH9W6OfssNn4FkZBzZQ==", + "dev": true, + "requires": { + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" + } + }, + "jest-snapshot": { + "version": "23.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.4.1.tgz", + "integrity": "sha512-oMjaQ4vB4uT211zx00X0R7hg+oLVRDvhVKiC6+vSg7Be9S/AmkDMCVUoaPcLRK/0NkZBTzrh4WCzrSZgUEZW3g==", + "dev": true, + "requires": { + "babel-traverse": "^6.0.0", + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.2.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.4.1", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.2.0", + "semver": "^5.5.0" + } + }, + "jest-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^23.4.0", + "mkdirp": "^0.5.1", + "slash": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "jest-validate": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.4.0.tgz", + "integrity": "sha1-2W7t4B7wOskJwAnpyORVGX1IwgE=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.2.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } } } }, @@ -11744,9 +13451,9 @@ } }, "jest-watcher": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.2.0.tgz", - "integrity": "sha1-Z46FKJbpGenZoOtLi68a4nliDqk=", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", + "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", "dev": true, "requires": { "ansi-escapes": "^3.0.0", @@ -11949,43 +13656,64 @@ "graceful-fs": "^4.1.9" } }, + "kleur": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-1.0.1.tgz", + "integrity": "sha512-8srIZ5BK5PCJw1L/JN741xgNfSjuQNK9ImYbYzv7ZUD3WPfuywaY+yd7lQOphJ+2vwXnMLnRZoAh5X+orRt4LQ==", + "dev": true + }, "koa": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.5.1.tgz", - "integrity": "sha512-cchwbMeG2dv3E2xTAmheDAuvR53tPgJZN/Hf1h7bTzJLSPcFZp8/t5+bNKJ6GaQZoydhZQ+1GNruhKdj3lIrug==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.5.2.tgz", + "integrity": "sha512-MoVGWre9g3p35pCqXNhOT/a4trwK5CGvalIoPi7qOA2RCZaep3GCsa/G/tD9QMjQI7bmVWn3XF3SOau8RkPh6w==", "dev": true, "requires": { - "accepts": "^1.2.2", - "content-disposition": "~0.5.0", - "content-type": "^1.0.0", - "cookies": "~0.7.0", - "debug": "*", + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.7.1", + "debug": "^3.1.0", "delegates": "^1.0.0", - "depd": "^1.1.0", - "destroy": "^1.0.3", - "error-inject": "~1.0.0", - "escape-html": "~1.0.1", - "fresh": "^0.5.2", - "http-assert": "^1.1.0", - "http-errors": "^1.2.8", - "is-generator-function": "^1.0.3", - "koa-compose": "^4.0.0", + "depd": "^1.1.2", + "destroy": "^1.0.4", + "error-inject": "^1.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", "koa-convert": "^1.2.0", "koa-is-json": "^1.0.0", - "mime-types": "^2.0.7", - "on-finished": "^2.1.0", - "only": "0.0.2", - "parseurl": "^1.3.0", - "statuses": "^1.2.0", - "type-is": "^1.5.5", - "vary": "^1.0.0" + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" }, "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" + } + }, "koa-compose": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, @@ -12075,57 +13803,18 @@ } }, "koa-webpack": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-webpack/-/koa-webpack-4.0.0.tgz", - "integrity": "sha512-P+j2TzeZAqFwscd/dlLykk/sxwr6wQ5Tp3FYDhqv1+y9aRIffTPnu2zK+1BhfM+Kyh8bepU1jFR420maE+Vajw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/koa-webpack/-/koa-webpack-5.1.0.tgz", + "integrity": "sha512-XNqqtPpMvccXK3tAs0vW6YoO4+uYaxarutsgCZjNi3NyvmmVBvIH6l6xGk0NtiJR1m0oa53gFHLSiT19ZseOCw==", "dev": true, "requires": { + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", "app-root-path": "^2.0.1", + "loud-rejection": "^1.6.0", "merge-options": "^1.0.0", "webpack-dev-middleware": "^3.0.0", - "webpack-hot-client": "^3.0.0", + "webpack-hot-client": "^4.1.0", "webpack-log": "^1.1.1" - }, - "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" - } - }, - "webpack-hot-client": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-3.0.0.tgz", - "integrity": "sha512-6k91015hZ4Okkz8u6OzRgJygEL+3J3ay6HVZhWBF3tT2P0rZJ0mgca39dotJxngggUm3S8707c0vrcynn1IzEQ==", - "dev": true, - "requires": { - "json-stringify-safe": "^5.0.1", - "loglevelnext": "^1.0.2", - "strip-ansi": "^4.0.0", - "uuid": "^3.1.0", - "webpack-log": "^1.1.1", - "ws": "^4.0.0" - } - }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - } } }, "latest-version": { @@ -12182,13 +13871,13 @@ } }, "load-cfg": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/load-cfg/-/load-cfg-0.2.8.tgz", - "integrity": "sha1-ax/0kaY/AE4NMfuTz+FZet2li4k=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/load-cfg/-/load-cfg-0.5.6.tgz", + "integrity": "sha1-N40Q2lw4JLEMC1463cVVukYZofE=", "dev": true, "requires": { "deepmerge": "^2.1.1", - "esm": "^3.0.52", + "esm": "^3.0.66", "find-up": "^3.0.0" }, "dependencies": { @@ -12407,16 +14096,6 @@ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, "lodash.iteratee": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.iteratee/-/lodash.iteratee-4.7.0.tgz", @@ -12596,9 +14275,9 @@ } }, "luxon": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.2.1.tgz", - "integrity": "sha512-ymX+7rWJjYw6jfmtkLqHJmXo+FYC69icT60x+utlzjIOc/U4SNXljUITwH4C1RDP0ZukWf4apHT/d1Ux/4eHPg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.3.1.tgz", + "integrity": "sha512-GnX4PVEfDcTZT3xDQhm2jvEyZTxfi2b0gOmkJuwrrggA1b46e8ZshmPYePA6gdAT6mvvOxYnGFfb3iE9ZsWn9g==" }, "make-dir": { "version": "1.3.0", @@ -12749,6 +14428,12 @@ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", "dev": true }, + "meant": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", + "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -13012,20 +14697,21 @@ "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" }, "mongodb": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.10.tgz", - "integrity": "sha512-jy9s4FgcM4rl8sHNETYHGeWcuRh9AlwQCUuMiTj041t/HD02HwyFgmm2VZdd9/mA9YNHaUJLqj0tzBx2QFivtg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.1.tgz", + "integrity": "sha512-GU9oWK4pi8PC7NyGiwjFMwZyMqwGWoMEMvM0LZh7UKW/FFAqgmZKjjriD+5MEOCDUJE2dtHX93/K5UtDxO0otg==", "requires": { - "mongodb-core": "3.0.9" + "mongodb-core": "3.1.0" } }, "mongodb-core": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.9.tgz", - "integrity": "sha512-buOWjdLLBlEqjHDeHYSXqXx173wHMVp7bafhdHxSjxWdB9V6Ri4myTqxjYZwL/eGFZxvd8oRQSuhwuIDbaaB+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.0.tgz", + "integrity": "sha512-qRjG62Fu//CZhkgn0jA/k8jh5MhACIq8cOJUryH6sck87pgt+C222MSD02tsCq5zNo/B6ZFHtNodZ2qpf8E86g==", "requires": { "bson": "~1.0.4", - "require_optional": "^1.0.1" + "require_optional": "^1.0.1", + "saslprep": "^1.0.0" } }, "move-concurrently": { @@ -13167,12 +14853,6 @@ "nanoassert": "^1.1.0" } }, - "nanoseconds": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nanoseconds/-/nanoseconds-1.0.1.tgz", - "integrity": "sha512-fLbtBoaFlCdjq+LNaDTLXHQh8U3rKDUGRBY0BO2Xjgi1vt+X/6xF6gOkNbYolZboYAeM8o3eOZCOcDJZdogCEg==", - "dev": true - }, "nanotiming": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/nanotiming/-/nanotiming-7.3.1.tgz", @@ -13218,6 +14898,12 @@ "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", "dev": true }, + "nested-error-stacks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", + "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "dev": true + }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -13352,6 +15038,12 @@ "which": "^1.3.0" } }, + "node-version": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", + "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", + "dev": true + }, "nomnom": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", @@ -13769,12 +15461,24 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "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": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -13799,6 +15503,22 @@ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-series": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-series/-/p-series-1.1.0.tgz", + "integrity": "sha512-356covArc9UCfj2twY/sxCJKGMzzO+pJJtucizsPC6aS1xKSTBc9PQrQhvFR3+7F+fa2KBKdJjdIcv6NEWDcIQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "p-reduce": "^1.0.0" + } + }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -14974,142 +16694,48 @@ } }, "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", "dev": true, "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0", - "postcss-load-options": "^1.2.0", - "postcss-load-plugins": "^2.3.0" + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" }, "dependencies": { "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "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.2.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - } - } - }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - } - } - }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "^2.1.1", - "object-assign": "^4.1.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true } } }, "postcss-loader": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.5.tgz", - "integrity": "sha512-pV7kB5neJ0/1tZ8L1uGOBNTVBCSCXQoIsZMsrwvO8V2rKGa2tBl/f80GGVxow2jJnRJ2w1ocx693EKhZAb9Isg==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", + "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", "dev": true, "requires": { "loader-utils": "^1.1.0", "postcss": "^6.0.0", - "postcss-load-config": "^1.2.0", + "postcss-load-config": "^2.0.0", "schema-utils": "^0.4.0" } }, @@ -16442,9 +18068,9 @@ "dev": true }, "prettier": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.4.tgz", - "integrity": "sha512-emsEZ2bAigL1lq6ssgkpPm1MIBqgeTvcp90NxOP5XDqprub/V/WS2Hfgih3mS7/1dqTUvhG+sxx1Dv8crnVexA==", + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", + "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", "dev": true }, "pretty-error": { @@ -16485,22 +18111,10 @@ } }, "pretty-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.0.0.tgz", - "integrity": "sha512-+8bAuWoeG7CBA4Yz5NrcN8NyjD86YcrlxquWlYRLgfwxzXtbHXUnPWeXW5jzTsBwaEf89KNM0luWnRXh6l02EA==", - "dev": true, - "requires": { - "is-number": "^5.0.0", - "nanoseconds": "^1.0.0" - }, - "dependencies": { - "is-number": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-5.0.0.tgz", - "integrity": "sha512-LmVHHP5dTJwrwZg2Jjqp7K5jpvcnYvYD1LMpvGadMsMv5+WXoDSLBQ0+zmuBJmuZGh2J2K845ygj/YukxUnr4A==", - "dev": true - } - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true }, "prismjs": { "version": "1.15.0", @@ -16544,12 +18158,12 @@ "dev": true }, "prompts": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.10.tgz", - "integrity": "sha512-/MPwms6+g/m6fvXZlQyOL4m4ziDim2+Wc6CdWVjp+nVCkzEkK2N4rR74m/bbGf+dkta+/SBpo1FfES8Wgrk/Fw==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.12.tgz", + "integrity": "sha512-pgR1GE1JM8q8UsHVIgjdK62DPwvrf0kvaKWJ/mfMoCm2lwfIReX/giQ1p0AlMoUXNhQap/8UiOdqi3bOROm/eg==", "dev": true, "requires": { - "clorox": "^1.0.3", + "kleur": "^1.0.0", "sisteransi": "^0.1.1" } }, @@ -16598,6 +18212,15 @@ "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", "dev": true }, + "pstree.remy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.0.tgz", + "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==", + "dev": true, + "requires": { + "ps-tree": "^1.1.0" + } + }, "public-encrypt": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", @@ -16897,6 +18520,7 @@ "prop-types": "^15.6.0" } }, +<<<<<<< HEAD "react-copy-to-clipboard": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz", @@ -16906,6 +18530,54 @@ "prop-types": "^15.5.8" } }, +======= + "react-adopt": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-adopt/-/react-adopt-0.6.0.tgz", + "integrity": "sha1-5f+QOmVdMIIhf4K8nVAzpLZPr60=", + "dev": true, + "requires": { + "hoist-non-react-statics": "^2.5.0", + "react": "^16.3.2", + "react-display-name": "^0.2.4" + } + }, + "react-breakpoints": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-breakpoints/-/react-breakpoints-3.0.0.tgz", + "integrity": "sha512-NyFWlbjUpRXZyooKABokMLkpbAZ4YiWPURv7oWqf9uYyH/wow08YlKUMF864IBLHOSrFmRISe0/uiu7SYl7E8A==", + "dev": true, + "requires": { + "create-react-context": "0.2.1", + "hoist-non-react-statics": "2.5.0", + "lodash.debounce": "4.0.8" + }, + "dependencies": { + "create-react-context": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.1.tgz", + "integrity": "sha512-dmGgrAJ/nKoQRRcoonkqWWM9uxk6ClzCHUDKZ8zGdc4MxDwvLVG8s/gzIXtWET7lTAoFSXkeCQ113L1p3QSFmw==", + "dev": true, + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + } + }, + "hoist-non-react-statics": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", + "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==", + "dev": true + } + } + }, + "react-content-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/react-content-loader/-/react-content-loader-3.1.2.tgz", + "integrity": "sha512-9Fv10F6rrzFDIT04aoRsw3dbN6l6onNXbBvCpt4OjXZFGDz/P65laNIujHVTlVjcqErut9d4BL0aplVByyGcJw==", + "dev": true + }, +>>>>>>> abfa39529ff398007bb67cd814c4217a97bdb38b "react-dev-utils": { "version": "6.0.0-next.3e165448", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-6.0.0-next.3e165448.tgz", @@ -17096,6 +18768,12 @@ } } }, + "react-display-name": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.4.tgz", + "integrity": "sha512-zvU6iouW+SWwHTyThwxGICjJYCMZFk/6r/+jmOdC7ntQoPlS/Pqb81MkxaMf2bHTSq9TN3K3zX2/ayMW/jCtyA==", + "dev": true + }, "react-docgen": { "version": "3.0.0-beta9", "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-3.0.0-beta9.tgz", @@ -17112,9 +18790,9 @@ } }, "react-docgen-typescript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.6.1.tgz", - "integrity": "sha512-GNjoMwGfksDcPKnMMJ8LKElV/gWZ478B3cJMDNp3MnZ6Dd49jicpmlVg11/IpuycwWAfCyDiyv2VJNNJ55q5zA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-1.6.2.tgz", + "integrity": "sha512-H4UmLjzEEhDZEfv9eewaZg5+36Xa3fmaOpYRF2l/DjOdLioaM8LRsMRnpGCTiCUfP9yNKSAqmPfixay8NTMVLg==", "dev": true }, "react-docgen-typescript-loader": { @@ -17140,13 +18818,13 @@ } }, "react-emotion": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/react-emotion/-/react-emotion-9.2.4.tgz", - "integrity": "sha1-mOAPcM4spO4TkjRgEj52PkksATo=", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/react-emotion/-/react-emotion-9.2.5.tgz", + "integrity": "sha1-DkDt8GLX7qJg1DJ6n+JyiOyDg14=", "dev": true, "requires": { - "babel-plugin-emotion": "^9.2.4", - "create-emotion-styled": "^9.2.3" + "babel-plugin-emotion": "^9.2.5", + "create-emotion-styled": "^9.2.5" } }, "react-error-overlay": { @@ -17156,15 +18834,15 @@ "dev": true }, "react-feather": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-feather/-/react-feather-1.1.0.tgz", - "integrity": "sha512-JlLSN6NyWWue/ZJ0pYOx0cfMWvIWFHnFkLKxOoM58RpVk2wjkr9GWtMKDx6EbnqyYP1e+JFp1W/eABfvP5rIGQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/react-feather/-/react-feather-1.1.1.tgz", + "integrity": "sha512-bF147qQQfFHki5RSOOhKQ1V7e30tW7xT5zd0x72KfyWi9iErzH1cM5FpqkGz5xylMbBsbzfv/AuwGp95TQwumA==", "dev": true }, "react-final-form": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/react-final-form/-/react-final-form-3.6.2.tgz", - "integrity": "sha512-6gr+xOtOfRvoUwNwjZBSuc9M4p1kgMrGVI31zwPVac5U3k2uzkUOTgP7a54CzRiiRDajmPZVGDF2fQOv23dcsA==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/react-final-form/-/react-final-form-3.6.4.tgz", + "integrity": "sha512-7eVR5Qfls4fyL7dXQiUkr55zqM73WTnlPMhi8gm91UzeY6RI3SK9OTBUpQBIKWacMrt1nDs4uRdcvdVBTFJTag==", "dev": true }, "react-hot-loader": { @@ -17223,10 +18901,25 @@ } }, "react-powerplug": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/react-powerplug/-/react-powerplug-0.1.6.tgz", - "integrity": "sha512-2bBoBaulpNnmXvM4nTQL3KKdsyzcufHI9ebpzoWlFZAplM0gn7Z0cBOcw2H8FFHGI38OMzo8CSpKYJaOJ8e/KA==", - "dev": true + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/react-powerplug/-/react-powerplug-1.0.0-rc.1.tgz", + "integrity": "sha512-TqeC/QT0xJ1gAI0SlqorHwzT9QD8z2tI+hQ/FFFiK6wZdRq4iQetYGcbgmcw7mpblOA8lIKwBgpk00Ja4VwncA==", + "dev": true, + "requires": { + "@babel/runtime": "7.0.0-beta.49" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.0.0-beta.49", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.49.tgz", + "integrity": "sha1-A7O/B+uYIHLI6FHdLd1RECguYb8=", + "dev": true, + "requires": { + "core-js": "^2.5.6", + "regenerator-runtime": "^0.11.1" + } + } + } }, "react-reconciler": { "version": "0.7.0", @@ -17307,30 +19000,13 @@ "warning": "^4.0.1" } }, - "react-spinners": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.3.2.tgz", - "integrity": "sha512-SZzc99QqKLq85uGWYvkVeHTEPMEpLwnvQOyY62vNqAT9WWdkGJgHKt4H7Z68ALiWYZGKT5oIclh/cdBX20546w==", + "react-router-hash-link": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-router-hash-link/-/react-router-hash-link-1.2.0.tgz", + "integrity": "sha1-zoJMxfBQLOmwaGu23ZwIZZskCUw=", "dev": true, "requires": { - "emotion": "^9.1.1", - "prop-types": "^15.5.10", - "react-emotion": "^9.1.1", - "recompose": "0.26.0" - }, - "dependencies": { - "recompose": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", - "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", - "dev": true, - "requires": { - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "symbol-observable": "^1.0.4" - } - } + "prop-types": "^15.6.0" } }, "react-test-renderer": { @@ -17345,6 +19021,7 @@ "react-is": "^16.4.1" } }, +<<<<<<< HEAD <<<<<<< HEAD "react-tooltip": { "version": "3.6.1", @@ -17354,6 +19031,14 @@ "classnames": "^2.2.5", "prop-types": "^15.6.0" ======= +======= + "react-timeago": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/react-timeago/-/react-timeago-4.1.9.tgz", + "integrity": "sha512-MKucv9nU65BOPqIrClAFxqvpGCC4RdRpqp0P1YIb7C3yT6TQVdcoOlr0k4TDHvLQhbkwd3nbTxiDQMa3iDlZxg==", + "dev": true + }, +>>>>>>> abfa39529ff398007bb67cd814c4217a97bdb38b "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -18442,6 +20127,12 @@ "watch": "~0.18.0" } }, + "saslprep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.0.tgz", + "integrity": "sha512-5lvKUEQ7lAN5/vPl5d3k8FQeDbEamu9kizfATfLLWV5h6Mkh1xcieR1FSsJkcSRUk49lF2tAW8gzXWVwtwZVhw==", + "optional": true + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -18687,12 +20378,13 @@ } }, "sinon": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.1.2.tgz", - "integrity": "sha512-MPa7kfV44XgzlXthSI28QgJUAjNQ2LdafqYFQnwXv1d5bCJXrVyYH7PLFk8PpAFhRN5Tgy8PbJFJbrvDsTss8g==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.1.3.tgz", + "integrity": "sha512-yeTza8xIZZdiXntCHJAzKll/sSYE+DuJOS8hiSapzaLqdW8eCNVVC9je9SZYYTkPm2bLts9x6UYxwuMAVVrM6Q==", "dev": true, "requires": { "@sinonjs/formatio": "^2.0.0", + "@sinonjs/samsam": "^2.0.0", "diff": "^3.5.0", "lodash.get": "^4.4.2", "lolex": "^2.4.2", @@ -19086,9 +20778,9 @@ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "std-env": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-1.3.0.tgz", - "integrity": "sha512-3uwAVIQQYFiDRBoYuHE/5YnEuOnQjEWvL1ZMKSq+BGFkG2IK9ONFAIYn77h3Kzr3qd0SILi9/5Cu9BbZxaeNnA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-1.3.1.tgz", + "integrity": "sha512-KI2F2pPJpd3lHjng+QLezu0eq+QDtXcv1um016mhOPAJFHKL+09ykK5PUBWta2pZDC8BVV0VPya08A15bUXSLQ==", "dev": true, "requires": { "is-ci": "^1.1.0" @@ -19284,9 +20976,9 @@ } }, "stylis": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.1.tgz", - "integrity": "sha512-yM4PyeHuwhIOUHNJxi1/Mbq8kVLv4AkyE7IYLP/LK0lIFcr3tRa2H1iZlBYKIxOlf+/jruBTe8DdKSyQX9w4OA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.3.tgz", + "integrity": "sha512-TxU0aAscJghF9I3V9q601xcK3Uw1JbXvpsBGj/HULqexKOKlOEzzlIpLFRbKkCK990ccuxfXUqmPbIIo7Fq/cQ==", "dev": true }, "stylis-rule-sheet": { @@ -19305,16 +20997,13 @@ } }, "subscriptions-transport-ws": { - "version": "0.9.11", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.11.tgz", - "integrity": "sha512-B8fwTIJy2buUcBXM6Ffbax30XcEqvCqL8RXwbivBAiB3X9ezrTcF5nYMmNGZ47sxrDYA1XfQ5W3aTgJEm8BFJA==", + "version": "0.9.12", + "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.12.tgz", + "integrity": "sha512-57Ar8hjr/63fCx1kM3kyDr64FAPQITMguuFuTGgYVx2v1JOaPoTeZyTIenVPgv+7mDYt7E+h+Jyxvznb+UKVWw==", "requires": { "backo2": "^1.0.2", "eventemitter3": "^3.1.0", "iterall": "^1.2.1", - "lodash.assign": "^4.2.0", - "lodash.isobject": "^3.0.2", - "lodash.isstring": "^4.0.1", "symbol-observable": "^1.0.4", "ws": "^5.2.0" } @@ -19587,6 +21276,12 @@ "dev": true, "optional": true }, + "titleize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-1.0.1.tgz", + "integrity": "sha512-rUwGDruKq1gX+FFHbTl5qjI7teVO7eOe+C8IcQ7QT+1BK3eEUXJqbZcBOeaRP4FwSC/C1A5jDoIVta0nIQ9yew==", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -19705,6 +21400,15 @@ "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", "dev": true }, + "touch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", + "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -19877,9 +21581,9 @@ } }, "ts-loader": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-4.4.1.tgz", - "integrity": "sha512-PvL6jgVEt4RurczrTOR8uI6uRmKRfRXiv3CyMRX8+MSQLlbedfbXtbJIdkhdpbqrsumb+Lc3qrxfmXHCmODyAg==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-4.4.2.tgz", + "integrity": "sha512-Z3Y1a7A0KZZ1s/mAZkt74l1NAF7Y5xUhD1V9VB8/1eUlUOk8Qa/oo46tO2Uu5kQ3wXypOlbv77lLQySjXEDcdw==", "dev": true, "requires": { "chalk": "^2.3.0", @@ -19890,12 +21594,13 @@ } }, "ts-node": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.1.1.tgz", - "integrity": "sha512-79FnymLGDBd/nXoiak1L6w6fd9Zz9Ge/x8/Aglaeh31KkqRLDzbfT1vBGlO5dqc76WzufTlW4IYl7e01CVUF5A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.2.0.tgz", + "integrity": "sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==", "dev": true, "requires": { "arrify": "^1.0.0", + "buffer-from": "^1.1.0", "diff": "^3.1.0", "make-error": "^1.1.1", "minimist": "^1.2.0", @@ -19905,9 +21610,9 @@ } }, "tsconfig-paths": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.4.0.tgz", - "integrity": "sha512-HrPwxZj+9zAY/rvaPGwjk/2bOjM9ItfwaHV4wEs+9RdrMJN6Xv3d3y9W/LXt/GhRx3FutAlTMz5Ztb4copBmLw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.4.2.tgz", + "integrity": "sha512-2BzUwQG7iUES+xNkRXivgejCpH9ru7n/khgv9Gl0FxP0tYvlPIMp2NspeYOXg8Wjh08Yyo/sSTlo4slNO3IFLg==", "dev": true, "requires": { "deepmerge": "^2.0.1", @@ -20255,9 +21960,9 @@ "dev": true }, "typescript": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", - "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "ua-parser-js": { @@ -20652,43 +22357,6 @@ "latest-version": "^3.0.0", "semver-diff": "^2.0.0", "xdg-basedir": "^3.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.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "upper-case": { @@ -20731,9 +22399,9 @@ } }, "url-join": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-3.0.0.tgz", - "integrity": "sha1-JugROs4ZXqMND8OBhuRUAPnOpnI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", "dev": true }, "url-loader": { @@ -20820,9 +22488,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8-compile-cache": { "version": "2.0.0", @@ -21264,9 +22932,9 @@ } }, "webpack-hot-client": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-4.0.3.tgz", - "integrity": "sha512-NbBzN6BkVDMhYKX2Hc6FLbC28oeh6suLgK614n0MsvALJlkSqMBGTh5fw8ms9Euvkm/+VB2XnlaYs391RLGVow==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-4.1.1.tgz", + "integrity": "sha512-Gu3hEkFJIsvC+2Dg86FvAzIL8KSR88Ptk0QnV4wEucObB0c9aMIYbjSA9oPTV4X5OZRH6ftrk4FcSGsZmTLiWA==", "dev": true, "requires": { "@webpack-contrib/schema-utils": "^1.0.0-beta.0", @@ -21354,34 +23022,41 @@ } }, "webpack-serve": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/webpack-serve/-/webpack-serve-1.0.4.tgz", - "integrity": "sha512-WhI9PMY2YLFliZhDsQFE5Os/On5Py6DGZpeBJyDM8xl0cspxgvXmWFywACn2YWWDgowqIxRqveyGh2RwdFWTNQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/webpack-serve/-/webpack-serve-2.0.2.tgz", + "integrity": "sha512-KQra2vayPKE2gooZRr2jF0Cs9AcQrS60Dmc6gMlFn4DmPkk/EmCuCODiAw008XedjwMBt8kUapDXJVu4gDH9Mg==", "dev": true, "requires": { "@shellscape/koa-static": "^4.0.4", + "@webpack-contrib/cli-utils": "^1.0.2", "@webpack-contrib/config-loader": "^1.1.1", + "@webpack-contrib/schema-utils": "^1.0.0-beta.0", "chalk": "^2.3.0", "clipboardy": "^1.2.2", "cosmiconfig": "^5.0.2", "debug": "^3.1.0", - "find-up": "^2.1.0", + "decamelize": "^2.0.0", "get-port": "^3.2.0", "import-local": "^1.0.0", + "is-plain-obj": "^1.1.0", "killable": "^1.0.0", "koa": "^2.4.1", - "koa-webpack": "^4.0.0", - "lodash": "^4.17.5", + "koa-webpack": "^5.1.0", "loud-rejection": "^1.6.0", + "mem": "^3.0.0", "meow": "^5.0.0", + "merge-options": "^1.0.1", "nanobus": "^4.3.1", + "node-version": "^1.1.3", "opn": "^5.1.0", + "p-defer": "^1.0.0", + "p-series": "^1.1.0", "resolve": "^1.6.0", + "strip-ansi": "^4.0.0", "time-fix-plugin": "^2.0.0", "update-notifier": "^2.3.0", - "url-join": "3.0.0", + "url-join": "^4.0.0", "v8-compile-cache": "^2.0.0", - "webpack-hot-client": "^3.0.0", "webpack-log": "^1.1.2" }, "dependencies": { @@ -21411,6 +23086,25 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "mem": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-3.0.1.tgz", + "integrity": "sha512-QKs47bslvOE0NbXOqG6lMxn6Bk0Iuw0vfrIeLykmQle2LkCw1p48dZDdzE+D88b/xqRJcZGcMNeDvSVma+NuIQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -21429,33 +23123,18 @@ "requires": { "ansi-regex": "^3.0.0" } - }, - "webpack-hot-client": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-3.0.0.tgz", - "integrity": "sha512-6k91015hZ4Okkz8u6OzRgJygEL+3J3ay6HVZhWBF3tT2P0rZJ0mgca39dotJxngggUm3S8707c0vrcynn1IzEQ==", - "dev": true, - "requires": { - "json-stringify-safe": "^5.0.1", - "loglevelnext": "^1.0.2", - "strip-ansi": "^4.0.0", - "uuid": "^3.1.0", - "webpack-log": "^1.1.1", - "ws": "^4.0.0" - } - }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } } } }, + "webpack-serve-waitpage": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/webpack-serve-waitpage/-/webpack-serve-waitpage-1.0.0.tgz", + "integrity": "sha512-KWkHQIqowGaMkbzld3mMbR0LMLBGCmlpk8gBQhhv3VAmpRD+to2/wkOBsKIMR8IedFVcwdGev2k/lruSmV4aWA==", + "dev": true, + "requires": { + "ejs": "^2.6.1" + } + }, "webpack-sources": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", @@ -21729,6 +23408,12 @@ "camelcase": "^4.1.0" } }, + "ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", + "dev": true + }, "yn": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", diff --git a/package.json b/package.json index 7ae7aa084..a3c765903 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "npm-run-all compile --parallel build:*", "build:client": "node ./scripts/build.js", "build:server": "tsc -p ./src/tsconfig.json", - "watch": "NODE_ENV=development ts-node ./scripts/watcher/bin/watcher.ts ./config/watcher.ts", + "watch": "NODE_ENV=development ts-node ./scripts/watcher/bin/watcher.ts --config ./config/watcher.ts", "compile": "npm-run-all --parallel compile:*", "compile:css-types": "tcm src/core/client/", "compile:relay-stream": "relay-compiler --src ./src/core/client/stream --schema $(ts-node ./scripts/schemaPath.ts tenant) --language typescript --artifactDirectory ./src/core/client/stream/__generated__ --no-watchman", @@ -19,7 +19,7 @@ "lint:server": "tslint --project ./src/tsconfig.json", "lint:client": "tslint --project ./src/core/client/tsconfig.json", "lint:scripts": "tslint --project ./tsconfig.json", - "docz:watch": "docz dev" + "docz": "docz" }, "author": "", "license": "Apache-2.0", @@ -28,7 +28,7 @@ "@types/react-tooltip": "^3.3.5", "apollo-server-express": "^1.3.6", "bunyan": "^1.8.12", - "convict": "^4.3.0", + "convict": "^4.3.1", "dataloader": "^1.4.0", "dotenv": "^6.0.0", "dotenv-expand": "^4.2.0", @@ -39,25 +39,30 @@ "graphql": "^0.13.2", "graphql-config": "^2.0.1", "graphql-redis-subscriptions": "^1.5.0", - "graphql-tools": "^3.0.2", + "graphql-tools": "^3.0.5", "ioredis": "^3.2.2", "joi": "^13.4.0", "lodash": "^4.17.10", - "luxon": "^1.2.1", - "mongodb": "^3.0.10", + "luxon": "^1.3.1", + "mongodb": "^3.1.1", "passport": "^0.4.0", "performance-now": "^2.1.0", +<<<<<<< HEAD "rc-tooltip": "^3.7.2", "react-copy-to-clipboard": "^5.0.1", "react-popper": "^1.0.0-beta.6", "react-tooltip": "^3.6.1", "subscriptions-transport-ws": "^0.9.11", "uuid": "^3.2.1" +======= + "subscriptions-transport-ws": "^0.9.12", + "uuid": "^3.3.2" +>>>>>>> abfa39529ff398007bb67cd814c4217a97bdb38b }, "devDependencies": { "@babel/core": "7.0.0-beta.49", "@babel/plugin-syntax-dynamic-import": "7.0.0-beta.49", - "@babel/plugin-transform-modules-commonjs": "^7.0.0-beta.52", + "@babel/plugin-transform-modules-commonjs": "^7.0.0-beta.53", "@babel/polyfill": "7.0.0-beta.49", "@babel/preset-env": "7.0.0-beta.49", "@babel/preset-react": "7.0.0-beta.49", @@ -71,15 +76,15 @@ "@types/enzyme": "^3.1.11", "@types/enzyme-adapter-react-16": "^1.0.2", "@types/express": "^4.16.0", - "@types/graphql": "^0.13.1", - "@types/ioredis": "^3.2.8", - "@types/jest": "^23.1.1", + "@types/graphql": "^0.13.3", + "@types/ioredis": "^3.2.12", + "@types/jest": "^23.1.5", "@types/joi": "^13.0.8", "@types/jsdom": "^11.0.6", - "@types/lodash": "^4.14.109", + "@types/lodash": "^4.14.111", "@types/luxon": "^0.5.3", - "@types/mongodb": "^3.0.19", - "@types/node": "^10.3.1", + "@types/mongodb": "^3.1.1", + "@types/node": "^10.5.2", "@types/passport": "^0.4.5", "@types/query-string": "^6.1.0", "@types/react-dom": "^16.0.6", @@ -88,10 +93,11 @@ "@types/react-test-renderer": "^16.0.1", "@types/recompose": "^0.26.1", "@types/relay-runtime": "github:coralproject/patched#types/relay-runtime", + "@types/sane": "^2.0.0", "@types/sinon": "^5.0.1", "@types/uuid": "^3.4.3", "@types/ws": "^5.1.2", - "autoprefixer": "^8.6.0", + "autoprefixer": "^8.6.5", "babel-core": "^7.0.0-bridge.0", "babel-loader": "^8.0.0-beta", "babel-plugin-relay": "github:coralproject/patched#babel-plugin-relay", @@ -104,21 +110,20 @@ "copy-webpack-plugin": "^4.5.1", "cross-spawn": "^6.0.5", "css-loader": "^0.28.11", - "docz": "^0.2.6", - "docz-theme-default": "^0.2.10", + "docz": "^0.5.8", "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.1.1", "enzyme-to-json": "^3.3.4", "extract-text-webpack-plugin": "^4.0.0-beta.0", "final-form": "^4.8.1", - "flat": "^4.0.0", + "flat": "^4.1.0", "fluent": "^0.6.4", "fluent-intl-polyfill": "^0.1.0", "fluent-langneg": "^0.1.0", "fluent-react": "^0.7.0", - "graphql-playground-middleware-express": "^1.7.0", + "graphql-playground-middleware-express": "^1.7.2", "html-webpack-plugin": "^3.2.0", - "jest": "^23.3.0", + "jest": "^23.4.1", "jsdom": "^11.11.0", "loader-utils": "^1.1.0", "npm-run-all": "^4.1.3", @@ -127,32 +132,35 @@ "postcss-flexbugs-fixes": "^3.3.1", "postcss-font-magician": "^2.2.1", "postcss-import": "^11.1.0", - "postcss-loader": "^2.1.5", + "postcss-loader": "^2.1.6", "postcss-nested": "^3.0.0", "postcss-prepend-imports": "^1.0.1", "postcss-preset-env": "^5.2.1", - "prettier": "^1.13.4", + "prettier": "^1.13.7", + "pstree.remy": "^1.1.0", "query-string": "^6.1.0", "raw-loader": "^0.5.1", "react": "^16.4.0", "react-dev-utils": "6.0.0-next.3e165448", "react-dom": "^16.4.0", - "react-final-form": "^3.6.0", + "react-final-form": "^3.6.4", "react-relay": "github:coralproject/patched#react-relay", "react-responsive": "^4.1.0", "react-test-renderer": "^16.4.1", + "react-timeago": "^4.1.9", "recompose": "^0.27.1", "relay-compiler": "github:coralproject/patched#relay-compiler", "relay-compiler-language-typescript": "github:coralproject/patched#relay-compiler-language-typescript", "relay-local-schema": "^0.7.0", "relay-runtime": "github:coralproject/patched#relay-runtime", "relay-test-utils": "github:coralproject/patched#relay-test-utils", - "sinon": "^6.1.2", + "sane": "^2.5.2", + "sinon": "^6.1.3", "style-loader": "^0.21.0", "ts-jest": "^23.0.0", - "ts-loader": "^4.3.1", - "ts-node": "^6.1.0", - "tsconfig-paths": "^3.4.0", + "ts-loader": "^4.4.2", + "ts-node": "^6.2.0", + "tsconfig-paths": "^3.4.2", "tsconfig-paths-webpack-plugin": "^3.1.4", "tslint": "^5.10.0", "tslint-config-prettier": "^1.13.0", @@ -160,12 +168,12 @@ "tslint-plugin-prettier": "^1.3.0", "tslint-react": "^3.6.0", "typed-css-modules": "^0.3.4", - "typescript": "^2.9.1", + "typescript": "^2.9.2", "uglifyjs-webpack-plugin": "^1.2.5", "webpack": "4.12.0", "webpack-cli": "^3.0.2", "webpack-dev-server": "^3.1.4", - "webpack-hot-client": "^4.0.3", + "webpack-hot-client": "^4.1.1", "webpack-manifest-plugin": "^2.0.3" } } diff --git a/scripts/watcher/ChokidarWatcher.ts b/scripts/watcher/ChokidarWatcher.ts index cbc91d705..65a6ad701 100644 --- a/scripts/watcher/ChokidarWatcher.ts +++ b/scripts/watcher/ChokidarWatcher.ts @@ -1,14 +1,22 @@ import chokidar from "chokidar"; +import path from "path"; import { Watcher, WatchOptions } from "./types"; +function prependRootDir( + prepend: string, + paths: ReadonlyArray +): string[] { + const prependFunc = (p: string) => path.resolve(prepend, p); + return paths.map(prependFunc); +} + export default class ChokidarWatcher implements Watcher { public watch( + rootDir: string, paths: ReadonlyArray, options: WatchOptions = {} ): AsyncIterable { - const client = chokidar.watch(paths as string[], { - ignored: options.ignore, - }); + const resolvedPaths = prependRootDir(rootDir, paths); // An array to hold all changes, that has not yet been yield. const queue: string[] = []; @@ -19,31 +27,38 @@ export default class ChokidarWatcher implements Watcher { | ({ resolve: (result: string) => void; reject: (error: Error) => void }) | null = null; - // Listen for errors - client.on("error", (error: Error) => { - // Resolve pending request. - if (pending) { - pending.reject(error); - pending = null; - return; - } - if (!firstError) { - firstError = error; - } - }); + // Only start client if we have something to watch. + if (paths.length) { + const client = chokidar.watch(resolvedPaths, { + ignored: options.ignore && prependRootDir(rootDir, options.ignore), + }); - // Listen for changes - client.on("change", (pathFile: string) => { - // Resolve pending request. - if (pending) { - pending.resolve(pathFile); - pending = null; - return; - } + // Listen for errors + client.on("error", (error: Error) => { + // Resolve pending request. + if (pending) { + pending.reject(error); + pending = null; + return; + } + if (!firstError) { + firstError = error; + } + }); - // There is no pending request, save it into the queue. - queue.unshift(pathFile); - }); + // Listen for changes + client.on("change", (pathFile: string) => { + // Resolve pending request. + if (pending) { + pending.resolve(pathFile); + pending = null; + return; + } + + // There is no pending request, save it into the queue. + queue.unshift(pathFile); + }); + } return { [Symbol.asyncIterator]() { return { diff --git a/scripts/watcher/CommandExecutor.ts b/scripts/watcher/CommandExecutor.ts index fddba0b8b..195fcdcff 100644 --- a/scripts/watcher/CommandExecutor.ts +++ b/scripts/watcher/CommandExecutor.ts @@ -1,3 +1,4 @@ +import chalk from "chalk"; import spawn from "cross-spawn"; import { Cancelable, debounce } from "lodash"; @@ -65,9 +66,9 @@ export default class CommandExecutor implements Executor { child.on("close", (code: number) => { this.isRunning = false; - if (code !== 0) { + if (code !== 0 && code !== null) { // tslint:disable-next-line: no-console - console.log(`We had an error building ${code}`); + console.log(chalk.red(`Command exited with ${code}`)); } if (this.shouldRespawn) { this.spawnProcessPotentiallyDebounced(); diff --git a/scripts/watcher/LongRunningExecutor.ts b/scripts/watcher/LongRunningExecutor.ts index 7019c1fb3..358821b46 100644 --- a/scripts/watcher/LongRunningExecutor.ts +++ b/scripts/watcher/LongRunningExecutor.ts @@ -1,6 +1,9 @@ +import chalk from "chalk"; import { ChildProcess } from "child_process"; import spawn from "cross-spawn"; import { Cancelable, debounce } from "lodash"; +import psTree from "pstree.remy"; + import { Executor } from "./types"; interface LongRunningExecutorOptions { @@ -31,9 +34,6 @@ export default class LongRunningExecutor implements Executor { this.isRunning = true; this.process = spawn(this.cmd, this.args as string[], { stdio: "inherit", - // Have all child processes in their own group. - // See `process.kill` below. - detached: true, shell: !this.args, }); @@ -42,27 +42,53 @@ export default class LongRunningExecutor implements Executor { if (code !== 0 && code !== null) { // tslint:disable-next-line: no-console - console.error(`Exit code returned ${code}`); + console.log(chalk.red(`Command exited with ${code}`)); return; } if (this.shouldRestart) { + this.shouldRestart = false; this.spawnProcess(); } }); } - private restart(): void { + private restart() { this.shouldRestart = true; - // Using the `-` will kill all child procceses in the group. - // See: https://azimi.me/2014/12/31/kill-child_process-node-js.html - process.kill(-this.process!.pid, "SIGTERM"); + return this.internalKill(); } - private kill(): void { + private kill() { this.shouldRestart = false; - // Using the `-` will kill all child procceses in the group. - // See: https://azimi.me/2014/12/31/kill-child_process-node-js.html - process.kill(-this.process!.pid, "SIGTERM"); + return this.internalKill(); + } + + private async internalKill(): Promise { + return new Promise((resolve, reject) => { + const signal = "SIGTERM"; + if (process.platform === "win32") { + // Force kill (/F) the whole child tree (/T) by PID + spawn.sync("taskkill", [ + "/pid", + this.process!.pid.toString(), + "/T", + "/F", + ]); + resolve(); + return; + } + + psTree(this.process!.pid, (err, kids) => { + if (err) { + reject(err); + } + spawn.sync("kill", [ + `-${signal}`, + this.process!.pid.toString(), + ...kids.map(p => p.PID.toString()), + ]); + resolve(); + }); + }); } // This is called before watching starts. @@ -71,10 +97,10 @@ export default class LongRunningExecutor implements Executor { } // This is called before exiting. - public onCleanup() { + public async onCleanup() { this.restartDebounced.cancel(); if (this.isRunning) { - this.kill(); + await this.kill(); } } diff --git a/scripts/watcher/SaneWatcher.ts b/scripts/watcher/SaneWatcher.ts new file mode 100644 index 000000000..1b2cbf098 --- /dev/null +++ b/scripts/watcher/SaneWatcher.ts @@ -0,0 +1,101 @@ +import chalk from "chalk"; +import { execSync } from "child_process"; +import sane from "sane"; + +import { Watcher, WatchOptions } from "./types"; + +interface SaneWatcherOptions { + /** + * Set to true to use watchman, false to disabled, and undefined + * for automatic detection. + */ + watchman?: boolean; + /** Use polling, this might be required for network file systems. */ + poll?: boolean; +} + +function canUseWatchman(): boolean { + try { + execSync("watchman --version", { stdio: ["ignore"] }); + return true; + // tslint:disable-next-line:no-empty + } catch (e) {} + return false; +} + +export default class SaneWatcher implements Watcher { + private watchman?: boolean; + private poll: boolean; + + constructor(options: SaneWatcherOptions = {}) { + this.watchman = options.watchman; + this.poll = options.poll || false; + + // Autodetect watchman. + if (this.watchman === undefined && canUseWatchman()) { + this.watchman = true; + // tslint:disable-next-line:no-console + console.log(chalk.grey(`Watchman detected`)); + } + } + + public watch( + rootDir: string, + paths: ReadonlyArray, + options: WatchOptions = {} + ): AsyncIterable { + // An array to hold all changes, that has not yet been yield. + const queue: string[] = []; + + // If this is set, a pending promise is waiting for the next result. + let pending: ({ resolve: (result: string) => void }) | null = null; + + // Only start client if we have something to watch. + if (paths.length) { + // Setup client + const client = sane(rootDir, { + glob: paths as string[], + ignored: options.ignore as string[], + watchman: this.watchman, + poll: this.poll, + }); + + // Listen for changes + client.on("change", (pathFile: string) => { + // Resolve pending request. + if (pending) { + pending.resolve(pathFile); + pending = null; + return; + } + + // There is no pending request, save it into the queue. + queue.unshift(pathFile); + }); + } + + return { + [Symbol.asyncIterator]() { + return { + next: () => + new Promise>((resolve, reject) => { + const wrapped = { + resolve: (pathFile: string) => + resolve({ + done: false, + value: pathFile, + }), + }; + + if (queue.length) { + wrapped.resolve(queue.pop()!); + return; + } + // We need to wait for the next change event. + pending = wrapped; + }), + }; + }, + }; + } +} diff --git a/scripts/watcher/bin/watcher.ts b/scripts/watcher/bin/watcher.ts index a3a50e6c3..c8126a2ec 100644 --- a/scripts/watcher/bin/watcher.ts +++ b/scripts/watcher/bin/watcher.ts @@ -4,24 +4,36 @@ import program from "commander"; import path from "path"; import watch from "../"; -function list(val: string) { - return val.split(","); +async function run( + args: ReadonlyArray, + options: Record +) { + const only = args; + const { config: configFile = "" } = options; + if (!configFile) { + throw new Error("Config file not specified"); + } + + // tslint:disable-next-line:no-var-requires + let config: any = require(path.resolve(configFile)); + if (config.__esModule) { + config = config.default; + } + + try { + await watch(config, { only }); + } catch (err) { + // tslint:disable-next-line:no-console + console.error(err); + process.exit(1); + } } -program +const cmd = program .version("0.1.0") - .usage("") - .option("-o, --only ", "only run the specified watcher", list) - .arguments("") + .usage("[watchers or sets]") + .option("-c, --config ", "Use given config file") .description("Run watchers defined in ") - .action((configFile, cmd) => { - const { only = [] } = cmd; - - let config: any = require(path.resolve(configFile)); - if (config.__esModule) { - config = config.default; - } - - watch(config, { only }); - }) .parse(process.argv); + +run(cmd.args, cmd.opts()); diff --git a/scripts/watcher/types.ts b/scripts/watcher/types.ts index 15bd6090b..fc099b9b2 100644 --- a/scripts/watcher/types.ts +++ b/scripts/watcher/types.ts @@ -5,28 +5,31 @@ export interface WatchOptions { } export interface Watcher { + onInit?(): void | Promise; + onCleanup?(): void | Promise; watch( + rootDir: string, paths: ReadonlyArray, options?: WatchOptions ): AsyncIterable; } export interface Executor { - onInit?(): void; - onCleanup?(): void; + onInit?(): void | Promise; + onCleanup?(): void | Promise; execute(filePath: string): void; } export interface Options { - only?: string[]; + only?: ReadonlyArray; } export interface Config { rootDir?: string; backend?: Watcher; - watchers: { - [key: string]: WatchConfig; - }; + watchers: Record; + defaultSet?: string; + sets?: Record>; } export interface WatchConfig { @@ -51,4 +54,13 @@ export const configSchema = Joi.object({ executor: Joi.object(), }) ), -}); + defaultSet: Joi.string().optional(), + sets: Joi.object() + .pattern( + /.*/, + Joi.array() + .items(Joi.string()) + .unique() + ) + .optional(), +}).with("defaultSet", "sets"); diff --git a/scripts/watcher/types/pstree.remy.d.ts b/scripts/watcher/types/pstree.remy.d.ts new file mode 100644 index 000000000..4cca7eff8 --- /dev/null +++ b/scripts/watcher/types/pstree.remy.d.ts @@ -0,0 +1,6 @@ +declare module "pstree.remy" { + export default function psTree( + pid: number, + callback: (err: Error, kids: Array<{ PID: number }>) => void + ): void; +} diff --git a/scripts/watcher/watch.ts b/scripts/watcher/watch.ts index 8a3feac75..63ed48fd4 100644 --- a/scripts/watcher/watch.ts +++ b/scripts/watcher/watch.ts @@ -1,7 +1,8 @@ +import chalk from "chalk"; import Joi from "joi"; -import path from "path"; +import { pickBy } from "lodash"; -import ChokidarWatcher from "./ChokidarWatcher"; +import SaneWatcher from "./SaneWatcher"; import { Config, configSchema, Options, WatchConfig, Watcher } from "./types"; // Polyfill the asyncIterator symbol. @@ -9,63 +10,97 @@ if (Symbol.asyncIterator === undefined) { (Symbol as any).asyncIterator = Symbol.for("asyncIterator"); } -async function beginWatch(watcher: Watcher, key: string, config: WatchConfig) { +async function beginWatch( + watcher: Watcher, + key: string, + config: WatchConfig, + rootDir: string +) { const { paths, ignore, executor } = config; if (executor.onInit) { - executor.onInit(); + await executor.onInit(); } - for await (const filePath of watcher.watch(paths, { ignore })) { + for await (const filePath of watcher.watch(rootDir, paths, { ignore })) { // tslint:disable-next-line:no-console - console.log(`Execute "${key}"`); + console.log(chalk.cyanBright(`Execute "${key}"`)); executor.execute(filePath); } } -function prependRootDir(prepend: string, cfg: WatchConfig): WatchConfig { - const prependFunc = (p: string) => path.resolve(prepend, p); - return { - ...cfg, - paths: cfg.paths.map(prependFunc), - ignore: cfg.ignore ? cfg.ignore.map(prependFunc) : undefined, - }; -} - -function setupCleanup(config: Config) { +function setupCleanup(watcher: Watcher, config: Config) { ["SIGINT", "SIGTERM"].forEach(signal => - process.once(signal as any, () => { + process.once(signal as any, async () => { + const cleanups = []; + if (watcher.onCleanup) { + cleanups.push(watcher.onCleanup()); + } for (const key of Object.keys(config.watchers)) { if (config.watchers[key].executor.onCleanup) { - config.watchers[key].executor.onCleanup!(); + cleanups.push(config.watchers[key].executor.onCleanup!()); } } + await Promise.all(cleanups); process.exit(0); }) ); } -function filterOnly(config: Config, only: string[]) { - for (const key of Object.keys(config.watchers)) { - if (only.indexOf(key) === -1) { - // tslint:disable-next-line:no-console - console.log(`Disabled watcher "${key}"`); - delete config.watchers[key]; +function resolveSets( + sets: Record>, + value: ReadonlyArray +) { + const resolved: string[] = []; + value.forEach(v => { + if (v in sets) { + resolved.push(...sets[v]); + return; } - } + resolved.push(v); + }); + return resolved; } -export default async function watch(config: Config, options?: Options) { - Joi.assert(config, configSchema); - const watcher = config.backend || new ChokidarWatcher(); - if (options && options.only && options.only.length > 0) { - filterOnly(config, options.only); +function filterOnly( + watchers: Config["watchers"], + only: ReadonlyArray, + sets?: Record> +): Config["watchers"] { + const resolved = sets ? resolveSets(sets, only) : only; + const unknown = resolved.filter(r => !(r in watchers)); + if (unknown.length) { + throw new Error(`Watcher Configuration or Set for ${unknown} not found`); } - setupCleanup(config); - for (const key of Object.keys(config.watchers)) { + return pickBy(watchers, (value, key) => { + if (resolved.indexOf(key) === -1) { + // tslint:disable-next-line:no-console + console.log(chalk.grey(`Disabled watcher "${key}"`)); + return false; + } + return true; + }) as Config["watchers"]; +} + +export default async function watch(config: Config, options: Options = {}) { + Joi.assert(config, configSchema); + const watcher: Watcher = config.backend || new SaneWatcher(); + const rootDir = config.rootDir || process.cwd(); + const defaultSet = config.defaultSet && [config.defaultSet]; + const only = options.only && options.only.length ? options.only : defaultSet; + + let watchersConfigs = config.watchers; + if (only) { + watchersConfigs = filterOnly(watchersConfigs, only, config.sets); + } + + setupCleanup(watcher, config); + if (watcher.onInit) { + await watcher.onInit(); + } + + for (const key of Object.keys(watchersConfigs)) { // tslint:disable-next-line:no-console - console.log(`Start watcher "${key}"`); - const watcherConfig = config.rootDir - ? prependRootDir(config.rootDir, config.watchers[key]) - : config.watchers[key]; - beginWatch(watcher, key, watcherConfig); + console.log(chalk.cyanBright(`Start watcher "${key}"`)); + const watcherConfig = watchersConfigs[key]; + beginWatch(watcher, key, watcherConfig, rootDir); } } diff --git a/src/core/client/framework/lib/bootstrap/TalkContext.tsx b/src/core/client/framework/lib/bootstrap/TalkContext.tsx index 93bc84c43..d14c245f5 100644 --- a/src/core/client/framework/lib/bootstrap/TalkContext.tsx +++ b/src/core/client/framework/lib/bootstrap/TalkContext.tsx @@ -1,7 +1,9 @@ import { LocalizationProvider } from "fluent-react/compat"; import { MessageContext } from "fluent/compat"; import React, { StatelessComponent } from "react"; +import { Formatter } from "react-timeago"; import { Environment } from "relay-runtime"; +import { UIContext } from "talk-ui/components"; export interface TalkContext { // relayEnvironment for our relay framework. @@ -9,6 +11,9 @@ export interface TalkContext { // localMessages for our i18n framework. localeMessages: MessageContext[]; + + // formatter for timeago. + timeagoFormatter?: Formatter; } const { Provider, Consumer } = React.createContext({} as any); @@ -27,7 +32,9 @@ export const TalkContextProvider: StatelessComponent<{ }> = ({ value, children }) => ( - {children} + + {children} + ); diff --git a/src/core/client/framework/lib/bootstrap/createContext.ts b/src/core/client/framework/lib/bootstrap/createContext.tsx similarity index 71% rename from src/core/client/framework/lib/bootstrap/createContext.ts rename to src/core/client/framework/lib/bootstrap/createContext.tsx index 764d09214..6043eacb9 100644 --- a/src/core/client/framework/lib/bootstrap/createContext.ts +++ b/src/core/client/framework/lib/bootstrap/createContext.tsx @@ -1,4 +1,7 @@ +import { Localized } from "fluent-react/compat"; import { noop } from "lodash"; +import React from "react"; +import { Formatter } from "react-timeago"; import { Environment, Network, RecordSource, Store } from "relay-runtime"; import { generateMessages, LocalesData, negotiateLanguages } from "../i18n"; @@ -16,6 +19,25 @@ interface CreateContextArguments { init?: ((context: TalkContext) => void | Promise); } +/** + * timeagoFormatter integrates timeago into our translation + * framework. It gets injected into the UIContext. + */ +export const timeagoFormatter: Formatter = (value, unit, suffix) => { + // We use 'in' instead of 'from now' for language consistency + const ourSuffix = suffix === "from now" ? "in" : suffix; + return ( + + now + + ); +}; + /** * `createContext` manages the dependencies of our framework * and returns a `TalkContext` that can be passed to the @@ -46,6 +68,7 @@ export default async function createContext({ const context = { relayEnvironment, localeMessages, + timeagoFormatter, }; // Run custom initializations. diff --git a/src/core/client/stream/components/App.css b/src/core/client/stream/components/App.css new file mode 100644 index 000000000..68c4e29c4 --- /dev/null +++ b/src/core/client/stream/components/App.css @@ -0,0 +1,14 @@ +/* Here we add global stylings for body and document */ +:global { + body { + margin: "0"; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + } +} + +.root { +} diff --git a/src/core/client/stream/components/App.spec.tsx b/src/core/client/stream/components/App.spec.tsx new file mode 100644 index 000000000..9b91a8974 --- /dev/null +++ b/src/core/client/stream/components/App.spec.tsx @@ -0,0 +1,22 @@ +import { shallow } from "enzyme"; +import React from "react"; + +import { PropTypesOf } from "talk-framework/types"; + +import App from "./App"; + +it("renders correctly", () => { + const props: PropTypesOf = { + asset: {}, + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); +}); + +it("renders correctly when asset is null", () => { + const props: PropTypesOf = { + asset: null, + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); +}); diff --git a/src/core/client/stream/components/App.tsx b/src/core/client/stream/components/App.tsx index 1dd3ce496..14659585a 100644 --- a/src/core/client/stream/components/App.tsx +++ b/src/core/client/stream/components/App.tsx @@ -5,6 +5,8 @@ import { Flex } from "talk-ui/components"; import StreamContainer from "../containers/StreamContainer"; +import * as styles from "./App.css"; + export interface AppProps { asset: {} | null; } @@ -12,7 +14,7 @@ export interface AppProps { const App: StatelessComponent = props => { if (props.asset) { return ( - + ); diff --git a/src/core/client/stream/components/Comment.css b/src/core/client/stream/components/Comment.css deleted file mode 100644 index 77dc9d88d..000000000 --- a/src/core/client/stream/components/Comment.css +++ /dev/null @@ -1,10 +0,0 @@ -.root { -} - -.gutterBottom { - margin-bottom: calc(1px * var(--spacing-unit)); -} - -.topBar { - margin-bottom: calc(0.5px * var(--spacing-unit)); -} diff --git a/src/core/client/stream/components/Comment.spec.tsx b/src/core/client/stream/components/Comment/Comment.spec.tsx similarity index 63% rename from src/core/client/stream/components/Comment.spec.tsx rename to src/core/client/stream/components/Comment/Comment.spec.tsx index 9bad32868..12c1686ed 100644 --- a/src/core/client/stream/components/Comment.spec.tsx +++ b/src/core/client/stream/components/Comment/Comment.spec.tsx @@ -1,9 +1,12 @@ import { shallow } from "enzyme"; import React from "react"; +import { PropTypesOf } from "talk-framework/types"; + import Comment from "./Comment"; it("renders username and body", () => { +<<<<<<< HEAD:src/core/client/stream/components/Comment.spec.tsx const props = { id: "id", author: { @@ -18,11 +21,14 @@ it("renders username and body", () => { it("renders with gutterBottom", () => { const props = { id: "id", +======= + const props: PropTypesOf = { +>>>>>>> abfa39529ff398007bb67cd814c4217a97bdb38b:src/core/client/stream/components/Comment/Comment.spec.tsx author: { username: "Marvin", }, body: "Woof", - gutterBottom: true, + createdAt: "1995-12-17T03:24:00.000Z", }; const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); diff --git a/src/core/client/stream/components/Comment.tsx b/src/core/client/stream/components/Comment/Comment.tsx similarity index 58% rename from src/core/client/stream/components/Comment.tsx rename to src/core/client/stream/components/Comment/Comment.tsx index 1c092d19c..a3f763c08 100644 --- a/src/core/client/stream/components/Comment.tsx +++ b/src/core/client/stream/components/Comment/Comment.tsx @@ -1,9 +1,9 @@ -import cn from "classnames"; import React from "react"; import { StatelessComponent } from "react"; import { Typography } from "talk-ui/components"; -import * as styles from "./Comment.css"; -import PermalinkPopover from "./PermalinkPopover"; +import PermalinkPopover from "../PermalinkPopover"; +import Timestamp from "./Timestamp"; +import TopBar from "./TopBar"; import Username from "./Username"; export interface CommentProps { @@ -13,20 +13,18 @@ export interface CommentProps { username: string; } | null; body: string | null; - gutterBottom?: boolean; + createdAt: string; } const Comment: StatelessComponent = props => { - const rootClassName = cn(styles.root, props.className, { - [styles.gutterBottom]: props.gutterBottom, - }); return ( -
-
+
+ {props.author && {props.author.username}} -
+ {props.createdAt} + {props.body} -
+
diff --git a/src/core/client/stream/components/Comment/Timestamp.css b/src/core/client/stream/components/Comment/Timestamp.css new file mode 100644 index 000000000..f2d263ad4 --- /dev/null +++ b/src/core/client/stream/components/Comment/Timestamp.css @@ -0,0 +1,3 @@ +.root { + composes: timestamp from "talk-ui/shared/typography.css"; +} diff --git a/src/core/client/stream/components/Comment/Timestamp.spec.tsx b/src/core/client/stream/components/Comment/Timestamp.spec.tsx new file mode 100644 index 000000000..4a276b762 --- /dev/null +++ b/src/core/client/stream/components/Comment/Timestamp.spec.tsx @@ -0,0 +1,14 @@ +import { shallow } from "enzyme"; +import React from "react"; + +import { PropTypesOf } from "talk-framework/types"; + +import Timestamp from "./Timestamp"; + +it("renders correctly", () => { + const props: PropTypesOf = { + children: "1995-12-17T03:24:00.000Z", + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); +}); diff --git a/src/core/client/stream/components/Comment/Timestamp.tsx b/src/core/client/stream/components/Comment/Timestamp.tsx new file mode 100644 index 000000000..e6228416f --- /dev/null +++ b/src/core/client/stream/components/Comment/Timestamp.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import { StatelessComponent } from "react"; + +import { RelativeTime } from "talk-ui/components"; + +import * as styles from "./Timestamp.css"; + +export interface TimestampProps { + children: string; +} + +const Timestamp: StatelessComponent = props => ( + +); + +export default Timestamp; diff --git a/src/core/client/stream/components/Comment/TopBar.css b/src/core/client/stream/components/Comment/TopBar.css new file mode 100644 index 000000000..dff9c8a74 --- /dev/null +++ b/src/core/client/stream/components/Comment/TopBar.css @@ -0,0 +1,3 @@ +.root { + margin-bottom: calc(0.5 * var(--spacing-unit)); +} diff --git a/src/core/client/stream/components/Comment/TopBar.spec.tsx b/src/core/client/stream/components/Comment/TopBar.spec.tsx new file mode 100644 index 000000000..5ee691f70 --- /dev/null +++ b/src/core/client/stream/components/Comment/TopBar.spec.tsx @@ -0,0 +1,45 @@ +import React from "react"; +import TestRenderer from "react-test-renderer"; + +import { PropTypesOf } from "talk-framework/types"; +import { UIContext, UIContextProps } from "talk-ui/components"; + +import TopBar from "./TopBar"; + +it("renders correctly on small screens", () => { + const props: PropTypesOf = { + children:
Hello World
, + }; + + const context: UIContextProps = { + mediaQueryValues: { + width: 320, + }, + }; + + const testRenderer = TestRenderer.create( + + + + ); + expect(testRenderer.toJSON()).toMatchSnapshot(); +}); + +it("renders correctly on big screens", () => { + const props: PropTypesOf = { + children:
Hello World
, + }; + + const context: UIContextProps = { + mediaQueryValues: { + width: 1600, + }, + }; + + const testRenderer = TestRenderer.create( + + + + ); + expect(testRenderer.toJSON()).toMatchSnapshot(); +}); diff --git a/src/core/client/stream/components/Comment/TopBar.tsx b/src/core/client/stream/components/Comment/TopBar.tsx new file mode 100644 index 000000000..2dfe6419d --- /dev/null +++ b/src/core/client/stream/components/Comment/TopBar.tsx @@ -0,0 +1,32 @@ +import cn from "classnames"; +import React from "react"; +import { StatelessComponent } from "react"; + +import { Flex, MatchMedia } from "talk-ui/components"; + +import * as styles from "./TopBar.css"; + +export interface TopBarProps { + className?: string; + children: React.ReactNode; +} + +const TopBar: StatelessComponent = props => { + const rootClassName = cn(styles.root, props.className); + return ( + + {matches => ( + + {props.children} + + )} + + ); +}; + +export default TopBar; diff --git a/src/core/client/stream/components/Comment/Username.css b/src/core/client/stream/components/Comment/Username.css new file mode 100644 index 000000000..e2dd79a8e --- /dev/null +++ b/src/core/client/stream/components/Comment/Username.css @@ -0,0 +1,3 @@ +.root { + line-height: 1; +} diff --git a/src/core/client/stream/components/Comment/Username.spec.tsx b/src/core/client/stream/components/Comment/Username.spec.tsx new file mode 100644 index 000000000..1a10e4012 --- /dev/null +++ b/src/core/client/stream/components/Comment/Username.spec.tsx @@ -0,0 +1,45 @@ +import React from "react"; +import TestRenderer from "react-test-renderer"; + +import { PropTypesOf } from "talk-framework/types"; +import { UIContext, UIContextProps } from "talk-ui/components"; + +import Username from "./Username"; + +it("renders correctly on small screens", () => { + const props: PropTypesOf = { + children: "Marvin", + }; + + const context: UIContextProps = { + mediaQueryValues: { + width: 320, + }, + }; + + const testRenderer = TestRenderer.create( + + + + ); + expect(testRenderer.toJSON()).toMatchSnapshot(); +}); + +it("renders correctly on big screens", () => { + const props: PropTypesOf = { + children: "Marvin", + }; + + const context: UIContextProps = { + mediaQueryValues: { + width: 1600, + }, + }; + + const testRenderer = TestRenderer.create( + + + + ); + expect(testRenderer.toJSON()).toMatchSnapshot(); +}); diff --git a/src/core/client/stream/components/Comment/Username.tsx b/src/core/client/stream/components/Comment/Username.tsx new file mode 100644 index 000000000..ada04c8ec --- /dev/null +++ b/src/core/client/stream/components/Comment/Username.tsx @@ -0,0 +1,28 @@ +import React from "react"; +import { StatelessComponent } from "react"; + +import { MatchMedia, Typography } from "talk-ui/components"; + +import * as styles from "./Username.css"; + +export interface UsernameProps { + children: string; +} + +const Username: StatelessComponent = props => { + return ( + + {matches => ( + + {props.children} + + )} + + ); +}; + +export default Username; diff --git a/src/core/client/stream/components/Comment/__snapshots__/Comment.spec.tsx.snap b/src/core/client/stream/components/Comment/__snapshots__/Comment.spec.tsx.snap new file mode 100644 index 000000000..2d047c200 --- /dev/null +++ b/src/core/client/stream/components/Comment/__snapshots__/Comment.spec.tsx.snap @@ -0,0 +1,19 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders username and body 1`] = ` +
+ + + Marvin + + + 1995-12-17T03:24:00.000Z + + + + Woof + +
+`; diff --git a/src/core/client/stream/components/Comment/__snapshots__/Timestamp.spec.tsx.snap b/src/core/client/stream/components/Comment/__snapshots__/Timestamp.spec.tsx.snap new file mode 100644 index 000000000..862d6cad7 --- /dev/null +++ b/src/core/client/stream/components/Comment/__snapshots__/Timestamp.spec.tsx.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly 1`] = ` + +`; diff --git a/src/core/client/stream/components/Comment/__snapshots__/TopBar.spec.tsx.snap b/src/core/client/stream/components/Comment/__snapshots__/TopBar.spec.tsx.snap new file mode 100644 index 000000000..9253404bd --- /dev/null +++ b/src/core/client/stream/components/Comment/__snapshots__/TopBar.spec.tsx.snap @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly on big screens 1`] = ` +
+
+ Hello World +
+
+`; + +exports[`renders correctly on small screens 1`] = ` +
+
+ Hello World +
+
+`; diff --git a/src/core/client/stream/components/Comment/__snapshots__/Username.spec.tsx.snap b/src/core/client/stream/components/Comment/__snapshots__/Username.spec.tsx.snap new file mode 100644 index 000000000..ab0e141e6 --- /dev/null +++ b/src/core/client/stream/components/Comment/__snapshots__/Username.spec.tsx.snap @@ -0,0 +1,17 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly on big screens 1`] = ` + + Marvin + +`; + +exports[`renders correctly on small screens 1`] = ` + + Marvin + +`; diff --git a/src/core/client/stream/components/Comment/index.ts b/src/core/client/stream/components/Comment/index.ts new file mode 100644 index 000000000..173033df9 --- /dev/null +++ b/src/core/client/stream/components/Comment/index.ts @@ -0,0 +1 @@ +export { default, default as Comment, CommentProps } from "./Comment"; diff --git a/src/core/client/stream/components/Indent.css b/src/core/client/stream/components/Indent.css index 19100de68..c675b03a6 100644 --- a/src/core/client/stream/components/Indent.css +++ b/src/core/client/stream/components/Indent.css @@ -1,6 +1,6 @@ .root { border-left: 3px solid; - padding-left: calc(1px * var(--spacing-unit)); + padding-left: var(--spacing-unit); } .level0 { diff --git a/src/core/client/stream/components/Indent.spec.tsx b/src/core/client/stream/components/Indent.spec.tsx new file mode 100644 index 000000000..3108ba209 --- /dev/null +++ b/src/core/client/stream/components/Indent.spec.tsx @@ -0,0 +1,14 @@ +import { shallow } from "enzyme"; +import React from "react"; + +import { PropTypesOf } from "talk-framework/types"; + +import Indent from "./Indent"; + +it("renders correctly", () => { + const props: PropTypesOf = { + children:
Hello World
, + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); +}); diff --git a/src/core/client/stream/components/PostCommentForm.css b/src/core/client/stream/components/PostCommentForm.css index 2e9cdcc9e..df045285d 100644 --- a/src/core/client/stream/components/PostCommentForm.css +++ b/src/core/client/stream/components/PostCommentForm.css @@ -5,7 +5,7 @@ height: 100px; width: 100%; box-sizing: border-box; - margin-bottom: calc(1px * var(--spacing-unit)); + margin-bottom: var(--spacing-unit); } .postButtonContainer { diff --git a/src/core/client/stream/components/ReplyList.spec.tsx b/src/core/client/stream/components/ReplyList.spec.tsx index 12b673732..093d96049 100644 --- a/src/core/client/stream/components/ReplyList.spec.tsx +++ b/src/core/client/stream/components/ReplyList.spec.tsx @@ -3,10 +3,12 @@ import { noop } from "lodash"; import React from "react"; import sinon, { SinonSpy } from "sinon"; -import ReplyList, { ReplyListProps } from "./ReplyList"; +import { PropTypesOf } from "talk-framework/types"; + +import ReplyList from "./ReplyList"; it("renders correctly", () => { - const props: ReplyListProps = { + const props: PropTypesOf = { commentID: "comment-id", comments: [{ id: "comment-1" }, { id: "comment-2" }], onShowAll: noop, @@ -18,7 +20,7 @@ it("renders correctly", () => { }); describe("when there is more", () => { - const props: ReplyListProps = { + const props: PropTypesOf = { commentID: "comment-id", comments: [{ id: "comment-1" }, { id: "comment-2" }], onShowAll: sinon.spy(), diff --git a/src/core/client/stream/components/ReplyList.tsx b/src/core/client/stream/components/ReplyList.tsx index ec366771c..17ad32ed2 100644 --- a/src/core/client/stream/components/ReplyList.tsx +++ b/src/core/client/stream/components/ReplyList.tsx @@ -2,7 +2,7 @@ import { Localized } from "fluent-react/compat"; import * as React from "react"; import { StatelessComponent } from "react"; -import { Button } from "talk-ui/components"; +import { Button, Flex } from "talk-ui/components"; import CommentContainer from "../containers/CommentContainer"; import Indent from "./Indent"; @@ -18,9 +18,14 @@ export interface ReplyListProps { const ReplyList: StatelessComponent = props => { return ( -
+ {props.comments.map(comment => ( - + ))} {props.hasMore && ( @@ -37,7 +42,7 @@ const ReplyList: StatelessComponent = props => { )} -
+
); }; diff --git a/src/core/client/stream/components/Stream.spec.tsx b/src/core/client/stream/components/Stream.spec.tsx index 05d30d66e..335f8fe27 100644 --- a/src/core/client/stream/components/Stream.spec.tsx +++ b/src/core/client/stream/components/Stream.spec.tsx @@ -1,12 +1,14 @@ import { shallow } from "enzyme"; import { noop } from "lodash"; import React from "react"; -import sinon from "sinon"; +import sinon, { SinonSpy } from "sinon"; -import Stream, { StreamProps } from "./Stream"; +import { PropTypesOf } from "talk-framework/types"; + +import Stream from "./Stream"; it("renders correctly", () => { - const props: StreamProps = { + const props: PropTypesOf = { assetID: "asset-id", isClosed: false, comments: [{ id: "comment-1" }, { id: "comment-2" }], @@ -19,7 +21,7 @@ it("renders correctly", () => { }); describe("when there is more", () => { - const props = { + const props: PropTypesOf = { assetID: "asset-id", isClosed: false, comments: [{ id: "comment-1" }, { id: "comment-2" }], @@ -35,7 +37,7 @@ describe("when there is more", () => { it("calls onLoadMore", () => { wrapper.find("#talk-comments-stream-loadMore").simulate("click"); - expect(props.onLoadMore.calledOnce).toBe(true); + expect((props.onLoadMore as SinonSpy).calledOnce).toBe(true); }); const wrapperDisabledButton = shallow(); diff --git a/src/core/client/stream/components/Stream.tsx b/src/core/client/stream/components/Stream.tsx index f6d39940e..da55050f5 100644 --- a/src/core/client/stream/components/Stream.tsx +++ b/src/core/client/stream/components/Stream.tsx @@ -2,7 +2,7 @@ import { Localized } from "fluent-react/compat"; import * as React from "react"; import { StatelessComponent } from "react"; -import { Button } from "talk-ui/components"; +import { Button, Flex } from "talk-ui/components"; import CommentContainer from "../containers/CommentContainer"; import PostCommentFormContainer from "../containers/PostCommentFormContainer"; @@ -24,12 +24,18 @@ const Stream: StatelessComponent = props => {
-
+ {props.comments.map(comment => ( -
- + + -
+
))} {props.hasMore && ( @@ -46,7 +52,7 @@ const Stream: StatelessComponent = props => { )} -
+
); }; diff --git a/src/core/client/stream/components/Username.css b/src/core/client/stream/components/Username.css deleted file mode 100644 index 9cb1baa15..000000000 --- a/src/core/client/stream/components/Username.css +++ /dev/null @@ -1,3 +0,0 @@ -.root { - composes: heading4 from "talk-ui/shared/typography.css"; -} diff --git a/src/core/client/stream/components/Username.spec.tsx b/src/core/client/stream/components/Username.spec.tsx deleted file mode 100644 index c4f1c1dfe..000000000 --- a/src/core/client/stream/components/Username.spec.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { shallow } from "enzyme"; -import React from "react"; - -import Username from "./Username"; - -it("renders correctly", () => { - const props = { - children: "Marvin", - }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); -}); diff --git a/src/core/client/stream/components/Username.tsx b/src/core/client/stream/components/Username.tsx deleted file mode 100644 index 117ebdb3d..000000000 --- a/src/core/client/stream/components/Username.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from "react"; -import { StatelessComponent } from "react"; - -import * as styles from "./Username.css"; - -export interface CommentProps { - children: string; -} - -const Username: StatelessComponent = props => { - return {props.children}; -}; - -export default Username; diff --git a/src/core/client/stream/components/__snapshots__/App.spec.tsx.snap b/src/core/client/stream/components/__snapshots__/App.spec.tsx.snap new file mode 100644 index 000000000..6a12e4e09 --- /dev/null +++ b/src/core/client/stream/components/__snapshots__/App.spec.tsx.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly 1`] = ` + + + +`; + +exports[`renders correctly when asset is null 1`] = ` +
+ Asset not found +
+`; diff --git a/src/core/client/stream/components/__snapshots__/Comment.spec.tsx.snap b/src/core/client/stream/components/__snapshots__/Comment.spec.tsx.snap deleted file mode 100644 index 9aafeaf5c..000000000 --- a/src/core/client/stream/components/__snapshots__/Comment.spec.tsx.snap +++ /dev/null @@ -1,37 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`renders username and body 1`] = ` -
-
- - Marvin - -
- - Woof - -
-`; - -exports[`renders with gutterBottom 1`] = ` -
-
- - Marvin - -
- - Woof - -
-`; diff --git a/src/core/client/stream/components/__snapshots__/Indent.spec.tsx.snap b/src/core/client/stream/components/__snapshots__/Indent.spec.tsx.snap new file mode 100644 index 000000000..910c819b2 --- /dev/null +++ b/src/core/client/stream/components/__snapshots__/Indent.spec.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders correctly 1`] = ` +
+
+ Hello World +
+
+`; diff --git a/src/core/client/stream/components/__snapshots__/ReplyList.spec.tsx.snap b/src/core/client/stream/components/__snapshots__/ReplyList.spec.tsx.snap index 36fb0c110..e48482470 100644 --- a/src/core/client/stream/components/__snapshots__/ReplyList.spec.tsx.snap +++ b/src/core/client/stream/components/__snapshots__/ReplyList.spec.tsx.snap @@ -2,8 +2,10 @@ exports[`renders correctly 1`] = ` -
-
+
`; exports[`when there is more renders a load more button 1`] = ` -
-
+
`; diff --git a/src/core/client/stream/components/__snapshots__/Stream.spec.tsx.snap b/src/core/client/stream/components/__snapshots__/Stream.spec.tsx.snap index c529ea1ad..a8210fd99 100644 --- a/src/core/client/stream/components/__snapshots__/Stream.spec.tsx.snap +++ b/src/core/client/stream/components/__snapshots__/Stream.spec.tsx.snap @@ -10,12 +10,16 @@ exports[`renders correctly 1`] = ` -
-
-
-
+ -
-
+ +
`; @@ -67,12 +71,16 @@ exports[`when there is more disables load more button 1`] = ` -
-
-
-
+ -
+ @@ -125,7 +133,7 @@ exports[`when there is more disables load more button 1`] = ` Load More -
+
`; @@ -139,12 +147,16 @@ exports[`when there is more renders a load more button 1`] = ` -
-
-
-
+ -
+ @@ -197,6 +209,6 @@ exports[`when there is more renders a load more button 1`] = ` Load More -
+
`; diff --git a/src/core/client/stream/containers/AppContainer.spec.tsx b/src/core/client/stream/containers/AppContainer.spec.tsx new file mode 100644 index 000000000..17a0a676d --- /dev/null +++ b/src/core/client/stream/containers/AppContainer.spec.tsx @@ -0,0 +1,16 @@ +import { shallow } from "enzyme"; +import React from "react"; + +import { PropTypesOf } from "talk-framework/types"; + +import { AppContainer } from "./AppContainer"; + +it("renders correctly", () => { + const props: PropTypesOf = { + data: { + asset: {}, + }, + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); +}); diff --git a/src/core/client/stream/containers/AppContainer.tsx b/src/core/client/stream/containers/AppContainer.tsx index 8b84660ca..90eb1e1c6 100644 --- a/src/core/client/stream/containers/AppContainer.tsx +++ b/src/core/client/stream/containers/AppContainer.tsx @@ -11,7 +11,7 @@ interface InnerProps { data: Data; } -const AppContainer: StatelessComponent = props => { +export const AppContainer: StatelessComponent = props => { return ; }; diff --git a/src/core/client/stream/containers/CommentContainer.spec.tsx b/src/core/client/stream/containers/CommentContainer.spec.tsx index 94ffb7392..98612be38 100644 --- a/src/core/client/stream/containers/CommentContainer.spec.tsx +++ b/src/core/client/stream/containers/CommentContainer.spec.tsx @@ -1,15 +1,18 @@ import { shallow } from "enzyme"; import React from "react"; +import { PropTypesOf } from "talk-framework/types"; + import { CommentContainer } from "./CommentContainer"; it("renders username and body", () => { - const props = { + const props: PropTypesOf = { data: { author: { username: "Marvin", }, body: "Woof", + createdAt: "1995-12-17T03:24:00.000Z", }, }; diff --git a/src/core/client/stream/containers/CommentContainer.tsx b/src/core/client/stream/containers/CommentContainer.tsx index 9f20ecfc5..0196f6b2e 100644 --- a/src/core/client/stream/containers/CommentContainer.tsx +++ b/src/core/client/stream/containers/CommentContainer.tsx @@ -16,6 +16,7 @@ graphql` username } body + createdAt } `; diff --git a/src/core/client/stream/containers/ReplyListContainer.spec.tsx b/src/core/client/stream/containers/ReplyListContainer.spec.tsx index 75cb129ca..3a414dd51 100644 --- a/src/core/client/stream/containers/ReplyListContainer.spec.tsx +++ b/src/core/client/stream/containers/ReplyListContainer.spec.tsx @@ -8,7 +8,7 @@ import ReplyList from "../components/ReplyList"; import { ReplyListContainer } from "./ReplyListContainer"; it("renders correctly", () => { - const props: any = { + const props: PropTypesOf = { comment: { id: "comment-id", replies: { @@ -18,14 +18,14 @@ it("renders correctly", () => { relay: { hasMore: noop, isLoading: noop, - }, + } as any, }; const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); }); it("renders correctly when replies are null", () => { - const props: any = { + const props: PropTypesOf = { comment: { id: "comment-id", replies: null, @@ -33,7 +33,7 @@ it("renders correctly when replies are null", () => { relay: { hasMore: noop, isLoading: noop, - }, + } as any, }; const wrapper = shallow(); expect(wrapper).toMatchSnapshot(); diff --git a/src/core/client/stream/containers/ReplyListContainer.tsx b/src/core/client/stream/containers/ReplyListContainer.tsx index d147edb1c..48db9645a 100644 --- a/src/core/client/stream/containers/ReplyListContainer.tsx +++ b/src/core/client/stream/containers/ReplyListContainer.tsx @@ -22,7 +22,10 @@ export class ReplyListContainer extends React.Component { }; public render() { - if (this.props.comment.replies === null) { + if ( + this.props.comment.replies === null || + this.props.comment.replies.edges.length === 0 + ) { return null; } const comments = this.props.comment.replies.edges.map(edge => edge.node); diff --git a/src/core/client/stream/components/__snapshots__/Username.spec.tsx.snap b/src/core/client/stream/containers/__snapshots__/AppContainer.spec.tsx.snap similarity index 60% rename from src/core/client/stream/components/__snapshots__/Username.spec.tsx.snap rename to src/core/client/stream/containers/__snapshots__/AppContainer.spec.tsx.snap index 27d624f2f..f9a5c5316 100644 --- a/src/core/client/stream/components/__snapshots__/Username.spec.tsx.snap +++ b/src/core/client/stream/containers/__snapshots__/AppContainer.spec.tsx.snap @@ -1,9 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders correctly 1`] = ` - - Marvin - + `; diff --git a/src/core/client/stream/containers/__snapshots__/CommentContainer.spec.tsx.snap b/src/core/client/stream/containers/__snapshots__/CommentContainer.spec.tsx.snap index 6ce053179..9e2476f37 100644 --- a/src/core/client/stream/containers/__snapshots__/CommentContainer.spec.tsx.snap +++ b/src/core/client/stream/containers/__snapshots__/CommentContainer.spec.tsx.snap @@ -8,5 +8,6 @@ exports[`renders username and body 1`] = ` } } body="Woof" + createdAt="1995-12-17T03:24:00.000Z" /> `; diff --git a/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap b/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap index 312540c09..b3d193c41 100644 --- a/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap +++ b/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap @@ -2,7 +2,7 @@ exports[`loads more comments 1`] = `
-
+
Markus +

-
+
Lukas +

-
+
Isabelle +

-
+
Markus +

-
+
Lukas +

-
+
Markus +

-
+
Markus +

Markus +

Lukas +

-
+
Markus +

-
+
Lukas +

-
+
Markus +

Lukas +

-
+
Markus +

Lukas +

Isabelle +

| null; + children: React.ReactElement; + className?: string; + placement?: + | "auto-start" + | "auto" + | "auto-end" + | "top-start" + | "top" + | "top-end" + | "right-start" + | "right" + | "right-end" + | "bottom-end" + | "bottom" + | "bottom-start" + | "left-end" + | "left" + | "left-start"; +} + +class Attachment extends React.Component { + public render() { + const { children, body, placement = "top", className } = this.props; + return ( + + + {({ ref }) => React.cloneElement(children, { ref })} + + + + {({ ref, style }) => + body && + React.cloneElement(body, { + ref, + style, + className: cn(styles.root, className), + }) + } + + + ); + } +} + +export default Attachment; diff --git a/src/core/client/ui/components/Attachment/index.ts b/src/core/client/ui/components/Attachment/index.ts new file mode 100644 index 000000000..b3b8d5f4a --- /dev/null +++ b/src/core/client/ui/components/Attachment/index.ts @@ -0,0 +1,2 @@ +export * from "./Attachment"; +export { default } from "./Attachment"; diff --git a/src/core/client/ui/components/Flex/Flex.css b/src/core/client/ui/components/Flex/Flex.css index 45398843b..13cb05be5 100644 --- a/src/core/client/ui/components/Flex/Flex.css +++ b/src/core/client/ui/components/Flex/Flex.css @@ -2,6 +2,54 @@ display: flex; } +.halfItemGutter { + & > * { + margin: 0 calc(0.5 * var(--spacing-unit)) 0 0; + } + &.directionRowReverse { + & > * { + margin: 0 0 0 calc(0.5 * var(--spacing-unit)); + } + } + &.directionColumn { + & > * { + margin: 0 0 calc(0.5 * var(--spacing-unit)) 0; + } + } + &.directionColumnReverese { + & > * { + margin: calc(0.5 * var(--spacing-unit)) 0 0 0; + } + } + & > *:last-child { + margin: 0; + } +} + +.itemGutter { + & > * { + margin: 0 var(--spacing-unit) 0 0; + } + &.directionRowReverse { + & > * { + margin: 0 0 0 var(--spacing-unit); + } + } + &.directionColumn { + & > * { + margin: 0 0 var(--spacing-unit) 0; + } + } + &.directionColumnReverese { + & > * { + margin: var(--spacing-unit) 0 0 0; + } + } + & > *:last-child { + margin: 0; + } +} + .justifyFlexStart { justify-content: flex-start; } diff --git a/src/core/client/ui/components/Flex/Flex.tsx b/src/core/client/ui/components/Flex/Flex.tsx index 3dab50168..bfba06d05 100644 --- a/src/core/client/ui/components/Flex/Flex.tsx +++ b/src/core/client/ui/components/Flex/Flex.tsx @@ -7,6 +7,8 @@ import { pascalCase } from "talk-common/utils"; import * as styles from "./Flex.css"; interface InnerProps { + id?: string; + role?: string; justifyContent?: | "flex-start" | "flex-end" @@ -16,12 +18,24 @@ interface InnerProps { | "space-evenly"; alignItems?: "flex-start" | "flex-end" | "center" | "baseline" | "stretch"; direction?: "row" | "column" | "row-reverse" | "column-reverse"; + itemGutter?: boolean | "half"; + className?: string; } const Flex: StatelessComponent = props => { - const { justifyContent, alignItems, direction, ...rest } = props; + const { + className, + justifyContent, + alignItems, + direction, + itemGutter, + ...rest + } = props; - const classObject: Record = {}; + const classObject: Record = { + [styles.itemGutter]: itemGutter === true, + [styles.halfItemGutter]: itemGutter === "half", + }; if (justifyContent) { classObject[(styles as any)[`justify${pascalCase(justifyContent)}`]] = true; @@ -35,7 +49,7 @@ const Flex: StatelessComponent = props => { classObject[(styles as any)[`direction${pascalCase(direction)}`]] = true; } - const classNames: string = cn(styles.root, classObject); + const classNames: string = cn(styles.root, className, classObject); return

; }; diff --git a/src/core/client/ui/components/MatchMedia/MatchMedia.spec.tsx b/src/core/client/ui/components/MatchMedia/MatchMedia.spec.tsx index 3c4879015..1e600dd76 100644 --- a/src/core/client/ui/components/MatchMedia/MatchMedia.spec.tsx +++ b/src/core/client/ui/components/MatchMedia/MatchMedia.spec.tsx @@ -3,7 +3,7 @@ import React from "react"; import { PropTypesOf } from "talk-ui/types"; -import MatchMedia from "./MatchMedia"; +import { MatchMedia } from "./MatchMedia"; it("renders correctly", () => { const props: PropTypesOf = { diff --git a/src/core/client/ui/components/MatchMedia/MatchMedia.tsx b/src/core/client/ui/components/MatchMedia/MatchMedia.tsx index e7ca58f6a..43d900dfe 100644 --- a/src/core/client/ui/components/MatchMedia/MatchMedia.tsx +++ b/src/core/client/ui/components/MatchMedia/MatchMedia.tsx @@ -1,8 +1,9 @@ import React from "react"; import { ReactNode, StatelessComponent } from "react"; -import Responsive from "react-responsive"; +import Responsive, { MediaQueryMatchers } from "react-responsive"; import theme from "../../theme/variables"; +import UIContext from "../UIContext"; type Breakpoints = keyof typeof theme.breakpoints; @@ -20,9 +21,10 @@ interface InnerProps { print?: boolean; screen?: boolean; speech?: boolean; + values?: Partial; } -const MatchMedia: StatelessComponent = props => { +export const MatchMedia: StatelessComponent = props => { const { speech, minWidth, maxWidth, ...rest } = props; const mapped = { // TODO: Temporarily map newer speech to older aural type until @@ -34,4 +36,12 @@ const MatchMedia: StatelessComponent = props => { return ; }; -export default MatchMedia; +const MatchMediaWithContext: StatelessComponent = props => ( + + {({ mediaQueryValues }) => ( + + )} + +); + +export default MatchMediaWithContext; diff --git a/src/core/client/ui/components/Popover/Popover.tsx b/src/core/client/ui/components/Popover/Popover.tsx index eec4cf5d8..e11017b6c 100644 --- a/src/core/client/ui/components/Popover/Popover.tsx +++ b/src/core/client/ui/components/Popover/Popover.tsx @@ -1,52 +1,19 @@ import React from "react"; -import { Manager, Popper, Reference } from "react-popper"; +import Attachment from "../Attachment"; import * as styles from "./Popover.css"; interface InnerProps { body: React.ReactElement | null; children: React.ReactElement; - placement?: - | "auto-start" - | "auto" - | "auto-end" - | "top-start" - | "top" - | "top-end" - | "right-start" - | "right" - | "right-end" - | "bottom-end" - | "bottom" - | "bottom-start" - | "left-end" - | "left" - | "left-start"; } class Popover extends React.Component { public render() { - const { children, body, placement = "top" } = this.props; + const { body, children: reference } = this.props; return ( - - - {({ ref }) => React.cloneElement(children, { ref })} - - - - {({ ref, style }) => - React.cloneElement(body, { - ref, - style, - className: styles.root, - }) - } - - + + {reference} + ); } } diff --git a/src/core/client/ui/components/RelativeTime/RelativeTime.css b/src/core/client/ui/components/RelativeTime/RelativeTime.css new file mode 100644 index 000000000..3faa5e162 --- /dev/null +++ b/src/core/client/ui/components/RelativeTime/RelativeTime.css @@ -0,0 +1,4 @@ +.root { + composes: body1 from "talk-ui/shared/typography.css"; + background-color: transparent; +} diff --git a/src/core/client/ui/components/RelativeTime/RelativeTime.mdx b/src/core/client/ui/components/RelativeTime/RelativeTime.mdx new file mode 100644 index 000000000..3122e8806 --- /dev/null +++ b/src/core/client/ui/components/RelativeTime/RelativeTime.mdx @@ -0,0 +1,17 @@ +--- +name: RelativeTime +menu: UI Kit +--- + +import { Playground } from 'docz' +import RelativeTime from './RelativeTime' + +# RelativeTime + +Renders relative time until given `date`. + +## Basic usage + + "".concat(value, " ", unit, " ", suffix)} /> + diff --git a/src/core/client/ui/components/RelativeTime/RelativeTime.spec.tsx b/src/core/client/ui/components/RelativeTime/RelativeTime.spec.tsx new file mode 100644 index 000000000..92d0c547d --- /dev/null +++ b/src/core/client/ui/components/RelativeTime/RelativeTime.spec.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import { create } from "react-test-renderer"; + +import { PropTypesOf } from "talk-ui/types"; + +import UIContext from "../UIContext"; +import RelativeTime from "./RelativeTime"; + +it("uses default formatter", () => { + const props = { + date: "2018-12-17T03:24:00.000Z", + }; + const tree = create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); + +it("uses formatter from context", () => { + const context: any = { + timeagoFormatter: () => "My Context Formatter", + }; + const props: PropTypesOf = { + date: "2018-12-17T03:24:00.000Z", + }; + const tree = create( + + + + ).toJSON(); + + expect(tree).toMatchSnapshot(); +}); + +it("uses formatter from props", () => { + const props = { + date: "2018-12-17T03:24:00.000Z", + formatter: () => "My Props Formatter", + }; + const tree = create().toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/src/core/client/ui/components/RelativeTime/RelativeTime.tsx b/src/core/client/ui/components/RelativeTime/RelativeTime.tsx new file mode 100644 index 000000000..3a8022656 --- /dev/null +++ b/src/core/client/ui/components/RelativeTime/RelativeTime.tsx @@ -0,0 +1,42 @@ +import cn from "classnames"; +import React from "react"; +import TimeAgo, { Formatter } from "react-timeago"; + +import { UIContext } from "talk-ui/components"; +import { withStyles } from "talk-ui/hocs"; +import { PropTypesOf } from "talk-ui/types"; + +import * as styles from "./RelativeTime.css"; + +interface InnerProps { + date: string; + live?: boolean; + classes: typeof styles; + className?: string; + formatter?: Formatter; +} + +const defaultFormatter: Formatter = (value, unit, suffix, timestamp: string) => + new Date(timestamp).toISOString(); + +class RelativeTime extends React.Component { + public render() { + const { date, classes, live, className, formatter } = this.props; + return ( + + {({ timeagoFormatter }) => ( + + )} + + ); + } +} + +const enhanced = withStyles(styles)(RelativeTime); +export type RelativeTimeProps = PropTypesOf; +export default enhanced; diff --git a/src/core/client/ui/components/RelativeTime/__snapshots__/RelativeTime.spec.tsx.snap b/src/core/client/ui/components/RelativeTime/__snapshots__/RelativeTime.spec.tsx.snap new file mode 100644 index 000000000..6d9388e87 --- /dev/null +++ b/src/core/client/ui/components/RelativeTime/__snapshots__/RelativeTime.spec.tsx.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`uses default formatter 1`] = ` + +`; + +exports[`uses formatter from context 1`] = ` + +`; + +exports[`uses formatter from props 1`] = ` + +`; diff --git a/src/core/client/ui/components/RelativeTime/index.ts b/src/core/client/ui/components/RelativeTime/index.ts new file mode 100644 index 000000000..8bc2dfb5e --- /dev/null +++ b/src/core/client/ui/components/RelativeTime/index.ts @@ -0,0 +1,2 @@ +export * from "./RelativeTime"; +export { default } from "./RelativeTime"; diff --git a/src/core/client/ui/components/Typography/Typography.css b/src/core/client/ui/components/Typography/Typography.css index da31711e9..a3c19a400 100644 --- a/src/core/client/ui/components/Typography/Typography.css +++ b/src/core/client/ui/components/Typography/Typography.css @@ -43,6 +43,10 @@ composes: overline from "talk-ui/shared/typography.css"; } +.timestamp { + composes: timestamp from "talk-ui/shared/typography.css"; +} + .alignLeft { text-align: left; } @@ -70,7 +74,7 @@ } .paragraph { - margin-bottom: calc(1px * var(--spacing-unit)); + margin-bottom: var(--spacing-unit); } .colorInherit { diff --git a/src/core/client/ui/components/Typography/Typography.tsx b/src/core/client/ui/components/Typography/Typography.tsx index 7292a672f..b743305e6 100644 --- a/src/core/client/ui/components/Typography/Typography.tsx +++ b/src/core/client/ui/components/Typography/Typography.tsx @@ -16,7 +16,8 @@ type Variant = | "subtitle2" | "body1" | "body2" - | "button"; + | "button" + | "timestamp"; // Based on Typography Component of Material UI. // https://github.com/mui-org/material-ui/blob/303199d39b42a321d28347d8440d69166f872f27/packages/material-ui/src/Typography/Typography.js @@ -99,6 +100,8 @@ const Typography: StatelessComponent = props => { { [classes.colorPrimary]: color === "primary", [classes.colorSecondary]: color === "secondary", + [classes.colorError]: color === "error", + [classes.colorTextSecondary]: color === "textSecondary", [classes.noWrap]: noWrap, [classes.gutterBottom]: gutterBottom, [classes.paragraph]: paragraph, @@ -129,6 +132,7 @@ Typography.defaultProps = { subtitle2: "h3", body1: "p", body2: "aside", + timestamp: "span", }, noWrap: false, paragraph: false, diff --git a/src/core/client/ui/components/UIContext/UIContext.ts b/src/core/client/ui/components/UIContext/UIContext.ts new file mode 100644 index 000000000..b8372d1f3 --- /dev/null +++ b/src/core/client/ui/components/UIContext/UIContext.ts @@ -0,0 +1,12 @@ +import React from "react"; +import { MediaQueryMatchers } from "react-responsive"; +import { Formatter } from "react-timeago"; + +export interface UIContextProps { + timeagoFormatter?: Formatter | null; + mediaQueryValues?: Partial; +} + +const UIContext = React.createContext({} as any); + +export default UIContext; diff --git a/src/core/client/ui/components/UIContext/index.ts b/src/core/client/ui/components/UIContext/index.ts new file mode 100644 index 000000000..86504f205 --- /dev/null +++ b/src/core/client/ui/components/UIContext/index.ts @@ -0,0 +1 @@ +export { default, UIContextProps } from "./UIContext"; diff --git a/src/core/client/ui/components/index.ts b/src/core/client/ui/components/index.ts index 0740daa7e..9b1594d70 100644 --- a/src/core/client/ui/components/index.ts +++ b/src/core/client/ui/components/index.ts @@ -1,10 +1,9 @@ export { default as BaseButton } from "./BaseButton"; export { default as Button } from "./Button"; export { default as Typography } from "./Typography"; -<<<<<<< HEAD export { default as Popover } from "./Popover"; export { default as TextField } from "./TextField"; -======= +export { default as RelativeTime } from "./RelativeTime"; +export { default as UIContext, UIContextProps } from "./UIContext"; export { default as Flex } from "./Flex"; export { default as MatchMedia } from "./MatchMedia"; ->>>>>>> cac0afa61e79b19ddcae873f543a6910b83c92e7 diff --git a/src/core/client/ui/hocs/withForwardRef.ts b/src/core/client/ui/hocs/withForwardRef.ts new file mode 100644 index 000000000..66b9660e9 --- /dev/null +++ b/src/core/client/ui/hocs/withForwardRef.ts @@ -0,0 +1,23 @@ +import { + InferableComponentEnhancerWithProps, + withPropsOnChange, +} from "recompose"; + +/** + * withForwardRef provides a property called `forwardRef` using + * the `React.forwardRef` api. + */ +function withForwardRef(): InferableComponentEnhancerWithProps< + { forwardRef: any }, + {} +> { + return WrappedComponent => { + return React.forwardRef((props, ref) => ( + ref as button={ref} className="FancyButton"> + {props.children} + + )); + }; +} + +export default withForwardRef; diff --git a/src/core/client/ui/shared/typography.css b/src/core/client/ui/shared/typography.css index cd94c867d..3cb483cd2 100644 --- a/src/core/client/ui/shared/typography.css +++ b/src/core/client/ui/shared/typography.css @@ -61,3 +61,12 @@ .overline { } + +.timestamp { + color: var(--palette-text-secondary); + font-family: "Source Sans Pro"; + font-weight: var(--font-weight-medium); + font-size: 14px; + line-height: calc(18em / 16); + letter-spacing: calc(0.2em / 16); +} diff --git a/src/core/client/ui/theme/variables.css b/src/core/client/ui/theme/variables.css index 687417bf4..ad0215b77 100644 --- a/src/core/client/ui/theme/variables.css +++ b/src/core/client/ui/theme/variables.css @@ -6,11 +6,11 @@ */ :root { - --spacing-unit: var(--spacing-unit-small); + --spacing-unit: calc(1px * var(--spacing-unit-small)); } @media (min-width: $breakpoints-xs) { :root { - --spacing-unit: var(--spacing-unit-large); + --spacing-unit: calc(1px * var(--spacing-unit-large)); } } diff --git a/src/core/server/config.ts b/src/core/server/config.ts index fd200db91..f82bb46b8 100644 --- a/src/core/server/config.ts +++ b/src/core/server/config.ts @@ -49,14 +49,14 @@ const config = convict({ mongodb: { doc: "The MongoDB database to connect to.", format: "mongo-uri", - default: "mongodb://localhost/talk", + default: "mongodb://127.0.0.1:27017/talk", env: "MONGODB", arg: "mongodb", }, redis: { doc: "The Redis database to connect to.", format: "redis-uri", - default: "redis://localhost:6379", + default: "redis://127.0.0.1:6379", env: "REDIS", arg: "redis", }, diff --git a/src/core/server/graph/tenant/resolvers/comment.ts b/src/core/server/graph/tenant/resolvers/comment.ts index 22f72b5e5..d4033e0cb 100644 --- a/src/core/server/graph/tenant/resolvers/comment.ts +++ b/src/core/server/graph/tenant/resolvers/comment.ts @@ -2,6 +2,8 @@ import Context from "talk-server/graph/tenant/context"; import { Comment, ConnectionInput } from "talk-server/models/comment"; export default { + createdAt: async (comment: Comment, _: any, ctx: Context) => + comment.created_at, author: async (comment: Comment, _: any, ctx: Context) => ctx.loaders.Users.user.load(comment.author_id), replies: async (comment: Comment, input: ConnectionInput, ctx: Context) => diff --git a/src/core/server/graph/tenant/schema/schema.graphql b/src/core/server/graph/tenant/schema/schema.graphql index 4d4090af1..5270f26fd 100644 --- a/src/core/server/graph/tenant/schema/schema.graphql +++ b/src/core/server/graph/tenant/schema/schema.graphql @@ -202,6 +202,11 @@ type Comment { """ body: String + """ + createdAt is the date in which the comment was created. + """ + createdAt: Time + """ author is the User that authored the Comment. """ diff --git a/src/core/server/services/mongodb/index.ts b/src/core/server/services/mongodb/index.ts index efaf8bcba..03f4d21a6 100644 --- a/src/core/server/services/mongodb/index.ts +++ b/src/core/server/services/mongodb/index.ts @@ -8,7 +8,10 @@ import { Config } from "talk-server/config"; */ export async function createMongoDB(config: Config): Promise { // Connect and create a client for MongoDB. - const client = await MongoClient.connect(config.get("mongodb")); + const client = await MongoClient.connect( + config.get("mongodb"), + { useNewUrlParser: true } + ); // Return the database handle, which defaults to the database name provided // in the config connection string. diff --git a/src/locales/de/framework.ftl b/src/locales/de/framework.ftl index bd604bf67..2f5a6d472 100644 --- a/src/locales/de/framework.ftl +++ b/src/locales/de/framework.ftl @@ -5,3 +5,41 @@ ## Validation framework-validation-required = Dies ist ein Pflichtpfeld. + +framework-timeago = + { $suffix -> + [ago] vor + [in] in + } + { $value } + { $unit -> + [second] { $value -> + [1] Sekunde + *[other] Sekunden + } + [minuto] { $value -> + [1] Minute + *[other] Minuten + } + [hour] { $value -> + [0] Stunde + *[other] Stunden + } + [day] { $value -> + [1] Tag + *[other] Tage + } + [week] { $value -> + [1] Woche + *[other] Wochen + } + [month] { $value -> + [1] Monat + *[other] Monate + } + [year] { $value -> + [1] Jahr + *[other] Jahre + } + *[other] unknown unit + } diff --git a/src/locales/en-US/framework.ftl b/src/locales/en-US/framework.ftl index 1285552cd..5d88f9a7e 100644 --- a/src/locales/en-US/framework.ftl +++ b/src/locales/en-US/framework.ftl @@ -5,3 +5,48 @@ ## Validation framework-validation-required = This field is required. + +framework-timeago-time = + { $value } + { $unit -> + [second] { $value -> + [1] second + *[other] seconds + } + [minute] { $value -> + [1] minute + *[other] minutes + } + [hour] { $value -> + [0] hour + *[other] hours + } + [day] { $value -> + [1] day + *[other] days + } + [week] { $value -> + [1] week + *[other] weeks + } + [month] { $value -> + [1] month + *[other] months + } + [year] { $value -> + [1] year + *[other] years + } + *[other] unknown unit + } + +framework-timeago = + { $value -> + [0] now + *[other] + { $suffix -> + [ago] {framework-timeago-time} ago + [in] in {framework-timeago-time} + *[other] unknown suffix + } + } diff --git a/src/locales/es/framework.ftl b/src/locales/es/framework.ftl index 9cfdf012f..2b95d944c 100644 --- a/src/locales/es/framework.ftl +++ b/src/locales/es/framework.ftl @@ -2,3 +2,45 @@ ### All keys must start with `framework` because this file is shared ### among different targets. +framework-timeago = + { $value -> + [0] ahora + *[other] + { $suffix -> + [ago] hace + [in] en + *[other] unknown suffix + } + { $value } + { $unit -> + [second] { $value -> + [1] segundo + *[other] segundos + } + [minute] { $value -> + [1] minuto + *[other] minutos + } + [hour] { $value -> + [0] hora + *[other] horas + } + [day] { $value -> + [1] dia + *[other] dias + } + [week] { $value -> + [1] semana + *[other] semanas + } + [month] { $value -> + [1] mes + *[other] meses + } + [year] { $value -> + [1] año + *[other] años + } + *[other] unknown unit + } + } diff --git a/src/types/react-timeago.d.ts b/src/types/react-timeago.d.ts new file mode 100644 index 000000000..431bbf88e --- /dev/null +++ b/src/types/react-timeago.d.ts @@ -0,0 +1,55 @@ +declare module "react-timeago" { + import React from "react"; + + export type Formatter = ( + value: number, + unit: "second" | "minute" | "hour" | "day" | "week" | "month" | "year", + suffix: "ago" | "from now", + epochMiliseconds: string + ) => string | React.ReactElement; + + export interface LocaleDefinition { + prefixAgo?: string; + prefixFromNow?: string; + suffixAgo?: string; + suffixFromNow?: string; + second?: string; + seconds?: string; + minute?: string; + minutes?: string; + hour?: string; + hours?: string; + day?: string; + days?: string; + week?: string; + weeks?: string; + month?: string; + months?: string; + year?: string; + years?: string; + wordSeparator?: string; + numbers?: number[]; + } + + export interface TimeAgoProps { + date: string; + live?: boolean; + className: string; + formatter?: Formatter; + } + + const TimeAgo: React.ComponentType; + export default TimeAgo; +} + +declare module "react-timeago/lib/formatters/buildFormatter" { + import { Formatter, LocaleDefinition } from "react-timeago"; + function buildFormatter(localeInput: LocaleDefinition): Formatter; + export default buildFormatter; +} + +declare module "react-timeago/lib/language-strings/*" { + import { LocaleDefinition } from "react-timeago"; + const localeStrings: LocaleDefinition; + export default localeStrings; +}