From 9cfa337e0e8be4774834b3dbae1d15327b9320ce Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Wed, 28 Oct 2020 13:58:38 +0000 Subject: [PATCH 01/43] Bumped version to 11.0.2 [ci skip] --- lib/open_project/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/open_project/version.rb b/lib/open_project/version.rb index a404310e38..c687a5cda4 100644 --- a/lib/open_project/version.rb +++ b/lib/open_project/version.rb @@ -34,7 +34,7 @@ module OpenProject module VERSION #:nodoc: MAJOR = 11 MINOR = 0 - PATCH = 1 + PATCH = 2 TINY = PATCH # Redmine compat class << self From 45cbe086253e1ee1f5bc081a7d4cc5ce23b13744 Mon Sep 17 00:00:00 2001 From: ML-OpenP Date: Thu, 29 Oct 2020 12:06:19 +0100 Subject: [PATCH 02/43] fixed wrong link in docs [ci skip] --- docs/user-guide/projects/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/projects/README.md b/docs/user-guide/projects/README.md index c5570f3696..d3cc6d1f2c 100644 --- a/docs/user-guide/projects/README.md +++ b/docs/user-guide/projects/README.md @@ -216,7 +216,7 @@ To change the order of the displayed [custom fields](../../system-admin-guide/cu -To **display the work packages** of all your projects **in a Gantt chart** click on the **Open as Gantt view** icon on the upper right. This is a shortcut to get to the report described in the chapter below quickly. The Gantt chart view can be configured in the [System Settings](../../system-admin-guide/settings/project-system-settings) in the Administration. +To **display the work packages** of all your projects **in a Gantt chart** click on the **Open as Gantt view** icon on the upper right. This is a shortcut to get to the report described in the chapter below quickly. The Gantt chart view can be configured in the [System Settings](../../system-admin-guide/system-settings/project-system-settings) in the Administration. ![image-20201007161248903](image-20201007161248903.png) From 514e37b3c80b460626964621255a78dafd354771 Mon Sep 17 00:00:00 2001 From: ulferts Date: Fri, 30 Oct 2020 09:20:06 +0100 Subject: [PATCH 03/43] run npm audit fix (#8817) --- frontend/npm-shrinkwrap.json | 3863 +++++++++++++--------------------- frontend/package.json | 2 +- 2 files changed, 1505 insertions(+), 2360 deletions(-) diff --git a/frontend/npm-shrinkwrap.json b/frontend/npm-shrinkwrap.json index 8e1cae9092..cd52b81751 100644 --- a/frontend/npm-shrinkwrap.json +++ b/frontend/npm-shrinkwrap.json @@ -31,142 +31,102 @@ } }, "@angular-devkit/build-angular": { - "version": "0.1000.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1000.4.tgz", - "integrity": "sha512-jAl2xsj1g4RdQ4MBLSZ8Dsj3MUKjYKK+e73DxVHSTo0166T1p/7gdgSehLHWVlavJLDVM+fjYdt4kP12Z7FBjQ==", - "requires": { - "@angular-devkit/architect": "0.1000.4", - "@angular-devkit/build-optimizer": "0.1000.4", - "@angular-devkit/build-webpack": "0.1000.4", - "@angular-devkit/core": "10.0.4", - "@babel/core": "7.9.6", - "@babel/generator": "7.9.6", - "@babel/plugin-transform-runtime": "7.9.6", - "@babel/preset-env": "7.9.6", - "@babel/runtime": "7.9.6", - "@babel/template": "7.8.6", - "@jsdevtools/coverage-istanbul-loader": "3.0.3", - "@ngtools/webpack": "10.0.4", - "ajv": "6.12.3", - "autoprefixer": "9.8.0", + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.0.tgz", + "integrity": "sha512-cPkdp1GceokGHc79Wg0hACMqqmnJ4W3H9kY4c9qp1Xz18b3vk1aq09JNawOpfUN09S9vBCnn4glg22lRyqmJNA==", + "requires": { + "@angular-devkit/architect": "0.1002.0", + "@angular-devkit/build-optimizer": "0.1002.0", + "@angular-devkit/build-webpack": "0.1002.0", + "@angular-devkit/core": "10.2.0", + "@babel/core": "7.11.1", + "@babel/generator": "7.11.0", + "@babel/plugin-transform-runtime": "7.11.0", + "@babel/preset-env": "7.11.0", + "@babel/runtime": "7.11.2", + "@babel/template": "7.10.4", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "10.2.0", + "autoprefixer": "9.8.6", "babel-loader": "8.1.0", "browserslist": "^4.9.1", - "cacache": "15.0.3", + "cacache": "15.0.5", "caniuse-lite": "^1.0.30001032", "circular-dependency-plugin": "5.2.0", "copy-webpack-plugin": "6.0.3", "core-js": "3.6.4", - "css-loader": "3.5.3", + "css-loader": "4.2.2", "cssnano": "4.1.10", "file-loader": "6.0.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", - "jest-worker": "26.0.0", + "jest-worker": "26.3.0", "karma-source-map-support": "1.4.0", - "less-loader": "6.1.0", - "license-webpack-plugin": "2.2.0", + "less-loader": "6.2.0", + "license-webpack-plugin": "2.3.0", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "0.9.0", + "mini-css-extract-plugin": "0.10.0", "minimatch": "3.0.4", - "open": "7.0.4", - "parse5": "4.0.0", + "open": "7.2.0", + "parse5": "6.0.1", + "parse5-htmlparser2-tree-adapter": "6.0.1", "pnp-webpack-plugin": "1.6.4", - "postcss": "7.0.31", + "postcss": "7.0.32", "postcss-import": "12.0.1", "postcss-loader": "3.0.0", "raw-loader": "4.0.1", - "regenerator-runtime": "0.13.5", - "resolve-url-loader": "3.1.1", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "3.1.2", "rimraf": "3.0.2", - "rollup": "2.10.9", - "rxjs": "6.5.5", - "sass": "1.26.5", - "sass-loader": "8.0.2", + "rollup": "2.26.5", + "rxjs": "6.6.2", + "sass": "1.26.10", + "sass-loader": "10.0.1", "semver": "7.3.2", "source-map": "0.7.3", - "source-map-loader": "1.0.0", + "source-map-loader": "1.0.2", "source-map-support": "0.5.19", "speed-measure-webpack-plugin": "1.3.3", "style-loader": "1.2.1", - "stylus": "0.54.7", + "stylus": "0.54.8", "stylus-loader": "3.0.2", - "terser": "4.7.0", - "terser-webpack-plugin": "3.0.1", + "terser": "5.3.0", + "terser-webpack-plugin": "4.1.0", "tree-kill": "1.2.2", - "webpack": "4.43.0", + "webpack": "4.44.1", "webpack-dev-middleware": "3.7.2", "webpack-dev-server": "3.11.0", "webpack-merge": "4.2.2", "webpack-sources": "1.4.3", "webpack-subresource-integrity": "1.4.1", - "worker-plugin": "4.0.3" + "worker-plugin": "5.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", - "requires": { - "@babel/types": "^7.9.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "@angular-devkit/architect": { + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.0.tgz", + "integrity": "sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==", "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" + "@angular-devkit/core": "10.2.0", + "rxjs": "6.6.2" } }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "@angular-devkit/core": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", + "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" } }, "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -175,38 +135,28 @@ } }, "autoprefixer": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.0.tgz", - "integrity": "sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==", + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", "requires": { "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001061", - "chalk": "^2.4.2", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.30", + "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" }, "dependencies": { "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" } } } @@ -217,9 +167,29 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "caniuse-lite": { - "version": "1.0.30001109", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz", - "integrity": "sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ==" + "version": "1.0.30001153", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001153.tgz", + "integrity": "sha512-qv14w7kWwm2IW7DBvAKWlCqGTmV2XxNtSejJBVplwRjhkohHuhRUpeSlPjtu9erru0+A12zCDUiSmvx/AcqVRA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } }, "core-js": { "version": "3.6.4", @@ -227,9 +197,9 @@ "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" }, "electron-to-chromium": { - "version": "1.3.514", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.514.tgz", - "integrity": "sha512-8vb8zKIeGlZigeDzNWWthmGeLzo5CC43Lc+CZshMs7UXFVMPNLtXJGa/txedpu3OJFrXXVheBwp9PqOJJlHQ8w==" + "version": "1.3.584", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.584.tgz", + "integrity": "sha512-NB3DzrTzJFhWkUp+nl2KtUtoFzrfGXTir2S+BU4tXGyXH9vlluPuFpE3pTKeH7+PY460tHLjKzh6K2+TWwW+Ww==" }, "emojis-list": { "version": "3.0.0", @@ -241,6 +211,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, "find-cache-dir": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", @@ -273,6 +248,14 @@ "path-is-absolute": "^1.0.0" } }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, "json5": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", @@ -314,15 +297,19 @@ } } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" + "version": "1.1.64", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", + "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==" + }, + "open": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", + "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } }, "p-locate": { "version": "4.1.0", @@ -346,47 +333,19 @@ } }, "postcss": { - "version": "7.0.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.31.tgz", - "integrity": "sha512-a937VDHE1ftkjk+8/7nj/mrjtmkn69xxzJgRETXdAUU+IgOYPQNJF17haGWbeDxSyk++HA14UA98FurvPyBJOA==", + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", "supports-color": "^6.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -404,18 +363,11 @@ } }, "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", "requires": { "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } } }, "semver": { @@ -438,17 +390,31 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "@angular-devkit/build-optimizer": { - "version": "0.1000.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1000.4.tgz", - "integrity": "sha512-usscQipxIU2yJVmBdyIDPmJZ+ltOjsX4VbMkGM2IdJHCIi9uEk2E3+YLxzyU5Xl5tXEK61AQt4YWUimt8Kg0GA==", + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.0.tgz", + "integrity": "sha512-ACnm9doPMbRtSy1UZN5ir7smeLMx0g0oW7jX3jyPepeQKZ+9U1Bn09t10NLZQH+Z509jWZgvNJH/aOh85P6euw==", "requires": { "loader-utils": "2.0.0", "source-map": "0.7.3", - "tslib": "2.0.0", + "tslib": "2.0.1", + "typescript": "4.0.2", "webpack-sources": "1.4.3" }, "dependencies": { @@ -480,42 +446,82 @@ "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "tslib": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz", - "integrity": "sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==" + }, + "typescript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==" } } }, "@angular-devkit/build-webpack": { - "version": "0.1000.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1000.4.tgz", - "integrity": "sha512-ZPXrm1+UyKbMZtnU+b5jdtZPFDYs8Pu5lHhJDzX6bk0TxtuXws+nwaeUs6WkfwXft8cksxK2WwGr57XX3OT7nw==", + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.0.tgz", + "integrity": "sha512-TLBBQ6ANOLKXOPxpCOnxAtoknwHA7XhsLuueN06w5qqF+QNNbWUMPoieKFGs2TnotfCgbiq6x57IDEZTyT6V0w==", "requires": { - "@angular-devkit/architect": "0.1000.4", - "@angular-devkit/core": "10.0.4", - "rxjs": "6.5.5" + "@angular-devkit/architect": "0.1002.0", + "@angular-devkit/core": "10.2.0", + "rxjs": "6.6.2" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.1002.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.0.tgz", + "integrity": "sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==", + "requires": { + "@angular-devkit/core": "10.2.0", + "rxjs": "6.6.2" + } + }, + "@angular-devkit/core": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", + "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", "requires": { "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -998,61 +1004,28 @@ } }, "@babel/compat-data": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.5.tgz", - "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "caniuse-lite": { - "version": "1.0.30001109", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz", - "integrity": "sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ==" - }, - "electron-to-chromium": { - "version": "1.3.514", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.514.tgz", - "integrity": "sha512-8vb8zKIeGlZigeDzNWWthmGeLzo5CC43Lc+CZshMs7UXFVMPNLtXJGa/txedpu3OJFrXXVheBwp9PqOJJlHQ8w==" - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" - } - } + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" }, "@babel/core": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.6", - "@babel/parser": "^7.9.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.1", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" @@ -1066,42 +1039,6 @@ "@babel/highlight": "^7.10.4" } }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, "@babel/highlight": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", @@ -1112,53 +1049,12 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "json5": { @@ -1169,21 +1065,17 @@ "minimist": "^1.2.5" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", "requires": { + "is-core-module": "^2.0.0", "path-parse": "^1.0.6" } }, @@ -1194,24 +1086,29 @@ } } }, + "@babel/generator": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "requires": { + "@babel/types": "^7.11.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, "@babel/helper-annotate-as-pure": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "requires": { "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -1221,109 +1118,67 @@ "requires": { "@babel/helper-explode-assignable-expression": "^7.10.4", "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", "requires": { - "@babel/compat-data": "^7.10.4", + "@babel/compat-data": "^7.12.1", + "@babel/helper-validator-option": "^7.12.1", "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", "semver": "^5.5.0" }, "dependencies": { "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" } }, "caniuse-lite": { - "version": "1.0.30001109", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz", - "integrity": "sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ==" + "version": "1.0.30001153", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001153.tgz", + "integrity": "sha512-qv14w7kWwm2IW7DBvAKWlCqGTmV2XxNtSejJBVplwRjhkohHuhRUpeSlPjtu9erru0+A12zCDUiSmvx/AcqVRA==" }, "electron-to-chromium": { - "version": "1.3.514", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.514.tgz", - "integrity": "sha512-8vb8zKIeGlZigeDzNWWthmGeLzo5CC43Lc+CZshMs7UXFVMPNLtXJGa/txedpu3OJFrXXVheBwp9PqOJJlHQ8w==" + "version": "1.3.584", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.584.tgz", + "integrity": "sha512-NB3DzrTzJFhWkUp+nl2KtUtoFzrfGXTir2S+BU4tXGyXH9vlluPuFpE3pTKeH7+PY460tHLjKzh6K2+TWwW+Ww==" }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" + "version": "1.1.64", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", + "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==" } } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "requires": { - "jsesc": "~0.5.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - } + "regexpu-core": "^4.7.1" } }, "@babel/helper-define-map": { @@ -1334,193 +1189,32 @@ "@babel/helper-function-name": "^7.10.4", "@babel/types": "^7.10.5", "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-function-name": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "requires": { - "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "@babel/helper-hoist-variables": { @@ -1529,125 +1223,38 @@ "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "requires": { "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", "requires": { - "@babel/types": "^7.10.5" - }, - "dependencies": { - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.12.1" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", "requires": { - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.12.1" } }, "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-optimise-call-expression": { @@ -1656,18 +1263,6 @@ "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "requires": { "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-plugin-utils": { @@ -1677,317 +1272,55 @@ }, "@babel/helper-regex": { "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "requires": { + "lodash": "^4.17.19" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -1995,255 +1328,30 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + }, "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", "requires": { "@babel/helper-function-name": "^7.10.4", "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", + "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", "requires": { "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1" } }, "@babel/highlight": { @@ -2265,86 +1373,128 @@ } } }, + "@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" + }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" } }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/plugin-transform-parameters": "^7.12.1" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, @@ -2356,6 +1506,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -2364,6 +1522,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -2372,6 +1538,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -2413,571 +1587,424 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "requires": { - "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@babel/helper-remap-async-to-generator": "^7.12.1" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-define-map": "^7.10.4", "@babel/helper-function-name": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", "requires": { "@babel/helper-function-name": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", "requires": { - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", "requires": { "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.1" } }, "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" + "@babel/helper-replace-supers": "^7.12.1" } }, "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", "requires": { - "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" - }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz", - "integrity": "sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", + "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" }, "dependencies": { "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", "requires": { + "is-core-module": "^2.0.0", "path-parse": "^1.0.6" } } } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", + "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz", - "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==", - "requires": { - "@babel/compat-data": "^7.9.6", - "@babel/helper-compilation-targets": "^7.9.6", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", + "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "requires": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.5", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.9.5", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.6", - "@babel/plugin-transform-modules-commonjs": "^7.9.6", - "@babel/plugin-transform-modules-systemjs": "^7.9.6", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.9.5", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.6", - "browserslist": "^4.11.1", + "@babel/types": "^7.11.0", + "browserslist": "^4.12.0", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" }, "dependencies": { - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" } }, "caniuse-lite": { - "version": "1.0.30001109", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz", - "integrity": "sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ==" + "version": "1.0.30001153", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001153.tgz", + "integrity": "sha512-qv14w7kWwm2IW7DBvAKWlCqGTmV2XxNtSejJBVplwRjhkohHuhRUpeSlPjtu9erru0+A12zCDUiSmvx/AcqVRA==" }, "electron-to-chromium": { - "version": "1.3.514", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.514.tgz", - "integrity": "sha512-8vb8zKIeGlZigeDzNWWthmGeLzo5CC43Lc+CZshMs7UXFVMPNLtXJGa/txedpu3OJFrXXVheBwp9PqOJJlHQ8w==" + "version": "1.3.584", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.584.tgz", + "integrity": "sha512-NB3DzrTzJFhWkUp+nl2KtUtoFzrfGXTir2S+BU4tXGyXH9vlluPuFpE3pTKeH7+PY460tHLjKzh6K2+TWwW+Ww==" }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" + "version": "1.1.64", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", + "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==" } } }, "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2987,30 +2014,117 @@ } }, "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", "requires": { "regenerator-runtime": "^0.13.4" } }, - "@babel/types": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", - "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + } + } + }, + "@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.1", + "@babel/types": "^7.12.1", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "requires": { + "@babel/types": "^7.12.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, + "@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, "@fullcalendar/angular": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@fullcalendar/angular/-/angular-5.1.0.tgz", @@ -3079,21 +2193,21 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, "@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz", - "integrity": "sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", "requires": { "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.1", - "loader-utils": "^1.4.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", "merge-source-map": "^1.1.0", - "schema-utils": "^2.6.4" + "schema-utils": "^2.7.0" }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3122,36 +2236,31 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } } } @@ -3182,30 +2291,60 @@ } }, "@ngtools/webpack": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.0.4.tgz", - "integrity": "sha512-qzWkmVUUvr+2kiCtVLyopRwaBbExWtsGrgNVnJoAhtKKDflT4W33FpyJZJvxHwL6nfGGdb261Gfw7teIlCGjog==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.0.tgz", + "integrity": "sha512-W4SSFNQhIiC8JRhIn3c4mb1+fsFKiHp+THVMAUNo+wRZEt/rgzsCdnqv0EmQJJojZhnilUIyB/wVYJu2+S/Bxg==", "requires": { - "@angular-devkit/core": "10.0.4", - "enhanced-resolve": "4.1.1", - "rxjs": "6.5.5", + "@angular-devkit/core": "10.2.0", + "enhanced-resolve": "4.3.0", "webpack-sources": "1.4.3" }, "dependencies": { + "@angular-devkit/core": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", + "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", + "requires": { + "ajv": "6.12.4", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.2", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", "requires": { "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - } } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -3476,9 +2615,9 @@ } }, "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" }, "@types/lodash": { "version": "4.14.149", @@ -3808,9 +2947,9 @@ } }, "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" }, "abbrev": { "version": "1.1.1", @@ -3827,20 +2966,17 @@ } }, "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" }, "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" }, "dependencies": { "big.js": { @@ -3848,33 +2984,28 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" } } }, @@ -3901,9 +3032,9 @@ } }, "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4115,13 +3246,14 @@ } }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" }, "dependencies": { "bn.js": { @@ -4132,11 +3264,27 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } } }, "assert-plus": { @@ -4161,11 +3309,11 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "async-each": { @@ -4281,9 +3429,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4329,19 +3477,14 @@ "json5": "^1.0.1" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } } } @@ -4464,6 +3607,15 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -4484,9 +3636,9 @@ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" }, "body-parser": { "version": "1.19.0", @@ -4638,15 +3790,15 @@ } }, "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", + "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", @@ -4755,21 +3907,21 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.3.tgz", - "integrity": "sha512-bc3jKYjqv7k4pWh7I/ixIjfcjPul4V4jme/WbjvwGS5LzoPL/GzXr4C5EgPNLO/QEZl9Oi61iGitYEdwcrwLCQ==", + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", "requires": { + "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "glob": "^7.1.4", "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", + "lru-cache": "^6.0.0", "minipass": "^3.1.1", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.2", "mkdirp": "^1.0.3", - "move-file": "^2.0.0", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", @@ -4784,11 +3936,11 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" } }, "mkdirp": { @@ -4813,9 +3965,9 @@ } }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -5005,9 +4157,9 @@ }, "dependencies": { "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -5099,16 +4251,6 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -5193,12 +4335,12 @@ } }, "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "requires": { "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-string": "^1.5.4" } }, "color-convert": { @@ -5215,14 +4357,19 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -5281,9 +4428,9 @@ }, "dependencies": { "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" } } }, @@ -5427,9 +4574,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5447,35 +4594,6 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -5531,14 +4649,6 @@ "p-locate": "^4.1.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -5547,16 +4657,6 @@ "semver": "^6.0.0" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, "p-limit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", @@ -5596,22 +4696,14 @@ "find-up": "^4.0.0" } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "semver": { @@ -5626,19 +4718,6 @@ "requires": { "randombytes": "^2.1.0" } - }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "requires": { - "minipass": "^3.1.1" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -5691,12 +4770,12 @@ } }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" }, "dependencies": { "bn.js": { @@ -5810,29 +4889,28 @@ } }, "css-loader": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.3.tgz", - "integrity": "sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.2.tgz", + "integrity": "sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg==", "requires": { - "camelcase": "^5.3.1", + "camelcase": "^6.0.0", "cssesc": "^3.0.0", "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.27", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-local-by-default": "^3.0.3", "postcss-modules-scope": "^2.2.0", "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.3", - "schema-utils": "^2.6.6", - "semver": "^6.3.0" + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5850,6 +4928,11 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5881,32 +4964,27 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -5919,19 +4997,19 @@ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" }, "source-map": { "version": "0.6.1", @@ -5999,9 +5077,9 @@ } }, "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==" + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" }, "cssauron": { "version": "1.4.0", @@ -6102,26 +5180,26 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.1.0.tgz", + "integrity": "sha512-h+6w/W1WqXaJA4tb1dk7r5tVbOm97MsKxzwnvOR04UQ6GILroryjMWu3pmCCtL2mLaEStQ0fZgeGiy99mo7iyg==", "requires": { - "css-tree": "1.0.0-alpha.39" + "css-tree": "^1.0.0" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0.tgz", + "integrity": "sha512-CdVYz/Yuqw0VdKhXPBIgi8DO3NicJVYZNWeX9XcIuSp9ZoFT5IcleVRW07O5rMjdcx1mb+MEJPknTTEW7DdsYw==", "requires": { - "mdn-data": "2.0.6", + "mdn-data": "2.0.12", "source-map": "^0.6.1" } }, "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.12.tgz", + "integrity": "sha512-ULbAlgzVb8IqZ0Hsxm6hHSlQl3Jckst2YEQS7fODu9ilNWy2LvcoSY7TRFIktABP2mdppBioc66va90T+NUs8Q==" }, "source-map": { "version": "0.6.1", @@ -6502,9 +5580,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", + "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==" } } }, @@ -6538,9 +5616,9 @@ } }, "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { "is-obj": "^2.0.0" } @@ -6757,9 +5835,9 @@ } }, "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -6773,9 +5851,9 @@ "dev": true }, "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" }, "err-code": { "version": "1.1.2", @@ -6926,9 +6004,9 @@ } }, "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -6955,11 +6033,18 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } } }, "estraverse": { @@ -7153,11 +6238,6 @@ "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" } } }, @@ -7306,9 +6386,9 @@ "dev": true }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", "requires": { "reusify": "^1.0.4" } @@ -7344,9 +6424,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7392,23 +6472,24 @@ "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7665,9 +6746,9 @@ "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==" }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", @@ -8229,11 +7310,11 @@ } }, "iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "icss-utils": { @@ -8265,9 +7346,9 @@ } }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -8290,9 +7371,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "iferr": { "version": "0.1.5", @@ -8605,6 +7686,14 @@ "rgba-regex": "^1.0.0" } }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -8688,6 +7777,11 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8987,10 +8081,11 @@ } }, "jest-worker": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.0.0.tgz", - "integrity": "sha512-pPaYa2+JnwmiZjK9x7p9BoZht+47ecFCDFA/CJxspHzeDvQcfVBLWzCiWyo+EGrSiQMWZtCFo9iSvMZnAAo8vw==", + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", + "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" }, @@ -9001,9 +8096,9 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -9450,6 +8545,11 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" + }, "less": { "version": "3.12.2", "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", @@ -9472,27 +8572,27 @@ "optional": true }, "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "less-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.1.0.tgz", - "integrity": "sha512-/jLzOwLyqJ7Kt3xg5sHHkXtOyShWwFj410K9Si9WO+/h8rmYxxkSR0A3/hFEntWudE20zZnWMtpMYnLzqTVdUA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", + "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", "requires": { "clone": "^2.1.2", - "less": "^3.11.1", + "less": "^3.11.3", "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" + "schema-utils": "^2.7.0" }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -9538,19 +8638,14 @@ "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } } } @@ -9569,9 +8664,9 @@ } }, "license-webpack-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.2.0.tgz", - "integrity": "sha512-XPsdL/0brSHf+7dXIlRqotnCQ58RX2au6otkOg4U3dm8uH+Ka/fW4iukEs95uXm+qKe/SBs+s1Ll/aQddKG+tg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w==", "requires": { "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" @@ -9716,9 +8811,9 @@ } }, "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" }, "loose-envify": { "version": "1.4.0", @@ -10033,9 +9128,9 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", + "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", "requires": { "loader-utils": "^1.1.0", "normalize-url": "1.9.1", @@ -10074,6 +9169,11 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, "minipass": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", @@ -10114,9 +9214,9 @@ } }, "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -10231,21 +9331,6 @@ "run-queue": "^1.0.3" } }, - "move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-cdkdhNCgbP5dvS4tlGxZbD+nloio9GIimP57EjqFhwLcMjnU+XJKAZzlmg/TN/AK1LuNAdTSvm3CPPP4Xkv0iQ==", - "requires": { - "path-exists": "^4.0.0" - }, - "dependencies": { - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - } - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -10294,9 +9379,9 @@ } }, "native-request": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.7.tgz", - "integrity": "sha512-9nRjinI9bmz+S7dgNtf4A70+/vPhnd+2krGpy4SUlADuOuSa24IDkNaZ+R/QT1wQ6S8jBdi6wE7fLekFZNfUpQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", + "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", "optional": true }, "negotiator": { @@ -10384,9 +9469,9 @@ } }, "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, "node-gyp": { "version": "3.8.0", @@ -10458,14 +9543,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - } } } }, @@ -10815,12 +9892,57 @@ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" }, "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "object-keys": { @@ -10828,11 +9950,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -11283,13 +10400,12 @@ } }, "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" @@ -11305,9 +10421,17 @@ } }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + } }, "parseqs": { "version": "0.0.5", @@ -11456,11 +10580,6 @@ "ms": "^2.1.1" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -11499,9 +10618,9 @@ } }, "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", "requires": { "postcss": "^7.0.27", "postcss-selector-parser": "^6.0.2", @@ -11529,9 +10648,9 @@ } }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11818,9 +10937,9 @@ } }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11877,9 +10996,9 @@ } }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -11931,9 +11050,9 @@ } }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12148,13 +11267,14 @@ } }, "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", "requires": { "cssesc": "^3.0.0", "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" } }, "postcss-svgo": { @@ -12354,9 +11474,9 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "randombytes": { "version": "2.1.0", @@ -12378,8 +11498,7 @@ "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { "version": "2.4.0", @@ -12439,9 +11558,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12487,19 +11606,14 @@ "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } } } @@ -12667,14 +11781,22 @@ "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, "regenerator-transform": { "version": "0.14.5", @@ -12694,9 +11816,9 @@ } }, "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" }, "regexp.prototype.flags": { "version": "1.3.0", @@ -12707,10 +11829,38 @@ "es-abstract": "^1.17.0-next.1" } }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } }, "remove-trailing-separator": { "version": "1.1.0", @@ -12806,11 +11956,11 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", "requires": { - "adjust-sourcemap-loader": "2.0.0", + "adjust-sourcemap-loader": "3.0.0", "camelcase": "5.3.1", "compose-function": "3.0.3", "convert-source-map": "1.7.0", @@ -12865,11 +12015,6 @@ "json5": "^1.0.1" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "postcss": { "version": "7.0.21", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", @@ -12974,9 +12119,9 @@ } }, "rollup": { - "version": "2.10.9", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.10.9.tgz", - "integrity": "sha512-dY/EbjiWC17ZCUSyk14hkxATAMAShkMsD43XmZGWjLrgFj15M3Dw2kEkA9ns64BiLFm9PKN6vTQw8neHwK74eg==", + "version": "2.26.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.5.tgz", + "integrity": "sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA==", "requires": { "fsevents": "~2.1.2" } @@ -12987,9 +12132,9 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" }, "run-queue": { "version": "1.0.3", @@ -13033,9 +12178,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.5.tgz", - "integrity": "sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q==", + "version": "1.26.10", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", + "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", "requires": { "chokidar": ">=2.0.0 <4.0.0" } @@ -13052,21 +12197,21 @@ } }, "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz", + "integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==", "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" + "klona": "^2.0.3", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^2.7.0", + "semver": "^7.3.2" }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13095,42 +12240,37 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" } } }, @@ -13179,11 +12319,11 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", "requires": { - "node-forge": "0.9.0" + "node-forge": "^0.10.0" } }, "semver": { @@ -13232,11 +12372,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" } } }, @@ -13338,14 +12473,6 @@ "safe-buffer": "^5.0.1" } }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -13751,21 +12878,21 @@ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, "source-map-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.0.tgz", - "integrity": "sha512-ZayyQCSCrQazN50aCvuS84lJT4xc1ZAcykH5blHaBdVveSwjiFK8UGMPvao0ho54DTb0Jf7m57uRRG/YYUZ2Fg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", + "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", "requires": { "data-urls": "^2.0.0", - "iconv-lite": "^0.5.1", + "iconv-lite": "^0.6.2", "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6", - "source-map": "^0.6.0" + "schema-utils": "^2.7.0", + "source-map": "^0.6.1" }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13811,19 +12938,14 @@ "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "source-map": { @@ -13912,11 +13034,11 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -13940,11 +13062,11 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -14215,9 +13337,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14263,19 +13385,14 @@ "json5": "^2.1.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } } } @@ -14303,17 +13420,17 @@ } }, "stylus": { - "version": "0.54.7", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", - "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", "requires": { "css-parse": "~2.0.0", "debug": "~3.1.0", - "glob": "^7.1.3", - "mkdirp": "~0.5.x", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", "safer-buffer": "^2.1.2", "sax": "~1.2.4", - "semver": "^6.0.0", + "semver": "^6.3.0", "source-map": "^0.7.3" }, "dependencies": { @@ -14325,6 +13442,24 @@ "ms": "2.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -14389,14 +13524,14 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", - "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", - "minizlib": "^2.1.0", + "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, @@ -14419,9 +13554,9 @@ } }, "terser": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", - "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", + "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -14436,25 +13571,25 @@ } }, "terser-webpack-plugin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.1.tgz", - "integrity": "sha512-eFDtq8qPUEa9hXcUzTwKXTnugIVtlqc1Z/ZVhG8LmRT3lgRY13+pQTnFLY2N7ATB6TKCHuW/IGjoAnZz9wOIqw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA==", "requires": { - "cacache": "^15.0.3", + "cacache": "^15.0.5", "find-cache-dir": "^3.3.1", - "jest-worker": "^26.0.0", - "p-limit": "^2.3.0", + "jest-worker": "^26.3.0", + "p-limit": "^3.0.2", "schema-utils": "^2.6.6", - "serialize-javascript": "^3.0.0", + "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", - "terser": "^4.6.13", + "terser": "^5.0.0", "webpack-sources": "^1.4.3" }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14508,9 +13643,9 @@ } }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", "requires": { "p-try": "^2.0.0" } @@ -14521,6 +13656,16 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + } } }, "path-exists": { @@ -14537,13 +13682,13 @@ } }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "semver": { @@ -14552,9 +13697,9 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "requires": { "randombytes": "^2.1.0" } @@ -14591,9 +13736,9 @@ "integrity": "sha1-t8+nHnaPHJAAxJe5FRswlHxQ5G0=" }, "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "requires": { "setimmediate": "^1.0.4" } @@ -15017,10 +14162,15 @@ "unicode-property-aliases-ecmascript": "^1.0.4" } }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" }, "union-value": { "version": "1.0.1", @@ -15189,18 +14339,11 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -15410,6 +14553,7 @@ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, @@ -15524,14 +14668,14 @@ } }, "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -15541,7 +14685,7 @@ "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", @@ -15554,14 +14698,14 @@ "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15737,11 +14881,6 @@ "to-regex": "^3.0.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -15751,9 +14890,9 @@ } }, "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "requires": { "randombytes": "^2.1.0" } @@ -15763,16 +14902,26 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", + "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", @@ -15820,11 +14969,6 @@ "version": "2.4.6", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" } } }, @@ -15939,11 +15083,11 @@ } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "fill-range": { @@ -15973,6 +15117,7 @@ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1" } }, @@ -16153,13 +15298,13 @@ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" }, "whatwg-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.1.0.tgz", - "integrity": "sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", "requires": { "lodash.sortby": "^4.7.0", "tr46": "^2.0.2", - "webidl-conversions": "^5.0.0" + "webidl-conversions": "^6.1.0" } }, "when": { @@ -16221,9 +15366,9 @@ } }, "worker-plugin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz", - "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", + "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", "requires": { "loader-utils": "^1.1.0" } diff --git a/frontend/package.json b/frontend/package.json index 4e34c0f71a..d34d24d93c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,7 +30,7 @@ "tslint": "~6.1.0" }, "dependencies": { - "@angular-devkit/build-angular": "^0.1000.4", + "@angular-devkit/build-angular": "^0.1002.0", "@angular/animations": "10.0.6", "@angular/cdk": "^10.1.1", "@angular/cli": "^10.0.4", From d0bda53ec3de5b5c16e03eddf00dde3672f26746 Mon Sep 17 00:00:00 2001 From: ulferts Date: Fri, 30 Oct 2020 09:44:24 +0100 Subject: [PATCH 04/43] fix time entry widget configuration modal heading --- .../time-entries-current-user-configuration.modal.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/app/modules/grids/widgets/time-entries/current-user/time-entries-current-user-configuration.modal.html b/frontend/src/app/modules/grids/widgets/time-entries/current-user/time-entries-current-user-configuration.modal.html index a5d873b30d..a2a47b315d 100644 --- a/frontend/src/app/modules/grids/widgets/time-entries/current-user/time-entries-current-user-configuration.modal.html +++ b/frontend/src/app/modules/grids/widgets/time-entries/current-user/time-entries-current-user-configuration.modal.html @@ -10,10 +10,9 @@ [attr.title]="text.closePopup"> +

-

-
From b37bf20f638119bb0d4b8f5e7526b5bb52759ff7 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Fri, 30 Oct 2020 10:00:36 +0000 Subject: [PATCH 05/43] update locales from crowdin [ci skip] --- config/locales/crowdin/de.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index ac8ca67766..500747ad08 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -329,7 +329,7 @@ de: other: "Der Account wird aus dem System entfernt. Der Nutzer wird daher nicht mehr in der Lage sein, sich mit seinem derzeitigen Nutzernamen und Passwort anzumelden. Sofern der Nutzer es wünscht, kann er sich über die von der Anwendung zur Verfügung gestellten Mechanismen einen neuen Account zulegen." self: "Ihr Account wird aus dem System entfernt. Sie werden daher nicht mehr in der Lage sein, sich mit Ihrem derzeitigen Nutzernamen und Passwort anzumelden. Sofern Sie es wünschen, können Sie sich über die von der Anwendung zur Verfügung gestellten Mechanismen einen neuen Account zulegen." login_verification: - other: "Geben sie den %{name} ein um die löschung zu verifizieren. Zusätzlich müssen sie nach dem Absenden des Formulars ihr Password bestätigen." + other: "Geben Sie den Nutzernamen %{name} ein um die Löschung zu verifizieren. Zusätzlich müssen Sie nach dem Absenden des Formulars Ihr Passwort bestätigen." self: "Gebe deinen Login %{name} ein, um den Löschvorgang zu bestätigen. Sie müssen zusätzlich nach dem Absenden des Formulars Ihr Password bestätigen." error_inactive_activation_by_mail: > Ihr Konto wurde noch nicht aktiviert. Zur Aktivierung folgen Sie bitte dem Link, der Ihnen bei der Registrierung per E-Mail zugeschickt wurde. From 0daaad94b07985835d7261c6edc6bdf3136c4f59 Mon Sep 17 00:00:00 2001 From: Wieland Lindenthal Date: Fri, 30 Oct 2020 11:17:58 +0100 Subject: [PATCH 06/43] Adding docs for switching to BIM Edition (#8814) --- .../changing-to-bim-edition/README.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 docs/installation-and-operations/changing-to-bim-edition/README.md diff --git a/docs/installation-and-operations/changing-to-bim-edition/README.md b/docs/installation-and-operations/changing-to-bim-edition/README.md new file mode 100644 index 0000000000..c30c0158b5 --- /dev/null +++ b/docs/installation-and-operations/changing-to-bim-edition/README.md @@ -0,0 +1,81 @@ +--- +sidebar_navigation: + title: Changing to BIM Edition + priority: 100 +--- + +# Changing to BIM Edition + +An existing OpenProject on-premises (self hosted) installation can easily be switched to the BIM Edition. +The BIM Edition extends the capabilities of a normal OpenProject installation with special features +for the construction industry. + +Switching to the BIM Edition will not affect your existing data. Your team will be able to continue +working just as before. By switching to the BIM edition additional features will become available +when you activate the "BCF" module a project's settings. + +## Instructions + +### Backup and upgrade + +First, backup your data and update your installation to the latest OpenProject version as described in [Upgrading](../operation/upgrading). + +### Switching to BIM Edition + +Now that your OpenProject instance is up to date, you can _reconfigure_ it +to be a BIM Edition. + +On the command line of your server run the following command. It will open a wizard that +guides you through through the most important installation settings of your instance. +On the first screen it will ask you to select the edition. Please select _bim_ and click _next_. +You can keep the screens that follow just as they are. You don't need to change any setting. +Your current settings will be preselected for you. You can simply click "next" in every step +until the end of the wizard. Finally, this will also +trigger the installation of the necessary libraries and tools for 3D model conversion. + +`sudo openproject reconfigure` + +Congratulations, you've successfully switched to the BIM Edition. However, for the best +experience you might consider also the next configuration. + +You can check that all tools for the IFC model conversion were installed by going to +_-> Administration -> Information_ and check that _IFC conversion pipeline available_ +has a check icon (✓) to the right. + +### Activating the BCF module per default for every new project (optional) + +You can enable the BCF module per default for all new projects in the future. + +Go to _-> Administration -> System settings -> Projects_ and within the section +_Settings for new projects_ activate the checkbox for _BCF_. + +### Add typical work package types and statuses for BCF management (optional) + +For BCF management process you might want to add special work package types to your +installation. + +In freshly created OpenProject BIM instances those types are already present. However, +as you have just switched from a normal OpenProject installation you will need to create +those work package types by hand. Please find detailed instructions on how to add work +package types in [Manage Work Package Types](../../system-admin-guide/manage-work-packages/work-package-types/). + +You might consider adding the following typical work package types: + +- Issue (color `indigo-7`) +- Clash (color `red-8`) +- Remark (color `GREEN (DARK)`) +- Request (color `cyan-7`) + +We recommend that each type has the following status options: + +- New (color `blue-6`) +- In progress (color `orange-6`) +- Resolved (color `'green-3`) +- Closed (color `'gray-3`) + +### Activating the "OpenProject BIM" theme (optional) + +OpenProject installations with a valid Enterprise Edition token can switch to the BIM +theme. + +Go to _-> Administration -> Design_ and from the _Themes_ drop down menu chose _OpenProject BIM_. \ No newline at end of file From 6fe0d2752febc2d2b171ae9ff23973a2a881a7e7 Mon Sep 17 00:00:00 2001 From: ulferts Date: Fri, 30 Oct 2020 17:40:26 +0100 Subject: [PATCH 07/43] don`t bail if data is already gone --- app/models/journal.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/journal.rb b/app/models/journal.rb index bc40008b19..c2a1362b18 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -112,7 +112,7 @@ class Journal < ApplicationRecord private def destroy_data - data.destroy + data&.destroy end def predecessor From 25dfe8421f6a6905013fcd68daeb82098ea7485d Mon Sep 17 00:00:00 2001 From: ML-OpenP <70652047+ML-OpenP@users.noreply.github.com> Date: Fri, 30 Oct 2020 19:05:25 +0100 Subject: [PATCH 08/43] link fixes in docs (#8818) [ci skip] --- .../custom-fields/custom-fields-projects/README.md | 2 +- .../system-settings/project-system-settings/README.md | 2 +- docs/user-guide/gantt-chart/README.md | 2 +- docs/user-guide/work-packages/create-work-package/README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md b/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md index 9eb587bc29..4c5a1e05c1 100644 --- a/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md +++ b/docs/system-admin-guide/custom-fields/custom-fields-projects/README.md @@ -41,7 +41,7 @@ To do this navigate to a project and select *Project settings* from the side men -If you selected *Visible* in the custom fields settings, the custom field for projects is also available in the [View all projects](../../user-guide/projects/#view-all-projects) overview. +If you selected *Visible* in the custom fields settings, the custom field for projects is also available in the [View all projects](../../../user-guide/projects/#view-all-projects) overview. Navigate to this project list by selecting *View all projects* from the project selection menu on the top left side. diff --git a/docs/system-admin-guide/system-settings/project-system-settings/README.md b/docs/system-admin-guide/system-settings/project-system-settings/README.md index 10579f094c..dc53863b8c 100644 --- a/docs/system-admin-guide/system-settings/project-system-settings/README.md +++ b/docs/system-admin-guide/system-settings/project-system-settings/README.md @@ -19,7 +19,7 @@ To adapt the system project settings, go to System settings on the tab **Project ### Settings for the Project Overview List 5. Choose **which columns should be visible** in the Project Overview List by default. -6. Define the **settings for the Gantt chart view** displayed when clicking on "Open as Gantt view" in the Projects Overview List. You can choose filters, columns, sortings and more to configure the view. For more information on how the configuration works please refer to the instructions for the [work package table configuration](../../user-guide/work-packages/work-package-table-configuration/) in the User Guide. +6. Define the **settings for the Gantt chart view** displayed when clicking on "Open as Gantt view" in the Projects Overview List. You can choose filters, columns, sortings and more to configure the view. For more information on how the configuration works please refer to the instructions for the [work package table configuration](../../../user-guide/work-packages/work-package-table-configuration/) in the User Guide. 7. Do not forget to **save** your changes. ![image-20201005103659097](image-20201005103659097.png) diff --git a/docs/user-guide/gantt-chart/README.md b/docs/user-guide/gantt-chart/README.md index 7c5576daa4..1ec13125ad 100644 --- a/docs/user-guide/gantt-chart/README.md +++ b/docs/user-guide/gantt-chart/README.md @@ -69,7 +69,7 @@ Select the item to which you want to create a dependency. The precede and follow *OpenProject does not yet include a baseline feature to compare scheduled versions. However, we are aware of the need for it and documented it. Please check here https://community.openproject.com/projects/openproject/work_packages/26448/activity for an update.* -To find out about **how work packages behave**, when you move their predecessor or follower or change the date of a child work package please read our guide for the [Automatic and manual scheduling mode](/scheduling). +To find out about **how work packages behave**, when you move their predecessor or follower or change the date of a child work package please read our guide for the [Automatic and manual scheduling mode](scheduling). ## Understanding the colours and lines in the Gantt chart - A **blue line** connects two work packages, they are predecessor and follower. diff --git a/docs/user-guide/work-packages/create-work-package/README.md b/docs/user-guide/work-packages/create-work-package/README.md index 4e6c6a573d..0db28dd3b2 100644 --- a/docs/user-guide/work-packages/create-work-package/README.md +++ b/docs/user-guide/work-packages/create-work-package/README.md @@ -55,7 +55,7 @@ Click the green **Save** button. -To find out **how to create a child Work package** please click [here](../work-package-relations-hierachies/#adding-a-child-work-package). +To find out **how to create a child Work package** please click [here](../work-package-relations-hierarchies/#adding-a-child-work-package). From df7948d7afb0c52502257cc040d68a836d605d5c Mon Sep 17 00:00:00 2001 From: Markus Kahl Date: Mon, 2 Nov 2020 09:35:45 +0000 Subject: [PATCH 09/43] Updated docker tag to use correct release (11) --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 11a2964219..a34715f4ae 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ volumes: x-op-restart-policy: &restart_policy restart: unless-stopped x-op-image: &image - image: openproject/community:${TAG:-10} + image: openproject/community:${TAG:-11} x-op-app: &app <<: *image <<: *restart_policy From 541730ddd32963e91ac9fc4e715a847366958f53 Mon Sep 17 00:00:00 2001 From: ulferts Date: Mon, 2 Nov 2020 11:34:15 +0100 Subject: [PATCH 10/43] add documentation to list known client libraries (#8819) --- docs/api/apiv3/client-libraries/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 docs/api/apiv3/client-libraries/README.md diff --git a/docs/api/apiv3/client-libraries/README.md b/docs/api/apiv3/client-libraries/README.md new file mode 100644 index 0000000000..f7c9c5ad7b --- /dev/null +++ b/docs/api/apiv3/client-libraries/README.md @@ -0,0 +1,16 @@ +# API v3 client libraries + +We encourage developers from the community to develop client libraries for the OpenProject API in as many languages as possible and publish them for access by the public. That way, the grunt work of establishing the connectivity between a client and OpenProject can be reused and ideally, that work can be shouldered by many, freeing everybody to focus more on their specific features. + +While we cannot endorse or vet the libraries listed below we encourage their creation and acknowledge the value they add to OpenProject. + +If you need help developing a client library you can [contact us](mailto:support@openproject.com). If you want to have a client library listed in the list below you can again [contact us](mailto:support@openproject.com) or simply issue a PR with [changes to the source file](https://github.com/opf/openproject/blob/dev/docs/api/apiv3/client-libraries/README.md). + + +## JavaScript / TypeScript + +* [op-client](https://www.npmjs.com/package/op-client): "Client library for OpenProject server. Works both on Node.js and browser." + +## Excel + +* [OpenProjectExcel](https://github.com/opf/OpenProjectExcel): Synchronization between Excel-sheets and OpenProject. From 5a7176e6e15b1f875ca7c971465d018af474dedc Mon Sep 17 00:00:00 2001 From: ulferts Date: Mon, 2 Nov 2020 13:18:13 +0100 Subject: [PATCH 11/43] Fix/search for projects (#8815) * fix searching for projects * only provide search options active in the project --- app/controllers/search_controller.rb | 2 +- app/models/project.rb | 6 ++++++ spec/features/search_spec.rb | 25 ++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 5116f60d85..d95bc15a92 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -178,7 +178,7 @@ class SearchController < ApplicationController end def provision_gon - available_search_types = Redmine::Search.available_search_types.dup.push('all') + available_search_types = search_types.dup.push('all') gon.global_search = { search_term: @question, diff --git a/app/models/project.rb b/app/models/project.rb index 13daff9812..2f1d72dddf 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -148,6 +148,12 @@ class Project < ApplicationRecord project_key: 'id', permission: nil + # Necessary for acts_as_searchable which depends on the event_datetime method for sorting + acts_as_event title: Proc.new { |o| "#{Project.model_name.human}: #{o.name}" }, + url: Proc.new { |o| { controller: 'overviews/overviews', action: 'show', project_id: o } }, + author: nil, + datetime: :created_at + validates :name, presence: true, length: { maximum: 255 } diff --git a/spec/features/search_spec.rb b/spec/features/search_spec.rb index b23b7acc73..975c4ec100 100644 --- a/spec/features/search_spec.rb +++ b/spec/features/search_spec.rb @@ -167,7 +167,7 @@ describe 'Search', type: :feature, js: true, with_settings: { per_page_options: end end - describe 'work package search' do + describe 'search for work packages' do context 'search in all projects' do let(:params) { [project, { q: query, work_packages: 1 }] } @@ -342,6 +342,29 @@ describe 'Search', type: :feature, js: true, with_settings: { per_page_options: end end + describe 'search for projects' do + let!(:searched_for_project) { FactoryBot.create(:project, name: 'Searched for project') } + let!(:other_project) { FactoryBot.create(:project, name: 'Other project') } + + context 'globally' do + it 'finds the project' do + select_autocomplete(page.find('.top-menu-search--input'), + query: "Searched", + select_text: "In all projects ↵") + + within '.global-search--tabs' do + click_on 'Projects' + end + + expect(page) + .to have_link(searched_for_project.name) + + expect(page) + .to have_no_link(other_project.name) + end + end + end + describe 'pagination' do context 'project wide search' do it 'works' do From 37ace54ab3ce0732fa03c72a9a9248e47e8b5489 Mon Sep 17 00:00:00 2001 From: ulferts Date: Tue, 3 Nov 2020 09:01:15 +0100 Subject: [PATCH 12/43] bump puma (#8820) that way we will profit from the fix `Pass preloaded application into new workers if available when using preload_app` --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f339622409..c05c8a8d19 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -713,7 +713,7 @@ GEM eventmachine_httpserver http_parser.rb (~> 0.6.0) multi_json - puma (5.0.2) + puma (5.0.4) nio4r (~> 2.0) rack (2.2.3) rack-accept (0.4.5) From 0d2e54cf5601a33613e2611be6f96998fd9da295 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Tue, 3 Nov 2020 11:12:01 +0000 Subject: [PATCH 13/43] update locales from crowdin [ci skip] --- config/locales/crowdin/ja.yml | 14 +++++++------- config/locales/crowdin/js-ja.yml | 8 ++++---- modules/bim/config/locales/crowdin/ja.yml | 4 ++-- modules/boards/config/locales/crowdin/js-ja.yml | 6 +++--- modules/webhooks/config/locales/crowdin/ja.yml | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/config/locales/crowdin/ja.yml b/config/locales/crowdin/ja.yml index 541caf5ba6..53fc74f4db 100644 --- a/config/locales/crowdin/ja.yml +++ b/config/locales/crowdin/ja.yml @@ -2562,11 +2562,11 @@ ja: protocol_mismatch: title: 'プロトコル設定が一致しません' text_html: > - Your application is running with its protocol setting set to %{set_protocol}, but the request is an %{actual_protocol} request. This will result in errors! Go to System settings and change the "Protocol" setting to correct this. + アプリケーションはプロトコル設定を%{set_protocol}に設定していますが、リクエストは%{actual_protocol}です。システム設定でプロトコル設定を変更してください。 hostname_mismatch: - title: 'Hostname setting mismatch' + title: 'ホスト名の設定が一致しません' text_html: > - Your application is running with its host name setting set to %{set_hostname}, but the request is a %{actual_hostname} hostname. This will result in errors! Go to System settings and change the "Host name" setting to correct this. + アプリケーションはホスト名を%{set_hostname}に設定していますが、リクエストは%{actual_hostname}です。システム設定でホスト名の設定を変更してください。 menu_item: "メニュー項目" menu_item_setting: "可視性" wiki_menu_item_for: "Wikiページ\"%{title}\"のメニュー項目" @@ -2621,8 +2621,8 @@ ja: invalid_user_assigned_to_work_package: "選択されたユーザーは、この作業項目の'%{property}' にすることはできません。" start_date: "開始日は、親ワークパッケージに設定できません。" eprops: - invalid_gzip: "is invalid gzip: %{message}" - invalid_json: "is invalid json: %{message}" + invalid_gzip: "無効なgzipです: %{message}" + invalid_json: "無効なjsonです: %{message}" resources: schema: 'スキーマ' doorkeeper: @@ -2672,7 +2672,7 @@ ja: redirect_uri_html: > 許可されたURLで承認されたユーザーにリダイレクトできます。 1行に1エントリ。
デスクトップアプリケーションを登録する場合は、次のURLを使用してください。 confidential: "クライアントシークレットを機密にできる場所でアプリケーションが使用されるかどうかを確認します。 ネイティブモバイルアプリとシングルページアプリは機密とはみなされません。" - scopes: "Check the scopes you want the application to grant access to. If no scope is checked, api_v3 is assumed." + scopes: "アプリケーションにアクセスを許可するスコープをチェックします。チェックされていない場合、api_v3になる。" client_credential_user_id: "クライアントがこのアプリケーションを使用するときに偽装するためのオプションのユーザーIDです。 パブリックアクセスのみを許可するには空のままにします" register_intro: "OpenProject用のOAuth APIクライアントアプリケーションを開発している場合は、このフォームを使用してすべてのユーザーが使用できるように登録できます。" default_scopes: "" @@ -2688,7 +2688,7 @@ ja: このアプリケーションはあなたのOpenProjectアカウントへのアクセスを要求します。
次の権限が要求されています: scopes: api_v3: "Full API v3アクセス" - api_v3_text: "Application will receive full read & write access to the OpenProject API v3 to perform actions on your behalf." + api_v3_text: "アプリケーションはアクションを実行するためのOpenProject API v3へのフルアクセスが許可されます。" grants: created_date: "に承認済み" scopes: "権限" diff --git a/config/locales/crowdin/js-ja.yml b/config/locales/crowdin/js-ja.yml index d82fd75510..271717e235 100644 --- a/config/locales/crowdin/js-ja.yml +++ b/config/locales/crowdin/js-ja.yml @@ -269,7 +269,7 @@ ja: blocks: new_features: text_new_features: "新しい機能と製品の更新について表示する" - learn_about: "Learn more about the new features" + learn_about: "新機能の詳細はこちら" standard: learn_about_link: https://www.openproject.org/openproject-11-0-release current_new_feature_html: > @@ -379,7 +379,7 @@ ja: label_project_plural: "プロジェクト" label_visibility_settings: "表示の設定" label_quote_comment: "このコメントを引用" - label_recent: "Recent" + label_recent: "最新" label_reset: "リセット" label_remove_column: "列を削除" label_remove_columns: "選択した列を削除" @@ -522,7 +522,7 @@ ja: more_information: "詳細情報" nevermind: "無視" edit: - form_configuration: "Form Configuration" + form_configuration: "フォーム設定" projects: "プロジェクト" settings: "設定" time_entry: @@ -938,7 +938,7 @@ ja: child_work_packages: other: "%{count} の子ワークパッケージ" hour: - zero: "0 h" + zero: "0h" other: "%{count} 時間" zen_mode: button_activate: 'マナーモードをアクティブにする' diff --git a/modules/bim/config/locales/crowdin/ja.yml b/modules/bim/config/locales/crowdin/ja.yml index f3dadf17f0..a7a90275b1 100644 --- a/modules/bim/config/locales/crowdin/ja.yml +++ b/modules/bim/config/locales/crowdin/ja.yml @@ -66,7 +66,7 @@ ja: project_module_bim: "BCF" permission_view_linked_issues: "BCF チケットを表示" permission_manage_bcf: "BCF チケットのインポートと管理" - permission_delete_bcf: "Delete BCF issues" + permission_delete_bcf: "BCFチケットの削除" oauth: scopes: bcf_v2_1: "BCF v2.1 API へのフルアクセス" @@ -100,7 +100,7 @@ ja: snapshot_data_blank: "snapshot_data を提供する必要があります。" unsupported_key: "サポートされていない json プロパティが含まれています。" bim/bcf/issue: - uuid_already_taken: "Can't import this BCF issue as there already is another with the same GUID. Could it be that this BCF issue had already been imported into a different project?" + uuid_already_taken: "同じGUIDを持つ別のチケットが存在するため、BCFチケットをインポートできません。このBCFチケットは既に他のプロジェクトにインポートされていませんか?" ifc_models: label_ifc_models: 'IFCモデル' label_new_ifc_model: '新しいIFCモデル' diff --git a/modules/boards/config/locales/crowdin/js-ja.yml b/modules/boards/config/locales/crowdin/js-ja.yml index 1a448b580e..f9f008d72d 100644 --- a/modules/boards/config/locales/crowdin/js-ja.yml +++ b/modules/boards/config/locales/crowdin/js-ja.yml @@ -74,11 +74,11 @@ ja: subtasks: Select work package to add as a new list warning: status: | - There is currently no status available.
- Either there are none or they have all already been added to the board. + 利用可能な状態ではありません。
+ または、既にボードに追加されています。 assignee: There isn't any member matched with your filter value.
no_member: This project currently does not have any members that can be added.
- add_members: Add a new member to this project to select users again. + add_members: プロジェクトに新規メンバーを追加し 、再度ユーザーを選択してください。 configuration_modal: title: 'このボードの設定' display_settings: diff --git a/modules/webhooks/config/locales/crowdin/ja.yml b/modules/webhooks/config/locales/crowdin/ja.yml index d5f9d65b9a..f6a3bbbd49 100644 --- a/modules/webhooks/config/locales/crowdin/ja.yml +++ b/modules/webhooks/config/locales/crowdin/ja.yml @@ -18,7 +18,7 @@ ja: plural: Webhooks resources: time_entry: - name: "Time entry" + name: "タイムエントリ" outgoing: no_results_table: Webhookが定義されていません。 label_add_new: 新しいWebhookを追加 From ae2edad19b7f8ebda788bf5c33f9c480ccba5a24 Mon Sep 17 00:00:00 2001 From: ulferts Date: Tue, 3 Nov 2020 16:24:25 +0100 Subject: [PATCH 14/43] Fix/copy project wiki notifications (#8777) * rename to convey applicability to all journal notifications * adapt journal completed job to handle wiki content * remove empty module * create wiki_content mail service * introduce copy/create service and contract for wiki pages * specify set attributes and create contract for wiki pages * copy the content attributes * use wiki page create service when copying wiki * introduce specifc service for copying wiki pages The contract disables checks for permissions on the wiki page. The copy_projects permission should suffice to copy everthing in a project * copy wiki pages top down to rewrite hierarchy * limit copied attachments to copied type --- app/contracts/model_contract.rb | 10 +- app/contracts/wiki_pages/base_contract.rb | 77 +++++ app/contracts/wiki_pages/copy_contract.rb | 37 +++ app/contracts/wiki_pages/create_contract.rb | 39 +++ app/models/journal/aggregated_journal.rb | 2 +- app/models/wiki_content.rb | 44 +-- app/models/wiki_page.rb | 6 +- app/services/concerns/contracted.rb | 6 +- .../copy/concerns/copy_attachments.rb | 2 +- .../journal_notification_service.rb | 12 +- .../journal_wiki_mail_service.rb | 120 ++++++++ .../notifications/journal_wp_mail_service.rb | 2 - .../projects/copy/wiki_dependent_service.rb | 73 +++-- app/services/wiki_pages/copy_service.rb | 79 +++++ .../create_service.rb} | 15 +- .../wiki_pages/set_attributes_service.rb | 72 +++++ ...job.rb => notify_journal_completed_job.rb} | 26 +- config/initializers/subscribe_listeners.rb | 4 + config/locales/en.yml | 1 + lib/open_project/events.rb | 1 + .../contracts/time_entries/create_contract.rb | 2 +- .../time_entries/create_contract_spec.rb | 6 +- .../wiki_pages/create_contract_spec.rb | 69 +++++ .../wiki_pages/shared_contract_examples.rb | 162 ++++++++++ spec/factories/wiki_page_factory.rb | 4 +- spec/models/wiki_content_spec.rb | 31 +- .../api/v3/work_package_resource_spec.rb | 6 +- .../journal_notification_service_spec.rb | 11 +- .../journal_wiki_mail_service_spec.rb | 240 +++++++++++++++ .../projects/copy_service_integration_spec.rb | 11 +- .../copy_service_integration_spec.rb | 106 +++++++ .../wiki_pages/set_attributes_service_spec.rb | 110 +++++++ .../copy_service_integration_spec.rb | 2 +- ...ueue_work_package_notification_job_spec.rb | 253 ---------------- ..._journal_completed_job_integration_spec.rb | 284 ++++++++++++++++++ 35 files changed, 1546 insertions(+), 379 deletions(-) create mode 100644 app/contracts/wiki_pages/base_contract.rb create mode 100644 app/contracts/wiki_pages/copy_contract.rb create mode 100644 app/contracts/wiki_pages/create_contract.rb create mode 100644 app/services/notifications/journal_wiki_mail_service.rb create mode 100644 app/services/wiki_pages/copy_service.rb rename app/services/{notifications/journal_notifier.rb => wiki_pages/create_service.rb} (76%) create mode 100644 app/services/wiki_pages/set_attributes_service.rb rename app/workers/{enqueue_work_package_notification_job.rb => notify_journal_completed_job.rb} (79%) create mode 100644 spec/contracts/wiki_pages/create_contract_spec.rb create mode 100644 spec/contracts/wiki_pages/shared_contract_examples.rb create mode 100644 spec/services/notifications/journal_wiki_mail_service_spec.rb create mode 100644 spec/services/wiki_pages/copy_service_integration_spec.rb create mode 100644 spec/services/wiki_pages/set_attributes_service_spec.rb delete mode 100644 spec/workers/mail_notification_jobs/enqueue_work_package_notification_job_spec.rb create mode 100644 spec/workers/notify_journal_completed_job_integration_spec.rb diff --git a/app/contracts/model_contract.rb b/app/contracts/model_contract.rb index 7db867d6dc..6d29c23758 100644 --- a/app/contracts/model_contract.rb +++ b/app/contracts/model_contract.rb @@ -70,11 +70,11 @@ class ModelContract < Disposable::Twin end def property(name, options = {}, &block) - if twin = options.delete(:form) + if (twin = options.delete(:form)) options[:twin] = twin end - if validates_options = options[:validates] + if (validates_options = options[:validates]) validates name, validates_options end @@ -211,7 +211,7 @@ class ModelContract < Disposable::Twin end def attributes_changed_by_user - changed = model.changed + changed = changed_attributes if options[:changed_by_system] changed -= options[:changed_by_system] @@ -220,6 +220,10 @@ class ModelContract < Disposable::Twin changed end + def changed_attributes + model.changed + end + def collect_ancestor_attribute_aliases @ancestor_attribute_aliases ||= collect_ancestor_attributes(:attribute_aliases) end diff --git a/app/contracts/wiki_pages/base_contract.rb b/app/contracts/wiki_pages/base_contract.rb new file mode 100644 index 0000000000..c4b442bb46 --- /dev/null +++ b/app/contracts/wiki_pages/base_contract.rb @@ -0,0 +1,77 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +# Validates both the wiki page as well as its associated wiki content. The two are +# considered to be one outside of this contract. +module WikiPages + class BaseContract < ::ModelContract + attribute :wiki + attribute :title + attribute :slug + attribute :parent + attribute :text + attribute :protected + + validate :validate_author_is_set + validate :validate_wiki_is_set + validate :validate_content_is_set + validate :validate_user_edit_allowed + validate :validate_user_protect_permission + + private + + def validate_user_edit_allowed + if model.project && !user.allowed_to?(:edit_wiki_pages, model.project) || + (model.protected_was && !user.allowed_to?(:protect_wiki_pages)) + errors.add :base, :error_unauthorized + end + end + + def validate_author_is_set + errors.add :author, :blank if model.content&.author.nil? + end + + def validate_wiki_is_set + errors.add :wiki, :blank if model.wiki.nil? + end + + def validate_content_is_set + errors.add :content, :blank if model.content.nil? + end + + def validate_user_protect_permission + if model.protected_changed? && !user.allowed_to?(:protect_wiki_pages, model.project) + errors.add :protected, :error_unauthorized + end + end + + def changed_attributes + model.changed + (model.content&.changed || []) + end + end +end diff --git a/app/contracts/wiki_pages/copy_contract.rb b/app/contracts/wiki_pages/copy_contract.rb new file mode 100644 index 0000000000..2ffab6cbef --- /dev/null +++ b/app/contracts/wiki_pages/copy_contract.rb @@ -0,0 +1,37 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +module WikiPages + class CopyContract < CreateContract + # Disable check for edit_wiki_pages permission + def validate_user_edit_allowed; end + + # Disable check for protect_wiki_pages permission + def validate_user_protect_permission; end + end +end diff --git a/app/contracts/wiki_pages/create_contract.rb b/app/contracts/wiki_pages/create_contract.rb new file mode 100644 index 0000000000..a2ae99ea65 --- /dev/null +++ b/app/contracts/wiki_pages/create_contract.rb @@ -0,0 +1,39 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +module WikiPages + class CreateContract < BaseContract + validate :validate_user_current_user + + private + + def validate_user_current_user + errors.add :author, :not_current_user if model.content&.author != user + end + end +end diff --git a/app/models/journal/aggregated_journal.rb b/app/models/journal/aggregated_journal.rb index 6ddc0a53c3..77e6692181 100644 --- a/app/models/journal/aggregated_journal.rb +++ b/app/models/journal/aggregated_journal.rb @@ -76,7 +76,7 @@ class Journal::AggregatedJournal # Returns whether "notification-hiding" should be assumed for the given journal pair. # This leads to an aggregated journal effectively blocking notifications of an earlier journal, # because it "steals" the addition from its predecessor. See the specs section under - # "mail suppressing aggregation" (for EnqueueWorkPackageNotificationJob) for more details + # "mail suppressing aggregation" (for NotifyJournalCompletedJob) for more details def hides_notifications?(successor, predecessor) return false unless successor && predecessor return false if belong_to_different_groups?(predecessor, successor) diff --git a/app/models/wiki_content.rb b/app/models/wiki_content.rb index 893f2af963..58e25d0356 100644 --- a/app/models/wiki_content.rb +++ b/app/models/wiki_content.rb @@ -27,9 +27,9 @@ # See docs/COPYRIGHT.rdoc for more details. #++ -require 'zlib' - class WikiContent < ApplicationRecord + extend DeprecatedAlias + belongs_to :page, class_name: 'WikiPage', foreign_key: 'page_id' belongs_to :author, class_name: 'User', foreign_key: 'author_id' validates_length_of :comments, maximum: 255, allow_nil: true @@ -37,8 +37,6 @@ class WikiContent < ApplicationRecord attr_accessor :comments before_save :comments_to_journal_notes - after_create :send_content_added_mail - after_update :send_content_updated_mail, if: :saved_change_to_text? acts_as_journalized @@ -76,16 +74,7 @@ class WikiContent < ApplicationRecord super value.presence || '' end - # Returns the mail adresses of users that should be notified - def recipients - notified = project.notified_users - notified.select { |user| visible?(user) } - end - - # FIXME: Deprecate - def versions - journals - end + deprecated_alias :versions, :journals # REVIEW def version @@ -97,31 +86,4 @@ class WikiContent < ApplicationRecord def comments_to_journal_notes add_journal author, comments end - - def send_content_added_mail - return unless Setting.notified_events.include?('wiki_content_added') - - create_recipients.uniq.each do |user| - UserMailer.wiki_content_added(user, self, User.current).deliver_later - end - end - - def send_content_updated_mail - return unless Setting.notified_events.include?('wiki_content_updated') - - update_recipients.uniq.each do |user| - UserMailer.wiki_content_updated(user, self, User.current).deliver_later - end - end - - def create_recipients - recipients + - page.wiki.watcher_recipients - end - - def update_recipients - recipients + - page.wiki.watcher_recipients + - page.watcher_recipients - end end diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index c4b4157085..861e64d01a 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -217,11 +217,7 @@ class WikiPage < ApplicationRecord end def breadcrumb_title - if item = menu_item - item.title - else - title - end + menu_item&.title || title end def to_param diff --git a/app/services/concerns/contracted.rb b/app/services/concerns/contracted.rb index 73a169bf63..df46b04747 100644 --- a/app/services/concerns/contracted.rb +++ b/app/services/concerns/contracted.rb @@ -103,7 +103,11 @@ module Contracted end def changed_compared_to(prior_changes) - model.changed.select { |c| !prior_changes[c] || prior_changes[c].last != model.changes[c].last } + changed_attributes.select { |c| !prior_changes[c] || prior_changes[c].last != model.changes[c].last } + end + + def changed_attributes + model.changed end end end diff --git a/app/services/copy/concerns/copy_attachments.rb b/app/services/copy/concerns/copy_attachments.rb index e549b0fd4b..4dd53ca73d 100644 --- a/app/services/copy/concerns/copy_attachments.rb +++ b/app/services/copy/concerns/copy_attachments.rb @@ -5,7 +5,7 @@ module Copy ## # Tries to copy the given attachment between containers def copy_attachments(from_container_id, to_container_id, container_type) - Attachment.where(container_id: from_container_id).find_each do |old_attachment| + Attachment.where(container_id: from_container_id, container_type: container_type).find_each do |old_attachment| copied = old_attachment.dup old_attachment.file.copy_to(copied) diff --git a/app/services/notifications/journal_notification_service.rb b/app/services/notifications/journal_notification_service.rb index b3a38e3987..bfc8272722 100644 --- a/app/services/notifications/journal_notification_service.rb +++ b/app/services/notifications/journal_notification_service.rb @@ -30,18 +30,14 @@ class Notifications::JournalNotificationService class << self - include Notifications::JournalNotifier - def call(journal, send_mails) - if journal.journable_type == 'WorkPackage' - enqueue_work_package_notification(journal, send_mails) - end + enqueue_work_package_notification(journal, send_mails) if supported?(journal) end private def enqueue_work_package_notification(journal, send_mails) - EnqueueWorkPackageNotificationJob + NotifyJournalCompletedJob .set(wait_until: delivery_time) .perform_later(journal.id, send_mails) end @@ -49,5 +45,9 @@ class Notifications::JournalNotificationService def delivery_time Setting.journal_aggregation_time_minutes.to_i.minutes.from_now end + + def supported?(journal) + %w(WorkPackage WikiContent).include?(journal.journable_type) + end end end diff --git a/app/services/notifications/journal_wiki_mail_service.rb b/app/services/notifications/journal_wiki_mail_service.rb new file mode 100644 index 0000000000..a5d3523899 --- /dev/null +++ b/app/services/notifications/journal_wiki_mail_service.rb @@ -0,0 +1,120 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +class Notifications::JournalWikiMailService + class << self + def call(journal, send_mails) + new(journal) + .call(send_mails) + end + end + + attr_reader :journal + + def initialize(journal) + @journal = journal + end + + def call(send_mails) + return unless send_mail?(send_mails) + + if journal.initial? + send_content_added_mail + else + send_content_updated_mail + end + end + + private + + def send_mail?(send_mails) + send_mails && ::UserMailer.perform_deliveries && !journal.noop? + end + + def send_content_added_mail + send_content(create_recipients, :wiki_content_added) + end + + def send_content_updated_mail + send_content(update_recipients, :wiki_content_updated) + end + + def notification_disabled?(name) + !Setting.notified_events.include?(name) + end + + # Returns the mail addresses of users that should be notified + def recipients + project + .notified_users + .select { |user| wiki_content.visible?(user) } + end + + def send_content(recipients, method) + return if notification_disabled?(method.to_s) + + recipients.uniq.each do |user| + UserMailer + .send(method, user, wiki_content, journal_user) + .deliver_later + end + end + + def create_recipients + recipients + + wiki.watcher_recipients + end + + def update_recipients + recipients + + wiki.watcher_recipients + + page.watcher_recipients + end + + def wiki_content + journal.journable + end + + def page + wiki_content.page + end + + def wiki + page.wiki + end + + def project + wiki.project + end + + def journal_user + journal.user || DeletedUser.first + end +end diff --git a/app/services/notifications/journal_wp_mail_service.rb b/app/services/notifications/journal_wp_mail_service.rb index ea195b03b0..47b3e3e28c 100644 --- a/app/services/notifications/journal_wp_mail_service.rb +++ b/app/services/notifications/journal_wp_mail_service.rb @@ -30,8 +30,6 @@ class Notifications::JournalWpMailService class << self - include Notifications::JournalNotifier - def call(journal, send_mails) journal_complete_mail(journal, send_mails) end diff --git a/app/services/projects/copy/wiki_dependent_service.rb b/app/services/projects/copy/wiki_dependent_service.rb index 9840fee5b5..eb74a65705 100644 --- a/app/services/projects/copy/wiki_dependent_service.rb +++ b/app/services/projects/copy/wiki_dependent_service.rb @@ -46,47 +46,72 @@ module Projects::Copy target.wiki.wiki_menu_items.delete_all copy_wiki_pages(params) - copy_wiki_menu_items(params) + copy_wiki_menu_items end # Copies wiki pages from +project+, requires a wiki to be already set def copy_wiki_pages(params) wiki_pages_map = {} - source.wiki.pages.find_each do |page| - # Skip pages without content - next if page.content.nil? - - new_wiki_content = WikiContent.new(page.content.attributes.dup.except('id', 'page_id', 'updated_at')) - attributes = page - .attributes.dup.except('id', 'wiki_id', 'created_on', 'parent_id') - .merge(content: new_wiki_content) - - new_wiki_page = target.wiki.pages.create attributes - wiki_pages_map[page] = new_wiki_page - end - - # Save the wiki - target.wiki.save - - # Reproduce page hierarchy - source.project.wiki.pages.each do |page| - if page.parent_id && wiki_pages_map[page] - wiki_pages_map[page].parent = wiki_pages_map[page.parent] - wiki_pages_map[page].save - end + # Copying top down so that the hierarchy (parent attribute) + # can be rewritten along the way. + pages_top_down do |page| + new_parent = wiki_pages_map[page.parent] + wiki_pages_map[page] = copy_wiki_page(page, new_parent) end # Copy attachments if should_copy?(params, :wiki_page_attachments) wiki_pages_map.each do |old_page, new_page| + next unless old_page && new_page + copy_attachments(old_page.id, new_page.id, new_page.class.name) end end end + def copy_wiki_page(source_page, new_parent) + # Skip pages without content + return if source_page.content.nil? + + # Relying on ActionMailer::Base.perform_deliveries is violating cohesion + # but the value is currently not otherwise provided + service_call = WikiPages::CopyService + .new(user: User.current, model: source_page, contract_class: WikiPages::CopyContract) + .call(wiki: target.wiki, + parent: new_parent, + send_notifications: ActionMailer::Base.perform_deliveries) + + if service_call.success? + service_call.result + else + add_error!(source_page, service_call.errors) + Rails.logger.warn do + "Project#copy_wiki_page: wiki_page ##{source_page.id} could not be copied: #{service_call.message}" + end + + nil + end + end + + def pages_top_down(&block) + id_by_parent = source.wiki.pages.pluck(:parent_id, :id).inject(Hash.new { [] }) { |h, (k, v)| h[k] += [v]; h } + + yield_downwards(id_by_parent, nil, &block) + end + + def yield_downwards(map, current, &block) + map[current].each do |child_id| + child = source.wiki.pages.find(child_id) + + yield child + + yield_downwards(map, child_id, &block) + end + end + # Copies wiki_menu_items from +project+, requires a wiki to be already set - def copy_wiki_menu_items(params) + def copy_wiki_menu_items wiki_menu_items_map = {} source.wiki.wiki_menu_items.each do |item| diff --git a/app/services/wiki_pages/copy_service.rb b/app/services/wiki_pages/copy_service.rb new file mode 100644 index 0000000000..94e6c0709e --- /dev/null +++ b/app/services/wiki_pages/copy_service.rb @@ -0,0 +1,79 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +class WikiPages::CopyService + include ::Shared::ServiceContext + include Contracted + + attr_accessor :user, + :model, + :contract_class + + def initialize(user:, model:, contract_class: WikiPages::CreateContract) + self.user = user + self.model = model + self.contract_class = contract_class + end + + def call(send_notifications: true, **attributes) + in_context(model, send_notifications) do + copy(attributes) + end + end + + protected + + def copy(attribute_override) + attributes = copied_attributes(attribute_override) + + create(attributes) + end + + def create(attributes) + WikiPages::CreateService + .new(user: user, + contract_class: contract_class) + .call(attributes.symbolize_keys) + end + + # Copy the wiki page attributes together with the wiki page content attributes + def copied_attributes(override) + model + .attributes + .merge(model.content.attributes) + .slice(*writable_attributes) + .merge(override) + end + + def writable_attributes + instantiate_contract(model, user) + .writable_attributes + end +end diff --git a/app/services/notifications/journal_notifier.rb b/app/services/wiki_pages/create_service.rb similarity index 76% rename from app/services/notifications/journal_notifier.rb rename to app/services/wiki_pages/create_service.rb index 214a83c562..9183fe0fdc 100644 --- a/app/services/notifications/journal_notifier.rb +++ b/app/services/wiki_pages/create_service.rb @@ -28,18 +28,5 @@ # See docs/COPYRIGHT.rdoc for more details. #++ -module Notifications::JournalNotifier - private - - def find_aggregated_journal_for(raw_journal) - Journal::AggregatedJournal.with_version(raw_journal) - end - - def notify_journal_complete(journal, send_mails) - OpenProject::Notifications.send( - OpenProject::Events::AGGREGATED_WORK_PACKAGE_JOURNAL_READY, - journal: journal, - send_mail: send_mails - ) - end +class WikiPages::CreateService < ::BaseServices::Create end diff --git a/app/services/wiki_pages/set_attributes_service.rb b/app/services/wiki_pages/set_attributes_service.rb new file mode 100644 index 0000000000..a952f2f44b --- /dev/null +++ b/app/services/wiki_pages/set_attributes_service.rb @@ -0,0 +1,72 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +# Handles setting the attributes of a wiki page. +# The wiki page is treated as one single entity although the data layer separates +# between the page and the content. +# +# In the long run, those two should probably be unified on the data layer as well. +# +# Attributes for both the page as well as for the content are accepted. +class WikiPages::SetAttributesService < ::BaseServices::SetAttributes + private + + def set_attributes(params) + content_params, page_params = split_page_and_content_params(params.with_indifferent_access) + + set_page_attributes(page_params) + + set_default_attributes(params) if model.new_record? + + set_content_attributes(content_params) + end + + def set_page_attributes(params) + model.attributes = params + end + + def set_default_attributes(_params) + change_by_system do + model.build_content author: user + end + end + + def set_content_attributes(params) + model.content.attributes = params + end + + def split_page_and_content_params(params) + params.partition { |p, _| WikiContent.column_names.include?(p) }.map(&:to_h) + end + + def changed_attributes + super + (model.content&.changed || []) + end +end diff --git a/app/workers/enqueue_work_package_notification_job.rb b/app/workers/notify_journal_completed_job.rb similarity index 79% rename from app/workers/enqueue_work_package_notification_job.rb rename to app/workers/notify_journal_completed_job.rb index ccbda53c8b..9ee6fe4da0 100644 --- a/app/workers/enqueue_work_package_notification_job.rb +++ b/app/workers/notify_journal_completed_job.rb @@ -27,12 +27,9 @@ # See docs/COPYRIGHT.rdoc for more details. #++ -# Enqueues -class EnqueueWorkPackageNotificationJob < ApplicationJob +class NotifyJournalCompletedJob < ApplicationJob queue_with_priority :notification - include Notifications::JournalNotifier - def perform(journal_id, send_mails) # This is caused by a DJ job running as ActiveJob @journal_id = journal_id @@ -72,6 +69,16 @@ class EnqueueWorkPackageNotificationJob < ApplicationJob notify_journal_complete(aggregated_predecessor, @send_mails) end + def find_aggregated_journal_for(raw_journal) + Journal::AggregatedJournal.with_version(raw_journal) + end + + def notify_journal_complete(journal, send_mails) + OpenProject::Notifications.send(notification_event_type(journal), + journal: journal, + send_mail: send_mails) + end + def raw_journal @raw_journal ||= Journal.find_by(id: @journal_id) end @@ -79,4 +86,15 @@ class EnqueueWorkPackageNotificationJob < ApplicationJob def work_package @work_package ||= raw_journal.journable end + + def notification_event_type(journal) + case journal.journable_type + when WikiContent.name + OpenProject::Events::AGGREGATED_WIKI_JOURNAL_READY + when WorkPackage.name + OpenProject::Events::AGGREGATED_WORK_PACKAGE_JOURNAL_READY + else + raise 'Unsupported journal created event type' + end + end end diff --git a/config/initializers/subscribe_listeners.rb b/config/initializers/subscribe_listeners.rb index 46d16e0720..152982da7b 100644 --- a/config/initializers/subscribe_listeners.rb +++ b/config/initializers/subscribe_listeners.rb @@ -36,6 +36,10 @@ OpenProject::Notifications.subscribe(OpenProject::Events::AGGREGATED_WORK_PACKAG Notifications::JournalWpMailService.call(payload[:journal], payload[:send_mail]) end +OpenProject::Notifications.subscribe(OpenProject::Events::AGGREGATED_WIKI_JOURNAL_READY) do |payload| + Notifications::JournalWikiMailService.call(payload[:journal], payload[:send_mail]) +end + OpenProject::Notifications.subscribe('watcher_added') do |payload| WatcherAddedNotificationMailer.handle_watcher(payload[:watcher], payload[:watcher_setter]) end diff --git a/config/locales/en.yml b/config/locales/en.yml index a8a4155cc4..d097951cb1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -588,6 +588,7 @@ en: invalid_url: 'is not a valid URL.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "must be less than or equal to %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "is not a number." diff --git a/lib/open_project/events.rb b/lib/open_project/events.rb index b815ee3511..ff65db4868 100644 --- a/lib/open_project/events.rb +++ b/lib/open_project/events.rb @@ -38,6 +38,7 @@ module OpenProject # @see OpenProject::Notifications module Events AGGREGATED_WORK_PACKAGE_JOURNAL_READY = "aggregated_work_package_journal_ready".freeze + AGGREGATED_WIKI_JOURNAL_READY = "aggregated_wiki_journal_ready".freeze NEW_TIME_ENTRY_CREATED = "new_time_entry_created".freeze PROJECT_CREATED = "project_created".freeze diff --git a/modules/costs/app/contracts/time_entries/create_contract.rb b/modules/costs/app/contracts/time_entries/create_contract.rb index ebb048df91..5dede79d2f 100644 --- a/modules/costs/app/contracts/time_entries/create_contract.rb +++ b/modules/costs/app/contracts/time_entries/create_contract.rb @@ -42,7 +42,7 @@ module TimeEntries end def validate_user_current_user - errors.add :user_id, :invalid if model.user != user + errors.add :user_id, :not_current_user if model.user != user end end end diff --git a/modules/costs/spec/contracts/time_entries/create_contract_spec.rb b/modules/costs/spec/contracts/time_entries/create_contract_spec.rb index 7373afe672..68d9f446b0 100644 --- a/modules/costs/spec/contracts/time_entries/create_contract_spec.rb +++ b/modules/costs/spec/contracts/time_entries/create_contract_spec.rb @@ -62,7 +62,7 @@ describe TimeEntries::CreateContract do let(:time_entry_user) { other_user } it 'is invalid' do - expect_valid(false, user_id: %i(invalid)) + expect_valid(false, user_id: %i(not_current_user)) end end @@ -71,7 +71,7 @@ describe TimeEntries::CreateContract do let(:changed_by_system) { %w() } it 'is invalid' do - expect_valid(false, user_id: %i(invalid error_readonly)) + expect_valid(false, user_id: %i(not_current_user error_readonly)) end end @@ -79,7 +79,7 @@ describe TimeEntries::CreateContract do let(:time_entry_user) { nil } it 'is invalid' do - expect_valid(false, user_id: %i(blank invalid)) + expect_valid(false, user_id: %i(blank not_current_user)) end end end diff --git a/spec/contracts/wiki_pages/create_contract_spec.rb b/spec/contracts/wiki_pages/create_contract_spec.rb new file mode 100644 index 0000000000..392c5c9de9 --- /dev/null +++ b/spec/contracts/wiki_pages/create_contract_spec.rb @@ -0,0 +1,69 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +require 'spec_helper' +require_relative './shared_contract_examples' + +describe WikiPages::CreateContract do + it_behaves_like 'wiki page contract' do + let(:page) do + WikiPage.new(wiki: page_wiki, + title: page_title, + slug: page_slug, + protected: page_protected, + parent: page_parent).tap do |page| + page.build_content text: page_text, + author: page_author + allow(page) + .to receive(:project) + .and_return(page_wiki&.project) + end + end + let(:changed_by_system) { %w(author_id) } + + subject(:contract) { described_class.new(page, current_user, options: { changed_by_system: changed_by_system }) } + + describe '#validation' do + context 'if the author is different from the current user' do + let(:page_author) { FactoryBot.build_stubbed(:user) } + + it 'is invalid' do + expect_valid(false, author: :not_current_user) + end + end + + context 'if the author was not set by system' do + let(:changed_by_system) { %w() } + + it 'is invalid' do + expect_valid(false, author_id: %i(error_readonly)) + end + end + end + end +end diff --git a/spec/contracts/wiki_pages/shared_contract_examples.rb b/spec/contracts/wiki_pages/shared_contract_examples.rb new file mode 100644 index 0000000000..201798de09 --- /dev/null +++ b/spec/contracts/wiki_pages/shared_contract_examples.rb @@ -0,0 +1,162 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +require 'spec_helper' + +shared_examples_for 'wiki page contract' do + let(:current_user) do + FactoryBot.build_stubbed(:user) do |user| + allow(user) + .to receive(:allowed_to?) do |permission, permission_project| + permissions.include?(permission) && page_wiki.project == permission_project + end + end + end + let(:page_wiki) { FactoryBot.build_stubbed(:wiki) } + let(:page_author) { current_user } + let(:page_title) { 'Wiki title'} + let(:page_slug) { 'wiki slug'} + let(:page_protected) { false } + let(:page_parent) { nil } + let(:page_text) { 'Wiki text' } + let(:permissions) { %i[view_wiki edit_wiki_pages] } + + def expect_valid(valid, symbols = {}) + expect(contract.validate).to eq(valid) + + symbols.each do |key, arr| + expect(contract.errors.symbols_for(key)).to match_array arr + end + end + + describe 'validation' do + shared_examples 'is valid' do + it 'is valid' do + expect_valid(true) + end + end + + it_behaves_like 'is valid' + + context 'if the title is nil' do + let(:page_title) { nil } + + it 'is invalid' do + expect_valid(false, title: :blank) + end + end + + context 'if the slug is nil' do + let(:page_slug) { nil } + + it_behaves_like 'is valid' + end + + context 'if the wiki is nil' do + let(:page_wiki) { nil } + + it 'is invalid' do + expect_valid(false, wiki: :blank) + end + end + + context 'if the content is nil' do + it 'is invalid' do + page.content = nil + + expect_valid(false, content: :blank) + end + end + + context 'if the parent is in the same wiki' do + let(:page_parent) { FactoryBot.build_stubbed(:wiki_page, wiki: page_wiki) } + + it_behaves_like 'is valid' + end + + context 'if the parent is in a different wiki' do + let(:page_parent) { FactoryBot.build_stubbed(:wiki_page) } + + it 'is invalid' do + expect_valid(false, parent_title: :not_same_project) + end + end + + context 'if the parent is a child of the page (circular dependency)' do + it 'is invalid' do + page.parent = FactoryBot.build_stubbed(:wiki_page, wiki: page_wiki).tap do |parent| + # Using stubbing here to avoid infinite loops + allow(parent) + .to receive(:ancestors) + .and_return([page]) + end + + expect_valid(false, parent_title: :circular_dependency) + end + end + + context 'if the parent the page itself (circular dependency' do + it 'is invalid' do + page.parent = page + + expect_valid(false, parent_title: :circular_dependency) + end + end + + context 'if the author is nil' do + let(:page_author) { nil } + + it 'is invalid' do + expect_valid(false, author: %i[blank not_current_user]) + end + end + + context 'if the user lacks permission' do + let(:permissions) { %i[view_wiki] } + + it 'is invalid' do + expect_valid(false, base: :error_unauthorized) + end + end + + context 'if the page is protected and the user has permission to protect pages' do + let(:permissions) { %i[view_wiki edit_wiki_pages protect_wiki_pages] } + let(:page_protected) { true } + + it_behaves_like 'is valid' + end + + context 'if the page is protected and the user lacks permission to protect pages' do + let(:page_protected) { true } + + it 'is invalid' do + expect_valid(false, protected: :error_unauthorized) + end + end + end +end diff --git a/spec/factories/wiki_page_factory.rb b/spec/factories/wiki_page_factory.rb index eae4f07cfc..889d9c6a09 100644 --- a/spec/factories/wiki_page_factory.rb +++ b/spec/factories/wiki_page_factory.rb @@ -32,9 +32,7 @@ FactoryBot.define do sequence(:title) { |n| "Wiki Page No. #{n}" } factory :wiki_page_with_content do - callback(:after_build) do |wiki_page| - wiki_page.content = FactoryBot.build :wiki_content, page: wiki_page - end + content { association :wiki_content, page: instance } end end end diff --git a/spec/models/wiki_content_spec.rb b/spec/models/wiki_content_spec.rb index 057b02791a..8eb06959cb 100644 --- a/spec/models/wiki_content_spec.rb +++ b/spec/models/wiki_content_spec.rb @@ -32,11 +32,22 @@ describe WikiContent, type: :model do let(:wiki) { FactoryBot.create(:wiki) } let(:page) { FactoryBot.create(:wiki_page, wiki: wiki) } let(:content) { FactoryBot.create(:wiki_content, page: page, author: author) } - let(:author) { FactoryBot.create(:user, member_in_project: wiki.project, member_with_permissions: [:view_wiki_pages]) } + let(:author) do + FactoryBot.create(:user, + member_in_project: wiki.project, + member_with_permissions: [:view_wiki_pages], + mail_notification: nil) + end + let(:project_watcher) do + FactoryBot.create(:user, + member_in_project: wiki.project, + member_with_permissions: [:view_wiki_pages]) + end let(:page_watcher) do watcher = FactoryBot.create(:user, member_in_project: wiki.project, - member_with_permissions: [:view_wiki_pages]) + member_with_permissions: [:view_wiki_pages], + mail_notification: nil) page.watcher_users << watcher watcher @@ -45,7 +56,8 @@ describe WikiContent, type: :model do let(:wiki_watcher) do watcher = FactoryBot.create(:user, member_in_project: wiki.project, - member_with_permissions: [:view_wiki_pages]) + member_with_permissions: [:view_wiki_pages], + mail_notification: nil) wiki.watcher_users << watcher watcher @@ -54,22 +66,29 @@ describe WikiContent, type: :model do describe '#save (create)' do let(:content) { FactoryBot.build(:wiki_content, page: page) } - it 'sends mails to the wiki`s watchers', with_settings: { notified_events: ['wiki_content_added'] } do + it 'sends mails to the wiki`s watchers and project all watchers', with_settings: { notified_events: ['wiki_content_added'] } do wiki_watcher + project_watcher expect { content.save! perform_enqueued_jobs } .to change { ActionMailer::Base.deliveries.size } - .by(1) + .by(2) end end describe '#save (update)' do - it 'sends mails to the author, the watchers and the wiki`s watchers', with_settings: { notified_events: ['wiki_content_updated'] } do + it 'sends mails to the watchers, the wiki`s watchers and project all watchers', + with_settings: { notified_events: ['wiki_content_updated'], journal_aggregation_time_minutes: 0 } do page_watcher wiki_watcher + project_watcher + + content + perform_enqueued_jobs + content.text = 'My new content' expect { diff --git a/spec/requests/api/v3/work_package_resource_spec.rb b/spec/requests/api/v3/work_package_resource_spec.rb index 32e886443c..01db2aba6b 100644 --- a/spec/requests/api/v3/work_package_resource_spec.rb +++ b/spec/requests/api/v3/work_package_resource_spec.rb @@ -404,7 +404,7 @@ describe 'API v3 Work package resource', context 'not set' do let(:params) { update_params } - it { expect(EnqueueWorkPackageNotificationJob).to have_been_enqueued.at_least(1) } + it { expect(NotifyJournalCompletedJob).to have_been_enqueued.at_least(1) } end context 'disabled' do @@ -412,7 +412,7 @@ describe 'API v3 Work package resource', let(:params) { update_params } it do - expect(EnqueueWorkPackageNotificationJob) + expect(NotifyJournalCompletedJob) .to have_been_enqueued .at_least(1) end @@ -423,7 +423,7 @@ describe 'API v3 Work package resource', let(:params) { update_params } it do - expect(EnqueueWorkPackageNotificationJob) + expect(NotifyJournalCompletedJob) .to have_been_enqueued .at_least(1) end diff --git a/spec/services/notifications/journal_notification_service_spec.rb b/spec/services/notifications/journal_notification_service_spec.rb index 5b0d1de7c4..f1e25f64ee 100644 --- a/spec/services/notifications/journal_notification_service_spec.rb +++ b/spec/services/notifications/journal_notification_service_spec.rb @@ -29,7 +29,6 @@ require 'spec_helper' describe Notifications::JournalNotificationService do - let(:journable) { FactoryBot.build_stubbed(:stubbed_work_package) } let(:journal) { FactoryBot.build_stubbed(:journal, journable: journable) } let(:send_mails) { true } @@ -42,7 +41,7 @@ describe Notifications::JournalNotificationService do notification_set = double('notification set') - expect(EnqueueWorkPackageNotificationJob) + expect(NotifyJournalCompletedJob) .to receive(:set) .with(wait_until: Setting.journal_aggregation_time_minutes.to_i.minutes.from_now) .and_return(notification_set) @@ -59,7 +58,7 @@ describe Notifications::JournalNotificationService do shared_examples_for 'enqueues no notification' do before do - expect(EnqueueWorkPackageNotificationJob) + expect(NotifyJournalCompletedJob) .not_to receive(:set) end @@ -69,6 +68,12 @@ describe Notifications::JournalNotificationService do end context 'for a work package journal' do + let(:journable) { FactoryBot.build_stubbed(:stubbed_work_package) } + it_behaves_like 'enqueues a notification' + end + + context 'for a wiki content journal' do + let(:journable) { FactoryBot.build_stubbed(:wiki_content) } it_behaves_like 'enqueues a notification' end diff --git a/spec/services/notifications/journal_wiki_mail_service_spec.rb b/spec/services/notifications/journal_wiki_mail_service_spec.rb new file mode 100644 index 0000000000..f18a413a33 --- /dev/null +++ b/spec/services/notifications/journal_wiki_mail_service_spec.rb @@ -0,0 +1,240 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ +require 'spec_helper' + +describe Notifications::JournalWikiMailService do + let(:project) do + FactoryBot.build_stubbed(:project).tap do |p| + allow(p) + .to receive(:notified_users) + .and_return([project_notified_user_with_permission, project_notified_user_wo_permission]) + end + end + let(:wiki) do + FactoryBot.build_stubbed(:wiki, project: project).tap do |w| + allow(w) + .to receive(:watcher_recipients) + .and_return([wiki_watcher_user]) + end + end + let(:wiki_page) do + FactoryBot.build_stubbed(:wiki_page, wiki: wiki).tap do |w| + allow(w) + .to receive(:watcher_recipients) + .and_return([wiki_page_watcher_user]) + end + end + let(:wiki_content) do + FactoryBot.build_stubbed(:wiki_content, page: wiki_page).tap do |wc| + allow(wc) + .to receive(:visible?) + .with(project_notified_user_with_permission) + .and_return(true) + + allow(wc) + .to receive(:visible?) + .with(project_notified_user_wo_permission) + .and_return(false) + end + end + let(:journal) do + FactoryBot.build_stubbed(:wiki_content_journal, journable: wiki_content, user: current_user).tap do |j| + allow(j) + .to receive(:initial?) + .and_return(journal_initial) + + allow(j) + .to receive(:noop?) + .and_return(journal_noop) + end + end + let(:journal_initial) { true } + let(:journal_noop) { false } + + let(:notification_setting) { %w(wiki_content_added wiki_content_updated) } + + let(:current_user) do + FactoryBot.build_stubbed(:user) + end + + let(:project_notified_user_with_permission) do + FactoryBot.build_stubbed(:user) + end + + let(:project_notified_user_wo_permission) do + FactoryBot.build_stubbed(:user) + end + + let(:wiki_watcher_user) do + FactoryBot.build_stubbed(:user) + end + + let(:wiki_page_watcher_user) do + FactoryBot.build_stubbed(:user) + end + + context '.call' do + let(:subject) { described_class.call(journal, send_mails) } + let(:send_mails) { true } + + before do + allow(Setting).to receive(:notified_events).and_return(notification_setting) + end + + shared_examples_for 'sends no mails' do + it 'sends no mails' do + expect(UserMailer) + .not_to receive(:wiki_content_updated) + + expect(UserMailer) + .not_to receive(:wiki_content_added) + + subject + end + end + + context 'with the settings allowing email sending for newly added content' do + let(:notification_setting) { %w(wiki_content_added) } + + context 'for an initial journal' do + let(:journal_initial) { true } + + it 'sends mails to users listening on all changes and to watchers of the wiki' do + [project_notified_user_with_permission, wiki_watcher_user].each do |u| + mailer = double('mailer') + + expect(UserMailer) + .to receive(:wiki_content_added) + .with(u, wiki_content, current_user) + .and_return(mailer) + + expect(mailer) + .to receive(:deliver_later) + end + + subject + end + + context 'with send_mails set to false' do + let(:send_mails) { false } + + it_behaves_like 'sends no mails' + end + + context 'with perform_deliveries set to false' do + before do + allow(UserMailer) + .to receive(:perform_deliveries) + .and_return(false) + end + + it_behaves_like 'sends no mails' + end + + context 'with the journal being a noop' do + let(:journal_noop) { true } + + it_behaves_like 'sends no mails' + end + end + + context 'for a non initial journal' do + let(:journal_initial) { false } + + it_behaves_like 'sends no mails' + end + end + + context 'with the settings allowing email sending for updated content' do + let(:notification_setting) { %w(wiki_content_updated) } + + context 'for a non initial journal' do + let(:journal_initial) { false } + + it 'sends mails to users listening on all changes and to watchers of the wiki' do + [project_notified_user_with_permission, wiki_watcher_user, wiki_page_watcher_user].each do |u| + mailer = double('mailer') + + expect(UserMailer) + .to receive(:wiki_content_updated) + .with(u, wiki_content, current_user) + .and_return(mailer) + + expect(mailer) + .to receive(:deliver_later) + end + + subject + end + + context 'with send_mails set to false' do + let(:send_mails) { false } + + it_behaves_like 'sends no mails' + end + + context 'with perform_deliveries set to false' do + before do + allow(UserMailer) + .to receive(:perform_deliveries) + .and_return(false) + end + + it_behaves_like 'sends no mails' + end + + context 'with the journal being a noop' do + let(:journal_noop) { true } + + it_behaves_like 'sends no mails' + end + end + + context 'for an initial journal' do + let(:journal_initial) { true } + + it_behaves_like 'sends no mails' + end + end + end + + it 'listener is subscribed' do + journal = double('journal') + send_mail = true + + expect(Notifications::JournalWikiMailService) + .to receive(:call) + .with(journal, send_mail) + + OpenProject::Notifications.send(OpenProject::Events::AGGREGATED_WIKI_JOURNAL_READY, + journal: journal, + send_mail: send_mail) + end +end diff --git a/spec/services/projects/copy_service_integration_spec.rb b/spec/services/projects/copy_service_integration_spec.rb index 37a9d00a39..d8a3c8cb62 100644 --- a/spec/services/projects/copy_service_integration_spec.rb +++ b/spec/services/projects/copy_service_integration_spec.rb @@ -37,6 +37,7 @@ describe Projects::CopyService, 'integration', type: :model do shared_let(:source_category) { FactoryBot.create :category, project: source, name: 'Stock management' } shared_let(:source_version) { FactoryBot.create :version, project: source, name: 'Version A' } shared_let(:source_wiki_page) { FactoryBot.create(:wiki_page_with_content, wiki: source.wiki) } + shared_let(:source_child_wiki_page) { FactoryBot.create(:wiki_page_with_content, wiki: source.wiki, parent: source_wiki_page) } shared_let(:source_forum) { FactoryBot.create(:forum, project: source) } shared_let(:source_topic) { FactoryBot.create(:message, forum: source_forum) } @@ -86,10 +87,11 @@ describe Projects::CopyService, 'integration', type: :model do expect(project_copy.forums.count).to eq 1 expect(project_copy.forums.first.messages.count).to eq 1 expect(project_copy.wiki).to be_present - expect(project_copy.wiki.pages.count).to eq 1 + expect(project_copy.wiki.pages.count).to eq 2 expect(project_copy.queries.count).to eq 1 expect(project_copy.versions.count).to eq 1 - expect(project_copy.wiki.pages.first.content.text).to eq source_wiki_page.content.text + expect(project_copy.wiki.pages.root.content.text).to eq source_wiki_page.content.text + expect(project_copy.wiki.pages.leaves.first.content.text).to eq source_child_wiki_page.content.text expect(project_copy.wiki.start_page).to eq 'Wiki' # Cleared attributes @@ -229,10 +231,11 @@ describe Projects::CopyService, 'integration', type: :model do describe '#copy_wiki' do it 'will not copy wiki pages without content' do source.wiki.pages << FactoryBot.create(:wiki_page) - expect(source.wiki.pages.count).to eq 2 + expect(source.wiki.pages.count).to eq 3 expect(subject).to be_success - expect(project_copy.wiki.pages.count).to eq 1 + expect(subject.errors).to be_empty + expect(project_copy.wiki.pages.count).to eq 2 end it 'will copy menu items' do diff --git a/spec/services/wiki_pages/copy_service_integration_spec.rb b/spec/services/wiki_pages/copy_service_integration_spec.rb new file mode 100644 index 0000000000..9816023b81 --- /dev/null +++ b/spec/services/wiki_pages/copy_service_integration_spec.rb @@ -0,0 +1,106 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +require 'spec_helper' + +describe WikiPages::CopyService, 'integration', type: :model do + let(:user) do + FactoryBot.create(:user) do |user| + FactoryBot.create(:member, + project: source_project, + principal: user, + roles: [role]) + + FactoryBot.create(:member, + project: sink_project, + principal: user, + roles: [role]) + end + end + + let(:role) do + FactoryBot.create(:role, + permissions: permissions) + end + + let(:permissions) do + %i(view_wiki edit_wiki_pages) + end + let(:source_wiki) { FactoryBot.create(:wiki) } + let(:source_project) { source_wiki.project } + + let(:sink_wiki) { FactoryBot.create(:wiki) } + let(:sink_project) { sink_wiki.project } + + let(:wiki_page) { FactoryBot.create(:wiki_page_with_content) } + + let(:instance) { described_class.new(model: wiki_page, user: user) } + + let(:attributes) { {} } + + let(:copy) do + service_result + .result + end + let(:service_result) do + instance + .call(**attributes) + end + + before do + login_as(user) + end + + describe '#call' do + shared_examples_for 'copied wiki page' do + it 'is a success' do + expect(service_result) + .to be_success + end + + it 'is a new, persisted wiki page' do + expect(copy).to be_persisted + expect(copy.id).not_to eq(wiki_page.id) + end + + it 'copies the content' do + expect(copy.content.text).to eq(wiki_page.content.text) + end + + it 'sets the author to be the current user' do + expect(copy.content.author).to eq(user) + end + end + + describe 'to a different wiki' do + let(:attributes) { { wiki: sink_wiki } } + + it_behaves_like 'copied wiki page' + end + end +end diff --git a/spec/services/wiki_pages/set_attributes_service_spec.rb b/spec/services/wiki_pages/set_attributes_service_spec.rb new file mode 100644 index 0000000000..63f9c29c6f --- /dev/null +++ b/spec/services/wiki_pages/set_attributes_service_spec.rb @@ -0,0 +1,110 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +require 'spec_helper' + +describe WikiPages::SetAttributesService, type: :model do + let(:user) { FactoryBot.build_stubbed(:user) } + let(:contract_class) do + contract = double('contract_class') + + allow(contract) + .to receive(:new) + .with(wiki_page, user, options: { changed_by_system: [] }) + .and_return(contract_instance) + + contract + end + let(:contract_instance) do + double('contract_instance', validate: contract_valid, errors: contract_errors) + end + let(:contract_valid) { true } + let(:contract_errors) do + double('contract_errors') + end + let(:wiki_page_valid) { true } + let(:instance) do + described_class.new(user: user, + model: wiki_page, + contract_class: contract_class) + end + let(:call_attributes) { {} } + let(:wiki_page) do + FactoryBot.build_stubbed(:wiki_page_with_content) + end + + describe 'call' do + let(:call_attributes) do + { + text: 'some new text', + title: 'a new title', + slug: 'a new slug' + } + end + + before do + allow(wiki_page) + .to receive(:valid?) + .and_return(wiki_page_valid) + + expect(contract_instance) + .to receive(:validate) + .and_return(contract_valid) + end + + subject { instance.call(call_attributes) } + + it 'is successful' do + expect(subject.success?).to be_truthy + end + + context 'for an existing wiki page' do + it 'sets the attributes' do + subject + + expect(wiki_page.attributes.slice(*wiki_page.changed).symbolize_keys) + .to eql call_attributes.slice(:title, :slug) + + expect(wiki_page.content.attributes.slice(*wiki_page.content.changed).symbolize_keys) + .to eql call_attributes.slice(:text) + end + + it 'does not persist the wiki_page' do + expect(wiki_page) + .not_to receive(:save) + + expect(wiki_page.content) + .not_to receive(:save) + + subject + end + end + end +end diff --git a/spec/services/work_packages/copy_service_integration_spec.rb b/spec/services/work_packages/copy_service_integration_spec.rb index 2fa5ee4a43..d1038988d2 100644 --- a/spec/services/work_packages/copy_service_integration_spec.rb +++ b/spec/services/work_packages/copy_service_integration_spec.rb @@ -70,7 +70,7 @@ describe WorkPackages::CopyService, 'integration', type: :model do end let(:service_result) do instance - .call(attributes) + .call(**attributes) end before do diff --git a/spec/workers/mail_notification_jobs/enqueue_work_package_notification_job_spec.rb b/spec/workers/mail_notification_jobs/enqueue_work_package_notification_job_spec.rb deleted file mode 100644 index f425539d75..0000000000 --- a/spec/workers/mail_notification_jobs/enqueue_work_package_notification_job_spec.rb +++ /dev/null @@ -1,253 +0,0 @@ -#-- encoding: UTF-8 - -#-- copyright -# OpenProject is an open source project management software. -# Copyright (C) 2012-2020 the OpenProject GmbH -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2017 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See docs/COPYRIGHT.rdoc for more details. -#++ - -require 'spec_helper' - -describe EnqueueWorkPackageNotificationJob, type: :model do - let(:project) { FactoryBot.create(:project) } - let(:recipient) do - FactoryBot.create(:user, member_in_project: project, member_with_permissions: [:view_work_packages], login: "johndoe") - end - let(:author) { FactoryBot.create(:user, login: "marktwain") } - let(:work_package) do - FactoryBot.create(:work_package, - project: project, - author: author, - assigned_to: recipient) - end - let(:journal) { journal_1 } - let(:journal_1) { work_package.journals.first } - let(:journal_2) do - work_package.add_journal author, 'something I have to say' - work_package.save(validate: false) - work_package.journals.last - end - let(:send_mail) { true } - - subject { described_class.new.perform(journal.id, send_mail) } - - before do - # make sure no other calls are made due to WP creation/update - allow(OpenProject::Notifications).to receive(:send) # ... and do nothing - end - - shared_examples_for 'sends notification' do - it 'sends a notification' do - expect(OpenProject::Notifications) - .to receive(:send) - .with(OpenProject::Events::AGGREGATED_WORK_PACKAGE_JOURNAL_READY, - journal: an_instance_of(Journal::AggregatedJournal), - send_mail: send_mail) - - subject - end - end - - shared_examples_for 'sends no notification' do - it 'sends no notification' do - expect(OpenProject::Notifications) - .not_to receive(:send) - - subject - end - end - - it_behaves_like 'sends notification' - - context 'non-existant journal' do - before do - journal.destroy - end - - it_behaves_like 'sends no notification' - end - - context 'outdated journal' do - before do - # make sure there is a later journal, that supersedes the original one - work_package.subject = 'changed subject' - work_package.save! - end - - it_behaves_like 'sends no notification' - end - - describe 'journal creation' do - context 'work_package_created' do - before do - FactoryBot.create(:work_package, project: project) - end - - it_behaves_like 'sends notification' - end - - context 'work_package_updated' do - before do - work_package.add_journal(author) - work_package.subject = 'A change to the issue' - work_package.save!(validate: false) - end - - it_behaves_like 'sends notification' - end - - context 'work_package_note_added' do - before do - work_package.add_journal(author, 'This update has a note') - work_package.save!(validate: false) - end - - it_behaves_like 'sends notification' - end - end - - describe 'mail suppressing aggregation' do - # business logic of whether to send or not to send a mail is mainly driven by the presence - # of an aggregated journal. However, there is an edge case that could lead to a notification - # getting lost. Sadly this is very implementation specific, so I'll describe it: - # Journal 1: comment - # Journal 2: change (this can also be multiple journals) - # Journal 3: comment - # - # The Job for the first journal will not send any mail, because Journal 2 supersedes it. - # However, after adding Journal 3, the aggregation will look like (1), (2, 3). Therefore the - # job for Journal 2 will not send a notification. Finally the job for Journal 3 will send a - # notification, but only containing the changes of 2 and 3. The comment of journal 1 is lost. - # Therefore two things have to happen: - # - someone needs to send notifications for the hidden journal - # (done by JournalNotificationMailer) - # - in case a journal is hidden, its Job is not allowed to enqueue a mail for it - # (because someone else will do it on behalf) - # This is important since late exec of a Job might cause it to _not_ skip notifications - - before do - change = { subject: 'new subject' } - note = { journal_notes: 'a comment' } - - allow(WorkPackages::UpdateContract).to receive(:new).and_return(NoopContract.new) - service = WorkPackages::UpdateService.new(user: author, model: work_package) - - expect(service.call(note)).to be_success - expect(service.call(change)).to be_success - expect(service.call(note)).to be_success - end - - let(:timeout) { Setting.journal_aggregation_time_minutes.to_i.minutes } - let(:journal_1) { work_package.journals[1] } - let(:journal_2) { work_package.journals[2] } - let(:journal_3) { work_package.journals[3] } - - context 'all changes happen within the timeout of journal 1' do - # The job for 1 will know, that Journal 3 took its addition. - # The job for 2 will know, that it has become part of Journal 3. - # -> no special behaviour required - - context 'for journal 1' do - let(:journal) { journal_1 } - - it_behaves_like 'sends notification' # for journal 1 - end - - context 'for journal 2' do - let(:journal) { journal_2 } - - it_behaves_like 'sends no notification' - end - - context 'for journal 3' do - let(:journal) { journal_3 } - - it_behaves_like 'sends notification' # for journals 2 and 3 - end - end - - context 'journal 3 created after timeout of 1, but inside of timeout for 2' do - # Job 1 will not send a mail because it does not know about journal 3 - # (thinking 2 will take its mail) - # The mail of Job 1 is taken over by the JournalNotificationMailer for Journal 3 - # Even if Job 1 knew of journal 3 (due to late execution), it was not allowed to send a mail - # (that would cause a duplicate mail delivery) - - before do - journal_2.created_at = journal_1.created_at + (timeout / 2) - journal_3.created_at = journal_1.created_at + timeout + 5.seconds - journal_2.save! - journal_3.save! - end - - context 'for journal 1' do - let(:journal) { journal_1 } - - it_behaves_like 'sends no notification' - end - - context 'for journal 2' do - let(:journal) { journal_2 } - - it_behaves_like 'sends no notification' - end - - context 'for journal 3' do - let(:journal) { journal_3 } - - it_behaves_like 'sends notification' # for journals 1, 2 and 3 - end - end - - context 'journal 3 created after timeout of 1 and 2' do - # This is a normal case again, ensuring nobody takes responsibility when not necessary. - - before do - journal_2.created_at = journal_1.created_at + (timeout / 2) - journal_3.created_at = journal_2.created_at + timeout + 5.seconds - journal_2.save! - journal_3.save! - end - - context 'for journal 1' do - let(:journal) { journal_1 } - - it_behaves_like 'sends no notification' - end - - context 'for journal 2' do - let(:journal) { journal_2 } - - it_behaves_like 'sends notification' # for journals 1 and 2 - end - - context 'for journal 3' do - let(:journal) { journal_3 } - - it_behaves_like 'sends notification' # for journal 3 - end - end - end -end diff --git a/spec/workers/notify_journal_completed_job_integration_spec.rb b/spec/workers/notify_journal_completed_job_integration_spec.rb new file mode 100644 index 0000000000..59e7eeb0cb --- /dev/null +++ b/spec/workers/notify_journal_completed_job_integration_spec.rb @@ -0,0 +1,284 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +require 'spec_helper' + +describe NotifyJournalCompletedJob, type: :model do + let(:project) { FactoryBot.create(:project) } + let(:permissions) { [:view_work_packages] } + let(:recipient) do + FactoryBot.create(:user, member_in_project: project, member_with_permissions: permissions, login: "johndoe") + end + let(:author) { FactoryBot.create(:user, login: "marktwain") } + let(:send_mail) { true } + + subject { described_class.new.perform(journal.id, send_mail) } + + before do + # make sure no other calls are made due to WP creation/update + allow(OpenProject::Notifications).to receive(:send) # ... and do nothing + end + + context 'for work packages' do + let(:work_package) do + FactoryBot.create(:work_package, + project: project, + author: author, + assigned_to: recipient) + end + let(:journal) { journal_1 } + let(:journal_1) { work_package.journals.first } + let(:journal_2) do + work_package.add_journal author, 'something I have to say' + work_package.save(validate: false) + work_package.journals.last + end + + shared_examples_for 'sends notification' do + it 'sends a notification' do + expect(OpenProject::Notifications) + .to receive(:send) + .with(OpenProject::Events::AGGREGATED_WORK_PACKAGE_JOURNAL_READY, + journal: an_instance_of(Journal::AggregatedJournal), + send_mail: send_mail) + + subject + end + end + + shared_examples_for 'sends no notification' do + it 'sends no notification' do + expect(OpenProject::Notifications) + .not_to receive(:send) + + subject + end + end + + it_behaves_like 'sends notification' + + context 'non-existant journal' do + before do + journal.destroy + end + + it_behaves_like 'sends no notification' + end + + context 'outdated journal' do + before do + # make sure there is a later journal, that supersedes the original one + work_package.subject = 'changed subject' + work_package.save! + end + + it_behaves_like 'sends no notification' + end + + describe 'journal creation' do + context 'work_package_created' do + before do + FactoryBot.create(:work_package, project: project) + end + + it_behaves_like 'sends notification' + end + + context 'work_package_updated' do + before do + work_package.add_journal(author) + work_package.subject = 'A change to the issue' + work_package.save!(validate: false) + end + + it_behaves_like 'sends notification' + end + + context 'work_package_note_added' do + before do + work_package.add_journal(author, 'This update has a note') + work_package.save!(validate: false) + end + + it_behaves_like 'sends notification' + end + end + + describe 'mail suppressing aggregation' do + # business logic of whether to send or not to send a mail is mainly driven by the presence + # of an aggregated journal. However, there is an edge case that could lead to a notification + # getting lost. Sadly this is very implementation specific, so I'll describe it: + # Journal 1: comment + # Journal 2: change (this can also be multiple journals) + # Journal 3: comment + # + # The Job for the first journal will not send any mail, because Journal 2 supersedes it. + # However, after adding Journal 3, the aggregation will look like (1), (2, 3). Therefore the + # job for Journal 2 will not send a notification. Finally the job for Journal 3 will send a + # notification, but only containing the changes of 2 and 3. The comment of journal 1 is lost. + # Therefore two things have to happen: + # - someone needs to send notifications for the hidden journal + # (done by JournalNotificationMailer) + # - in case a journal is hidden, its Job is not allowed to enqueue a mail for it + # (because someone else will do it on behalf) + # This is important since late exec of a Job might cause it to _not_ skip notifications + + before do + change = { subject: 'new subject' } + note = { journal_notes: 'a comment' } + + allow(WorkPackages::UpdateContract).to receive(:new).and_return(NoopContract.new) + service = WorkPackages::UpdateService.new(user: author, model: work_package) + + expect(service.call(**note)).to be_success + expect(service.call(**change)).to be_success + expect(service.call(**note)).to be_success + end + + let(:timeout) { Setting.journal_aggregation_time_minutes.to_i.minutes } + let(:journal_1) { work_package.journals[1] } + let(:journal_2) { work_package.journals[2] } + let(:journal_3) { work_package.journals[3] } + + context 'all changes happen within the timeout of journal 1' do + # The job for 1 will know, that Journal 3 took its addition. + # The job for 2 will know, that it has become part of Journal 3. + # -> no special behaviour required + + context 'for journal 1' do + let(:journal) { journal_1 } + + it_behaves_like 'sends notification' # for journal 1 + end + + context 'for journal 2' do + let(:journal) { journal_2 } + + it_behaves_like 'sends no notification' + end + + context 'for journal 3' do + let(:journal) { journal_3 } + + it_behaves_like 'sends notification' # for journals 2 and 3 + end + end + + context 'journal 3 created after timeout of 1, but inside of timeout for 2' do + # Job 1 will not send a mail because it does not know about journal 3 + # (thinking 2 will take its mail) + # The mail of Job 1 is taken over by the JournalNotificationMailer for Journal 3 + # Even if Job 1 knew of journal 3 (due to late execution), it was not allowed to send a mail + # (that would cause a duplicate mail delivery) + + before do + journal_2.created_at = journal_1.created_at + (timeout / 2) + journal_3.created_at = journal_1.created_at + timeout + 5.seconds + journal_2.save! + journal_3.save! + end + + context 'for journal 1' do + let(:journal) { journal_1 } + + it_behaves_like 'sends no notification' + end + + context 'for journal 2' do + let(:journal) { journal_2 } + + it_behaves_like 'sends no notification' + end + + context 'for journal 3' do + let(:journal) { journal_3 } + + it_behaves_like 'sends notification' # for journals 1, 2 and 3 + end + end + + context 'journal 3 created after timeout of 1 and 2' do + # This is a normal case again, ensuring nobody takes responsibility when not necessary. + + before do + journal_2.created_at = journal_1.created_at + (timeout / 2) + journal_3.created_at = journal_2.created_at + timeout + 5.seconds + journal_2.save! + journal_3.save! + end + + context 'for journal 1' do + let(:journal) { journal_1 } + + it_behaves_like 'sends no notification' + end + + context 'for journal 2' do + let(:journal) { journal_2 } + + it_behaves_like 'sends notification' # for journals 1 and 2 + end + + context 'for journal 3' do + let(:journal) { journal_3 } + + it_behaves_like 'sends notification' # for journal 3 + end + end + end + end + + context 'for wiki page content' do + let(:wiki_page_content) do + wiki = FactoryBot.create(:wiki, + project: project) + + FactoryBot.create(:wiki_page_with_content, wiki: wiki).content + end + + let(:journal) { journal_1 } + let(:journal_1) { wiki_page_content.journals.first } + let(:journal_2) do + wiki_page_content.add_journal author, 'something I have to say' + wiki_page_content.save(validate: false) + wiki_page_content.journals.last + end + + it 'sends a notification' do + expect(OpenProject::Notifications) + .to receive(:send) + .with(OpenProject::Events::AGGREGATED_WIKI_JOURNAL_READY, + journal: an_instance_of(Journal::AggregatedJournal), + send_mail: send_mail) + + subject + end + end +end From 19f7059f4362a3f2d94888601a80059bf997dc0d Mon Sep 17 00:00:00 2001 From: ulferts Date: Wed, 4 Nov 2020 09:16:11 +0100 Subject: [PATCH 15/43] rename method --- app/services/notifications/journal_notification_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/notifications/journal_notification_service.rb b/app/services/notifications/journal_notification_service.rb index bfc8272722..7ef3a72a00 100644 --- a/app/services/notifications/journal_notification_service.rb +++ b/app/services/notifications/journal_notification_service.rb @@ -31,12 +31,12 @@ class Notifications::JournalNotificationService class << self def call(journal, send_mails) - enqueue_work_package_notification(journal, send_mails) if supported?(journal) + enqueue_notification(journal, send_mails) if supported?(journal) end private - def enqueue_work_package_notification(journal, send_mails) + def enqueue_notification(journal, send_mails) NotifyJournalCompletedJob .set(wait_until: delivery_time) .perform_later(journal.id, send_mails) From ddd80c8c085403b19658bc9eaf6238b4964f00aa Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Wed, 4 Nov 2020 10:06:15 +0000 Subject: [PATCH 16/43] update locales from crowdin [ci skip] --- config/locales/crowdin/fi.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/locales/crowdin/fi.yml b/config/locales/crowdin/fi.yml index 1c421a5241..705ffc48ec 100644 --- a/config/locales/crowdin/fi.yml +++ b/config/locales/crowdin/fi.yml @@ -1473,8 +1473,8 @@ fi: label_message_posted: "Viesti lisätty" label_min_max_length: "Min - Max pituudet" label_minute_plural: "minuuttia" - label_missing_api_access_key: "Missing API access key" - label_missing_feeds_access_key: "Missing RSS access key" + label_missing_api_access_key: "API avain puuttuu" + label_missing_feeds_access_key: "RSS avain puuttuu" label_modification: "%{count} muutos" label_modified: "muokattu" label_module_plural: "Moduulit" @@ -1894,11 +1894,11 @@ fi: mb: "Mt" tb: "Tt" onboarding: - heading_getting_started: "Get an overview" + heading_getting_started: "Yleiskatsaus" text_getting_started_description: "Get a quick overview of project management and team collaboration with OpenProject." text_show_again: "Voit käynnistää tämä videon uudelleen ohjeet-valikosta" welcome: "Tervetuloa OpenProjectiin" - select_language: "Please select your language" + select_language: "Valitse kieli" permission_add_work_package_notes: "Lisää kommentteja" permission_add_work_packages: "Lisää tehtävä" permission_add_messages: "Jätä viesti" From a3b7d33f3655805f9a407697c12bee201e6b5ca0 Mon Sep 17 00:00:00 2001 From: ML-OpenP Date: Wed, 4 Nov 2020 12:16:20 +0100 Subject: [PATCH 17/43] linkfixes in docs [ci skip] --- docs/development/concepts/queries/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development/concepts/queries/README.md b/docs/development/concepts/queries/README.md index 7bfcfb0733..cf2f0e9aee 100644 --- a/docs/development/concepts/queries/README.md +++ b/docs/development/concepts/queries/README.md @@ -64,7 +64,7 @@ Queries are regular APIv3 grape endpoints that can be accessed through the `/api The default query `/api/v3/queries/default` and `/api/v3/:project_id/queries/default` contains a default set of configuration (back-end and front-end) global and for the given project, respectively. They can only be modified administrators through some global settings. -A number of parameters can be passed to the Query through parameters as elaborated on in [the respective APIv3 documentation](https://docs.openproject.org/api/queries/#queries-query). +A number of parameters can be passed to the Query through parameters as elaborated on in [the respective APIv3 documentation](https://docs.openproject.org/api/endpoints/queries/#queries-query). Clients can define a query once, save it and use it later on to load the same set of filters, columns, and so on. When retrieved from the database (a query id is passed), the query has been previously stored. Saved properties may be overridden through URL parameters, which override the existing saved query. @@ -72,7 +72,7 @@ Clients can define a query once, save it and use it later on to load the same se ### Query collections responses -Since queries can be saved and should be listed to the user such as in the work package sidebar, they can also be requested as a collection of resources through `/api/v3/queries`. This endpoint can also be filtered. For more details on that, see the [respective APIv3 section](https://docs.openproject.org/api/queries/#queries-queries). +Since queries can be saved and should be listed to the user such as in the work package sidebar, they can also be requested as a collection of resources through `/api/v3/queries`. This endpoint can also be filtered. For more details on that, see the [respective APIv3 section](https://docs.openproject.org/api/endpoints/queries/#queries-queries). This response will end up representing the available queries on the `work packages` module sidebar as shown below. From a7adc14d7bcd91e1aa6da38ffca925bcbbff09f2 Mon Sep 17 00:00:00 2001 From: ML-OpenP Date: Wed, 4 Nov 2020 16:16:18 +0100 Subject: [PATCH 18/43] link fixes in docs [ci skip] --- docs/development/concepts/inline-editing/README.md | 2 +- docs/user-guide/work-packages/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development/concepts/inline-editing/README.md b/docs/development/concepts/inline-editing/README.md index dc6188964c..67e3dd8601 100644 --- a/docs/development/concepts/inline-editing/README.md +++ b/docs/development/concepts/inline-editing/README.md @@ -28,7 +28,7 @@ Inline editing is a core functionality of work packages and other attributes. In order to understand Inline Editing, you will need the following concepts: -- [HAL resources](TODO:hal-resource) +- [HAL resources](../hal-resources) - [Schemas](../resource-schemas) diff --git a/docs/user-guide/work-packages/README.md b/docs/user-guide/work-packages/README.md index 8cc0ab5a91..3505abd272 100644 --- a/docs/user-guide/work-packages/README.md +++ b/docs/user-guide/work-packages/README.md @@ -27,7 +27,7 @@ Work packages can be displayed in a projects timeline, e.g. as a milestone or a | Topic | Content | | ------------------------------------------------------------ | :----------------------------------------------------------- | | [Work packages views](work-package-views) | What is the difference between the work packages views: list view, split screen view, details view? | -| [Create a work package](/create-work-package) | How to create a new work package in OpenProject? | +| [Create a work package](create-work-package) | How to create a new work package in OpenProject? | | [Edit work package](edit-work-package) | How to edit a work package in OpenProject? | | [Copy, move, delete](copy-move-delete) | How to copy, move, delete a work package? | | [Work package table configuration](work-package-table-configuration) | How to configure the work package table (columns, filters, group by, etc.)? | From 0c05382fcba854444fb48b76b1909a9aa9433bc9 Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 5 Nov 2020 09:36:25 +0100 Subject: [PATCH 19/43] fix flickering spec --- .../my_page/spec/requests/api/v3/grids/grids_resource_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/my_page/spec/requests/api/v3/grids/grids_resource_spec.rb b/modules/my_page/spec/requests/api/v3/grids/grids_resource_spec.rb index fe2ba9ecfb..c17d816f12 100644 --- a/modules/my_page/spec/requests/api/v3/grids/grids_resource_spec.rb +++ b/modules/my_page/spec/requests/api/v3/grids/grids_resource_spec.rb @@ -156,6 +156,10 @@ describe 'API v3 Grids resource', type: :request, content_type: :json do end context 'with the page not existing' do + let(:stored_grids) do + # no pages exist so the page requests for is not existing as well + end + let(:path) { api_v3_paths.grid(5) } it 'responds with 404 NOT FOUND' do From c919da055004c208fe2194d9f2d95d97c6eee131 Mon Sep 17 00:00:00 2001 From: Wieland Lindenthal Date: Thu, 5 Nov 2020 10:07:19 +0100 Subject: [PATCH 20/43] Fix: #35132 Activity broken for wiki pages with slashes in title (#8823) --- app/models/activities/wiki_content_activity_provider.rb | 2 +- spec/features/activities/wiki_activity_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/activities/wiki_content_activity_provider.rb b/app/models/activities/wiki_content_activity_provider.rb index 01f5187737..2c93b6226f 100644 --- a/app/models/activities/wiki_content_activity_provider.rb +++ b/app/models/activities/wiki_content_activity_provider.rb @@ -77,6 +77,6 @@ class Activities::WikiContentActivityProvider < Activities::BaseActivityProvider end def url_helper_parameter(event) - [event['project_id'], event['wiki_title'], { version: event['version'] }] + [event['project_id'], event['wiki_title'].to_url, { version: event['version'] }] end end diff --git a/spec/features/activities/wiki_activity_spec.rb b/spec/features/activities/wiki_activity_spec.rb index f954432eac..eaf9ec9202 100644 --- a/spec/features/activities/wiki_activity_spec.rb +++ b/spec/features/activities/wiki_activity_spec.rb @@ -78,7 +78,7 @@ feature 'Wiki activities' do click_link('Wiki edit: My page (#2)') expect(page) - .to have_current_path(project_wiki_path(project.id, 'My page', version: 2)) + .to have_current_path(project_wiki_path(project.id, 'my-page', version: 2)) # disable the wiki module From b1dd96867f56769b9386458e3ccc9296a1f2a414 Mon Sep 17 00:00:00 2001 From: Travis CI User Date: Thu, 5 Nov 2020 09:31:24 +0000 Subject: [PATCH 21/43] update locales from crowdin [ci skip] --- config/locales/crowdin/ar.yml | 1 + config/locales/crowdin/bg.yml | 1 + config/locales/crowdin/ca.yml | 1 + config/locales/crowdin/cs.yml | 1 + config/locales/crowdin/da.yml | 1 + config/locales/crowdin/de.yml | 1 + config/locales/crowdin/el.yml | 1 + config/locales/crowdin/es.yml | 1 + config/locales/crowdin/fi.yml | 1 + config/locales/crowdin/fil.yml | 1 + config/locales/crowdin/fr.yml | 1 + config/locales/crowdin/hr.yml | 1 + config/locales/crowdin/hu.yml | 1 + config/locales/crowdin/id.yml | 1 + config/locales/crowdin/it.yml | 1 + config/locales/crowdin/ja.yml | 1 + config/locales/crowdin/ko.yml | 1 + config/locales/crowdin/lt.yml | 1 + config/locales/crowdin/nl.yml | 1 + config/locales/crowdin/no.yml | 1 + config/locales/crowdin/pl.yml | 1 + config/locales/crowdin/pt.yml | 1 + config/locales/crowdin/ro.yml | 1 + config/locales/crowdin/ru.yml | 1 + config/locales/crowdin/sk.yml | 1 + config/locales/crowdin/sl.yml | 1 + config/locales/crowdin/sv.yml | 1 + config/locales/crowdin/tr.yml | 1 + config/locales/crowdin/uk.yml | 1 + config/locales/crowdin/vi.yml | 1 + config/locales/crowdin/zh-CN.yml | 1 + config/locales/crowdin/zh-TW.yml | 1 + modules/job_status/config/locales/crowdin/js-pt.yml | 4 ++-- 33 files changed, 34 insertions(+), 2 deletions(-) diff --git a/config/locales/crowdin/ar.yml b/config/locales/crowdin/ar.yml index 8cf476cbe5..337e023686 100644 --- a/config/locales/crowdin/ar.yml +++ b/config/locales/crowdin/ar.yml @@ -541,6 +541,7 @@ ar: invalid_url: 'is not a valid URL.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "يجب أن يكون أقل من أو يساوي %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "ليس رقماً." diff --git a/config/locales/crowdin/bg.yml b/config/locales/crowdin/bg.yml index bf07b43621..5d9f59def4 100644 --- a/config/locales/crowdin/bg.yml +++ b/config/locales/crowdin/bg.yml @@ -537,6 +537,7 @@ bg: invalid_url: 'невалиден URL адрес.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "трябва да бъде по-малка или равна на %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "не е число." diff --git a/config/locales/crowdin/ca.yml b/config/locales/crowdin/ca.yml index 53ee876a62..40cf50f887 100644 --- a/config/locales/crowdin/ca.yml +++ b/config/locales/crowdin/ca.yml @@ -537,6 +537,7 @@ ca: invalid_url: 'is not a valid URL.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "ha de ser menor o igual a %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "no és un número." diff --git a/config/locales/crowdin/cs.yml b/config/locales/crowdin/cs.yml index e72fe4bca7..1262bc9a49 100644 --- a/config/locales/crowdin/cs.yml +++ b/config/locales/crowdin/cs.yml @@ -539,6 +539,7 @@ cs: invalid_url: 'není platná adresa URL.' invalid_url_scheme: 'není podporovaný protokol (povoleny: %{allowed_schemes}).' less_than_or_equal_to: "musí být menší než nebo rovno %{count}." + not_current_user: "is not the current user." not_a_date: "není platné datum." not_a_datetime: "není platný čas." not_a_number: "není číslo." diff --git a/config/locales/crowdin/da.yml b/config/locales/crowdin/da.yml index 9faf1f8838..5a3d9ab340 100644 --- a/config/locales/crowdin/da.yml +++ b/config/locales/crowdin/da.yml @@ -537,6 +537,7 @@ da: invalid_url: 'is not a valid URL.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "skal være mindre end eller lig med %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "er ikke et tal." diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index 500747ad08..f40aebf953 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -532,6 +532,7 @@ de: invalid_url: 'ist keine gültige URL.' invalid_url_scheme: 'ist kein unterstütztes Protokoll (erlaubt: %{allowed_schemes}).' less_than_or_equal_to: "muss kleiner oder gleich %{count} sein." + not_current_user: "is not the current user." not_a_date: "ist kein gültiges Datum." not_a_datetime: "ist kein gültiges Datum." not_a_number: "ist keine Zahl." diff --git a/config/locales/crowdin/el.yml b/config/locales/crowdin/el.yml index 07e69c8869..be45836816 100644 --- a/config/locales/crowdin/el.yml +++ b/config/locales/crowdin/el.yml @@ -534,6 +534,7 @@ el: invalid_url: 'δεν είναι μια έγκυρη διεύθυνση URL.' invalid_url_scheme: 'δεν είναι υποστηριζόμενο πρωτόκολλο (επιτρεπόμενα: %{allowed_schemes}).' less_than_or_equal_to: "πρέπει να είναι μικρότερο ή ίσο με %{count}." + not_current_user: "is not the current user." not_a_date: "δεν είναι έγκυρη ημερομηνία." not_a_datetime: "δεν είναι έγκυρη ημερομηνία και ώρα." not_a_number: "δεν είναι αριθμός." diff --git a/config/locales/crowdin/es.yml b/config/locales/crowdin/es.yml index e1e410e6fe..93e3337c6a 100644 --- a/config/locales/crowdin/es.yml +++ b/config/locales/crowdin/es.yml @@ -534,6 +534,7 @@ es: invalid_url: 'no es una URL válida.' invalid_url_scheme: 'no es un protocolo admitido (permitidos: %{allowed_schemes}).' less_than_or_equal_to: "debe ser menor o igual a %{count}." + not_current_user: "is not the current user." not_a_date: "no es una fecha válida." not_a_datetime: "no es una fecha/hora válida." not_a_number: "No es un número." diff --git a/config/locales/crowdin/fi.yml b/config/locales/crowdin/fi.yml index 705ffc48ec..c268d9bc0f 100644 --- a/config/locales/crowdin/fi.yml +++ b/config/locales/crowdin/fi.yml @@ -537,6 +537,7 @@ fi: invalid_url: 'is not a valid URL.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "täytyy olla pienempi tai yhtä suuri kuin %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "ei ole numero." diff --git a/config/locales/crowdin/fil.yml b/config/locales/crowdin/fil.yml index 42fa05839c..4db96c75f4 100644 --- a/config/locales/crowdin/fil.yml +++ b/config/locales/crowdin/fil.yml @@ -537,6 +537,7 @@ fil: invalid_url: 'ay hindi balidong URL.' invalid_url_scheme: 'ay hindi suportado ng protocol (pinahintulutan: %{allowed_schemes}).' less_than_or_equal_to: "dapat ay hindi baba o katumbas sa %{count}." + not_current_user: "is not the current user." not_a_date: "ay hindi balido ang petsa." not_a_datetime: "ay hindi balido ang petsa ng oras." not_a_number: "ay hindi numero." diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml index 9263f44b2b..c865285e49 100644 --- a/config/locales/crowdin/fr.yml +++ b/config/locales/crowdin/fr.yml @@ -536,6 +536,7 @@ fr: invalid_url: 'n’est pas une URL valide.' invalid_url_scheme: 'n’est pas un protocole pris en charge (autorisés : %{allowed_schemes}).' less_than_or_equal_to: "doit être inférieur ou égal à %{count}." + not_current_user: "is not the current user." not_a_date: "n'est pas une date valide." not_a_datetime: "n'est pas une heure valide." not_a_number: "n'est pas un nombre." diff --git a/config/locales/crowdin/hr.yml b/config/locales/crowdin/hr.yml index 66f7e60d41..842c5191dd 100644 --- a/config/locales/crowdin/hr.yml +++ b/config/locales/crowdin/hr.yml @@ -538,6 +538,7 @@ hr: invalid_url: 'nije valjani URL.' invalid_url_scheme: 'nije podržani protokol (dozvoljeno: %{allowed_schemes}).' less_than_or_equal_to: "mora biti manji od ili jednak %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "nije tip podataka number." diff --git a/config/locales/crowdin/hu.yml b/config/locales/crowdin/hu.yml index 405ae175e4..b84028911d 100644 --- a/config/locales/crowdin/hu.yml +++ b/config/locales/crowdin/hu.yml @@ -534,6 +534,7 @@ hu: invalid_url: 'nem érvényes URL.' invalid_url_scheme: 'nem támogatott protokoll (támogatott: %{allowed_schemes}).' less_than_or_equal_to: "kisebbnek vagy egyenlőnek kell lennie mint, %{count}." + not_current_user: "is not the current user." not_a_date: "nem érvényes dátum." not_a_datetime: "ez nem érvényes dátum." not_a_number: "ez nem egy szám." diff --git a/config/locales/crowdin/id.yml b/config/locales/crowdin/id.yml index 8deca0f517..5c5ebf1f3b 100644 --- a/config/locales/crowdin/id.yml +++ b/config/locales/crowdin/id.yml @@ -535,6 +535,7 @@ id: invalid_url: 'bukanlah URL yang Valid.' invalid_url_scheme: 'bukanlah sebuah protokol yang didukung (diperbolehkan: %{allowed_schemes}).' less_than_or_equal_to: "harus kurang dari atau sama dengan %{count}." + not_current_user: "is not the current user." not_a_date: "bukan tanggal yang valid." not_a_datetime: "bukan tanggal waktu yang valid." not_a_number: "harus diisi angka." diff --git a/config/locales/crowdin/it.yml b/config/locales/crowdin/it.yml index 2eb9b8cad4..fc65b6c44b 100644 --- a/config/locales/crowdin/it.yml +++ b/config/locales/crowdin/it.yml @@ -533,6 +533,7 @@ it: invalid_url: 'non è un URL valido.' invalid_url_scheme: 'non è un protocollo supportato (ammessi: %{allowed_schemes}).' less_than_or_equal_to: "deve essere inferiore o uguale a %{count}." + not_current_user: "is not the current user." not_a_date: "non è una data valida." not_a_datetime: "non è un'orario valido." not_a_number: "non è un numero." diff --git a/config/locales/crowdin/ja.yml b/config/locales/crowdin/ja.yml index 53fc74f4db..a3145d7c35 100644 --- a/config/locales/crowdin/ja.yml +++ b/config/locales/crowdin/ja.yml @@ -531,6 +531,7 @@ ja: invalid_url: 'は有効な URL ではありません。' invalid_url_scheme: 'はサポートされたプロトコルではありません (可能: %{allowed_schemes})。' less_than_or_equal_to: "は%{count}以下の値にしてください。" + not_current_user: "is not the current user." not_a_date: "は有効な日付ではありません。" not_a_datetime: "は有効な日時ではありません。" not_a_number: "は数値にしてください。" diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml index 36286072fb..64701c37a0 100644 --- a/config/locales/crowdin/ko.yml +++ b/config/locales/crowdin/ko.yml @@ -535,6 +535,7 @@ ko: invalid_url: '은(는) 올바른 URL이 아닙니다.' invalid_url_scheme: '은(는) 지원되는 프로토콜(허용: %{allowed_schemes})이 아닙니다.' less_than_or_equal_to: "은(는) %{count} 보다 작거나 같아야 합니다" + not_current_user: "is not the current user." not_a_date: "은(는) 유효한 날짜가 아닙니다." not_a_datetime: "은(는) 유효한 날짜가 아닙니다." not_a_number: "은(는) 숫자가 아닙니다." diff --git a/config/locales/crowdin/lt.yml b/config/locales/crowdin/lt.yml index 2c78f9bae8..583205fbf9 100644 --- a/config/locales/crowdin/lt.yml +++ b/config/locales/crowdin/lt.yml @@ -534,6 +534,7 @@ lt: invalid_url: 'nėra tinkamas URL.' invalid_url_scheme: 'nėra palaikomos protokolas (leidžiamas: %{allowed_schemes}).' less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}." + not_current_user: "is not the current user." not_a_date: "nėra tinkama data." not_a_datetime: "nėra tinkama data ir laikas." not_a_number: "nėra skaičius." diff --git a/config/locales/crowdin/nl.yml b/config/locales/crowdin/nl.yml index 4bf6d6ca91..b236e99511 100644 --- a/config/locales/crowdin/nl.yml +++ b/config/locales/crowdin/nl.yml @@ -537,6 +537,7 @@ nl: invalid_url: 'is geen geldige URL.' invalid_url_scheme: 'is geen ondersteunde protocol (toegestaan: %{allowed_schemes}).' less_than_or_equal_to: "moet kleiner zijn dan of gelijk aan %{count}." + not_current_user: "is not the current user." not_a_date: "is geen geldige datum." not_a_datetime: "is geen geldige datum tijd." not_a_number: "is geen getal." diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml index 5977b6b675..534ad4d8cc 100644 --- a/config/locales/crowdin/no.yml +++ b/config/locales/crowdin/no.yml @@ -537,6 +537,7 @@ invalid_url: 'is not a valid URL.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "must be less than or equal to %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "is not a number." diff --git a/config/locales/crowdin/pl.yml b/config/locales/crowdin/pl.yml index ff64e6782b..aeae51736b 100644 --- a/config/locales/crowdin/pl.yml +++ b/config/locales/crowdin/pl.yml @@ -535,6 +535,7 @@ pl: invalid_url: 'nie jest poprawnym adresem URL.' invalid_url_scheme: 'nie jest obsługiwanym protokołem (dozwolone: %{allowed_schemes}).' less_than_or_equal_to: "musi być mniejsze niż lub równe %{count}." + not_current_user: "is not the current user." not_a_date: "nie jest poprawną datą." not_a_datetime: "nie jest poprawną datą i czasem." not_a_number: "nie jest liczbą." diff --git a/config/locales/crowdin/pt.yml b/config/locales/crowdin/pt.yml index e8f383b389..eabdb18aef 100644 --- a/config/locales/crowdin/pt.yml +++ b/config/locales/crowdin/pt.yml @@ -535,6 +535,7 @@ pt: invalid_url: 'não é um URL válido.' invalid_url_scheme: 'não é um protocolo suportado (permitidos: %{allowed_schemes}).' less_than_or_equal_to: "deve ser menor ou igual a %{count}." + not_current_user: "is not the current user." not_a_date: "não é uma data válida." not_a_datetime: "não é uma data/hora válida." not_a_number: "não é um número." diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index a7cd9c14bf..d6f551dc05 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -538,6 +538,7 @@ ro: invalid_url: 'nu este o adresa URL validă.' invalid_url_scheme: 'nu este un protocol permis (allowed: %{allowed_schemes}).' less_than_or_equal_to: "trebuie să fie mai mic sau egal cu %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "nu este un număr." diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index ac017f4431..910f945f08 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -538,6 +538,7 @@ ru: invalid_url: 'не является допустимым URL-адресом.' invalid_url_scheme: 'не является поддерживаемым протоколом (разрешены следующие: %{allowed_schemes}).' less_than_or_equal_to: "должно быть меньше или равно %{count}." + not_current_user: "is not the current user." not_a_date: "не является допустимой датой." not_a_datetime: "дата и время не являются допустимыми." not_a_number: "не является числом." diff --git a/config/locales/crowdin/sk.yml b/config/locales/crowdin/sk.yml index 7cd012cc1c..13bda17d1a 100644 --- a/config/locales/crowdin/sk.yml +++ b/config/locales/crowdin/sk.yml @@ -539,6 +539,7 @@ sk: invalid_url: 'nie je platnou URL adresou.' invalid_url_scheme: 'nie je podporovaný protokol (povolené: %{allowed_schemes}).' less_than_or_equal_to: "musí byť menšie alebo rovné ako %{count}." + not_current_user: "is not the current user." not_a_date: "nie je platný dátum." not_a_datetime: "nie je platný dátum a čas." not_a_number: "nie je číslo." diff --git a/config/locales/crowdin/sl.yml b/config/locales/crowdin/sl.yml index ee4c309dc9..c737bc616a 100644 --- a/config/locales/crowdin/sl.yml +++ b/config/locales/crowdin/sl.yml @@ -537,6 +537,7 @@ sl: invalid_url: 'ni veljaven URL. ' invalid_url_scheme: 'ni podprt protokol (dovoljeno:%{allowed_schemes}).' less_than_or_equal_to: "mora biti manjše ali enako %{count}. " + not_current_user: "is not the current user." not_a_date: "ni veljaven datum" not_a_datetime: "ni veljaven datum." not_a_number: "ni število." diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml index c2be4c62ca..a87831f246 100644 --- a/config/locales/crowdin/sv.yml +++ b/config/locales/crowdin/sv.yml @@ -536,6 +536,7 @@ sv: invalid_url: 'är inte ett giltigt URL.' invalid_url_scheme: 'är inte ett tillåtet protokoll (tillåtna: %{allowed_schemes}).' less_than_or_equal_to: "måste vara mindre än eller lika med %{count}." + not_current_user: "is not the current user." not_a_date: "är inte är ett giltigt datum." not_a_datetime: "är inte en giltig datumtid." not_a_number: "är inte ett nummer." diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml index 8007350984..0efdacd4c9 100644 --- a/config/locales/crowdin/tr.yml +++ b/config/locales/crowdin/tr.yml @@ -537,6 +537,7 @@ tr: invalid_url: 'geçerli bir adres değil.' invalid_url_scheme: 'bu protokol desteklenmiyor (izin: %{allowed_schemes}).' less_than_or_equal_to: "%{count} 'ten küçük veya bu değere eşit olmalıdır." + not_current_user: "is not the current user." not_a_date: "geçerli bir tarih değil." not_a_datetime: "geçerli bir zaman değil." not_a_number: "bir sayı değil." diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml index 60c7e5ebd7..f790cbe304 100644 --- a/config/locales/crowdin/uk.yml +++ b/config/locales/crowdin/uk.yml @@ -539,6 +539,7 @@ uk: invalid_url: 'не є дійсною URL-адресою.' invalid_url_scheme: 'не є підтримуваним протоколом (дозволено: %{allowed_schemes}).' less_than_or_equal_to: "має бути меншим або рівним %{count}" + not_current_user: "is not the current user." not_a_date: "не є дійсною датою." not_a_datetime: "не є дійсним датою." not_a_number: "не є числом" diff --git a/config/locales/crowdin/vi.yml b/config/locales/crowdin/vi.yml index 75eda2963e..df51075a87 100644 --- a/config/locales/crowdin/vi.yml +++ b/config/locales/crowdin/vi.yml @@ -538,6 +538,7 @@ vi: invalid_url: 'is not a valid URL.' invalid_url_scheme: 'is not a supported protocol (allowed: %{allowed_schemes}).' less_than_or_equal_to: "must be less than or equal to %{count}." + not_current_user: "is not the current user." not_a_date: "is not a valid date." not_a_datetime: "is not a valid date time." not_a_number: "is not a number." diff --git a/config/locales/crowdin/zh-CN.yml b/config/locales/crowdin/zh-CN.yml index 74b13413d0..552e370a56 100644 --- a/config/locales/crowdin/zh-CN.yml +++ b/config/locales/crowdin/zh-CN.yml @@ -531,6 +531,7 @@ zh-CN: invalid_url: '不是有效的 URL。' invalid_url_scheme: '不是受支持的协议(允许:%{allowed_schemes})。' less_than_or_equal_to: "必须小于或等于 %{count}。" + not_current_user: "is not the current user." not_a_date: "不是有效的日期。" not_a_datetime: "不是有效的日期时间。" not_a_number: "不是一个数字。" diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml index 5d64cfe22c..47333c356a 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -536,6 +536,7 @@ zh-TW: invalid_url: '不是有效的 URL。' invalid_url_scheme: '不是受支援的協定 (允許的協定: %{allowed_schemes})。' less_than_or_equal_to: "必須少於或者等於 %{count}。" + not_current_user: "is not the current user." not_a_date: "不是有效的日期。" not_a_datetime: "不是有效的日期時間。" not_a_number: "不是數字" diff --git a/modules/job_status/config/locales/crowdin/js-pt.yml b/modules/job_status/config/locales/crowdin/js-pt.yml index c9ec0df6ef..fb2cf29d33 100644 --- a/modules/job_status/config/locales/crowdin/js-pt.yml +++ b/modules/job_status/config/locales/crowdin/js-pt.yml @@ -9,9 +9,9 @@ pt: redirect_errors: 'Devido a esses erros, você não será redirecionado automaticamente.' errors: 'Ocorreram alguns erros' generic_messages: - not_found: 'O trabalho não pôde ser encontrado.' + not_found: 'Este trabalho não pode ser encontrado.' in_queue: 'O trabalho foi colocado na fila e será processado em breve.' in_process: 'O trabalho está sendo processado.' - error: 'O trabalho não pôde ser finalizado.' + error: 'O trabalho não pode ser finalizado.' cancelled: 'O trabalho foi cancelado devido a um erro.' success: 'Trabalho concluído com sucesso.' From cf11c3812884712aade0230a36c4331a7fc5b3a3 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 12:01:50 +0100 Subject: [PATCH 22/43] update name "Enterprise on-premises" [ci skip] --- docs/enterprise-edition-guide/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/enterprise-edition-guide/README.md b/docs/enterprise-edition-guide/README.md index 0b5edf9d88..a93dc72bb1 100644 --- a/docs/enterprise-edition-guide/README.md +++ b/docs/enterprise-edition-guide/README.md @@ -1,13 +1,13 @@ -# Enterprise Edition guide +# Enterprise on-premises edition guide -Welcome to the OpenProject **Enterprise Edition guide**. +Welcome to the OpenProject **Enterprise on-premises edition guide**. -Here you find support for the [OpenProject Enterprise Edition](https://www.openproject.org/enterprise-edition/). The Enterprise Edition extends the Community Edition and provides **premium features**, additional **security feature**s as well as **professional support**. +Here you find support for the [OpenProject Enterprise on-premises edition](https://www.openproject.org/enterprise-edition/). The Enterprise on-premises edition extends the Community edition and provides **premium features**, additional **security feature**s as well as **professional support**. -The Enterprise Edition builds on top of the free Community Edition. An upgrade is possible at any time. Please see a detailed [feature comparison](https://www.openproject.org/pricing/#features) between the different versions of OpenProject. +The Enterprise on-premises edition builds on top of the free Community edition. An upgrade is possible at any time. Please see a detailed [feature comparison](https://www.openproject.org/pricing/#features) between the different versions of OpenProject. ## Overview @@ -25,19 +25,19 @@ The Enterprise Edition builds on top of the free Community Edition. An upgrade i ## Frequently asked questions - FAQ -### How can I upgrade to the OpenProject Enterprise Edition? +### How can I upgrade to the OpenProject Enterprise on-premises edition? -The Enterprise Edition is an upgrade of the self-hosted Community Edition. When you are already using the Community Edition, you can purchase an Enterprise Edition license to upgrade your OpenProject environment to the Enterprise Edition. To do this, follow these steps: +The Enterprise on-premises edition is an upgrade of the self-hosted Community edition. When you are already using the Community edition, you can purchase an Enterprise on-premises edition license to upgrade your OpenProject environment to the Enterprise on-premises edition. To do this, follow these steps: 1. Navigate to https://www.openproject.org/enterprise-edition/. 2. Click on the "Book now" button. -3. Follow the steps to purchase the Enterprise Edition license.You will then receive an Enterprise Edition license key by email which you can use to upgrade your Community Edition to the Enterprise Edition.If you prefer to test the Enterprise Edition before purchasing, you can request a 14 day trial license from https://www.openproject.org/enterprise-edition/. Simply click on "Get free trial license" to receive a 14 day trial license. After 14 days it will automatically downgraded to the community edition. +3. Follow the steps to purchase the Enterprise on-premises edition license. You will then receive an Enterprise on-premises edition license key by email which you can use to upgrade your Community edition to the Enterprise on-premises edition.If you prefer to test the Enterprise on-premises edition before purchasing, you can request a 14 day trial license from https://www.openproject.org/enterprise-edition/. Simply click on "Get free trial license" to receive a 14 day trial license. After 14 days it will automatically downgraded to the community edition. -### Is it possible to buy and upgrade to enterprise version on a community edition already installed? +### Is it possible to buy and upgrade to Enterprise on-premises version on a Community edition already installed? -Yes, you can upgrade your existing OpenProject Community Edition to the Enterprise Edition. You can then continue to use the same data as before but also use the premium features. When you purchase the Enterprise Edition, you receive an Enterprise Edition license. You can use this license to upgrade your Community Edition. -To upgrade your Community installation, navigate to your system -> Administration -> Enterprise Edition. Here, you can simply click the green Start free trial button. You can then trial the Enterprise Edition 14 days for free before booking. If you like the premium features and want to continue, you can easily book the Enterprise version via the Enterprise Edition menu in the Administration. Find more information [here](https://www.openproject.org/enterprise-edition-upgrade-test-free/). +Yes, you can upgrade your existing OpenProject Community edition to the Enterprise on-premises edition. You can then continue to use the same data as before but also use the premium features. When you purchase the Enterprise on-premises edition, you receive an Enterprise on-premises edition license. You can use this license to upgrade your Community edition. +To upgrade your Community installation, navigate to your system -> Administration -> Enterprise Edition. Here, you can simply click the green Start free trial button. You can then trial the Enterprise on-premises edition 14 days for free before booking. If you like the premium features and want to continue, you can easily book the Enterprise on-premises version via the Enterprise Edition menu in the Administration. Find more information [here](https://www.openproject.org/enterprise-edition-upgrade-test-free/). ### Do you have a reseller program for OpenProject? From 1b3ee86c6357ec9cc02d42fa2f6014ff35698de6 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 12:03:38 +0100 Subject: [PATCH 23/43] update name Enterprise on-premises in table [ci skip] --- docs/enterprise-edition-guide/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/enterprise-edition-guide/README.md b/docs/enterprise-edition-guide/README.md index a93dc72bb1..f1040807c3 100644 --- a/docs/enterprise-edition-guide/README.md +++ b/docs/enterprise-edition-guide/README.md @@ -14,8 +14,8 @@ The Enterprise on-premises edition builds on top of the free Community edition. | Popular Topics | Description | | ------------------------------------------------------------ | :----------------------------------------------------------- | -| [Enterprise Edition trial](enterprise-trial/) | Can I test the Enterprise Edition for free? | -| [Activate the Enterprise Edition](activate-enterprise-edition/) | How can I upgrade my Community Edition to an Enterprise Edition? | +| [Enterprise Edition trial](enterprise-trial/) | Can I test the Enterprise on-premises edition for free? | +| [Activate the Enterprise Edition](activate-enterprise-edition/) | How can I upgrade my Community edition to an Enterprise on-premises edition? | | [Installation support](support) | How can I get installation support? | From f70d754621fb0c73d2e1f3e4daca59b9392b880b Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 12:06:53 +0100 Subject: [PATCH 24/43] Naming in table [ci skip] --- docs/enterprise-edition-guide/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/enterprise-edition-guide/README.md b/docs/enterprise-edition-guide/README.md index f1040807c3..9dd38f4875 100644 --- a/docs/enterprise-edition-guide/README.md +++ b/docs/enterprise-edition-guide/README.md @@ -14,8 +14,8 @@ The Enterprise on-premises edition builds on top of the free Community edition. | Popular Topics | Description | | ------------------------------------------------------------ | :----------------------------------------------------------- | -| [Enterprise Edition trial](enterprise-trial/) | Can I test the Enterprise on-premises edition for free? | -| [Activate the Enterprise Edition](activate-enterprise-edition/) | How can I upgrade my Community edition to an Enterprise on-premises edition? | +| [Enterprise on-premises edition trial](enterprise-trial/) | Can I test the Enterprise on-premises edition for free? | +| [Activate the Enterprise on-premises edition](activate-enterprise-edition/) | How can I upgrade my Community edition to an Enterprise on-premises edition? | | [Installation support](support) | How can I get installation support? | From 0f0d58d317f26572bf4b130fcbf98edbae66c46f Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 12:10:33 +0100 Subject: [PATCH 25/43] update name "Enterprise on-premises edition" [ci skip] --- .../activate-enterprise-edition/README.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/enterprise-edition-guide/activate-enterprise-edition/README.md b/docs/enterprise-edition-guide/activate-enterprise-edition/README.md index f4c5a5c105..e5adb2e737 100644 --- a/docs/enterprise-edition-guide/activate-enterprise-edition/README.md +++ b/docs/enterprise-edition-guide/activate-enterprise-edition/README.md @@ -6,11 +6,11 @@ description: Activate the OpenProject Enterprise Edition. robots: index, follow keywords: Activate Enterprise Edition --- -# Activate the Enterprise Edition +# Activate the Enterprise on-premises edition -The OpenProject Enterprise Edition builds on top of the Community Edition. +The OpenProject Enterprise on-premises edition builds on top of the Community edition. -In order to upgrade your OpenProject Community Edition to the Enterprise Edition, sign into your OpenProject environment with an administrator account. +In order to upgrade your OpenProject Community edition to the Enterprise on-premises edition, sign into your OpenProject environment with an administrator account. **Click on your user avatar in the upper right corner** (1) and select **Administration** from the dropdown menu (2). @@ -20,24 +20,24 @@ Next, select **Enterprise Edition** from the menu items (3). ![Enterprise-select-menu](Enterprise-select-menu.png) -Do you already have an Enterprise token? +Do you already have an Enterprise on-premises token? Yes, then you can proceed entering your token as described below. -No, then you need to [order your Enterprise token](#order-the-enterprise-edition) or [request a trial token](../enterprise-trial) first. +No, then you need to [order your Enterprise on-premises token](#order-the-enterprise-edition) or [request a trial token](../enterprise-trial) first. -In the Enterprise Edition section, copy and paste the full content of your Enterprise support token into the input field and press the blue **Save** button. +In the Enterprise on-premises edition section, copy and paste the full content of your Enterprise on-premises support token into the input field and press the blue **Save** button. -Your Enterprise Edition is now active. +Your Enterprise on-premises edition is now active. -![Insert Enterprise token](image-20200121132724767.png) +![Insert Enterprise on-premises token](image-20200121132724767.png) -## Order the Enterprise Edition +## Order the Enterprise on-premises edition -If you want to **order the Enterprise Edition** click on the **+ Order Enterprise Edition** button shown on the page. You can also [request a trial token](../enterprise-trial) to test the premium features included in the Enterprise Edition. +If you want to **order the Enterprise on-premises edition** click on the **+ Order Enterprise Edition** button shown on the page. You can also [request a trial token](../enterprise-trial) to test the premium features included in the Enterprise on-premises edition. ![image-20200120132950106](image-20200120132950106.png) -Once you purchased an Enterprise Edition token or received a trial token you can [activate it by pasting the token in the designated area of the Enterprise Edition section](#activate-the-enterprise-edition). +Once you purchased an Enterprise on-premises edition token or received a trial token you can [activate it by pasting the token in the designated area of the Enterprise Edition section](#activate-the-enterprise-edition). From d5e490efda949db9a45ba172c363b27ce7a33bdf Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 5 Nov 2020 12:27:15 +0100 Subject: [PATCH 26/43] set the copying user to be the author of attachments (#8822) --- app/services/copy/concerns/copy_attachments.rb | 7 ++++--- app/services/projects/copy/wiki_dependent_service.rb | 4 ++-- .../projects/copy/work_packages_dependent_service.rb | 2 +- spec/services/projects/copy_service_integration_spec.rb | 1 + 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/services/copy/concerns/copy_attachments.rb b/app/services/copy/concerns/copy_attachments.rb index 4dd53ca73d..d289db547b 100644 --- a/app/services/copy/concerns/copy_attachments.rb +++ b/app/services/copy/concerns/copy_attachments.rb @@ -4,12 +4,13 @@ module Copy ## # Tries to copy the given attachment between containers - def copy_attachments(from_container_id, to_container_id, container_type) - Attachment.where(container_id: from_container_id, container_type: container_type).find_each do |old_attachment| + def copy_attachments(from_container, to_container_id) + Attachment.where(container: from_container).find_each do |old_attachment| copied = old_attachment.dup old_attachment.file.copy_to(copied) - copied.container_type = container_type + copied.author = user + copied.container_type = from_container.class.name copied.container_id = to_container_id unless copied.save diff --git a/app/services/projects/copy/wiki_dependent_service.rb b/app/services/projects/copy/wiki_dependent_service.rb index eb74a65705..11baf82583 100644 --- a/app/services/projects/copy/wiki_dependent_service.rb +++ b/app/services/projects/copy/wiki_dependent_service.rb @@ -65,7 +65,7 @@ module Projects::Copy wiki_pages_map.each do |old_page, new_page| next unless old_page && new_page - copy_attachments(old_page.id, new_page.id, new_page.class.name) + copy_attachments(old_page, new_page.id) end end end @@ -77,7 +77,7 @@ module Projects::Copy # Relying on ActionMailer::Base.perform_deliveries is violating cohesion # but the value is currently not otherwise provided service_call = WikiPages::CopyService - .new(user: User.current, model: source_page, contract_class: WikiPages::CopyContract) + .new(user: user, model: source_page, contract_class: WikiPages::CopyContract) .call(wiki: target.wiki, parent: new_parent, send_notifications: ActionMailer::Base.perform_deliveries) diff --git a/app/services/projects/copy/work_packages_dependent_service.rb b/app/services/projects/copy/work_packages_dependent_service.rb index 434cb325ec..7a0dc22f00 100644 --- a/app/services/projects/copy/work_packages_dependent_service.rb +++ b/app/services/projects/copy/work_packages_dependent_service.rb @@ -68,7 +68,7 @@ module Projects::Copy # Attachments if should_copy?(params, :work_package_attachments) - copy_attachments(wp.id, new_wp_id, 'WorkPackage') + copy_attachments(wp, new_wp_id) end copy_relations(wp, new_wp_id, work_packages_map) diff --git a/spec/services/projects/copy_service_integration_spec.rb b/spec/services/projects/copy_service_integration_spec.rb index d8a3c8cb62..24819f3a8c 100644 --- a/spec/services/projects/copy_service_integration_spec.rb +++ b/spec/services/projects/copy_service_integration_spec.rb @@ -319,6 +319,7 @@ describe Projects::CopyService, 'integration', type: :model do wp = project_copy.work_packages.find_by(subject: work_package.subject) expect(wp.attachments.count).to eq(1) + expect(wp.attachments.first.author).to eql(current_user) end end From 300633f5977e38133e37154ba3de895251980290 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 13:39:08 +0100 Subject: [PATCH 27/43] Update name "Enterprise on-premises" [ci skip] --- docs/enterprise-edition-guide/enterprise-trial/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/enterprise-edition-guide/enterprise-trial/README.md b/docs/enterprise-edition-guide/enterprise-trial/README.md index f639a9c88f..ae8b4cf54d 100644 --- a/docs/enterprise-edition-guide/enterprise-trial/README.md +++ b/docs/enterprise-edition-guide/enterprise-trial/README.md @@ -6,15 +6,15 @@ description: Create an OpenProject Enterprise Edition trial installation. robots: index, follow keywords: Enterprise Edition trial --- -# Create an Enterprise Edition trial +# Create an Enterprise on-premises edition trial -You can **test the OpenProject Enterprise Edition 14 days for free**. It will extend your current Community Edition with the premium features so you can thoroughly test those premium functionalities. +You can **test the OpenProject Enterprise on-premises edition 14 days for free**. It will extend your current Community edition with the premium features so you can thoroughly test those premium functionalities. Please go to https://www.openproject.org/enterprise-edition/ and press the green **Get free trial license** button. ![create-enterprise-edition-trial](1567610649991.png) -A window will appear which explains that you will receive a 14 days free trial license with that you can temporarily upgrade your Community Edition. +A window will appear which explains that you will receive a 14 days free trial license with that you can temporarily upgrade your Community edition. There is no need to cancel the trial license. The license will run out automatically and will bring you back to the Community version. From f58559a455a2bce37543df67aaaf5275e30adc44 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 13:40:30 +0100 Subject: [PATCH 28/43] Update name "Enterprise on-premises" [ci skip] --- docs/enterprise-edition-guide/support/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/enterprise-edition-guide/support/README.md b/docs/enterprise-edition-guide/support/README.md index 2e8bb6a789..da57895449 100644 --- a/docs/enterprise-edition-guide/support/README.md +++ b/docs/enterprise-edition-guide/support/README.md @@ -6,11 +6,11 @@ description: OpenProject Enterprise Edition support. robots: index, follow keywords: enterprise edition support --- -# Enterprise Edition support +# Enterprise on-premises edition support -If you have the OpenProject Enterprise Edition you are eligible to get reliable, high-touch support from senior support engineers with expert knowledge about running OpenProject in business-critical environments. +If you have the OpenProject Enterprise on-premises edition you are eligible to get reliable, high-touch support from senior support engineers with expert knowledge about running OpenProject in business-critical environments. -Our support engineers are highly-trained to diagnose and resolve issues in your environment. We find solutions for the most complex technical challenges you might be faced with. +Our support engineers are highly-trained to diagnose and resolve issues in your environment. We find solutions for the most complex technical challenges you might be faced with. - Guaranteed availability and resolution time based on SLA - Priority development and escalation @@ -19,12 +19,12 @@ Our support engineers are highly-trained to diagnose and resolve issues in your ## Support ticket -You can create a support ticket on https://community.openproject.com/projects/openproject/. You first need to register on the OpenProject Community Edition to create a support ticket. +You can create a support ticket on https://community.openproject.com/projects/openproject/. You first need to register on the OpenProject Community edition to create a support ticket. ## E-mail support -Please write us an email to support@openproject.com to get help with your OpenProject Enterprise Edition. +Please write us an email to support@openproject.com to get help with your OpenProject Enterprise on-premises edition. ## Contact us -If you have more questions, please [contact us](https://www.openproject.org/contact-us/). \ No newline at end of file +If you have more questions, please [contact us](https://www.openproject.org/contact-us/). From 1022815dc4bb07ee96d765c6418069fcb296e655 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 13:46:47 +0100 Subject: [PATCH 29/43] Update name "Enterprise on-premises" [ci skip] --- docs/getting-started/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/getting-started/README.md b/docs/getting-started/README.md index 01b021fb38..515f5dc940 100644 --- a/docs/getting-started/README.md +++ b/docs/getting-started/README.md @@ -51,14 +51,14 @@ Watch a **comprehensive OpenProject product introduction** video to learn how to ### Is OpenProject free of charge? -We offer three different versions of OpenProject. Please get an overview of the different OpenProject Editions [here](https://www.openproject.org/pricing/). The (on-premise) OpenProject Community Edition is completely free. The Cloud and Enterprise Edition offer premium features, hosting and support and thus we are charging for it. Nevertheless, we offer free 14 days trials for the Enterprise and Cloud versions so that you can get to know their benefits. If you prefer to use the free OpenProject Community Edition, you can follow these [installation instructions](https://www.openproject.org/download-and-installation/), please note that you need a Linux server to install the Community Edition. It is always possible to upgrade from the Community to the Cloud and Enterprise Edition – check out the premium features [here](https://www.openproject.org/enterprise-edition/). +We offer three different versions of OpenProject. Please get an overview of the different OpenProject Editions [here](https://www.openproject.org/pricing/). The (on-premise) OpenProject Community edition is completely free. The Enterprise cloud and Enterprise on-premises edition offer premium features, hosting and support and thus we are charging for it. Nevertheless, we offer free 14 days trials for the Enterprise versions so that you can get to know their benefits. If you prefer to use the free OpenProject Community edition, you can follow these [installation instructions](https://www.openproject.org/download-and-installation/), please note that you need a Linux server to install the Community edition. It is always possible to upgrade from the Community to the Enterprise cloud and Enterprise on-premises edition – check out the premium features [here](https://www.openproject.org/enterprise-edition/). ### How do I get access to the OpenProject premium features? We offer the premium functions of OpenProject (incl. boards) for two different OpenProject variants: -* For the OpenProject Cloud Edition (hosted by us), -* For the self-hosted (on-premise) OpenProject Enterprise Edition +* For the OpenProject Enterprise cloud edition (hosted by us), +* For the self-hosted (on-premises) OpenProject Enterprise on-premises edition -If you want to run OpenProject on your own server the OpenProject Enterprise Edition is the right option. -Have you already installed the [OpenProject Community Edition](https://www.openproject.org/download-and-installation/)? If yes, you can request a trial license for the OpenProject Enterprise Edition by clicking on the button ["Free trial license"](https://www.openproject.org/de/enterprise-edition/) and test the Enterprise Edition for 14 days for free. +If you want to run OpenProject on your own server the OpenProject Enterprise on-premises edition is the right option. +Have you already installed the [OpenProject Community edition](https://www.openproject.org/download-and-installation/)? If yes, you can request a trial license for the OpenProject Enterprise on-premises edition by clicking on the button ["Free trial license"](https://www.openproject.org/de/enterprise-edition/) and test the Enterprise on-premises edition for 14 days for free. From f5a56a15949007d755df20883b5633320a5c0e3d Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 13:48:49 +0100 Subject: [PATCH 30/43] Update name "Enterprise on-premises" [ci skip] --- .../getting-started/openproject-introduction/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/getting-started/openproject-introduction/README.md b/docs/getting-started/openproject-introduction/README.md index 59b2a31535..76a14087b9 100644 --- a/docs/getting-started/openproject-introduction/README.md +++ b/docs/getting-started/openproject-introduction/README.md @@ -113,14 +113,14 @@ Document project achievements, lessons learned, best practices and easily summar ## OpenProject products -### What is the differences between the Community, Cloud and Enterprise Edition? +### What is the difference between the Community, Enterprise cloud and Enterprise on-premises edition? -OpenProject can be used in three different Editions, either on-premise or as software-as-a-service. +OpenProject can be used in three different editions, either on-premises or as software-as-a-service. ![openproject versions](1569586019132.png) -* [Community Edition](https://www.openproject.org/download-and-installation/): self-installed on-premise. -* [Cloud Edition](https://www.openproject.org/hosting/): we host it, incl. premium features and support. -* [Enterprise Edition](https://www.openproject.org/enterprise-edition/): self-hosted version, incl. premium features and support. +* [Community edition](https://www.openproject.org/download-and-installation/): self-installed on-premise. +* [Enterprise cloud edition](https://www.openproject.org/hosting/): we host it, incl. premium features and support. +* [Enterprise on-premises edition](https://www.openproject.org/enterprise-edition/): self-hosted version, incl. premium features and support. To compare the features side by side, please visit our [Feature Comparison](https://www.openproject.org/pricing/#features) page. From 9728eb2f9afb16517f83b037b0b0f6b644c52dc9 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:15:13 +0100 Subject: [PATCH 31/43] Update name "Enterprise cloud" [ci skip] --- docs/cloud-edition-guide/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/cloud-edition-guide/README.md b/docs/cloud-edition-guide/README.md index 110532e7f2..148f38ec96 100644 --- a/docs/cloud-edition-guide/README.md +++ b/docs/cloud-edition-guide/README.md @@ -6,9 +6,9 @@ description: OpenProject Cloud Edition guide. robots: index, follow keywords: Cloud Edition --- -# Cloud Edition guide +# Enterprise cloud edition guide -Welcome to the OpenProject **Cloud edition guide**. +Welcome to the OpenProject **Enterprise cloud edition guide**. ![image-20200113133750107](image-20200113133750107.png) @@ -20,16 +20,16 @@ Welcome to the OpenProject **Cloud edition guide**. | Popular Topics | Description | | ------------------------------------------------------------ | :----------------------------------------------------------- | -| [Create a free trial](./create-trial-installation) | Learn more how to create a free trial for the cloud instance. | -| [Sign in](./sign-in/) | Sing in to your OpenProject Cloud Edition. | +| [Create a free trial](./create-trial-installation) | Learn more how to create a free trial for the Enterprise cloud instance. | +| [Sign in](./sign-in/) | Sing in to your OpenProject Enterprise cloud edition. | | [View payment history or download invoices](./invoices-and-billing-history) | How to see your payment history and download invoices? | -| [Upgrade, downgrade or cancel subscription](./manage-subscription/#update-existing-subscriptions) | How to upgrade your plan, downgrade or cancel your subscription for the Cloud Edition? | -| [Manage your subscription](./manage-subscription) | How to change billing address, add or edit Credit Card details? | +| [Upgrade, downgrade or cancel subscription](./manage-subscription/#update-existing-subscriptions) | How to upgrade your plan, downgrade or cancel your subscription for the Enterprise cloud edition? | +| [Manage your subscription](./manage-subscription) | How to change billing address, add or edit credit card details? | | [Backups](./backups) | How do backups work in the cloud? | -The OpenProject Cloud Edition contains all OpenProject Community features plus the additional OpenProject premium features, as well as professional support. +The OpenProject Enterprise cloud edition contains all OpenProject Community features plus the additional OpenProject premium features, as well as professional support. -For the Cloud Edition the OpenProject experts will take care of the installation as well as maintenance of your OpenProject installation, so you will be able to concentrate on your core business. We will perform regular backups of your Cloud Edition. You will have the latest OpenProject release installed. Hence, you do not have to take care of updates or installation of security patches yourself. +For the Enterprise cloud edition the OpenProject experts will take care of the installation as well as maintenance of your OpenProject installation, so you will be able to concentrate on your core business. We will perform regular backups of your Enterprise cloud edition. You will have the latest OpenProject release installed. Hence, you do not have to take care of updates or installation of security patches yourself. You will get a detailed feature comparison [here](https://www.openproject.org/pricing/#features). @@ -40,7 +40,7 @@ You will get a detailed feature comparison [here](https://www.openproject.org/pr ### Can I import my OpenProject community instance into my cloud environment? -Yes, we provide an upload possibility of your data to move from a Community installation to the Cloud Edition. +Yes, we provide an upload possibility of your data to move from a Community installation to the Enterprise cloud edition. To import your community instance into our cloud environment, please send us the following files: 1. the database SQL dump of your local installation 2. the attachments of your local installation For a package-based installation, you can create both as root user on your environment as follows openproject run backup @@ -50,9 +50,9 @@ Before uploading the attachments securely to us using the [following form](https The form generates a direct upload to our secure S3 environment from which the import takes place. -### Where geographically is the OpenProject cloud data stored? +### Where geographically is the OpenProject Enterprise cloud data stored? -The OpenProject Cloud Environment is hosted on a logically isolated virtual cloud at Amazon Web Services with all services being located in Ireland. AWS is a GDPR compliant cloud infrastructure provider with extensive security and compliance programs as well as unparalleled access control mechanisms to ensure data privacy. Employed facilities are compliant with the ISO 27001 and 27018 standards. OpenProject Cloud Environment is continuously backing up user data with data at rest being fully encrypted with AES-256. Each individual's instance is logically separated and data is persisted in a unique database schema, reducing the risk of intersection or data leaks between instances. You can find more information [here](https://www.openproject.org/gdpr-compliance/). +The OpenProject Enterprise cloud environment is hosted on a logically isolated virtual cloud at Amazon Web Services with all services being located in Ireland. AWS is a GDPR compliant cloud infrastructure provider with extensive security and compliance programs as well as unparalleled access control mechanisms to ensure data privacy. Employed facilities are compliant with the ISO 27001 and 27018 standards. OpenProject Enterprise cloud environment is continuously backing up user data with data at rest being fully encrypted with AES-256. Each individual's instance is logically separated and data is persisted in a unique database schema, reducing the risk of intersection or data leaks between instances. You can find more information [here](https://www.openproject.org/gdpr-compliance/). ### Does OpenProject comply with GDPR? From 431fb9da051ba480e6a9544dc02689cce7b5bd6e Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:17:56 +0100 Subject: [PATCH 32/43] Update name "Enterprise cloud" [ci skip] --- docs/cloud-edition-guide/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cloud-edition-guide/README.md b/docs/cloud-edition-guide/README.md index 148f38ec96..c637b79aba 100644 --- a/docs/cloud-edition-guide/README.md +++ b/docs/cloud-edition-guide/README.md @@ -38,7 +38,7 @@ You will get a detailed feature comparison [here](https://www.openproject.org/pr ## Frequently asked questions - FAQ -### Can I import my OpenProject community instance into my cloud environment? +### Can I import my OpenProject community instance into my Enterprise cloud environment? Yes, we provide an upload possibility of your data to move from a Community installation to the Enterprise cloud edition. To import your community instance into our cloud environment, please send us the following files: From 2d1d7f24a9f44eda7b40e82fac1bf7be1d08d567 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:22:04 +0100 Subject: [PATCH 33/43] Update name "Enterprise cloud" [ci skip] --- docs/cloud-edition-guide/backups/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/cloud-edition-guide/backups/README.md b/docs/cloud-edition-guide/backups/README.md index 0d077beb01..1d45a8cea1 100644 --- a/docs/cloud-edition-guide/backups/README.md +++ b/docs/cloud-edition-guide/backups/README.md @@ -9,7 +9,7 @@ keywords: backups # Backups -Your cloud data is backed up continuously and retained for 30 days. +Your Enterprise cloud data is backed up continuously and retained for 30 days. Within those 30 days we can restore your data to any point in time with a precision of 5 minutes, in case you need us to. ## Download @@ -18,4 +18,4 @@ For the time being you cannot download backups yourself. You will have to [get in touch](mailto:support@openproject.com) with us. We can then provide a current or past backup (database + attachments) to you. -This way you can also get your data if you decide to stop using the Cloud Edition. +This way you can also get your data if you decide to stop using the Enterprise cloud edition. From 21c539501574e4194e7726e4ce1a22880af5cb00 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:29:59 +0100 Subject: [PATCH 34/43] update name "Enterprise cloud" [ci skip] --- docs/cloud-edition-guide/book-cloud-edition/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/cloud-edition-guide/book-cloud-edition/README.md b/docs/cloud-edition-guide/book-cloud-edition/README.md index a5993cdb45..c6bad65652 100644 --- a/docs/cloud-edition-guide/book-cloud-edition/README.md +++ b/docs/cloud-edition-guide/book-cloud-edition/README.md @@ -6,11 +6,11 @@ description: Book the OpenProject Cloud Edition. robots: index, follow keywords: Book Cloud Edition --- -# Book the Cloud Edition +# Book the Enterprise cloud edition -After you have tested the OpenProject Could Edition and want to continue working with OpenProject, you can subscribe to one of our plans. +After you have tested the OpenProject Enterprise cloud edition and want to continue working with OpenProject, you can subscribe to one of our plans. -Please refer to our website for the Cloud Edition [pricing](https://www.openproject.org/pricing/). +Please refer to our website for the Enterprise cloud edition [pricing](https://www.openproject.org/pricing/). You can subscribe to a monthly or yearly plan. The subscription can be **paid via Credit Card or Bank transfer** (only for yearly subscription). @@ -57,7 +57,7 @@ Here, you can edit the account or billing information if needed. Subscribe to our regular newsletter in order to keep up to date with latest product developments. -Click the blue **Pay button and subscribe** to the OpenProject Cloud Edition. +Click the blue **Pay button and subscribe** to the OpenProject Enterprise cloud edition. A payment receipt will be sent via email. @@ -88,4 +88,4 @@ An invoice will be sent via email to the Billing email. ### Is there an advantage of the annual over the monthly OpenProject plan? -We offer two months of the Cloud Edition for free if you choose an annual plan. +We offer two months of the Enterprise cloud edition for free if you choose an annual plan. If you decide for the two year plan, you get five months for free and if you commit to a five year plan, you get 15 months for free. From 5ba3ed6d87537fcae96919a09054133b2672096d Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:33:29 +0100 Subject: [PATCH 35/43] Update name "Enterprise cloud" [ci skip] --- .../cloud-edition-guide/create-trial-installation/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/cloud-edition-guide/create-trial-installation/README.md b/docs/cloud-edition-guide/create-trial-installation/README.md index a09d86568f..ac5d140232 100644 --- a/docs/cloud-edition-guide/create-trial-installation/README.md +++ b/docs/cloud-edition-guide/create-trial-installation/README.md @@ -9,7 +9,7 @@ keywords: trial installation # Create an OpenProject trial installation -You can easily set up a **14 days free trial** for the OpenProject Cloud Edition. +You can easily set up a **14 days free trial** for the OpenProject Enterprise cloud edition. Here you can test all OpenProject functionalities thoroughly. After 14 days the trial will expire automatically, there is no further action nor cancellation required from your side. So, you have all freedom to test OpenProject unconcernedly. @@ -41,9 +41,9 @@ Your OpenProject instance will be created and you will be directed to your OpenP ## Frequently asked questions (FAQ) -### My OpenProject cloud trial expired – can I still access my data? +### My OpenProject Enterprise cloud trial expired – can I still access my data? Due to data privacy reasons we automatically delete OpenProject trial environments a couple of weeks after they have expired. -If your OpenProject Trial is not accessible through the known URL, it has likely been deleted. +If your OpenProject trial is not accessible through the known URL, it has likely been deleted. You can easily [create a new OpenProject trial environment](https://start.openproject.com/). Simply enter your organization name (you can use the same name as before) and click on "Start Free Trial". In order to avoid that your data is getting deleted, please select a plan during your trial duration or shortly after your OpenProject trial environment has expired. From 24d77fefe3dc7efd6468e73e7cd2d6ab36510c8e Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:36:09 +0100 Subject: [PATCH 36/43] Update name "Enterprise cloud" [ci skip] --- .../invoices-and-billing-history/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/cloud-edition-guide/invoices-and-billing-history/README.md b/docs/cloud-edition-guide/invoices-and-billing-history/README.md index 2e0fbb6366..f85acd734d 100644 --- a/docs/cloud-edition-guide/invoices-and-billing-history/README.md +++ b/docs/cloud-edition-guide/invoices-and-billing-history/README.md @@ -7,9 +7,9 @@ robots: index, follow keywords: invoices, payment history --- -# Invoices for the OpenProject Cloud Edition +# Invoices for the OpenProject Enterprise cloud edition -You will **receive an invoice for your OpenProject Cloud Edition via email** to the email address which you used during the booking process. +You will **receive an invoice for your OpenProject Enterprise cloud edition via email** to the email address which you used during the booking process. The invoice lists the subscription (billing) period as well as the next billing date. @@ -24,7 +24,7 @@ For invoices via bank transfer, the money needs to be paid via bank transfer to ## Payment history and download invoices -If you want to see the billing history or download older invoices of your Cloud Edition, navigate to -> *Administration* -> *Billing* within your system's Administration. +If you want to see the billing history or download older invoices of your Enterprise cloud edition, navigate to -> *Administration* -> *Billing* within your system's Administration. Click the green **Manage button** at the top right. @@ -34,7 +34,7 @@ In the overlay window, click on the link **Billing History**. ![Cloud-billing-history](Cloud-billing-history.png) -Here, you will get an overview about all your past payments for the Cloud Edition. +Here, you will get an overview about all your past payments for the Enterprise cloud edition. With the **Download link** you can download the inovices. @@ -44,7 +44,7 @@ The **Load more link** will open more positions on the list. ## Frequently asked questions (FAQ) -### Can we pay the OpenProject cloud edition by transfer? +### Can we pay the OpenProject Enterprise cloud edition by transfer? Yes, for customers in the EU it is possible to pay by bank transfer (as well as by credit card). To do this, you can sign into your OpenProject environment and select the "Buy now" button from the top menu. You are then directed to the payment page, where you can select the number of users you want to work with and your country. Then you can check the option to pay by invoice and fill out the billing information. You will then receive an invoice from us. @@ -55,4 +55,4 @@ The user may terminate the contract at any time, which will apply by the end of ### What shall I do when I run into payment issues with OpenProject? -In case you use the bank transfer payment method please indicate the invoice number. You can find this information in the corresponding invoice (OP…). Otherwise the automatic banking system is not able to detect your payment. Please do not hesitate to contact accounting@openproject.com if you have any further questions. \ No newline at end of file +In case you use the bank transfer payment method please indicate the invoice number. You can find this information in the corresponding invoice (OP…). Otherwise the automatic banking system is not able to detect your payment. Please do not hesitate to contact accounting@openproject.com if you have any further questions. From 637d3bd676694d9fbdd52f28d9e80409fddb5e36 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:48:07 +0100 Subject: [PATCH 37/43] Update name "Enterprise cloud" [ci skip] --- .../manage-subscription/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/cloud-edition-guide/manage-subscription/README.md b/docs/cloud-edition-guide/manage-subscription/README.md index 6ae2df0402..293d48977d 100644 --- a/docs/cloud-edition-guide/manage-subscription/README.md +++ b/docs/cloud-edition-guide/manage-subscription/README.md @@ -7,7 +7,7 @@ robots: index, follow keywords: manage subscription --- -# Manage your OpenProject Cloud subscription +# Manage your OpenProject Enterprise cloud subscription If you want to make changes to your subscription (Up- or downgrade, cancel), navigate to -> *Administration* -> *Billing* within your system's Administration. @@ -54,7 +54,7 @@ Click the blue **Update your subscription now button** to save the changes. To cancel your subscription, open the [Manage subscription](#manage-your-openproject-cloud-subscription) form and click to [update the subscription](#update-existing-subscriptions) you want to cancel. -Click on the **Cancel Subscription link** if you want to terminate your OpenProject Cloud Edition subscription. +Click on the **Cancel Subscription link** if you want to terminate your OpenProject Enterprise cloud edition subscription. ![Cloud-cancel-subscription](Cloud-cancel-subscription.png) @@ -64,18 +64,18 @@ Click on the **Cancel Subscription link** if you want to terminate your OpenProj ## Frequently asked questions (FAQ) -### How can I increase the number of users in the OpenProject Cloud Edition? +### How can I increase the number of users in the OpenProject Enterprise cloud edition? Please note that the minimum number of users is 5. You can then increase the number of users in steps of 5. Just write an email to sales@openproject.com. -### Is it possible to change the number of users in the OpenProject Cloud Edition? +### Is it possible to change the number of users in the OpenProject Enterprise cloud edition? -You can always increase the number of users. The number of users can be increased in steps of 5 (e.g. you could start with 5 users and then increase the number of users to 10 users). You can purchase the Enterprise Edition from [here](https://www.openproject.org/enterprise-edition/). Simply click on the button "Book now" and follow the steps. A reduction in the number of users would take effect after the current service period. +You can always increase the number of users. The number of users can be increased in steps of 5 (e.g. you could start with 5 users and then increase the number of users to 10 users). You can purchase the Enterprise on-premises edition from [here](https://www.openproject.org/enterprise-edition/). Simply click on the button "Book now" and follow the steps. A reduction in the number of users would take effect after the current service period. ### Do you have OpenProject guest accounts? -Currently, all users working in the OpenProject Enterprise Edition need a license in order to access OpenProject. Regarding payments we only count the active (not blocked) users. +Currently, all users working in the OpenProject Enterprise editions need a license in order to access OpenProject. Regarding payments we only count the active (not blocked) users. ### Can I run OpenProject as a single user? -Our minimum plan for the Cloud Edition and Enterprise Edition is five users. Our pricing scheme covers three subscription options: Community ($0), Cloud (€4.95/member/month or approximately $5.60/member/month), and Enterprise (€5.95/member/month or approximately $6.73/member/month). We recommend to start the [community version](https://www.openproject.org/download-and-installation/) free of charge if the 5 user minimum is an issue. \ No newline at end of file +Our minimum plan for the Enterprise cloud edition and Enterprise on-premises edition is five users. Our pricing scheme covers three subscription options: Community ($0), Enterprise cloud (€4.95/member/month or approximately $5.60/member/month), and Enterprise on-premises (€5.95/member/month or approximately $6.73/member/month). We recommend to start the [Community version](https://www.openproject.org/download-and-installation/) free of charge if the 5 user minimum is an issue. From 685c5f5a3cb8a596ae1a43850d2987f8a1a493b9 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:50:08 +0100 Subject: [PATCH 38/43] Update name "Enterprise cloud" [ci skip] --- docs/cloud-edition-guide/sign-in/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/cloud-edition-guide/sign-in/README.md b/docs/cloud-edition-guide/sign-in/README.md index fbb51417d5..528ea53bad 100644 --- a/docs/cloud-edition-guide/sign-in/README.md +++ b/docs/cloud-edition-guide/sign-in/README.md @@ -7,15 +7,15 @@ robots: index, follow keywords: sing in --- -# Sign in to the OpenProject Cloud Edition +# Sign in to the OpenProject Enterprise cloud edition -Login to your OpenProject Cloud Edition via the website or by entering directly the URL of your OpenProject instance. +Login to your OpenProject Enterprise cloud edition via the website or by entering directly the URL of your OpenProject instance. -If you do not have an OpenProject Cloud Edition, you can [set up your own OpenProject installation](../create-trial-installation). +If you do not have an OpenProject Enterprise cloud edition, you can [set up your own OpenProject installation](../create-trial-installation). ## Sign in via the OpenProject website -In order to sign in to your OpenProject Cloud Edition via our website, navigate to https://www.openproject.org/ and click the **Sign in button** at the top of the page. +In order to sign in to your OpenProject Enterprise cloud edition via our website, navigate to https://www.openproject.org/ and click the **Sign in button** at the top of the page. ![Sign-in-website](Sign-in-website.png) @@ -29,7 +29,7 @@ Click the green **Sign in button** and you will be logged into your OpenProject ## Forgot organization name of OpenProject Cloud Edition -If you forgot the URL or the organization name of your OpenProject Cloud Edition and need to find your organization, you can click the **Find your organization** link on the Sign in page of the website. +If you forgot the URL or the organization name of your OpenProject Enterprise cloud edition and need to find your organization, you can click the **Find your organization** link on the Sign in page of the website. ![Sign-in-find-organization](Sign-in-find-organization.png) From eca058e3b54b8c1596dcd3ccfa7a6ab5958c5c1d Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 14:51:33 +0100 Subject: [PATCH 39/43] Update name "Enterprise cloud" [ci skip] --- docs/cloud-edition-guide/support/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/cloud-edition-guide/support/README.md b/docs/cloud-edition-guide/support/README.md index b8d4f1ba72..7153185883 100644 --- a/docs/cloud-edition-guide/support/README.md +++ b/docs/cloud-edition-guide/support/README.md @@ -6,18 +6,18 @@ description: Cloud Edition Support. robots: index, follow keywords: Cloud Edition support --- -# Cloud Edition Support +# Enterprise cloud edition support -As an OpenProject Cloud Edition customer, you will have Professional support included. Get reliable, high-touch support from senior support engineers. +As an OpenProject Enterprise cloud edition customer, you will have professional support included. Get reliable, high-touch support from senior support engineers. ## Support ticket -You can create a support ticket on https://community.openproject.com/projects/openproject/. You first need to register on the OpenProject Community Edition to create a support ticket. +You can create a support ticket on https://community.openproject.com/projects/openproject/. You first need to register on the OpenProject Community edition to create a support ticket. ## E-mail support -Please write us an email to support@openproject.com to get help with your OpenProject Cloud Edition. +Please write us an email to support@openproject.com to get help with your OpenProject Enterprise cloud edition. ## Contact us -If you have more questions, please [contact us](https://www.openproject.org/contact-us/). \ No newline at end of file +If you have more questions, please [contact us](https://www.openproject.org/contact-us/). From f511f8d4f581e96e9130383d939f2c74617deac7 Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 5 Nov 2020 14:52:45 +0100 Subject: [PATCH 40/43] set default role when copying project as non admin (#8824) --- .../projects/concerns/new_project_service.rb | 74 +++++++++++++++++++ .../copy/work_packages_dependent_service.rb | 2 +- app/services/projects/copy_service.rb | 1 + app/services/projects/create_service.rb | 11 +-- app/services/work_packages/copy_service.rb | 2 +- spec/features/projects/copy_spec.rb | 2 +- .../projects/copy_service_integration_spec.rb | 15 ++++ spec/services/projects/create_service_spec.rb | 15 +++- 8 files changed, 106 insertions(+), 16 deletions(-) create mode 100644 app/services/projects/concerns/new_project_service.rb diff --git a/app/services/projects/concerns/new_project_service.rb b/app/services/projects/concerns/new_project_service.rb new file mode 100644 index 0000000000..6c5468f4ed --- /dev/null +++ b/app/services/projects/concerns/new_project_service.rb @@ -0,0 +1,74 @@ +#-- encoding: UTF-8 + +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +module Projects::Concerns + module NewProjectService + private + + def after_perform(attributes_call) + new_project = attributes_call.result + + set_default_role(new_project) unless user.admin? + notify_project_created(new_project) + + super + end + + # Add default role to the newly created project + # based on the setting ('new_project_user_role_id') + # defined in the administration. Will either create a new membership + # or add a role to an already existing one. + def set_default_role(new_project) + role = Role.in_new_project + + return unless role && new_project.persisted? + + # Assuming the members are loaded anyway + user_member = new_project.members.detect { |m| m.principal == user } + + if user_member + Members::UpdateService + .new(user: user, model: user_member, contract_class: EmptyContract) + .call(roles: user_member.roles + [role]) + else + Members::CreateService + .new(user: user, contract_class: EmptyContract) + .call(roles: [role], project: new_project, principal: user) + end + end + + def notify_project_created(new_project) + OpenProject::Notifications.send( + OpenProject::Events::PROJECT_CREATED, + project: new_project + ) + end + end +end diff --git a/app/services/projects/copy/work_packages_dependent_service.rb b/app/services/projects/copy/work_packages_dependent_service.rb index 7a0dc22f00..7d7f927f39 100644 --- a/app/services/projects/copy/work_packages_dependent_service.rb +++ b/app/services/projects/copy/work_packages_dependent_service.rb @@ -84,7 +84,7 @@ module Projects::Copy .new(user: user, work_package: source_work_package, contract_class: WorkPackages::CopyProjectContract) - .call(overrides) + .call(**overrides) if service_call.success? service_call.result diff --git a/app/services/projects/copy_service.rb b/app/services/projects/copy_service.rb index 89c6dd6763..e10a56793a 100644 --- a/app/services/projects/copy_service.rb +++ b/app/services/projects/copy_service.rb @@ -30,6 +30,7 @@ module Projects class CopyService < ::BaseServices::Copy + include Projects::Concerns::NewProjectService ## # In case a rollback is needed, diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index 5ca1827eb7..e61ce03a13 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -30,15 +30,6 @@ module Projects class CreateService < ::BaseServices::Create - def after_perform(attributes_call) - attributes_call.result.add_member!(user, Role.in_new_project) unless user.admin? - - OpenProject::Notifications.send( - OpenProject::Events::PROJECT_CREATED, - project: attributes_call.result - ) - - super - end + include Projects::Concerns::NewProjectService end end diff --git a/app/services/work_packages/copy_service.rb b/app/services/work_packages/copy_service.rb index ae07b0389b..7b18db1afb 100644 --- a/app/services/work_packages/copy_service.rb +++ b/app/services/work_packages/copy_service.rb @@ -68,7 +68,7 @@ class WorkPackages::CopyService WorkPackages::CreateService .new(user: user, contract_class: contract_class) - .call(attributes.merge(send_notifications: send_notifications).symbolize_keys) + .call(**attributes.merge(send_notifications: send_notifications).symbolize_keys) end def copied_attributes(wp, override) diff --git a/spec/features/projects/copy_spec.rb b/spec/features/projects/copy_spec.rb index b589f5f023..e17943f5cf 100644 --- a/spec/features/projects/copy_spec.rb +++ b/spec/features/projects/copy_spec.rb @@ -107,7 +107,7 @@ describe 'Projects copy', done_ratio: 20, category: category, version: version, - description: 'Some desciption', + description: 'Some description', custom_field_values: { wp_custom_field.id => 'Some wp cf text' }) end diff --git a/spec/services/projects/copy_service_integration_spec.rb b/spec/services/projects/copy_service_integration_spec.rb index 24819f3a8c..a1d026bafc 100644 --- a/spec/services/projects/copy_service_integration_spec.rb +++ b/spec/services/projects/copy_service_integration_spec.rb @@ -47,6 +47,7 @@ describe Projects::CopyService, 'integration', type: :model do member_through_role: role) end let(:role) { FactoryBot.create :role, permissions: %i[copy_projects view_work_packages] } + shared_let(:new_project_role) { FactoryBot.create :role, permissions: %i[] } let(:instance) do described_class.new(source: source, user: current_user) end @@ -58,6 +59,12 @@ describe Projects::CopyService, 'integration', type: :model do { target_project_params: target_project_params, only: only_args } end + before do + allow(Setting) + .to receive(:new_project_user_role_id) + .and_return(new_project_role.id.to_s) + end + describe 'call' do subject { instance.call(params) } let(:project_copy) { subject.result } @@ -107,6 +114,14 @@ describe Projects::CopyService, 'integration', type: :model do # Default attributes expect(project_copy).to be_active + + # Default role being assigned according to setting + # merged with the role the user already had. + member = project_copy.members.first + expect(member.principal) + .to eql(current_user) + expect(member.roles) + .to match_array [role, new_project_role] end it 'will copy the work package with category' do diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb index 28929d0c9d..47b9ad7a81 100644 --- a/spec/services/projects/create_service_spec.rb +++ b/spec/services/projects/create_service_spec.rb @@ -112,9 +112,18 @@ describe Projects::CreateService, type: :model do .to receive(:in_new_project) .and_return(new_project_role) - expect(created_project) - .to receive(:add_member!) - .with(user, new_project_role) + create_member_instance = double('Members::CreateService instance') + + expect(Members::CreateService) + .to receive(:new) + .with(user: user, contract_class: EmptyContract) + .and_return(create_member_instance) + + expect(create_member_instance) + .to receive(:call) + .with(principal: user, + project: instance_of(Project), + roles: [new_project_role]) subject end From 531cf9293c9f549f46c2c9db7b7073ef3cdd196a Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 15:00:55 +0100 Subject: [PATCH 41/43] update name "Enterprise cloud and no-premises" [ci skip] --- docs/installation-and-operations/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation-and-operations/README.md b/docs/installation-and-operations/README.md index 3db4cf2bda..6f12c2edb0 100644 --- a/docs/installation-and-operations/README.md +++ b/docs/installation-and-operations/README.md @@ -1,6 +1,6 @@ # Installation and Operations Guides -This section concerns the installation and operation of OpenProject (Community and Enterprise editions). +This section concerns the installation and operation of OpenProject (Community and Enterprise on-premises editions). ## Overview @@ -20,4 +20,4 @@ A [manual installation](installation/manual) option is also documented, but due ### Are there extra fees to pay, in terms of installing the OpenProject software? -The Community and [Enterprise Edition](https://www.openproject.org/enterprise-edition/) are on premise solutions and thus need installation from your side while the [Cloud Edition](https://www.openproject.org/hosting/) is hosted by us. The Community Edition is for free and we ask you to do the installation yourself. Of course we support you with a clear and easy [installation guide](https://www.openproject.org/download-and-installation/). If you would like us to install the Enterprise Edition for you, we are charging a fee of €150 for this once-off service. You can add the installation support during your Enterprise Edition booking process. +The Community and [Enterprise on-premises edition](https://www.openproject.org/enterprise-edition/) are on-premises solutions and thus need installation from your side while the [Enterprise cloud edition](https://www.openproject.org/hosting/) is hosted by us. The Community edition is for free and we ask you to do the installation yourself. Of course we support you with a clear and easy [installation guide](https://www.openproject.org/download-and-installation/). If you would like us to install the Enterprise on-premises edition for you, we are charging a fee of €150 for this once-off service. You can add the installation support during your Enterprise on-premises edition booking process. From 0af2b17d54ac3a460e30eaa85c10a7a1880d6cf3 Mon Sep 17 00:00:00 2001 From: RBernsen <61973994+RBernsen@users.noreply.github.com> Date: Thu, 5 Nov 2020 15:02:51 +0100 Subject: [PATCH 42/43] update name "Enterprise on-premises" [ci skip] --- docs/installation-and-operations/installation/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation-and-operations/installation/README.md b/docs/installation-and-operations/installation/README.md index f25908d46b..160439ddf7 100644 --- a/docs/installation-and-operations/installation/README.md +++ b/docs/installation-and-operations/installation/README.md @@ -18,7 +18,7 @@ OpenProject can be setup in three different ways: ## Frequently asked questions (FAQ) -### Do you have a step-by-step guide to installing OpenProject Enterprise under Active Directory? +### Do you have a step-by-step guide to installing OpenProject Enterprise on-premises under Active Directory? We have a guide on [how to use OpenProject with your Active Directory](https://www.openproject.org/help/administration/manage-ldap-authentication/). -In addition, with the Enterprise Edition it is also possible to [link LDAP groups with groups in OpenProject](https://www.openproject.org/help/administration/manage-ldap-authentication/synchronize-ldap-groups/). +In addition, with the Enterprise on-premises edition it is also possible to [link LDAP groups with groups in OpenProject](https://www.openproject.org/help/administration/manage-ldap-authentication/synchronize-ldap-groups/). From 69b746f85d314f689a170988d83529850330f972 Mon Sep 17 00:00:00 2001 From: ulferts Date: Fri, 6 Nov 2020 10:19:59 +0100 Subject: [PATCH 43/43] Add release-notes file --- docs/release-notes/11-0-2/README.md | 27 +++++++++++++++++++++++++++ docs/release-notes/README.md | 7 +++++++ 2 files changed, 34 insertions(+) create mode 100644 docs/release-notes/11-0-2/README.md diff --git a/docs/release-notes/11-0-2/README.md b/docs/release-notes/11-0-2/README.md new file mode 100644 index 0000000000..251b2ebaa1 --- /dev/null +++ b/docs/release-notes/11-0-2/README.md @@ -0,0 +1,27 @@ +--- +title: OpenProject 11.0.2 +sidebar_navigation: + title: 11.0.2 +release_version: 11.0.2 +release_date: 2020-11-06 +--- + +# OpenProject 11.0.2 + +We released [OpenProject 11.0.2](https://community.openproject.com/versions/1454). +The release contains several bug fixes and we recommend updating to the newest version. + + +#### Bug fixes and changes + +- Fixed: Typos / missing words in German translation when deleting user \[[#35072](https://community.openproject.com/wp/35072)\] +- Fixed: Default docker-compose.yml is has tag 10 \[[#35093](https://community.openproject.com/wp/35093)\] +- Fixed: Copied wiki attachments have original author while it should be the copying user \[[#35126](https://community.openproject.com/wp/35126)\] +- Fixed: Slashes in wiki page titles break "Activity" view \[[#35132](https://community.openproject.com/wp/35132)\] + +#### Contributions +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. + +Special thanks for reporting and finding bugs go to + +Le Samuel Alviola diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index 04812937ed..5374bd505c 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -12,6 +12,13 @@ Stay up to date and get an overview of the new features included in the releases +## 11.0.2 + +Release date: 2020-11-06 + +[Release Notes](11-0-2/) + + ## 11.0.1 Release date: 2020-10-28